Lab.15, 16 - Desarrollo e Implementacion de Control de Motor DC Usando Arduino - 2024 - 02
Lab.15, 16 - Desarrollo e Implementacion de Control de Motor DC Usando Arduino - 2024 - 02
CÓDIGO C33529
LABORATORIO N° 15, 16
incredible_jarv1 (2).ino
Descripción General
Este código tiene como objetivo controlar la velocidad y dirección de un motor utilizando un puente H L298N,
una pantalla LCD con interfaz I2C y varios pulsadores. Los pulsadores permiten cambiar la dirección del
motor, ajustar la velocidad y encender o apagar el motor. La velocidad actual del motor se muestra en una
pantalla LCD.
Librerías Utilizadas
Definiciones de Pines
Pulsadores:
o buttonPin (2): Pulsador para cambiar la dirección del motor.
o buttonIncrease (3): Pulsador para aumentar la velocidad del motor.
o buttonDecrease (4): Pulsador para disminuir la velocidad del motor.
o buttonOnPin (5): Pulsador para encender el motor.
o buttonOffPin (6): Pulsador para apagar el motor.
Puente H L298N y LEDs:
o motorPin1 (7): Pin IN1 del puente H.
o motorPin2 (8): Pin IN2 del puente H.
o enablePin (9): Pin ENA del puente H para control de velocidad.
o ledForward (10): LED que indica dirección hacia adelante.
o ledBackward (11): LED que indica dirección hacia atrás.
o ledEncendido (12): LED que indica que el motor está encendido.
o ledApagado (13): LED que indica que el motor está apagado.
Variables Globales
Función setup()
Configura los pines como entradas o salidas y inicializa la pantalla LCD y la comunicación serial:
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buttonIncrease, INPUT_PULLUP);
pinMode(buttonDecrease, INPUT_PULLUP);
pinMode(buttonOnPin, INPUT_PULLUP);
pinMode(buttonOffPin, INPUT_PULLUP);
pinMode(ledForward, OUTPUT);
pinMode(ledBackward, OUTPUT);
pinMode(ledEncendido, OUTPUT);
pinMode(ledApagado, OUTPUT);
lcd.init();
lcd.backlight(); // Enciende la retroiluminación
lcd.setCursor(0, 0);
lcd.print("Velocidad: 0%");
Serial.begin(9600);
}
Función actualizarLCD()
Actualiza la pantalla LCD para mostrar la velocidad actual del motor como porcentaje:
void actualizarLCD() {
lcd.setCursor(10, 0); // Posición donde se muestra la velocidad
if (motorSpeed == 0) {
lcd.print("0%");
} else {
float percent = (motorSpeed / 255.0) * 100.0; // Calcular porcentaje
lcd.print((int)percent); // Mostrar porcentaje entero
lcd.print("%");
}
}
Función loop()
2. Ajuste de Velocidad: Aumenta o disminuye la velocidad del motor cuando se presionan los
pulsadores correspondientes:
if (digitalRead(buttonIncrease) == LOW) {
if (motorSpeed < 255) {
motorSpeed += 51; // Aumento de velocidad gradual
}
delay(200); // Retardo para evitar cambios rápidos
}
if (digitalRead(buttonDecrease) == LOW) {
if (motorSpeed > 0) {
motorSpeed -= 51; // Disminución de velocidad gradual
}
delay(200); // Retardo para evitar cambios rápidos
}
3. Encender y Apagar el Motor: Controla el encendido y apagado del motor mediante los pulsadores
correspondientes:
if (digitalRead(buttonOnPin) == LOW) {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(ledEncendido, HIGH);
digitalWrite(ledApagado, LOW);
}
if (digitalRead(buttonOffPin) == LOW) {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(ledEncendido, LOW);
digitalWrite(ledApagado, HIGH);
}
4. Actualizar la Pantalla LCD: Llama a la función actualizarLCD para mostrar la velocidad actual del
motor en la pantalla:
actualizarLCD();
5. Imprimir la Velocidad en el Monitor Serial: Envía la velocidad del motor al monitor serial para
depuración (opcional):
6. Establecer la Velocidad del Motor usando PWM: Utiliza analogWrite para establecer la velocidad del
motor en el pin enablePin:
analogWrite(enablePin, motorSpeed);
https://youtu.be/49hL5vTyPz4
Materiales Necesarios
Esquema de Conexión:
Motor y Driver de Motor:
Conecta el motor DC a las salidas del L293D (pines 3 y 6 para un canal).
Conecta los pines de control del L293D (pines 2 y 7) a los pines digitales del Arduino (por ejemplo, 9 y 10).
Conecta el pin Enable del L293D (pin 1) a un pin PWM del Arduino (por ejemplo, el pin 11).
Pulsadores:
Conecta cada pulsador entre un pin digital del Arduino y GND, usando resistencias de pull-up internas o externas.
P1 (Marcha): Pin 2
P2 (Detener): Pin 3
P3 (Cambio de sentido): Pin 4
P4 (Aumentar velocidad): Pin 5
P5 (Disminuir velocidad): Pin 6
LEDs:
LED 1 (Indicador de marcha): Conecta a un pin digital (por ejemplo, 7) con una resistencia de 220 ohms.
LED 2 (Indicador de detenido): Conecta a un pin digital (por ejemplo, 8) con una resistencia de 220 ohms.
LED 3 (Indicador de adelante): Conecta a un pin digital (por ejemplo, 12) con una resistencia de 220 ohms.
LED 4 (Indicador de reversa): Conecta a un pin digital (por ejemplo, 13) con una resistencia de 220 ohms.
LCD 16x2 con I2C:
Conecta SDA y SCL del LCD a los pines correspondientes del Arduino (A4 y A5 en el caso del Arduino Uno).
CONCLUSIONES:
1. Eficiencia y Flexibilidad en el Control: El uso del Arduino y el driver de motor L293D proporciona una solución eficiente y flexible
para controlar la velocidad y dirección de un motor DC. La implementación de funciones específicas para cada pulsador permite
un control preciso y modular del sistema.
2. Interacción del Usuario Mejorada: La inclusión de pulsadores para el control de marcha, parada, cambio de sentido y ajuste de
velocidad, junto con indicadores LED y una pantalla LCD, mejora significativamente la interacción del usuario con el sistema,
proporcionando una interfaz intuitiva y visualmente informativa.
3. Uso Eficiente de Recursos del Arduino: La implementación hace un uso óptimo de los recursos internos del Arduino, como
interrupciones externas para la respuesta inmediata a los pulsadores, PWM para el control de velocidad del motor, y la
comunicación I2C para la pantalla LCD, demostrando la versatilidad y capacidad del microcontrolador en aplicaciones de control
de motores.
4. Escalabilidad y Mejoras Futuras: El diseño presentado es escalable y permite futuras mejoras, como el control de múltiples
motores, la integración con otros sistemas a través de comunicación I2C o SPI, y la implementación de un menú de opciones más
avanzado utilizando máquinas de estado. Esto muestra el potencial del sistema para adaptarse a aplicaciones más complejas.
5. Robustez y Fiabilidad: Al emplear componentes comunes y ampliamente disponibles como el Arduino, el driver de motor L293D,
y otros componentes electrónicos básicos, el sistema resulta ser robusto y fiable. La clara separación de funciones y la utilización
de interrupciones aseguran un rendimiento estable y predecible, lo cual es esencial en aplicaciones de control de motores.
OBSERVACIONES:
1 Una parte donde pensábamos que era el código, pero era las conexiones del arduino uno.
2 Tuvimos dificultades con la programación ya que era muchas funciones para programar.
3 No tuvo buena comprensión con mis compañeros de grupo ya que nos estreso un poco.
4 Nos atrasamos por una conexión en el controlador del motor.
5 El diseño consume una cantidad considerable de pines.