Construyendo un robot 100% JS con Raspberry Pi

Jon Rojí
5 min readNov 25, 2017

--

Este post es un acompañamiento / guia para construir el robot 100% JS de mi charla de Codemotion. Si no sabes de lo que hablo no pasa nada, puedes ver las slides aquí. Y una vez hechas las presentaciones, vamos al lío. Para construir a “raspibot”, necesitaremos los siguientes materiales:

  • Raspberry PI 3 B => link
  • Tarjeta de memoria Micro SD
  • Raspberry Pi Camera Module => link
  • Chasis + Motores + Modulo alimentación => link
  • Controladora de motores L298N => link

Os dejo enlaces directos a su página de amazon por si alguno se anima a repetirlo. Lo único que cambiaría si pudiese volver atrás sería el chasis, que ha resultado ser de una calidad baja (que no mala) y no tiene pinta de que vaya a durar mucho una vez montado… Por lo demás, todo ha salido de buena calidad :)

El primer paso sería instalar un sistema operativo en nuestra Raspberry PI. En mi caso opté por Raspbian Stretch, ya que no necesitamos nada especialmente potente, ni interfaz visual, ya que el robot únicamente va a correr un proceso de node.

Os dejo aquí la guía de instalación oficial de Raspberry para todos aquellos que no tengan mucha experiencia manejando esta placa. Una vez instalado el sistema operativo, le damos corriente, enchufamos a un monitor, y veremos ya nuestro sistema operativo instalado.

El usuario por defecto será pi y el password raspberry. Una vez dentro, nuestro primer paso es configurar la conexión inalámbrica de red, para ello ejecutaremos el siguiente comando

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

y una vez en el archivo, añadiremos la configuración de nuestro WiFi, de la siguiente manera, antes de reiniciar la raspberry

network={
ssid="testing"
psk="testingPassword"
}

Una vez configurado todo, además de activar la interfaz de nuestro módulo de cámara, necesitamos instalar lo necesario para ejecutar nuestro código. Podemos hacerlo a través de los siguientes comandos

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -sudo apt install nodejssudo apt-get install git

Con esto, abremos instalado Node y Git, para ejecutar y descargar nuestro código. Para activar nuestra cámara, accederemos a la configuración de nuestra raspberry, donde veremos algo como lo siguiente

raspi-config
raspi-config interface

En esta pantalla, seleccionaremos “Interfacing Options” y activaremos la opción para activar la cámara, con la misma conectada. Una vez activo, reiniciamos y probamos la cámara con el siguiente comando.

raspistill -o cam.jpg

Esto debería generarnos un archivo cam.jpg en el mismo directorio en el que estamos. Puedes ver más documentación del comando raspistill aquí.

Con los pasos anteriores, ya tendríamos la raspberry lista para funcionar. Si te resulta más cómodo trabajar desde tu equipo, siempre puedes conectarte a través de ssh a tu raspberry. Solo tienes que identificar la IP de tu placa a través del comando ifconfig, y conectarte haciendo ssh pi@[my-ip].

Vamos a ponernos con la parte manual. Para trabajar con los Pins de la Raspberry, necesitaremos algunos cables hembra-macho. Son perfectos para nosotros, ya que podemos engancharlos a los pins de la raspberry y conectarlos a nuestro controlador L298N

Lo primero, vamos a conectar un motor, conectando los dos cables a una de las salidas OUT de nuestro L298N, tal y como está en la imágen. Además de esto, conectaremos nuestras pilas directamente a la controladora. Veremos que se enciende un led rojo, señal de que todo va bien.

Una vez tenemos esto, vamos a conectar los pins de la raspberry que controlaran cuando pasa corriente a nuestros motores de la siguiente forma

Pin 7 => IN 2 / PIN 8 => IN 1 / PIN 13 =>IN / PIN 15 => IN 3

Cada motor es controlado por dos pins, aunque en la imagen anterior solo hay un motor, puedes añadir otro de la misma manera justo en el lado opuesto para tener el control sobre ambos motores.

Una vez tenemos el circuito montado, solo falta programarlo. Si no te apetece hacerlo a ti a mano, siempre puedes clonar el código de mi repositorio. Para el tutorial, continuaremos como so lo hubieses clonado.

Una vez tenemos el código, instalamos las dependencias con npm install o yarn, lo que más os guste, y añadimos las claves de configuración. Para esto, es necesario que accedais y crees un proyecto tanto en Firebase, para la comunicación de el robot con el cliente, como en Google Cloud para el análisis de imágenes con Google Vision Api.

Hay que destacar que las apis que ofrece Google Cloud son de pago. Si no tienes acceso a la prueba gratuita, o si prefieres probar con otros servicios más asequibles, puedes probar con Cloudinary y Clarifai.

Una vez tengamos las claves, podemos pasar a rellenar el archivo environment.js

// src/robot/environment.jsmodule.exports = {
firebase: { // Puedes encontrar estos datos en Firebase
apiKey: “”,
authDomain: “”,
databaseURL: “”,
},
GCKey: ‘’, // API key de GCloud
GCVUri: key => ``, // url del servicio VISION API
GCId: ‘’, // id del proyecto en GCLoud
bucketName: ‘’, // nombre del bucket o "segmento" de GCloud
keyFilename: ‘’ // url del archivo json de credenciales de GCloud
};

y el archivo main.js en la parte web para conectaros a nuestra instancia de Firebase. Y hecho esto, y añadido el JSON con nuestras credenciales, que podéis obtener en la consola de GCLoud, podemos arrancar el robot con

node src/robot/main.js

Y la web en nuestro ordenador preferido con, por ejemplo, el módulo serve de node (npm i -g serve)

serve ./src/web/

Y si todo ha ido bien, con esto deberíamos tener tanto la web como el robot conectados y listos para perseguir por casa a vuestra mascota favorita.

--

--