APUNTES
APUNTES
APUNTES
cpp
**Ejercicio: Sistema de Monitoreo y Control de
12. **Ejercicio: Mostrar la temperatura en un LCD Temperatura y Distancia**
20X4 y encender un LED si supera cierto umbral**
- **Materiales:** Arduino Uno, sensor de temperatura - **Materiales:** Arduino Uno, sensor de temperatura
TMP36, LCD 20X4, diodo LED, resistencia 220Ω, TMP36, sensor de ultrasonido HC-SR04, LCD 20X4,
cables. potenciómetro de 10kΩ, resistencias, cables.
- **Código:**
- **Descripción:** Este proyecto combina la medición
de temperatura y distancia, mostrando los datos en
#include <LiquidCrystal.h> un LCD 20X4 y permitiendo controlar un LED RGB en
base a ciertos umbrales.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int tempPin = A0; - **Código:**
int ledPin = 9;
#include <LiquidCrystal.h>
void setup() {
lcd.begin(20, 4); LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
pinMode(ledPin, OUTPUT); const int tempPin = A0;
} const int trigPin = 9;
const int echoPin = 10;
void loop() { const int redPin = 6;
float tempC = analogRead(tempPin) * 0.48828125; const int greenPin = 5;
lcd.setCursor(0, 0); const int bluePin = 3;
lcd.print("Temp: ");
lcd.print(tempC); void setup() {
lcd.begin(20, 4);
if (tempC > 25) { pinMode(trigPin, OUTPUT);
digitalWrite(ledPin, HIGH); pinMode(echoPin, INPUT);
} else { pinMode(redPin, OUTPUT);
digitalWrite(ledPin, LOW); pinMode(greenPin, OUTPUT);
} pinMode(bluePin, OUTPUT);
}
delay(1000);
} void loop() {
float tempC = analogRead(tempPin) * 0.48828125; pinMode(echoPin, INPUT);
lcd.setCursor(0, 0); pinMode(motorPin1, OUTPUT);
lcd.print("Temp: "); pinMode(motorPin2, OUTPUT);
lcd.print(tempC); pinMode(enablePin, OUTPUT);
}
digitalWrite(trigPin, LOW);
delayMicroseconds(2); void loop() {
digitalWrite(trigPin, HIGH); float tempC = analogRead(tempPin) * 0.48828125;
delayMicroseconds(10); lcd.setCursor(0, 0);
digitalWrite(trigPin, LOW); lcd.print("Temp: ");
lcd.print(tempC);
long duration = pulseIn(echoPin, HIGH);
int distance = duration * 0.034 / 2; digitalWrite(trigPin, LOW);
lcd.setCursor(0, 1); delayMicroseconds(2);
lcd.print("Dist: "); digitalWrite(trigPin, HIGH);
lcd.print(distance); delayMicroseconds(10);
digitalWrite(trigPin, LOW);
if (tempC > 25 || distance < 10) {
analogWrite(redPin, 255); long duration = pulseIn(echoPin, HIGH);
analogWrite(greenPin, 0); int distance = duration * 0.034 / 2;
analogWrite(bluePin, 0); lcd.setCursor(0, 1);
} else { lcd.print("Dist: ");
analogWrite(redPin, 0); lcd.print(distance);
analogWrite(greenPin, 255);
analogWrite(bluePin, 0); if (tempC > 25 && distance < 10) {
} servoMotor.write(90);
analogWrite(enablePin, 255);
delay(1000); digitalWrite(motorPin1, HIGH);
} digitalWrite(motorPin2, LOW);
} else {
**Ejercicio: Sistema de Control de Servomotor basado servoMotor.write(0);
en Distancia y Temperatura** analogWrite(enablePin, 0);
digitalWrite(motorPin1, LOW);
- **Materiales:** Arduino Uno, servomotor SG90, digitalWrite(motorPin2, LOW);
sensor de temperatura TMP36, sensor de ultrasonido }
HC-SR04, motor DC, puente H L293D, LCD 20X4, }
resistencias, cables.
cpp
- **Descripción:** En este proyecto, el servomotor
girará a una cierta cantidad de grados dependiendo En este ejercicio, el servomotor girará a 90 grados si
de la distancia medida por el sensor ultrasónico y la la temperatura es mayor a 25 grados y la distancia es
temperatura medida por el sensor de temperatura. menor a 10 cm. Además, el motor DC se activará a
Además, se activará el motor DC a cierta velocidad si máxima velocidad en esa misma condición. Recuerda
se cumplen ciertas condiciones de distancia y ajustar las conexiones y adaptar el código según tus
temperatura. necesidades específicas. ¡Espero que este ejercicio te
resulte útil y desafiante! Si necesitas más detalles o
- **Código:** ayuda adicional, no dudes en decírmelo.
selectColor(); // Función para seleccionar color const int buttonPin = 2; // Pin del pulsador
basado en el contador const int redPin = 6;
} const int greenPin = 5;
const int bluePin = 3;
void selectColor() { int colorIndex = 0; // Índice de color
if (count > 0) { int count = 0; // Contador de pulsos
colorIndex = count % 5; // Establecer el índice de
color basado en el contador void setup() {
pinMode(buttonPin, INPUT);
switch (colorIndex) { pinMode(redPin, OUTPUT);
case 0: pinMode(greenPin, OUTPUT);
setColor(255, 0, 0); // Rojo pinMode(bluePin, OUTPUT);
break; Serial.begin(9600);
case 1: }
setColor(0, 255, 0); // Verde
break; void loop() {
case 2: if (digitalRead(buttonPin) == HIGH) {
setColor(0, 0, 255); // Azul count++; // Incrementar contador al presionar el
break; botón
case 3: delay(200); // Debounce del botón
setColor(255, 255, 0); // Amarillo }
break;
case 4: selectColor(); // Función para seleccionar color
setColor(255, 0, 255); // Magenta basado en el contador
break; }
Asegúrate de utilizar las resistencias necesarias y
void selectColor() { conectar correctamente los pines de cada dispositivo.
if (count > 0) {
colorIndex = count % 5; // Establecer el índice de - **Código:**
color basado en el contador - El siguiente código implementa un sistema que
controla el servo, el motor DC y muestra información
switch (colorIndex) { en el LCD basado en diferentes condiciones como la
case 0: distancia, temperatura, pulsador y potenciómetro.
setColor(255, 0, 0); // Rojo
break;
case 1: // Código para el sistema de control multifuncional
setColor(0, 255, 0); // Verde
break; #include <LiquidCrystal.h>
case 2: #include <Servo.h>
setColor(0, 0, 255); // Azul
break; Servo servoMotor;
case 3: LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
setColor(255, 255, 0); // Amarillo
break; const int trigPin = 9;
case 4: const int echoPin = 10;
setColor(255, 0, 255); // Magenta const int tempPin = A0;
break; const int buttonPin = 7;
} const int potPin = A1;
const int motorPin1 = 6;
Serial.print("Color seleccionado: "); const int motorPin2 = 7;
Serial.println(colorIndex); const int enablePin = 8;
} const int relayPin = 13;
} const int segA = 2;
### Ejemplo 1: Control de Servomotor y Motor DC ### Ejemplo 2: Control de Servomotor basado en
basado en Distancia y Temperatura Distancia
- **Descripción:** En este proyecto, el servo y el motor DC - **Descripción:** En este proyecto, el servomotor gira en
se controlan en función de la distancia y la temperatura. función de la distancia medida por el sensor ultrasónico.
El servo se mueve según la distancia medida por el Si la distancia es menor a 20, el servomotor gira 90
sensor ultrasónico y el motor DC se activa en función de grados a la derecha; de lo contrario, se apaga o gira 30
la temperatura. grados a la izquierda.
- **Conexiones:** - **Conexiones:**
- Conectar el sensor ultrasónico HC-SR04 al Arduino - Conectar el sensor ultrasónico HC-SR04 al Arduino
Uno. Uno.
- Conectar el sensor de temperatura TMP36 al Arduino - Conectar el servomotor SG90 al Arduino Uno.
Uno.
- Conectar el servo SG90 y el motor DC con el puente H - **Código:**
L293D al Arduino Uno.
// Código para control de servomotor basado en distancia
- **Código:**
#include <Servo.h>
// Código para control de servo y motor DC basado en
distancia y temperatura Servo servoMotor;
const int trigPin = 9;
const int echoPin = 10; Espero que estos ejemplos te sean útiles y satisfagan tus
requerimientos. Si necesitas más detalles sobre las
void setup() { conexiones o el funcionamiento de algún código en
servoMotor.attach(9); particular, no dudes en preguntar. ¡Estoy aquí para
pinMode(trigPin, OUTPUT); ayudarte!
pinMode(echoPin, INPUT);
} 6/5/2024, 3:05:05 AM
¡Claro! Aquí te presento otros tres ejemplos de proyectos
void loop() { complejos que combinan los componentes que
int distance = getDistance(); mencionaste. Cada código está comentado para explicar
su funcionamiento y se incluye una descripción de las
if (distance < 20) { conexiones necesarias.
servoMotor.write(90);
} else { ### Ejemplo 1: Control de Motor DC con Display LCD y
servoMotor.write(30); Sensor de Temperatura
}
} - **Descripción:** En este proyecto, un motor DC se
controla en función de la temperatura medida por el
int getDistance() { sensor TMP36. Además, la temperatura se muestra en un
// Implementar la lectura de distancia con el sensor display LCD.
ultrasónico
} - **Conexiones:**
- Conectar el sensor de temperatura TMP36 al Arduino
cpp Uno.
- Conectar el motor DC con el puente H L293D al
### Ejemplo 3: Control de Servomotor con Pulsador y Arduino Uno.
Potenciómetro - Conectar el display LCD 16x2 al Arduino Uno.
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
const int trigPin = 9; myServo.write(45); // Mover el servo a 45 grados
const int echoPin = 10;
// Retroceder el motor DC
// Pines del Puente H para el motor DC digitalWrite(motorIn1, LOW);
const int enablePin = 6; digitalWrite(motorIn2, HIGH);
const int motorIn1 = 7; //Izquierda
const int motorIn2 = 8; //Derecha }
else {
// Variables para el sensor de distancia myServo.write(0); // Poner el servo en posición 0
long duration; grados
int distance; // Apagar el motor DC
digitalWrite(motorIn1, LOW);
void setup() { digitalWrite(motorIn2, LOW);
// Inicialización del LCD }
lcd.begin(16, 2);
lcd.print("Distancia:"); delay(500); // Pequeña pausa antes de la siguiente
medición
// Inicialización del Servo }
myServo.attach(11);
#include <LiquidCrystal.h> myServo.write(90); // Mover el servo a 90 grados
#include <Servo.h>
// Avanzar el motor DC
// Configuración del LCD digitalWrite(motorIn1, HIGH);
LiquidCrystal lcd(13, 12, 5, 4, 3, 2); digitalWrite(motorIn2, LOW);
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
myServo.write(45); // Mover el servo a 45 grados
void loop() {
// Retroceder el motor DC // Medir la distancia
digitalWrite(motorIn1, LOW); digitalWrite(trigPin, LOW);
digitalWrite(motorIn2, HIGH); delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
} delayMicroseconds(10);
else { digitalWrite(trigPin, LOW);
myServo.write(0); // Poner el servo en posición 0
grados duration = pulseIn(echoPin, HIGH);
// Apagar el motor DC distance = duration * 0.034 / 2;
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW); // Mostrar la distancia en el LCD
} lcd.setCursor(0, 1);
lcd.print(distance);
delay(500); // Pequeña pausa antes de la siguiente lcd.print(" cm ");
medición
} // Condición para el servo y motor DC
if (distance < 10) {
#include <LiquidCrystal.h> myServo.write(90); // Mover el servo a 90 grados
#include <Servo.h>
// Avanzar el motor DC
// Configuración del LCD digitalWrite(motorIn1, HIGH);
LiquidCrystal lcd(13, 12, 5, 4, 3, 2); digitalWrite(motorIn2, LOW);
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
const int trigPin = 9; myServo.write(45); // Mover el servo a 45 grados
const int echoPin = 10;
// Retroceder el motor DC
// Pines del Puente H para el motor DC digitalWrite(motorIn1, LOW);
const int enablePin = 6; digitalWrite(motorIn2, HIGH);
const int motorIn1 = 7; //Izquierda
const int motorIn2 = 8; //Derecha }
else {
// Variables para el sensor de distancia myServo.write(0); // Poner el servo en posición 0
long duration; grados
int distance; // Apagar el motor DC
digitalWrite(motorIn1, LOW);
void setup() { digitalWrite(motorIn2, LOW);
// Inicialización del LCD }
lcd.begin(16, 2);
lcd.print("Distancia:"); delay(500); // Pequeña pausa antes de la siguiente
medición
// Inicialización del Servo }
myServo.attach(11);
myServo.write(0); // Posición inicial del servo #include <LiquidCrystal.h>
#include <Servo.h>
// Inicialización del sensor de distancia
pinMode(trigPin, OUTPUT); // Configuración del LCD
pinMode(echoPin, INPUT); LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
const int trigPin = 9; myServo.write(45); // Mover el servo a 45 grados
const int echoPin = 10;
// Retroceder el motor DC
// Pines del Puente H para el motor DC digitalWrite(motorIn1, LOW);
const int enablePin = 6; digitalWrite(motorIn2, HIGH);
const int motorIn1 = 7; //Izquierda
const int motorIn2 = 8; //Derecha }
else {
// Variables para el sensor de distancia myServo.write(0); // Poner el servo en posición 0
long duration; grados
int distance; // Apagar el motor DC
digitalWrite(motorIn1, LOW);
void setup() { digitalWrite(motorIn2, LOW);
// Inicialización del LCD }
lcd.print(distance);
delay(500); // Pequeña pausa antes de la siguiente lcd.print(" cm ");
medición
} // Condición para el servo y motor DC
if (distance < 10) {
#include <LiquidCrystal.h> myServo.write(90); // Mover el servo a 90 grados
#include <Servo.h>
// Avanzar el motor DC
// Configuración del LCD digitalWrite(motorIn1, HIGH);
LiquidCrystal lcd(13, 12, 5, 4, 3, 2); digitalWrite(motorIn2, LOW);
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
const int trigPin = 9; myServo.write(45); // Mover el servo a 45 grados
const int echoPin = 10;
// Retroceder el motor DC
// Pines del Puente H para el motor DC digitalWrite(motorIn1, LOW);
const int enablePin = 6; digitalWrite(motorIn2, HIGH);
const int motorIn1 = 7; //Izquierda
const int motorIn2 = 8; //Derecha }
else {
// Variables para el sensor de distancia myServo.write(0); // Poner el servo en posición 0
long duration; grados
int distance; // Apagar el motor DC
digitalWrite(motorIn1, LOW);
void setup() { digitalWrite(motorIn2, LOW);
// Inicialización del LCD }
lcd.begin(16, 2);
lcd.print("Distancia:"); delay(500); // Pequeña pausa antes de la siguiente
medición
// Inicialización del Servo }
myServo.attach(11);
myServo.write(0); // Posición inicial del servo #include <LiquidCrystal.h>
#include <Servo.h>
// Inicialización del sensor de distancia
pinMode(trigPin, OUTPUT); // Configuración del LCD
pinMode(echoPin, INPUT); LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
const int trigPin = 9; myServo.write(45); // Mover el servo a 45 grados
const int echoPin = 10;
// Retroceder el motor DC
// Pines del Puente H para el motor DC digitalWrite(motorIn1, LOW);
const int enablePin = 6; digitalWrite(motorIn2, HIGH);
const int motorIn1 = 7; //Izquierda
const int motorIn2 = 8; //Derecha }
else {
// Variables para el sensor de distancia myServo.write(0); // Poner el servo en posición 0
long duration; grados
int distance; // Apagar el motor DC
digitalWrite(motorIn1, LOW);
void setup() { digitalWrite(motorIn2, LOW);
// Inicialización del LCD }
lcd.begin(16, 2);
lcd.print("Distancia:"); delay(500); // Pequeña pausa antes de la siguiente
medición
// Inicialización del Servo }
myServo.attach(11);
myServo.write(0); // Posición inicial del servo
#include <LiquidCrystal.h>
// Inicialización del sensor de distancia #include <Servo.h>
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT); // Configuración del LCD
LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
// Inicialización del puente H
pinMode(enablePin, OUTPUT); // Configuración del Servo
Servo myServo;
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
const int trigPin = 9; myServo.write(45); // Mover el servo a 45 grados
const int echoPin = 10;
// Retroceder el motor DC
// Pines del Puente H para el motor DC digitalWrite(motorIn1, LOW);
const int enablePin = 6; digitalWrite(motorIn2, HIGH);
const int motorIn1 = 7; //Izquierda
const int motorIn2 = 8; //Derecha }
else {
// Variables para el sensor de distancia myServo.write(0); // Poner el servo en posición 0
long duration; grados
int distance; // Apagar el motor DC
digitalWrite(motorIn1, LOW);
void setup() { digitalWrite(motorIn2, LOW);
// Inicialización del LCD }
lcd.begin(16, 2);
lcd.print("Distancia:"); delay(500); // Pequeña pausa antes de la siguiente
medición
// Inicialización del Servo }
myServo.attach(11);
myServo.write(0); // Posición inicial del servo #include <LiquidCrystal.h>
#include <Servo.h>
// Inicialización del sensor de distancia
pinMode(trigPin, OUTPUT); // Configuración del LCD
pinMode(echoPin, INPUT); LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
const int trigPin = 9; myServo.write(45); // Mover el servo a 45 grados
const int echoPin = 10;
// Retroceder el motor DC
digitalWrite(motorIn1, LOW); // Medir la distancia
digitalWrite(motorIn2, HIGH); digitalWrite(trigPin, LOW);
delayMicroseconds(2);
} digitalWrite(trigPin, HIGH);
else { delayMicroseconds(10);
myServo.write(0); // Poner el servo en posición 0 digitalWrite(trigPin, LOW);
grados
// Apagar el motor DC duration = pulseIn(echoPin, HIGH);
digitalWrite(motorIn1, LOW); distance = duration * 0.034 / 2;
digitalWrite(motorIn2, LOW);
} // Mostrar la distancia en el LCD
lcd.setCursor(0, 1);
delay(500); // Pequeña pausa antes de la siguiente lcd.print(distance);
medición lcd.print(" cm ");
}
// Condición para el servo y motor DC
if (distance < 10) {
#include <LiquidCrystal.h> myServo.write(90); // Mover el servo a 90 grados
#include <Servo.h>
// Avanzar el motor DC
// Configuración del LCD digitalWrite(motorIn1, HIGH);
LiquidCrystal lcd(13, 12, 5, 4, 3, 2); digitalWrite(motorIn2, LOW);
// Pines del HC-SR04 } else if (distance >= 10 && distance < 20) {
const int trigPin = 9; myServo.write(45); // Mover el servo a 45 grados
const int echoPin = 10;
// Retroceder el motor DC
// Pines del Puente H para el motor DC digitalWrite(motorIn1, LOW);
const int enablePin = 6; digitalWrite(motorIn2, HIGH);
const int motorIn1 = 7; //Izquierda
const int motorIn2 = 8; //Derecha }
else {
// Variables para el sensor de distancia myServo.write(0); // Poner el servo en posición 0
long duration; grados
int distance; // Apagar el motor DC
digitalWrite(motorIn1, LOW);
void setup() { digitalWrite(motorIn2, LOW);
// Inicialización del LCD }
lcd.begin(16, 2);
lcd.print("Distancia:"); delay(500); // Pequeña pausa antes de la siguiente
medición
// Inicialización del Servo }
myServo.attach(11);
myServo.write(0); // Posición inicial del servo #include <LiquidCrystal.h>
#include <Servo.h>
// Inicialización del sensor de distancia
pinMode(trigPin, OUTPUT); // Configuración del LCD
pinMode(echoPin, INPUT); LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
// Avanzar el motor DC
digitalWrite(motorIn1, HIGH);
digitalWrite(motorIn2, LOW);
// Retroceder el motor DC
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
}
else {
myServo.write(0); // Poner el servo en posición 0
grados
// Apagar el motor DC
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
}