Introducción
Este documento presenta un ejemplo sencillo de cómo acceder a un actuador y a un sensor desde un servicio web. Se utilizará un Arduino UNO para construir un prototipo de hardware que podrá se manipulado desde un servidor de Web de Node utilizando los frameworks express (para la programación de web) y johnny-five (para la programación del Arduino).
Requisitos
Hardware
-
Un Arduino UNO (o cualquier otra versión)
-
Un cable USB 2.0 A-B macho/macho (para conectar el Arduino a la laptop)
-
Un protoboard
-
Un led
-
Una resistencia entre 300 Ω to 2KΩ
-
Un sensor de temperatura TMP36
-
Cables conectores
Software
-
Node
-
Arduino IDE
El IDE de Arduino se puede instalar en Ubuntu con el siguiente comando desde la terminal:
sudo apt-get install arduino
Es necesario correr el IDE y verificar que en Tools/Board esté seleccionado la tarjeta correcta (Arduino UNO en nuestro caso) y en Tools/SerialPort aparezca el puerto serie correspondiente al sistema operativo en uso (/dev/ttyACM0 en el caso de Linux).
También es necesario descargar e instalar la biblioteca Firmata para el Arduino. Esta biblioteca permite a la computadora anfitriona comunicarse con el Arduino a través del cable USB usando una gran variedad de lenguajes de programación, incluyendo JavaScript. En el IDE de Arduino seleccionar File del menú principal. De ahí seleccionar: Examples/Firmata/StandardFirmata.
Posteriormente, presionar Ctrl-U para compilar y copiar el código de Firmata al Arduino (el cual debe estar conectado por el cable USB a la computadora anfitriona). Después de un momento debe aparecer el texto “Done uploading” en la barra de mensajes del IDE.
Armando el prototipo
La siguiente figura, elaborada con Fritzing, muestra la manera de conectar nuestros componentes:
Conectamos un pin de tierra (GND) y un de pin de 5V del Arduino a los buses respectivos de alimentación negativa (línea azul) y positiva (línea roja) del protoboard.
El ánodo del led (la patita larga) se conecta al pin 12 del Arduino, mientras que el cátodo (la patita corta) se conecta a una resistencia. El otro extremo de esta resistencia se conecta a tierra (línea azul).
Con respecto al sensor TMP36, viéndolo de frente a su parte plana, el pin de la izquierda (Vs) se conecta al voltaje (línea roja), el pin central (Vout) se conecta al pin A0 de entrada analógica del Arduino, y finalmente el pin de la derecha (GND) se conecta a tierra (línea azul).
Programando el software
Comencemos creando una aplicación de express usando el generador correspondiente. Desde la terminal, teclear:
express -e wot
Después en necesario cambiarse al recién creado directorio e instalar los paquetes de los que depende la aplicación:
cd wot sudo npm install
Ahora hay que instalar el paquete de johnny-five para poder programar el Arduino usando JavaScript:
sudo npm install johnny-five --save
Posteriormente definimos los servicios web para acceder a nuestros componentes físicos. Se debe sobrescribir el archivo routes/index.js con el siguiente código:
'use strict';
var express = require('express');
var five = require('johnny-five');
var router = express.Router();
var temperature = 0;
var time = null;
var reading = false;
var led;
/* GET home page. */
router.get('/', function (req, res, next) {
res.render('index', { title: 'Express' });
});
/*
* Servicio para obtener la temperatura.
*/
router.get('/temperature', function (req, res) {
res.json({ reading, temperature, time });
});
/*
* Servicio para encender un led.
*/
router.get('/led_on', function (req, res) {
var result = false;
if (led) {
result = true;
led.on();
}
res.json({ success: result });
});
/*
* Servicio para apagar un led.
*/
router.get('/led_off', function (req, res) {
var result = false;
if (led) {
result = true;
led.off();
}
res.json({ success: result });
});
module.exports = router;
/*
* Creación de la placa con un sensor de temperatura
* y un led.
*/
five.Board({ repl: false }).on('ready', function () {
var tmp36 = new five.Temperature({
controller: 'TMP36',
pin: 'A0',
freq: 2000
});
tmp36.on('data', function () {
reading = true;
temperature = this.celsius;
time = new Date();
});
led = new five.Led(12);
});
La aplicación web se echa a andar de manera convencional desde la terminal:
npm start
Los servicios web están disponibles desde los siguientes URLs:
-
Obtener la temperatura actual: http://localhost:3000/temperature
-
Encender el led: http://localhost:3000/led_on
-
Apagar el led: http://localhost:3000/led_off
Información adicional
-
Johnny-Five, the JavaScript Robotics programming framework: http://johnny-five.io/
-
Johnny-Five API: http://johnny-five.io/api/
-
JavaScript Powered Arduino with Johnny-Five (Safari Books Online): https://www.safaribooksonline.com/blog/2013/07/16/javascript-powered-arduino-with-johnny-five/