0% encontró este documento útil (0 votos)
19 vistas8 páginas

Lab.15, 16 - Desarrollo e Implementacion de Control de Motor DC Usando Arduino - 2024 - 02

xD

Cargado por

Anderson Jacho
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas8 páginas

Lab.15, 16 - Desarrollo e Implementacion de Control de Motor DC Usando Arduino - 2024 - 02

xD

Cargado por

Anderson Jacho
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

Introducción a la electrónica

CÓDIGO C33529

LABORATORIO N° 15, 16

“Desarrollo e Implementación de control de


Motor DC usando Arduino”

1.Anderson Macool Jacho Ttica


2. Brayan Ángel Choquehuayta Condori
Alumno (os):
3. .Diego Andrés Hurtado Mamani
4.
Sección : 1C-5 C Profesor: Nota:
Semestre : 1 Ing. Juan José Mamani R.
Fecha de entrega : 26 06 24 Hora: 13:23
EVIDENCIAS DEL PROYECTO
Diagrama de bloques del proyecto:

Circuito esquemático electrónico:


CODIGO DEL PROGRAMA:

incredible_jarv1 (2).ino

Informe del Código para Control de Motor con LCD y Pulsadores

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

 Wire: Librería necesaria para la comunicación I2C.


 LiquidCrystal_I2C: Librería para manejar pantallas LCD con interfaz I2C.

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

 motorSpeed: Variable que almacena la velocidad actual del motor (0 a 255).


 motorDirection: Variable que almacena la dirección del motor (true para dirección normal, false para
dirección invertida).
 Debounce Variables: Variables para gestionar el debounce del pulsador de cambio de dirección
(buttonState, lastButtonState, lastDebounceTime, debounceDelay).

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()

Esta función se ejecuta en un bucle continuo y realiza las siguientes tareas:


1. Leer y Debounce del Pulsador de Dirección: Lee el estado del pulsador de dirección y cambia la
dirección del motor si se detecta un cambio de estado:

int reading = digitalRead(buttonPin);


if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if (millis() - lastDebounceTime > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
motorDirection = !motorDirection;
if (motorDirection) {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(ledForward, HIGH);
digitalWrite(ledBackward, LOW);
} else {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(ledForward, LOW);
digitalWrite(ledBackward, HIGH);
}
}
}
}
lastButtonState = reading;

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):

Serial.print("Velocidad del motor: ");


Serial.println(motorSpeed);

6. Establecer la Velocidad del Motor usando PWM: Utiliza analogWrite para establecer la velocidad del
motor en el pin enablePin:

analogWrite(enablePin, motorSpeed);

VIDEO SUBIDO A YOUTUBE EL LINK:

https://youtu.be/49hL5vTyPz4

Componentes electrónicos utilizados:

Materiales Necesarios

 Arduino Uno (o similar)


 Motor DC
 Driver de motor L293D
 Pantalla LCD 16x2 (con módulo I2C)
 5 Pulsadores
 4 LEDs (2 verdes, 2 rojos)
 Resistencias para LEDs y pulsadores
 Potenciómetro (opcional para control de velocidad)
 Fuentes de alimentación apropiadas

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.

También podría gustarte