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.

arduino_ide.png

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:

arduino_wot.png

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).

tmp36.png

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:

routes/index.js
'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:

Información adicional

johnny-five.png