Construcción de coche teledirigido con Intel Edison: V1
Vamos a construir la primera versión del coche. Tendrá los componentes y código justos para que funcione. Nos servirá de base, le añadiremos mejoras más adelante.
Usaremos estos componentes:
- Placa Intel Edison + Arduino breakout.
- Batería externa USB para alimentar la Intel Edison.
- Controlador de motores L298N. (Controla 2 motores)
- Chasis de smart car de 2 ruedas motorizadas.
- Opcional: Arduino sensor shield V5.0. (Facilita las conexiones)
En la parte de software usaremos nodeJS en el backend para controlar los motores, y HTML y AJAX en el frontend.
NodeJS viene incluido en la imagen de Yocto Linux de Intel Edison. ## Conexiones
El controlador de motores L298N tiene conexiones de alimentación, de control, y las de los motores:
- Las conexiones de alimentación van conectadas a una fuente de alimentación de entre 6 y 12 voltios. El L298N tiene un regulador de tensión que alimenta los motores con 5v.
- Las conexiones de control reciben la señal para encender y apagar los motores y el sentido de giro. Están numeradas de la IN1 hasta la IN4 y las conectaremos a los pines Arduino de la placa Intel Edison.
- Las conexiones de los motores están situadas en ambos lados del L298N.
Conecta los cables de la siguiente manera:
- IN1 — Pin 7 de Arduino
- IN2 — Pin 6 de Arduino
- IN3 — Pin 5 de Arduino
- IN4 — Pin 4 de Arduino
- Vin — Fuente de alimentación (6 – 12v)
- GND — Polo negativo de la fuente de alimentación y también al pin GND de Arduino
- OUT1 — Motor 1
- OUT2 — Motor 2
Las conexiones quedan de esta forma:
Código
Prerequisitos: Intel XDK IoT Edition para compilar y instalar el script de NodeJS, y un cliente de SCP para subir el frontend en HTML y Javascript al servidor web de Intel Edison.
Descarga el código fuente en github.com/Branyac/intel-edison-smartcar, alli tienes las instrucciones para compilarlo y subirlo a la placa, voy a explicar el funcionamiento brevemente:
Backend en NodeJS
Programar para la Intel Edison en NodeJS es un poco más complicado que con Processing (el lenguaje de programación de Arduino), pero es más potente y más fácil añadir funcionalidades. Se usa la librería MRAA para controlar los pines de Arduino.
El programa se compone de un sólo archivo de Javascript llamado main.js que encontrarás dentro de la carpeta SmartCar.
La función main()
es la principal y hace lo siguiente:
- Primero llama a la función
setup_mraa()
que crea una nueva instancia de MRAA necesaria para controlar los pines de Arduino. - A continuación llama a
setup_arduino_pins()
que indica que los pines del 4 al 7 se van a usar en modo salida (equivale a hacer unpinMode (X, OUTPUT);
en processing, donde X es el número de pin) - Por último llama a
setup_webserver()
que crea un servidor web en el puerto 8888 y luego a la funciónstart_motors()
con el valor del parámetromotors_action
que le llega en una petición HTTP GET. La funciónstart_motors()
enciende y apaga los pines de salida de Arduino para indicar al L298N en que sentido se mueve cada motor (equivale a hacerdigitalWrite (X, HIGH);
en processing), luego espera 1 segundo y para los motores apagando todos los pines.
Frontend en HTML + JS
El frontend simplemente hace llamadas AJAX al puerto 8888 de la placa Edison para mover el coche. El código está en el archivo main.js de la carpeta web/js, según el valor del parámetro motors_action
hará estos movimientos:
- motors_action=F: Hacia delante.
- motors_action=B: Hacia atrás.
- motors_action=L: Girar a la izquierda.
- motors_action=R: Girar a la derecha.
Próximamente publicaré otros posts con las mejoras que iré añadiendo a este coche teledirigido.