Icono del sitio Programar fácil con Arduino

#114 Sigfox, Arduino MKRFOX1200 y un medidor de radiación UV

Si hablamos de Arduino estamos hablando de la democratización del uso de los microcontroladores. Desde que hace más de un año presentó el Arduino MKR1000, las cosas han ido cambiando. La entrada de redes LPWAN ha impulsado la última placa presentada, el Arduino MKRFOX1200 con conexión a Sigfox.

Como no, siempre que sale un Arduino destinado al IoT con una nueva tecnología, me sale el Síndrome de Ansia Viva (#SAV acuñado por el gran Obijuan) y tengo que probarlo. Yo soy fan de Arduino al igual que hay fanboys de Apple o de Google.

Pero si hay algo que realmente me gusta hacer con esta placa, es hacer proyectos. Me encanta plantear retos e investigar sobre la materia. Se trata de ir descubriendo no solo la programación y la electrónica, también de aprender sobre el mundo.

Qué es el torque, como funcionan unos engranajes, a montar y desmontar sistemas mecánicos, tornillería, carpintería e incluso aspectos meteorológicos como la radiación UV (ultravioleta). Precisamente de esto último te voy a hablar hoy.

Sigfox nos abre la puerta de la conectividad a zonas inaccesibles para otras tecnologías y Arduino MKRFOX1200 nos ayuda a implementar dispositivos y prototipos de una forma fácil y rápida. De bajo consumo y con muy buena cobertura.

Esto me ha llevado a plantear el proyecto que os voy a presentar hoy, un medidor de radiación UV con Sigfox y Arduino MKRFOX1200.

Por qué medir la radiación UV en Alicante

Yo vivo en una zona donde el número de días despejados (sin nubes) es muy superior a los días nublados. Esto conlleva a que estamos expuestos a más cantidad de radiación que en zonas donde hay más nubosidad.

No es algo que preocupe a corto plazo, pero como veremos más adelante, la exposición a largo plazo puede tener efectos irreversibles.

En la actualidad, la página web de la Consellería de Vivienda, Obras Públicas y Vertebración del Territorio de la Generalitat Valenciana, tenemos acceso a las estaciones de medida de radiación UV-B y el índice UV.

En concreto hay 5 estaciones en algunos casos distanciadas más de 100 Km. La idea es poder probar si podemos tomar medidas en diferentes playas de la ciudad de Alicante y cotejarlo con los datos reales que nos ofrecen estas estaciones y los datos de predicción del índice UV.

Estaciones radiación UV comunidad valenciana. Fuente GVA.

Pero aún voy más allá. Este proyecto se enmarca dentro de los proyectos realizados dentro de la Asociación MakerALC (de la cual soy miembro) donde nuestra idea es crear dispositivos del IoT para ciudades inteligentes totalmente libres.

Que cualquier ciudad, pueblo o comunidad, pueda comprar el hardware y replicarlo gracias a la liberación del código.

De todo esto te mantendré informado en el podcast y en el blog ;)

Qué es la radiación UV

Dentro del proceso del prototipado, una de las partes más importantes es la fase de investigación. Esto conlleva a conocer todos aquellos aspectos importantes para desarrollar un proyecto.

En este proyecto, no nos queda otra que saber qué es la radiación UV. No voy a entrar en detalles muy técnicos, creo que hay suficiente información en Internet para profundizar en esta radiación.

Si nos fijamos en el espectro de luz solar, podemos diferenciar tres grandes franjas.

Fuente Shuterstock.

Por un lado el espectro de luz visible que va desde los 400 nm a 700 nm de longitud de onda. A un lado tenemos el infrarrojo a partir de los 700 nm y en el otro extremo la luz ultravioleta, de 10 nm a 400 nm.

Pero no solo el sol puede generar radiación UV, también puede ser generada de forma artificial con lámparas de vapor de mercurio o con equipos de soldadura.

A diferencia de lo que te pueda parecer, la radiación UV se utiliza en varias áreas como por ejemplo revelar circuitos impresos con insoladoras, se pueden esterilizar herramientas o utensilios debido a su capacidad de eliminar bacterias y virus o para el control de plagas atrayendo a insectos.

Pero no toda la radiación ultravioleta penetra en la tierra. Dependiendo de la longitud de onda, se divide en tres grupos. Cada una de ellas llega con diferente intensidad a nosotros.

Fuente Shuterstock.

La radiación UV-B es la realmente peligrosa ya que afecta a los seres humanos de forma contraproducente. A corto plazo puede provocarnos inflamaciones y quemaduras (las típicas cuando vas a la playa). A largo plazo, puede llegar a generar arrugas en la piel e incluso cáncer.

Por este motivo es conveniente controlar la radiación en sitios turísticos como las playas. Puedes consultar la información detallada que nos ofrece el ICNIRP (Comisión Internacional de Protección contra la Radiación No Ionizante).

Cómo medir la radiacion UV

Para medir la radiación UV nos basamos en el estándar establecido por Organización Mundial de la Salud, Organización Meteorológica Mundial, Programa de Naciones Unidas para el Medio Ambiente y la Comisión Internacional de Protección contra la Radiación No Ionizante.

Establecen una tabla por la cual cuantificar la peligrosidad de la radiación UV con un índice, el índice UV. Incluso nos muestra un código de colores que va desde el verde al morado indicando el riesgo.

Indice UV. Fuente AEMET.

La radiación UV no depende solo de la capa de ozono, otros factores como la altura del sol, la latitud, la nubosidad o la reflexión son determinantes para aumentar o reducir este índice.

A la hora de notificar a la población, no nos vale con tomar la medida. La OMS recomienda en su guía práctica que se debe predecir un valor medio diario durante 30 minutos para notificar. En el caso de una observación continua, solo valdrán los valores medios entre 5 o 10 minutos.

Si el sensor o la estación proporciona valores decimales, se deberá redondear al entero más próximo.

Toda esta investigación nos sirve para plasmar en código nuestro proyecto. Debemos se conscientes que esta parte es una de las más importantes del prototipado con Arduino.

Sensores radiación UV con Arduino y Sigfox

Como siempre se nos abre un gran abanico de posibilidades. Recomiendo la lectura de este artículo donde trata el tema de una forma exquisita y aportando mucha información.

Si nos vamos a las estaciones profesionales, encontramos los espectrorradiómetros y los radiómetros. Estos últimos son los que utilizan las estaciones de la Comunidad Valenciana. El gran problema es el precio, no está al alcance de muchos de nosotros.

Sin embargo, el avance de nuevos sensores para utilizar con Arduino nos da la posibilidad de medir el índice UV con los fotodiodos. Estos componentes son sensibles a la luz UV y varían su resistencia (por consecuencia su voltaje) dependiendo de su incidencia.

En primera instancia son calibrados con espectrorradiómetros o radiómetros. Una vez calibrados son capaces de conseguir una buena precisión al medir del índice UV.

Solo tenemos que hacer un a búsqueda en Google y nos aparecerán unos cuantos. Algunos de ellos son:

Alguno de ellos es digital y se comunica por I2C y otros son analógicos. Debemos de llevar cuidado con estos últimos ya que son más sensibles al ruido.

Debemos de fijarnos en dos características importantes, la respuesta espectral y la salida de voltajes, que sea lineal.

En mi caso el elegido ha sido el ML8511 de Sparkfun.

Sensor radiación UV ML8511 con Arduino

Se trata de un sensor analógico que nos da un voltaje dependiendo de la radiación que incida en el fotodiodo. Como ya te he dicho, la respuesta espectral y una salida de voltaje son las características más importantes a tener en cuenta.

ML8511. Fuente Sparkfun.

Si nos vamos a la hoja de características técnicas, comprobamos que la salida de voltaje es lineal y la respuesta espectral abarca la longitud de onda de la radiación UV-B y UV-A.

El voltaje de operación es de entre 3,3 V y 3, 6V es decir, el voltaje con el que tenemos que alimentar el sensor. Lo que más me gusta es su consumo que ronda entre los 300 μA y los 500 μA en modo normal, en funcionamiento. Si está en modo de reposo (standby) consume 0,1 μA.

Para activar el modo reposo tenemos que poner uno de los pines marcado con EN en estado bajo (LOW).

Está todo ensamblado sobre una PCB de pequeñas dimensiones, ideal para prototipar. Solo tiene 4 conectores

Arduino MKRFOX1200 con conexión a Sigfox

El pasado mes de abril, en el Arduino Day se presentó, como ya nos tienen acostumbrados, una nueva placa, el Arduino MKRFOX1200. De momento, como suele suceder, los que ya tenemos alguna en nuestras manos estamos experimentando.

El microchip o SoC (System on a Chip) que utiliza es el mismo que el Arduino MKR1000. Esto hace que muchos de los conocimientos adquiridos los podemos utilizar, no empezamos de cero. Sin embargo con respecto al software, la cosa cambia.

Arduino MKRFOX1200. Fuente Arduino.

Ya no estamos conectando a una red WiFi, ahora nos conectamos a Sigfox y eso requiere de una nueva librería y de una nueva plataforma. Gracias al módulo de Sigfox ATA8520 y a una antena GSM podremos conectar a esta red.

Además, el Arduino MKRFOX1200 incorpora una suscripción gratuita durante dos años a Sigfox. Un acuerdo que nos beneficia a todos :)

No voy a entrar en detalle de las características más importantes,  ni de cómo lo puedes configurar. A continuación te dejo unos tutoriales que puedes seguir para dar los primeros pasos.

Respecto a la alimentación es algo que actualmente estoy investigando. Por ahora he hecho pruebas con el Arduino MKRFOX1200 conectado al ordenador mediante el puerto USB. En este caso se alimenta con 5V y no tiene problemas para suministrar el voltaje a los sensores.

Pero también existen otras formas de alimentar esta placa. Por un lado el pin Vin que nos permite suministrar 5V. Pero sin duda alguna, si queremos un dispositivo del IoT funcional, tendremos que utilizar los conectores para baterías o pilas.

El rango de valores que admite estos conectores es de 1,6 V a 3,7 V. Es igual que el Arduino MKR1000. Gracias a sus diferentes estados de reposo, podemos llegar a utilizar esta placa durante 6 meses con dos pilas AA o AAA de 1,5V.

Todo esto lo trataré en un artículo dedicado a los consumos.

Por último, cabe destacar de Arduino MKRFOX1200 que tiene incorporado un sensor de temperatura. Es fácilmente accesible y podemos utilizarlo para saber los grados que hay en la placa.

SigFox la red del IoT

Sigfox es una red propia que se está expandiendo muy rápidamente por todo el mundo. Utilizan una banda de frecuencia libre que en Europa es la de 868 MHz y en EEUU es la de 915 MHz.

No se trata de una red de banda ancha, más bien es una red que sirve única y exclusivamente para transmitir poca cantidad de información. Ese es su fuerte ya que debido a esto, se consiguen unos consumos muy bajos.

Los límites de transmisión son 140 mensajes al día de no más de 12 bytes. Si dividimos los 140 mensajes entre las 24 horas del día, tenemos que podemos enviar un mensaje cada 10,2 minutos. No está nada mal.

También debemos tener mucho ojo con los datos que transmitimos, no podemos pasarnos de 12 bytes. Lo idóneo es utilizar esta plataforma como pasarela de nuestros dispositivos.

Para conseguir esto debemos hacer uso de una característica que nos ofrece Sigfox, las callback. Esta función permite retransmitir a otras plataformas cada dato que enviamos a Sigfox.

Todo esto lo iremos viendo a lo largo de diferentes artículos donde vaya explicando las diferentes funcionalidades de Sigfox. Para este proyecto he decidido utilizar la plataforma Thingspeak. Si quieres profundizar más sobre ella te aconsejo que eches un vistazo al curso que tengo en el Campus.

Sensor de temperatura y presión BMP180

Además del sensor de radiación UV, he incorporado otro sensor que me de información sobre la temperatura y la presión atmosférica, el BMP180. Como ya te he comentado, el propio Arduino MKRFOX1200 tiene incorporado un sensor de temperatura.

BMP180. Fuente Sparkfun.

La decisión de incorporar este sensor es solo experimentar sobre las capacidades de la placa. Al igual que con los otros componentes, dedicaré un artículo exclusivamente a este sensor.

Cabe destacar las siguientes características técnicas obtenidas del datasheet:

Y con esto ya tendríamos todos los componentes necesarios para nuestro dispositivo de radiación UV con Arduino MKRFOX1200 y Sigfox. Ahora vamos a ensamblarlos.

Conectando los componentes a Arduino MKRFOX1200

El esquema eléctrico que he utilizado es el siguiente.

El sensor BMP180 va conectado al Arduino MKRFOX1200 a través del I2C. El pin 12 es el SLC y el pin 11 es el SDA. El pin de alimentación del BMP180 va al pin Vcc del Arduino. Este suministra 3,3 V suficiente para alimentar el sensor. También conectamos la masa al pin GND del Arduino.

El sensor ML8511 tiene 4 pines. Dos son de alimentación, el de 3,3 V lo conectamos al Vcc y el GND con la masa del Arduino. El pin de OUT es que nos proporciona el voltaje para saber el índice UV y lo conectamos al pin analógico A1.

Como hemos visto antes, el sensor puede funcionar en modo normal o reposo. Esto se consigue modificando el estado del pin EN del sensor. Si está a 0 V (LOW) se pone en modo reposo. Si está a 3,3 V (HIGH) se pone en modo normal.

Por defecto siempre lo pondremos en estado alto así que conectamos este pin al Vcc del Arduino MKRFOX1200.

Por último hay que sacar un cable directamente del pin Vcc al pin A2. Esto nos va a servir de referencia para hacer los cálculos según la recomendación de Sparkfun. Gracias a esta conexión, podremos tener en cuenta las fluctuaciones que puedan existir a la hora de alimentar la placa de una forma u otra.

Todo esto lo veremos en la programación.

Programando Arduino MKRFOX1200 con Sigfox

Dentro del código que estoy desarrollando vamos a encontrar diferentes partes. Por un lado la gestión del sensor de radiación UV ML8511. Por otro lado la gestión del sensor BMP180. Por último la gestión de los mensajes con Sigfox.

En el caso de los dos sensores, he optado por hacer una media de los 100 valores durante 5 minutos. Utilizo la misma técnica que el sensor de nivel de agua con ultrasonidos. Una vez que han pasado los 5 minutos, ya se puede transmitir los datos a Sigfox.

Para la transmisión utilizo una estructura con la información de temperatura, presión y radiación UV. También he reservado dos variables con el estado y la hora de envío del mensaje para su uso futuro.

Una vez transmitido, ponemos en modo reposo la placa durante 10 minutos. Cuando se despierta empieza a hacer de nuevo todo el ciclo. Gracias a la librería ArduinoLowPower podemos hacer esta gestión de una forma muy sencilla.

Para la transmisión de los datos se utiliza la librería Sigfox de Arduino. Viene con bastantes ejemplos y es muy sencilla de utilizar. A continuación te dejo todo el código necesario. Puedes modificar o utilizar dicho código como quieras, sin problema :)

Configuración Thingspeak para Sigfox

Lo primero que tienes que tener es una cuenta gratuita de Thinspeak. Esto te permite almacenar hasta 8 campos siempre y cuando no se supere el límite de 3.000 bytes con un máximo de 3 millones de mensajes al año.

Lo primero es crear un canal donde estarán los campos. Accede a mis canales.

Crea un nuevo canal

Rellena todos los campos necesarios, el nombre, la descripción y los campos numerados del 1 al 8. Si quieres que tu canal lo pueda ver todo el mundo tienes que marcar Make Public.

En mi caso he utilizado solo 5 campos. Estos son los datos.

Una vez lo tengas creado ya lo puedes seleccionar en My Channels.

Si accedes podrás visualizar las gráficas, modificar el canal y acceder a las API Key para escribir y leer.

En API Keys está la información que utilizaremos para configurar la página web donde mostrar los datos.

Copia la URL Get a Channel Feed. Elimina la palabra GET y esto te servirá de base para más adelante. Esta es la URL de lectura de mi canal.

Si lo que quieres es actualizar datos a través de la callback de Sigfox, tienes que utilizar la siguiente URL.

Y con esto ya tenemos preparada la plataforma en la nube para el IoT. Ahora vamos a pasar a configurar la callback de Sigfox.

Configuración callback de Sigfox a Thingspeak

Ya hemos visto que Sigfox va a funcionar como pasarela entre el Arduino MKRFOX1200 y Thingspeak. Para conseguir esto hay que configurar la función de callback. Básicamente lo que hace es mandar toda la información que llega a la plataforma a través de una API Rest.

No solo se puede utilizar Thingspeak, también tenemos la opción de utilizar otras plataformas como Firebase o ThingerIO. Esto queda al gusto del consumidor. Lo único que tendrás que cambiar es la URL de la API Rest que estés utilizando.

Lo primero es acceder al backend de Sigfox. Debes tener dado de alta tu dispositivo con los tutoriales que te he comentado anteriormente.

Una vez dentro entra den Device Type.

Ahora haz click sobre el dispositivo. Aparecerá un menú y seleccionas Edit.

Vete al menú de la derecha y haz click en CALLBACKS.

Crea una nueva callback.

De las opciones que se presentan, selecciona Custom Callback.

Aquí necesitarás rellenar dos campos, el Custom payload config y Url pattern. El primer campo indica el tipo de datos con los que vas a trabajar y el segundo la URL donde enviarlos. En nuestro caso es la URL  de actualización que hemos visto antes.

Si tienes dudas sobre como rellenar estos campos sigue los consejos y ayuda que nos proporciona Sigfox.

Los datos que yo he utilizado son los siguientes.

Donde el Custom payload config es

Tiene que guardar relación con los datos que hay que enviar desde el propio Arduino MKRFOX1200.

La Url pattern es

Sustituye TU_API_KEY por la API Key de lectura de Thingspeak. Un vez que lo tengas le das a guardar y listo.

Para ver el estado del dispositivo entra en Device y pincha en el Id del dispositivo que quieres ver.

En las opciones del menú de la izquierda puedes ver los mensajes que has enviado.

Si pinchas en la flecha hacia arriba, verás la llamada a la API Rest de Thingspeak con los datos obtenidos del Arduino MKRFOX1200.

Si todo ha ido bien, ya puedes ir a Thingspeak y comprobar que está recibiendo datos.

Pagina web con jQuery y Bootstrap para visualizar los datos de Sigfox

La última cosa que deberíamos hacer es visualizar los datos en una página web. De momento sería lo ideal ya que lo podemos ver en cualquier dispositivo ya sea móvil, tablet o pc.

Yo he utilizado jQuery, Bootstrap, JavaScript y Google Charts. Te dejo a continuación el código de la web y el archivo JS.

Archivo HTML

Archivo JavaScript

Conclusiones Sigfox y Arduino MKRFOX1200 con sensor radiación UV

Que más voy a contar de las bondades que nos ofrece una placa como Arduino MKRFOX1200. Has visto a lo largo de este tutorial cómo se puede configurar un dispositivo que se conecte a Sigfox.

No lo he detallado mucho debido a que está en fase de prototipado todavía. La idea es seguir evolucionando el dispositivo para que cualquier persona u organismo lo pueda replicar en su ciudad.

¿Tienes alguna experiencia con Sigfox?

¿Crees que es útil este dispositivo del IoT con Arduino MKRFOX1200?

Cualquier duda o comentario aquí abajo, gracias :)


Puedes escuchar este programa en,  iVooxiTunes y en Spreaker. Si lo haces, por favor valora y comenta, así podremos llegar a más gente.

Gracias a Shutterstock por ceder los derechos de las siguientes imágenes:

Salir de la versión móvil