UNIVERSIDAD TÉCNICA DE AMBATO
Facultad de Ingeniería en Sistemas, Electrónica e Industrial Carrera de
Telecomunicaciones
Módulo de Programación Avanzada
Tema: Control de un Motor DC Arduino-Python-App Inventor
Nivel y Paralelo: Tercer Semestre “A”
Integrantes: Camino Villalba Dennis Isaias
Tutor: Ing. Freddy Robalino P, Mg.
Introducción
Esta guía detalla los pasos necesarios para crear un sistema de control de un robot seguidor de
línea utilizando una interfaz gráfica desarrollada en Python y un Arduino Uno. El robot será
capaz de avanzar, retroceder, girar a la izquierda y girar a la derecha.
Link de video de funcionamiento
[Link]
Materiales Necesarios
Arduino Uno.
Motor driver: L298N o similar para controlar los motores del robot.
Motores: Motores DC o servomotores.
Cables y protoboard: Para realizar las conexiones necesarias.
Batería: Para alimentar el robot.
Software: Arduino IDE, Python 3, y la biblioteca Tkinter para la interfaz gráfica.
Instalación del Entorno
Instala Arduino IDE: Descárgalo desde [Link].
Instala Python 3: Asegúrate de tener Python 3 instalado. Puedes descargarlo desde [Link].
Instala la biblioteca PySerial: Necesaria para la comunicación entre Arduino y Python.
pip install pyserial
Tkinter: Tkinter está incluido con Python, no requiere instalación adicional.
Conexión de los Componentes
Conecta el motor driver y los motores a tu Arduino Uno siguiendo este esquema:
Motor A: Conecta el motor A a los pines de salida del motor driver.
Motor B: Conecta el motor B a los pines de salida del motor driver.
IN1 e IN2: Conecta los pines IN1 e IN2 del motor driver a los pines digitales 4 y 5 del Arduino.
IN3 e IN4: Conecta los pines IN3 e IN4 del motor driver a los pines digitales 6 y 7 del Arduino.
VCC y GND: Conecta los pines VCC y GND del motor driver a la fuente de alimentación y a
tierra, respectivamente.
CODIGO ARDUINO
Declaración de variables y conexiones en el Arduino
En el código, se definen los pines para diferentes componentes del sistema, incluyendo
motores, sensores y el módulo Bluetooth. Uno de los puntos clave es la conexión del
módulo Bluetooth HC-05 al Arduino.
Configuración del módulo Bluetooth
El módulo Bluetooth utiliza la comunicación serial para enviar y recibir datos. Como el
Arduino ya tiene un puerto serial dedicado (pines 0 y 1, Serial), usamos la librería
SoftwareSerial para definir un puerto serial alternativo, permitiendo conectar el
módulo Bluetooth sin interferir con la comunicación del puerto USB.
bluetooth(2, 12): Aquí declaramos los pines que usaremos para la comunicación serial:
Pin 2: RX (recepción) en el Arduino.
Pin 12: TX (transmisión) en el Arduino.
Conexión entre el módulo Bluetooth HC-05 y Arduino
• El módulo Bluetooth también tiene pines RX y TX para la comunicación serial.
Para establecer la conexión, se deben cruzar los pines entre el Arduino y el
módulo Bluetooth:
• RX del módulo Bluetooth al TX del Arduino (pin 12).
• TX del módulo Bluetooth al RX del Arduino (pin 2).
Esto es necesario porque:
• TX (transmisión) de un dispositivo debe conectarse al RX (recepción) del otro, y
viceversa.
• El módulo Bluetooth envía datos por su TX y los recibe por su RX, mientras que
el Arduino hace lo mismo con sus respectivos pines.
Declaración de variables como entrada o salida
Configura los pines de los motores y claxon como salidas.
Inicializa la comunicación serial tanto para el monitor (USB) como para el Bluetooth.
. Lógica principal (loop)
Verifica continuamente si hay datos entrantes desde el módulo Bluetooth
Procesamiento de comandos
La función procesarComando maneja los comandos recibidos desde el Bluetooth. Los
comandos posibles incluyen:
Movimiento:
"adelante": Hace avanzar los motores.
"atras": Hace retroceder los motores.
"izquierda": Gira hacia la izquierda.
"derecha": Gira hacia la derecha.
"parar": Detiene los motores.
Claxon:
"claxon": Activa el buzzer.
Velocidad:
"1", "2", ..., "5": Ajusta la velocidad del motor con base en un nivel predeterminado.
CODIGO PYTHON
Este código controla un carrito conectado a un Arduino a través de una interfaz gráfica
desarrollada con Tkinter, utilizando un puerto serial para enviar comandos. A
continuación, explico detalladamente cada parte:
Importación de módulos
• tkinter y ttk: Librerías de Python para crear interfaces gráficas. ttk provee
widgets más estilizados.
• serial: Permite la comunicación serial (puerto COM) con el Arduino.
• time: Usado para manejar retrasos (ej. inicialización del Arduino).
• El objeto [Link] configura la conexión con el Arduino. Se especifican:
• Puerto (COM7): El puerto donde está conectado el Arduino.
• Baudrate (9600): Velocidad de comunicación serial.
• Timeout (1): Tiempo en segundos antes de dar por concluida la lectura si no
recibe datos.
• [Link](2) espera a que el Arduino termine su inicialización antes de enviarle
datos.
Funciones para enviar comandos
• enviar_comando(comando):
o Convierte el comando en una cadena de texto codificada a UTF-8, añade un
salto de línea (\n) y lo envía al Arduino usando [Link]().
o Muestra el comando enviado en consola para depuración.
• Funciones específicas de acción:
o mover_adelante(), mover_atras(), mover_derecha(), mover_izquierda(),
detener():
▪ Envía comandos predefinidos como "adelante", "atras", etc., que el
Arduino interpreta.
o activar_claxon() y activar_musica():
▪ Envía los comandos "claxon" y "musica".
o Control_velicidad_1 y control velocidad_2:
▪ Envía los comandos "vel1 y vel2 "comandados por los sliders.
o enviar_palabra_habla
▪ Envía los comandos "adelante", "atrás", etc., que el Arduino interpreta
que son hablados por el micrófono .
▪
Eventos de teclado
• Detecta las teclas presionadas y las asocia con acciones específicas.
• Ejemplo: Presionar W llama a mover_adelante().
Interfaz gráfica con Tkinter
Estructura básica
Se utiliza [Link]() para crear la ventana principal con un título.
Componentes y diseño
Etiqueta principal:
Muestra el texto "Control del Carrito" en la parte superior.
Botones de dirección:
Se organizan en un marco (frame_direcciones) y se disponen en un grid para imitar una cruz:
Adelante en el centro superior.
Atrás en el centro inferior.
Izquierda y Derecha en los costados.
Botón Parar en el centro.
Cada botón tiene su comando asociado (ej. mover_adelante()).
Botones extra:
Botones para el claxon (Claxon) y música (Musica), alineados verticalmente debajo del marco
de dirección.
Control de velocidad:
Un deslizador horizontal ([Link]) ajusta la velocidad entre valores de 1 a 5. Envía el nuevo
valor al Arduino al modificarse.
CODIGO App inventor
Este código controla un carrito conectado a un Arduino a través de una interfaz gráfica
desarrollada App inventor, utilizando un puerto serial para enviar comandos. A
continuación, explico detalladamente cada parte:
Funciones para enviar comandos
• enviar_comando(comando):
o Convierte el comando en una cadena de texto codificada a UTF-8, añade un
salto de línea (\n) y lo envía al Arduino usando [Link]().
o Muestra el comando enviado en consola para depuración.
• Funciones específicas de acción:
o mover_adelante(), mover_atras(), mover_derecha(), mover_izquierda(),
detener():
▪ Envía comandos predefinidos como "adelante", "atras", etc., que el
Arduino interpreta.
o activar_claxon() y activar_musica():
▪ Envía los comandos "claxon" y "musica".
o Control_velicidad_1 y control velocidad_2:
▪ Envía los comandos "vel1 y vel2 "comandados por los sliders.
o enviar_palabra_habla
▪ Envía los comandos "adelante", "atrás", etc., que el Arduino interpreta
que son hablados por el micrófono .
Interfaz gráfica con App inventor
Estructura básica
Se utiliza [Link]() para crear la ventana principal con un título.
Componentes y diseño
Etiqueta principal:
Muestra el texto "Control del Carrito" en la parte superior
Botones de dirección:
Se organizan en un marco (frame_direcciones) y se disponen en un grid para imitar una cruz:
Adelante en el centro superior.
Atrás en el centro inferior.
Izquierda y Derecha en los costados.
Botón Parar en el centro.
Cada botón tiene su comando asociado (ej. mover_adelante()).
Botones extra:
Botones para el claxon (Claxon) y música (Musica), alineados verticalmente debajo del marco
de dirección.
Control de velocidad:
Un deslizador horizontal ([Link]) ajusta la velocidad entre valores de 1 a 5. Envía el nuevo
valor al Arduino al modificarse.
IMAGEN DE RESULTADOS
Conclusión
El programa combina una interfaz gráfica, comunicación serial y control en tiempo real para
manejar un carrito conectado a un Arduino. Gracias al uso de Tkinter, se logra un control
intuitivo mediante botones, sliders y teclas, permitiendo acciones como mover el carrito,
detenerlo, ajustar la velocidad y activar funciones como claxon o música.
Además, la implementación es flexible y fácil de adaptar a diferentes configuraciones, ya que
los comandos enviados al Arduino pueden personalizarse según las necesidades. La integración
de eventos de teclado asegura un control más dinámico, replicando una experiencia cercana a
videojuegos o controladores remotos.
En conclusión, este código es una solución funcional y bien estructurada para controlar un
carrito robótico, y sirve como base para desarrollar proyectos más complejos de robótica o
domótica, donde la interacción entre hardware y software es fundamental.