Node.js es un entorno en tiempo de ejecución multiplataforma de código abierto para servidor , aunque como vamos a ver, se puede usar para otros propósitos . Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web.
Es un lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Goog asi que desde este punto de vista Node.js es similar en su propósito a Twisted o Tornado de Python, Perl Object Environment de Perl, libevent o libev de C, EventMachine de Ruby, vibe.d de D y JEE de Java existe Apache MINA, Netty, Akka, Vert.x, Grizzly o Xsocket.
Como nota muy diferenciadora,al contrario que la mayoría del código JavaScript, no se ejecuta en un navegador, sino en el servidor.
Asimismo Node.js implementa algunas especificaciones de CommonJS e incluye un entorno REPL para depuración interactiva
Tal es la potencia de Node.js que ya existen plataformas basadas en este entorno para intereactuar con placas como Arduino ,Linino. Intel Edison, Raspberry pi,etc en aplicaciones de Robotica o plataformas de IoT
Johnny – Five es una Plataforma JavaScript Robótica e IO lanzada por bocoup en 2012 y mantenida por una comunidad de desarrolladores de software apasionados e ingenieros de hardware (más de 75 desarrolladores han hecho contribuciones a la construcción de éste).
Como ejemplo de “Hola Mundo” con un LED parpadeante sencilla , el siguiente ejemplo para Arduino nos muestra lo sencillo que es hacerlo en el entorno de Johnny Five :
- Primero instalar Node.js (Prefer 4.2.1 LTS).
- Configure su placa aqui
- Escriba su código , por ejemplo asi;
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var led = new five.Led(13);
led.blink(500);
});
- Ejecute el códido Run:
npm install johnny-five
Como ejemplo mas avanzado en el repositorio de github (https://github.com/stylixboom/lr_motor ) Siriwat Kasamwattanarote nos ensela como podemos controlar un coche de juguete directamente a través de SSH (mediante el terminal) usando Node.js.
Desde SSH no se aceptan 2 teclas de flecha al mismo tiempo, es por eso que la forma en que gira a la izquierda / derecha no es tan suave (al cambiar las dos teclas en consecuencia) pero el funcionamiento es muy fluido
Los requerimientos son los siguientes:
- Raspberry Pi
- Motor driver (TB6612FNG or L293D)
- Node.js
- Pigpio instalado (https://www.npmjs.com/package/pigpio)
Este proyecto es pues aprender a controlar dos motores ( izquierda – derecha) mediante el uso de la Raspberry Pi . El código proporcionado está escrito en Node.js , y requiere un paquete de ‘ Pigpio ‘ para acceder al puerto GPIO en la Raspberry Pi . ‘ Pulsación ‘ es escuchar a la entrada de teclado de la tecla de flecha ( arriba-abajo – izquierda – derecha) .
Este experimento apoya dos controladores de motor diferentes :
- Toshiba – TB6612FNG Texas Instruments
- L293D
Notas:
-TB6612FNG es más eficiente , pero más caro (unos 10 $ ) , y se necesita soldadura .
TB6612FNG
Ref: http://www.robotshop.com/media/files/PDF/Datasheet%20713.pdf
Truth table
Input Output
IN1 IN2 PWM STBY OUT1 OUT2 Mode
H H H/L H L L Short brake
L H H H L H CCW
L H L H L L Short brake
H L H H H L CW
H L L H L L Short brake
L L H H OFF(High ohm) Stop
H/L H/L H/L L OFF(High ohm) Standby
-L293D es mucho más barato ( $ 0,6 ) y más fácil de utilizar con una placa.
L293D
Ref: http://www.robotplatform.com/howto/L293/motor_driver_1.html
Truth table
Input Function
PWM IN1 IN2
H H L Reverse
H L H Forward
H H H Stop
H L L Stop
L X X Stop
En caso de usar la primera opcion , este es el esquema seguido:
Una vez montado el circuito y ya vez tenga el código descargado (https://github.com/stylixboom/lr_motor) ,simplemente para ejecutarlo use :
$ sudo node app_t.js
Finalmente en el vídeo que os dejo a continuación podemos ver el conjunto del robot utilizando una Raspberry Pi combinando NodeJS y el controlador de motores. .