Archivo de la categoría: Coche teledirigido con Intel Edison

Intel Edison SmartCar V2.0

intel-edison-smartcar

La versión 1.0 estaba bien para comenzar, pero mi intención era hacer algo diferente a lo que se encuentra en otros tutoriales.

El objetivo que me he marcado para la v2.0 es añadir al coche una webcam para hacer streaming de lo que ve. Para ello he usado una Sony Eye, que es de poca resolución pero tiene una calidad de imagen muy buena y requiere poca energía.

Pero al llevarlo a la práctica me he encontrado con 2 problemas: el primero es que la Intel Edison deshabilita el puerto USB Host cuando es alimentada por USB, y el segundo es que la imagen oficial de Yocto Linux solo soporta cámaras UVC.

El conector redondo de power input del Arduino Breakout acepta 5v así que usé la clavija de un cargador de portátil viejo y la soldé a un conector USB para tener habilitado el puerto USB Host con la batería externa.

IMG_20150830_223327

Hace tiempo en un evento de intel me dieron una placa Intel Galileo con una webcam Sony Eye y esperaba encontrarme los drivers preinstalados en la imagen de Yocto para Edison, pero no ha sido así y he tenido que compilarlos. Como no tengo experiencia me he basado en un tutorial de los foros de intel de alguien que ha hecho algo parecido. He incluído los módulos en el repositorio de Github.

Para terminar he atornillado un tupper al chasis del coche para evitar que los componentes se caigan cuando el coche se mueve.

P1010200

En la parte de código he reutilizado partes de proyectos que he encontrado por Internet. Con ffmpeg capturo el vídeo de la webcam, luego hago streaming por websockets a una página web que reproduce el vídeo usando HTML5, con esto consigo que sea compatible con casi todos los navegadores de internet de ordenadores y móviles.

También, a modo de prueba, he conectado el coche a thethings.io para guardar el log del programa. A largo plazo tendrá aplicaciones potenciales como controlar el coche remotamente desde una página web (lo que me evitaría tener que saber la IP del coche para conectarme y controlarlo), y enviar fotos a Internet.

Los cambios ya están subidos a Github. El proceso de instalación se ha vuelto a complicar porque la instalación de ffmpeg y los módulos se ha de hacer a mano. Me gustaría volver a conseguir que la puesta en marcha sea sólo montar el coche y darle a un botón pero eso será en próximas versiones.

Intel Edison SmartCar V1.1.0

Poco a poco sigo avanzando en la construcción del coche, pero antes de añadirle mejoras he creído necesario revisar el código a fin de hacerlo más simple y fácil de mantener.

Con la V1 el coche funcionaba pero el código estaba dividido en una carpeta para el backend y otra para el frontend y eso complicaba la instalación porque se tenía que hacer por separado. Además estaba el inconveniente de que el puerto del backend de NodeJS es distinto al del frontend y daba problemas de crossdomain cuando se comunicaban entre si mediante AJAX, en ese momento los solucioné de manera cuestionable poniendo la IP de la placa directamente en el código y usando JQuery.

Como soy newbie en NodeJS he investigado hasta encontrar la solución a mis problemas: el Framework Express, que me ha servido para optimizar el código. Ahora tengo el frontend y el backend en el mismo puerto, los problemas de crossdomain desaparecieron, he podido eliminar JQuery y sustituirlo por una única función para AJAX, y además los archivos del frontend se han podido integrar en el proyecto de Intel XDK.

Con estos cambios el código entero se sube simplemente haciendo clic en el botón Upload del Intel XDK, no hay que poner la IP a mano, y además hay menos archivos que mantener.

Lo más importante esta en la nueva función setup_app() del archivo main.js del backend porque es la que me ha permitido hacer las mejoras.

La nueva versión es la V1.1.0. La puedes descargar en Github.

2049eaa2-1578-3fbb-875c-d3ca1c68aa75

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.

Esquema del controlador de motores 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:
Intel Edison SmartCar V1

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:

  1. Primero llama a la función setup_mraa() que crea una nueva instancia de MRAA necesaria para controlar los pines de Arduino.
  2. 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 un pinMode (X, OUTPUT); en processing, donde X es el número de pin)
  3. Por último llama a setup_webserver() que crea un servidor web en el puerto 8888 y luego a la función start_motors() con el valor del parámetro motors_action que le llega en una petición HTTP GET. La función start_motors() enciende y apaga los pines de salida de Arduino para indicar al L298N en que sentido se mueve cada motor (equivale a hacer digitalWrite (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.

intel-edison-smartcar

Construcción de coche teledirigido con Intel Edison: Introducción

Me encanta el movimiento Maker, leo mucho sobre ello y cuando puedo voy a eventos porque me apasiona ver los gadgets que contruyen otros, ya sea para resolver algún problema de la vida diaria o solo por diversión.

Como programador intento dar solución a problemas y inquietudes de todo tipo, pero cada vez es más difícil porque hay muchas personas trabajando en lo mismo. Puedes tener un software con un valor añadido, pero es complicado promocionarlo porque las tiendas de aplicaciones están saturadas de programas similares y la gente va a lo seguro y escoge la más popular, aunque no tenga aquello que has hecho y que les podría ayudar a hacer una tarea de forma más eficiente. Es frustrante y en ocasiones desanima a seguir trabajando en ello.

En cambio en materia de hardware hay mucho por hacer. Antes hacía falta mucho capital para producir algo, pero hoy se puede montar casi cualquier cosa en tu casa y en ocasiones es más barato y de mejor calidad y prestaciones que los productos comerciales. Dejar volar tu imaginación y crear cualquier trasto que necesites es posible gracias a los chips baratos y las impresoras 3D.

Además desde hace unos años está empezando a desarrollarse el llamado “Internet de las cosas” que en estos momentos está siendo impulsado por gente apasionada por la tecnología y esto en mi opinión es así porque ellos son los que tienen las ideas más creativas y poco que perder. Son raros los casos en que grandes empresas se arriesgan en crear productos nuevos, mientras que en Internet puedes encontrar tutoriales caseros de cosas variadas: desde conectar un sensor de temperatura a Internet, hasta dispensadores de cerveza controlados vía Twitter, y la mayoría están escritos por personas normales, sin estudios avanzados.

En enero fui a una encuentro de makers organizado por IoTBCN en el MOB de Barcelona. Son unas quedadas que recomiendo y en las que se ven cosas que no dejan indiferente, algún día hablaré de ellas. El caso es que me dieron una placa Intel Edison con el breakout de Arduino, un regalazo en toda regla, para contruir un coche teledirigido, y además me he propuesto hacerlo con alguna sorpresa que lo haga diferente.

De eso va a tratar esta serie de posts en los que compartiré las motivaciones, ideas, y como va avanzando el proyecto.

Ya que la Intel Edison me la regalaron creo que lo justo es que este coche teledirigido sea público y por eso colgaré toda la documentación y código fuente en Github a medida que vaya tomando forma para otros puedan montarlo y mejorarlo.

Creo que los próximos posts serán interesantes y divertidos y ayudarán a otras personas a introducirse en el mundo maker y construir sus propios artilugios ya que hay partes que se pueden reutilizar en otros proyectos.

Espero que disfrutéis leyéndolos tanto o más como yo escribiéndolos.