Archivo de la categoría: Sensores

Práctica 2: Sensorización IoT con ESP8266

Programar los sensores, actuadores y periféricos que conectaremos a Internet como nodos remotos (motes). Programar la toma de datos de sensores, accionar los actuadores y usar los periféricos.

Pasos a realizar:

Módulos:

Solución

Instalar librerías:

Firmware de uso de cada shield:

Listado completo de firmware de shields: https://github.com/jecrespo/Curso-Node-RED/tree/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage

Librerías a instalar:

Sonda DS18B20 con Arduino

Un sonda de temperatura muy usada con Arduino es la DS18B20, esta usa un bus de comunicación multipunto llamado one wire, lo que nos permite leer muchas sondas con una sola i/o digital.

Sonda: http://www.seeedstudio.com/depot/One-Wire-Temperature-Sensor-p-1235.html

Datasheet sensor: http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

Librería: http://playground.arduino.cc/Learning/OneWire

Última versión de la librería OneWire:

Existen librerías para la sonda DS18B20 que facilita el trabajo:

Protocolo one-wire:

Esquema de montaje. El bus 1-Wire necesita una resistencia de pull-up de 4K7, y que podemos alimentar el sensor directamente a través del pin Vdd o usar el modo “parásito” y alimentarlo con la propia línea de datos.

Para poder usar las sonda DS18B20 necesitaremos las librerías OneWire y DallasTemperature. Solo hay que buscar e instalar la librería a través del Gestor de Librerías.

Leer la sonda conectada al pin 2:

Código: https://github.com/jecrespo/Arduino-Kit-China-Guide/blob/master/12-DS18B20/12-DS18B20.ino

Más información:

Sensores y Actuadores

Los sensores son el primer eslabón de la cadena de IoT

Si se le ocurre una propiedad física, probablemente pueda comprar un sensor para medirla.

En su forma más abstracta, un sensor no es más que una caja negra que transduce un estado físico que queremos monitorear en una propiedad eléctrica que podemos medir. Puede ser tan simple como un conjunto de contactos que cambian entre abierto y cortocircuito cuando pulsamos un botón o abrimos una ventana. Puede ser un potenciómetro que cambia la resistencia cuando un humano gira un dial o un robot extiende un brazo.

También puede ser tan complicado como un circuito integrado que detecta la aceleración y el magnetismo a lo largo de tres ejes para determinar la orientación, la aceleración y el rumbo de la brújula hacia su dispositivo IoT.

La mayoría de los sensores se conectan a los nodos de IoT a través de una interfaz digital, serie o analógica. Las interfaces en serie se utilizan normalmente para sensores complejos como los acelerómetros que tienen un interfaz I2C.

Sensores Arduino: https://aprendiendoarduino.wordpress.com/2018/04/14/sensores-arduino-3/

Un actuador es un dispositivo capaz de transformar energía hidráulica, neumática o eléctrica en la activación de un proceso con la finalidad de generar un efecto sobre elemento externo. Este recibe la orden de un regulador, controlador o en nuestro caso un Arduino y en función a ella genera la orden para activar un elemento final de control como, por ejemplo, una válvula.

Existen varios tipos de actuadores como son:

  • Electrónicos
  • Hidráulicos
  • Neumáticos
  • Eléctricos
  • Motores
  • Bombas

Actuadores y periféricos Arduino: https://aprendiendoarduino.wordpress.com/2015/03/31/actuadores-y-perifericos-de-salida/

Sensores no son solo los sensores que conectamos a un microcontrolador como Arduino, podemos tener una red de sensores externos que podemos integrar en nuestra red como:

  • Autómatas de los que recojo datos mediante modbus TCP con http://openopc.sourceforge.net/ e integro en las bases de datos o red MQTT.
  • Cámaras vigilando eventos con https://opencv.org/ y que integro con mis datos e interacciona.
  • Dispositivos con interfaces SNMP y adquiere los datos cada minuto guardando en la BBDD combinándolos con los datos recogidos por Arduino.
  • Datos públicos como los de aemet y que uso para activar elementos gestionados por la red MQTT.

Aplicando estos sencillos pasos, somos capaces de conectar el nivel más bajo de la pirámide del Internet de las Cosas (la sensorización) con las capas intermedias que se encargan de procesar y consumir dicha información, tanto de forma discrecional como empleando técnicas más complejas de análisis de datos.

Todo ello, sin comprometer la estabilidad y escalabilidad del sistema global, pudiendo añadir tantos sensores como necesitemos de una forma sencilla y sin preocuparnos de configuraciones extra. A partir de este momento, somos capaces de construir soluciones de mayor complejidad en el mundo de Internet de las Cosas.

Más información:

HW fabricado para IoT https://learn.controleverything.com/

Más información: https://www.artik.io/blog/2015/10/iot-101-sensors/

Ejemplo Sensor DHT11

Conectar una sonda DHT11 a Arduino UNO con Ethernet Shield y publicar datos en el topic “Temperatura” cada 5 segundos con la temperatura detectada. Ver esos datos desde el cliente MQTT.fx

Conexión:

DHT11: todo sobre el sensor para medir temperatura y humedad | Hardware  libre

Usar la librería DHT de adafruit https://github.com/adafruit/DHT-sensor-library, recordad que tiene una dependencia de la librería Adafruit Unified Sensor: https://github.com/adafruit/Adafruit_Sensor

Código: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/mqtt_temperatura_DHT/mqtt_temperatura_DHT.ino

Si queremos que otro Arduino reciba datos por MQTT al suscribirse al topic “temperatura” usamos la función de callback que imprime el mensaje recibido:

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  int i=0;
  for (i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

Si quisiéramos guardar el mensaje recibido en una variable entonces la función de callback es:

String data;

void callback(char* topic, byte* payload, unsigned int length) {
  char dataArray[length];
  for (int i=0;i<length;i++) {
    dataArray[i] = (char)payload[i];
  }
  data = str(dataArray)
}

Código: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/mqtt_temperatura_suscriptor/mqtt_temperatura_suscriptor.ino

Más información: https://ricveal.com/blog/arduino-mqtt/

Hardware Arduino para la Educación

Hardware Arduino

Arduino es una plataforma para prototipado de electrónica basada en hardware y software libre y fácil de utilizar. Podemos construir circuitos electrónicos y programarlos con esta placa.

Realmente lo que estamos haciendo es programar un microcontrolador, estos dispositivos electrónicos programables nos rodean en nuestro día a día, en el coche, nuestra casa, el trabajo, etc…

Las principales características que podemos encontrar en nuestra placa de Arduino UNO son las siguientes:

  • El microcontrolador es un circuito integrado programable capaz de realizar operaciones matemáticas complejas a gran velocidad.
  • La alimentación de una placa de Arduino es mediante el puerto USB mientras se está programando. Una vez programado podemos desconectarlo del ordenador y que trabaje de forma autónoma y se alimenta Arduino mediante una fuente de alimentación o pila de 9V.
  • Tanto las entradas como las salidas dotan al sistema de información y realizan diferentes actuaciones.

Arduino contiene la siguiente distribución de pines:

  • Disponemos de 14 pines digitales que pueden ser configurados como entradas o salidas, de los cuales (serigrafiadas con el símbolo ~) pueden ser utilizados como señales digitales PWM 6 pines.
  • Igualmente disponemos de 6 pines analógicos serigrafiadas desde A0 hasta A5 para las entradas analógicas.
  • También disponemos de 3 pines GND para conectar a tierra nuestros circuitos.
  • Y por último 2 pines de alimentación de 5V y 3.3V respectivamente.

Para saber más:

Sensores

Un sensor es un dispositivo capaz de detectar magnitudes físicas o químicas, llamadas variables de instrumentación, y transformarlas en variables eléctricas.

  • Las variables de instrumentación pueden ser por ejemplo: temperatura, intensidad lumínica, distancia, aceleración, inclinación, desplazamiento, presión, fuerza, torsión, humedad, movimiento, pH, etc.
  • Una magnitud eléctrica puede ser una resistencia eléctrica (como en una RTD), una capacidad eléctrica (como en un sensor de humedad o un sensor capacitivo), una tensión eléctrica (como en un termopar), una corriente eléctrica (como en un fototransistor), etc.

Un sensor nos va a poder medir/leer las variables ambientales de nuestro entorno para poder tomar decisiones en función de los cambios en el entorno.

Ejemplos de sensores. Kits Arduino: http://www.robotshop.com/en/37-modules-sensor-kit-arduino.html

Listado de componentes: http://tienda.bricogeek.com/upload/datasheets/SEN-0060/37-en-1-especificaciones.pdf

Actuadores

Un actuador es un dispositivo capaz de transformar energía hidráulica, neumática o eléctrica en la activación de un proceso con la finalidad de generar un efecto sobre elemento externo. Este recibe la orden de un regulador, controlador o en nuestro caso un Arduino y en función a ella genera la orden para activar un elemento final de control como, por ejemplo, una válvula.

Existen varios tipos de actuadores como son:

  • Electrónicos
  • Hidráulicos
  • Neumáticos
  • Eléctricos
  • Motores
  • Bombas

En determinadas ocasiones, necesitamos un “driver” o manejador para poder mandar órdenes desde Arduino.

  • Recordad que los pines de Arduino solo pueden manejar un máximo de 40mA y recomendable usar 20mA de forma continua.
  • Recordar que Arduino solo puede manejar un total de 200 mA de salida. Es decir que la corriente máxima que admite Vcc y GND son 200 mA.

Un actuador nos permite interactuar con el entorno.

Periféricos

Periférico es la denominación genérica para designar al aparato o dispositivo auxiliar e independiente conectado a la unidad central de procesamiento o en este caso a Arduino. Se consideran periféricos a las unidades o dispositivos de hardware a través de los cuales Arduino se comunica con el exterior, y también a los sistemas que almacenan o archivan la información, sirviendo de memoria auxiliar de la memoria principal.

Ejemplos de periféricos:

  • Pantallas LCD
  • Teclados
  • Memorias externas
  • Cámaras
  • Micrófonos
  • Impresoras
  • Pantalla táctil
  • Displays numéricos
  • Zumbadores
  • Indicadores luminosos, etc…

En ocasiones para usar un periférico con Arduino, necesitamos un “driver” o manejador para poder mandar órdenes desde Arduino.

Shields Arduino

Las shields son placas de circuitos modulares que se montan unas encima de otras para dar funcionalidad extra a un Arduino. Esta Shields son apilables.

Existen miles de shields en función de lo que necessitemos: http://shieldlist.org/

Shields Educativos

Uno de los problemas que se encuentran a la hora de impartir un curso de electrónica y programación con Arduino en los colegios es la dificultad de comprobar los montajes de los circuitos de los alumnos. Sobre todo cuando se trata de los más pequeños.

Existen shields educativos que facilitan el trabajo en el aula. Son shields que o bien permiten conectar y listo o bien tienen varios componente integrados que evitan hacer cableados y no tener que saber de electrónica.

Shield Educativo Multifunción

Shield educativo + mblock https://www.prometec.net/blog-shield-educativo-multifuncion/

Echidna

EchidnaShield es un proyecto Open Source dirigido a facilitar el aprendizaje de la programación de sistemas físicos en los últimos cursos de Primaria y en Secundaria. Con este fin se ha diseñado un escudo para Arduino, pensando en su uso con entornos visuales de programación. El escudo está apoyado en una guía educativa con propuestas de actividades para el aula.

Toda la información en: http://echidna.es/

BQ Zum Kit

Web: https://www.bq.com/es/zum-kit

Grove Starter Kit

Web: https://www.seeedstudio.com/Grove-Starter-Kit-for-Arduino-p-1855.html

Grove System: http://www.seeedstudio.com/wiki/GROVE_System

Wiki: http://www.seeedstudio.com/wiki/Grove_-_Starter_Kit_v3

Kit conectar y listo: http://www.electan.com/arduino-shield-kit-modulos-conectar-listo-p-2987.html  

Makey Makey

MaKey MaKey es una placa de circuito impreso con un microcontrolador ATMega32u4 que ejecuta el firmware de Arduino Leonardo. Utiliza el protocolo de dispositivos de interfaz humana (HID) para comunicarse con el ordenador, y puede enviar pulsaciones de teclas, clics del mouse y movimientos. Para detectar un circuito cerrado en los pines de entrada digital, usa switches de alta resistencia para que sea posible cerrar un interruptor incluso a través de materiales como la piel, hojas y play-doh. Usa una resistencia de pull-up de 22 mega ohms. Esta técnica atrae el ruido en la entrada, pero usa promediador para reducir el ruido mediante software, ahorrando dinero en el filtrado por hardware. Hay seis entradas en la parte frontal de la placa, que se pueden unir a través de conectores tipo cocodrilo o cualquier otro método que se te ocurra. Hay otras 12 entradas en la parte posterior, 6 para las teclas del teclado y 6 para el movimiento del mouse, a las que se puede acceder usando jumpers, clips o conectores de tipo cocodrilo de forma creativa alrededor de los conectores.

Más información:

Avanzado de Makey Makey

Firmware de Makey Makey: https://github.com/sparkfun/MaKeyMaKey/tree/master/firmware/Arduino/makey_makey

Repositorio Makey Makey: https://github.com/sparkfun/MaKeyMaKey

Web donde comprar: https://www.ro-botica.com/

Picuino

Picuino es una plataforma de hardware y software que facilita el desarrollo sencillo de proyectos interactivos.

Picuino: http://www.picuino.com/

NanoPlayBoard

NanoPlayBoard es un Shield educacional para Arduino Nano hecha en Almería.

Web del proyecto: http://nanoplayboard.org/

NanoPlayBoard tiene una librería ya configurada en la que está todo el código necesario para llevar a cabo esos experimentos básicos.

Una placa open sourece con muchas posibilidades:

littleBits

littleBits es una empresa con sede en la ciudad de Nueva York que hace una biblioteca de código abierto de electrónica modular, que consiste en juntar piezas con pequeños imanes para la creación de prototipos. El objetivo de la compañía es democratizar el hardware de la misma forma que el software y la impresión se han democratizado. La misión de littleBits es «poner el poder de la electrónica en manos de todos y analizar tecnologías complejas para que cualquiera pueda construir, crear prototipos e inventar».

El kit de codificación little littlebits Arduino permite a los usuarios comenzar a crear inventos que se comunican con el software (Processing, MaxMSP, etc.), con el apoyo de instrucciones paso a paso, recursos útiles en línea y 8 bocetos de muestra (código prefabricado) incluido. Aprende las habilidades del futuro: codificación, ingeniería y creatividad.

Web: https://www.littlebits.com/

Sensores Arduino

Un sensor es un dispositivo capaz de detectar magnitudes físicas o químicas, llamadas variables de instrumentación, y transformarlas en variables eléctricas.

  • Las variables de instrumentación pueden ser por ejemplo: temperatura, intensidad lumínica, distancia, aceleración, inclinación, desplazamiento, presión, fuerza, torsión, humedad, movimiento, pH, etc.
  • Una magnitud eléctrica puede ser una resistencia eléctrica (como en una RTD), una capacidad eléctrica (como en un sensor de humedad o un sensor capacitivo), una tensión eléctrica (como en un termopar), una corriente eléctrica (como en un fototransistor), etc.

Los sensores se pueden clasificar en función de los datos de salida en:

  • Digitales
  • Analógicos

Dependiendo del tipo de sensor, deberemos conectarlo a una entrada digital o analógica.

Y dentro de los sensores digitales, estos nos pueden dar una señal digital simple con dos estados como una salida de contacto libre de tensión o una salida en bus digital. En caso que el sensor use comunicación por bus, deberemos usar algunos de los buses que implementa Arduino o usar hardware adicional que nos proporcione un interfaz entre el Arduino y el bus.

Un ejemplo de sensor analógico sería el ACS714, es un sensor de efecto hall que mide las corrientes eléctricas que pasan a través del chip y devuelve un valor en voltaje proporcional a la corriente que circula por el sensor:

Datasheet: http://www.allegromicro.com/~/Media/Files/Datasheets/ACS714-Datasheet.ashx

Como medir corriente con Arduino y un sensor ACS714: http://playground.arduino.cc/Main/CurrentSensing

Tutorial de uso del sensor ACS714: http://www.instructables.com/id/How-to-Measure-AC-Current-using-Hall-Effect-Sensor/?ALLSTEPS

Características de  los sensores

  • Rango de medida: dominio en la magnitud medida en el que puede aplicarse el sensor.
  • Precisión: es el error de medida máximo esperado.
  • Offset o desviación de cero: valor de la variable de salida cuando la variable de entrada es nula. Si el rango de medida no llega a valores nulos de la variable de entrada, habitualmente se establece otro punto de referencia para definir el offset.
  • Linealidad o correlación lineal.
  • Sensibilidad de un sensor: suponiendo que es de entrada a salida y la variación de la magnitud de entrada.
  • Resolución: mínima variación de la magnitud de entrada que puede detectarse a la salida.
  • Rapidez de respuesta: puede ser un tiempo fijo o depender de cuánto varíe la magnitud a medir. Depende de la capacidad del sistema para seguir las variaciones de la magnitud de entrada.
  • Derivas: son otras magnitudes, aparte de la medida como magnitud de entrada, que influyen en la variable de salida. Por ejemplo, pueden ser condiciones ambientales, como la humedad, la temperatura u otras como el envejecimiento (oxidación, desgaste, etc.) del sensor.
  • Repetitividad: error esperado al repetir varias veces la misma medida.

Más información: http://es.wikipedia.org/wiki/Sensor#Caracter.C3.ADsticas_de_un_sensor

Tipos de sensores: http://es.wikipedia.org/wiki/Sensor#Tipos_de_sensores

IMPORTANTE: A la hora de elegir un sensor, debemos leer detenidamente las características y elegir uno que sea compatible con nuestro sistema (intensidad y voltaje) y que sea sencillo de usar o nos faciliten una librería sencilla y potente.

Catálogo de sensores:

Sensores con comunicación por bus.

Un bus (o canal) es un sistema digital que transfiere datos entre los componentes de una dispositivo electrónico o entre varios. Está formado por cables o pistas en un circuito impreso, dispositivos como resistencias y condensadores además de circuitos integrados.

La tendencia en los últimos años hacia el uso de buses seriales como el USB, Firewire, etc… para comunicaciones con periféricos, reemplazando los buses paralelos, a pesar de que el bus serial posee una lógica compleja (requiriendo mayor poder de cómputo que el bus paralelo) se produce a cambio de velocidades y eficacias mayores.

Arduino dispone de buses serie I2C y SPI para comunicarse con dispositivos sin necesidad de HW adicional

Bus RS485:

Más información en: http://es.wikipedia.org/wiki/Bus_(inform%C3%A1tica)

Existen muchos tipos de buses de comunicaciones, algunos de ellos los implementa arduino mediante controladores HW integrados en la MCU (I2C) o mediante una librería como one wire. En otros casos es necesario un hardware adicional para adaptar la señal con un transceiver y manejar el protocolo con un controlador, por ejemplo can bus o modbus.

Sondas DHT11 y DHT22

Los sensores DHT11 o DHT22 que son ampliamente usados con Arduino, son unos pequeños dispositivos que nos permiten medir la temperatura y la humedad. A pesar que estas medidas son analógicas, estos sensores los tendremos que conectar a pines digitales, ya que la señal de salida es digital a un bus punto a punto. Llevan un pequeño microcontrolador interno para hacer el tratamiento de señal. Estos sensores han sido calibrados en laboratorios, presentan una gran fiabilidad.

Estos sensores funcionan con ciclos de operación de duración determinada. En determinados casos de aplicaciones los tiempos de lectura de los sensores puede ser determinante a la hora de elegirlo.

ParámetroDHT11DHT22
Alimentación3Vdc ≤ Vcc ≤ 5Vdc3.3Vdc ≤ Vcc ≤ 6Vdc
Señal de SalidaDigitalDigital
Rango de medida TemperaturaDe 0 a 50 °CDe -40°C a 80 °C
Precisión Temperatura±2 °C<±0.5 °C
Resolución Temperatura0.1°C0.1°C
Rango de medida HumedadDe 20% a 90% RHDe 0 a 100% RH
Precisión Humedad4% RH2% RH
Resolución Humedad1%RH0.1%RH
Tiempo de sensado1s2s
Tamaño12 x 15.5 x 5.5mm14 x 18 x 5.5mm

Más información sobre la sonda DHT22: http://www.seeedstudio.com/wiki/Grove_-_Temperature_and_Humidity_Sensor_Pro

Datasheet de sondas DHT22:

Este esquema explica como funciona este sensor y el protocolo de comunicación. La librería implementa el protocolo y facilita el uso de la sonda con Arduino.

Vemos como para un mismo sensor tenemos diferentes librerías con funciones y uso diferente en cada una de ellas. Cada uno de los distribuidores de estas sondas ha creado su propia librería.

Sonda DHT18B20

Otra sonda de temperatura muy usada con Arduino es la DS18B20, esta usa un bus de comunicación multipunto llamado one wire, lo que nos permite leer muchas sondas con una sola i/o digital.

Sonda: http://www.seeedstudio.com/depot/One-Wire-Temperature-Sensor-p-1235.html

Datasheet sensor: http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

Librería: http://playground.arduino.cc/Learning/OneWire

Última version de la librería: http://www.pjrc.com/teensy/td_libs_OneWire.html

Protocolo one-wire:

Librería sonda DS18B20: https://github.com/RobTillaart/Arduino/tree/master/libraries/DS18B20

Otros Sensores

Ejemplos de sensores. Kits Arduino: http://www.robotshop.com/en/37-modules-sensor-kit-arduino.html