Mark Rover I es un sistema desarrollado en Arduino que permite el control a distancia de un vehículo desde cualquier lugar del mundo mediante una conexión a Internet; además, cuenta con la autonomía para esquivar obstáculos. Es un proyecto que combina la electrónica con el aprendizaje automático y el internet de las cosas, cuyas aplicaciones se extienden desde la vigilancia y exploración, hasta los sistemas de conducción de vehículos autónomos.
- Chasis de carro de dos llantas: Para el posicionamiento de todos los componentes físicos del sistema.
- Dos motorreductores de 6V (Incluidos en el chasis): Para el movimiento del vehículo.
- Protoboards: Para realizar las conexiones entre los componentes electrónicos.
- Tres sensores ultrasónicos HC-SR04: Para la detección de obstáculos, distribuidos a lo ancho de la parte frontal del chasis.
- Arduino Uno: Para el control de los sensores ultrasónicos y ejecución de la red neuronal.
- Módulo NodeMCU Esp8266: Para la conexión a Internet y gestión de los dos motorreductores.
- Chip L293D (Puente H): Para el suministro de energía a los dos motorreductores.
- Tres baterías de 9V: Una para alimentar el Arduino Uno, otra para alimentar el módulo NodeMCU Esp8266 y una más para alimentar ambos motorreductores.
El sistema consta de dos circuitos principales:
Para suministrar el voltaje a los pines que hacen girar los motores, los conectaremos al módulo NodeMCU Esp8266 de la siguente manera:
- Cable café ---> pin 2 (D4/GPIO02)
- Cable morado ---> pin 0 (D3/GPIO00)
- Cable amarillo ---> pin 5 (D1/GPIO05)
- Cable azul ---> pin 4 (D2/GPIO04)
El chip L293D se alimentará, mediante su pin 1, con los 5V suministrados por el Arduino Uno.
La placa Arduino Uno debe comunicarse con el Módulo NodeMCU Esp8266 ya que al activarse la opción de piloto automático sucederá lo siguiente:
- El módulo se pondrá en contacto con el Arduino para solicitarle una acción.
- El Arduino recibirá la señal, obtendrá la información de los sensores y calculará una acción mediante la red neuronal, finalmente la enviará como respuesta al módulo.
- El módulo recibirá del Arduino la acción calculada por la red neuronal y realizará la acción correspondiente generando una diferencia de potencial en los pines del chip L293D para que los motores giren hacia adelante, hacia atrás, o no se muevan.
Para lograr este objetivo establecemos una conexión alámbrica serial entre el Arduino Uno y el Módulo NodeMCU Esp8266 conectando entre sí sus pines Tx y Rx (responsables de la comunicación en serie) de forma cruzada; es decir, el pin Tx del Arduino se conectará al pin Rx del módulo, y el pin Rx del Arduino se conectará al pin Tx del módulo.
Finalmente, necesitamos tener una conexión a Tierra en común entre la GND del Arduino, la del módulo NodeMCU Esp8266, la del chip L293D y la de cada una de las baterías.
-
Nuestro sistema necesita una comunicación concurrente con un servidor web desde donde extraerá la acción a ejecutar. El primer paso es Configurar un servidor web y cargar los archivos y la base de datos contenidos en la carpeta servidor.
-
Cargar el archivo sensores_y_red_neuronal.ino a la placa Arduino Uno
-
Cargar el archivo movimiento_wifi.ino al Módulo NodeMCU Esp8266
Si se desea reentrenar la red neuronal:
-
Ejecutar el script entrenamiento.py
-
Copiar la salida del script en el archivo sensores_y_red_neuronal.ino
- Consultar el Desarrollo del proyecto para una mejor explicación del mismo.
- Aquí una pequeña demostración.