Novedades 20151003

Microsiervos publicó recientemente una entrada dedicada a el PLC industrial basado en Arduino de nombre Industruino. El equipo se suma a una interesante serie de controladores similares que engrosa día a día, como el Controllino o los autómatas de Industrial Shields.
Según un estudio de Transparency Market Research, se espera un crecimiento en el mercado de la domótica de nada menos que un 26% anual (CAGR) hasta 2020. Este fuerte avance es debido a la necesidad de eficiencia en aplicaciones de iluminación, seguridad, entretenimiento y HVAC; y aunque el liderzago va de la mano de Estados Unidos y Canadá, regiones como Europa y Asia oriental están asimismo experimentando un fuerte crecimiento.
A estas alturas no hace falta incidir en las ventajas de Ethernet (no solo Industrial Ethernet) en las aplicaciones industriales: integración, estandarización en las capas bajas, etc. Ken Kao, de Advantech, destaca los aspectos que van a verse potenciados gracias a los avances recientes, desde la convergencia con el IoT o las mejoras en fiabilidad y diagnóstico hasta la reducción de precio de los switches gestionados.
Cuando en 2011 orienté mi TFM hacia el uso del lenguaje natural en sistemas de control, tenía claro que la penetración de estas tecnologías en el ámbito industrial iba a resultar costosa, por razones de seguridad, entre otras. La domótica no tiene unas exigencias tan estrictas. El pasado viernes, ABB presentó una versión mejorada de free@home, un sistema para controlar edificios inteligentes mediante comandos de voz. Por los pocos detalles que he visto, debe de utilizar una gramática libre de contexto; en sí, no es novedoso, pero supone un paso adelante en la dirección hacia la que debe evolucionar el sector.
Estos días descubrí Shodan en el siguiente artículo del Instituto Nacional de Ciberseguridad, que habla sobre amenazas en los sistemas de control industrial. Tras describir las consecuencias de un accidente de este tipo y presentar algunos ejemplos (la fuga en Union Carbide en 1985, que propiamente fue un error de programación, los vertidos de Maroochy en el 2000, Stuxnet, Dragonfly…), recoge unas breves buenas prácticas.
El Instituto Nacional de Ciberseguridad también ha publicado una presentación sobre Diagnóstico de Ciberseguridad en Entornos Industriales. En las primeras diapositivas describe en qué consiste una auditoría a este nivel, para después analizar las arquitecturas de red en industria, la detección de amenazas y los mecanismos de seguridad.
Para terminar, un vídeo breve para aclarar la relación entre Internet of Things (IoT), Industrial Internet of Things (IIoT) y la industria 4.0.

Enviar datos con Arduino vía Ethernet

publicado en: Arduino | 2

Con Arduino tenía una cuenta pendiente. Me ha llegado por fin la placa y he podido hacer unas pruebas. Para iniciarme con un enfoque útil, he pensado desarrollar un programa que envíe los datos a un servidor web. La idea no es original: me la comentó mi compañero Ginés, y hay un puñado de ejemplos en Internet. A pesar de ello, es un ejercicio interesante para comenzar, y quiero orientarlo a un objetivo más general. Por eso, voy a introducir algunos elementos innecesarios en este primer desarrollo, pero que cumplirán una función más adelante. Manos a la obra.
Material con el que parto:

  • Placa Arduino Mega 2560
  • Arduino Ethernet Shield W5100

Más, como es obvio, tensión de 9V, cable USB y Ethernet. También cuento con un PC con PHP instalado y configurado.

Arduino Mega 2560
Arduino Mega 2560

En primer lugar hay que incluir en el código las librerías necesarias e introducir cierta información acerca de la conexión Ethernet:

La dirección MAC es inventada. Podemos elegir los seis bytes que queramos, siempre que no coincidan con los de otra MAC en la red. Además, debería corresponder a una dirección localmente administrada. Estas direcciones se caracterizan por tener activo el segundo bit (que se envía; corresponde con el segundo menos significativo del byte más significativo). Es decir, el primer byte es de la forma 2+4n o 3+4n.
La primera IP que aparece corresponde a la del PC que actua como servidor; y la segunda, la que le asigno al Arduino, que debe estar disponible en la red.
No debo olvidarme de comentar las librerías incluidas. SPI y Ethernet se requieren para las funciones de red y se instalan con el software de Arduino. La primera que se ha colado, en cambio, corresponde a la librería ArduinoJSON, que desarrolla Benoît Blanchon. JSON va a servir para codificar y decodificar información en forma de texto. De momento sólo voy a trabajar con entradas y salidas, y las recogeré en un array de objetos:

Cada objeto del array representa un canal, al que damos un nombre (id), un tipo (de momento sólo entradas digitales, “di”), una dirección y un valor inicial. En principio parece mucho aparato para enviar dos bits, pero espero darle justificación en publicaciones sucesivas. Estas dos entradas quedarían representadas en JSON de la siguiente forma:

Terminemos la función setup, que ha quedado a medias. Falta inicializar la periferia y la interfaz Ethernet:

El ciclo del programa va a ejecutar una tarea sencilla: actualiza los valores de root y los envía al servidor web. Para lo primero sólo hay que repasar el array buscando aquellos elementos que sean de tipo di (entrada digital). Se consulta si la entrada con dicha dirección está activa, y se actualiza su valor:

Queda la segunda parte, que es el envío. Lo voy a hacer con el método GET, por simplicidad. Para ello, basta pedir una URL incluyendo en ella el parámetro que se desea mandar. Por ejemplo, para adjuntar la cadena JSON que hemos mostrado antes sólo tendríamos que pedir la página:

La petición se va a llevar a cabo periódicamente, cada dos segundos si no hay fallos. En primera instancia se realiza la conexión con el servidor y, una vez se esté conectado, se solicita la URL anterior:

Falta una parte, la otra mitad: qué hace el servidor con los datos. De momento, puesto que esto es un ejercicio, le vamos a dar una salida simple almacenándolos en un fichero sin ningún tratamiento previo. El código en PHP es el siguiente:

Listo. A los pocos segundos de descargar el programa a la placa Arduino tenemos un fichero data.txt que va engrosando ininterrumpidamente. Y alimentando cualquiera de las dos entradas, podemos comprobar cómo su valor queda registrado.