Skip to content

Taller IoT para construir un medidor Geiger conectado. Basado en el ESP8266, MQTT, Node-RED e integrado en la red GMC

License

Notifications You must be signed in to change notification settings

McOrts/taller-iot-sensor_radiactividad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Taller sensor IoT de radiactividad

Taller IoT para construir un medidor Geiger conectado. Basado en el ESP8266, MQTT, Node-RED e integrado en la red GMC

La solución tecnológica utilizada para la plataforma de despliegue de servicios y datos. Está basada en hardware y software libre.

Componentes que vamos a utilizar

Hardware

La placa de prototipo Wemos D1 Mini es microcontrolador muy versátil y de tamaño reducido.

  • Permite ser programado directamente desde el IDE de Arduino.
  • Ofrece pines de voltajes de salida de 3,2V y 5V.

- Tiene conectividad Wi-Fi con todo el _stack_ de TCP/IP.
- Incluye el chip CP2104 USB-TO-UART IC
- El microcontrolador incorporado es el ESP-8266EX
_ * Con un voltaje de funcionamiento: 3,3 V (chip) 5 V (placa)
_ * Tiene 11 pines de E/S digitales: de los cuales 2 son serie y otros 2 para I2C
_ * Pines de entrada analógica: 1 (entrada máxima: 3,2 V)
_ * 16M bytes(128M bit) Flash

Montaje

La idea es colocar y conectar todos los componentes dentro de la caja de 125x125mm de tapa transparente. Aunque el tubo Geiger irá fuera a efectos de que la caja no haga de aislamiento de la radiación alfa (α).

La conectividad es bastante sencilla aunque hay que asegurarse de una buena conexión y aislamiento ya que el dispositivo trabaja a 380V. Breadboard

  • Lo primero será cablear la PCB según el esquema anterior.

  • Si queremos que el sensor tenga un largo alcance de conexión. Es necesario activar la salida de antena WiFi del microcontrolador Wemos D1 mini. Para ello hay que recolocar una resistencia de 0 ohm. Es un componente SMD por lo tanto pequeño y dificil de manejar. Hay que des-soldarlo y volver a soldar con un giro de 90º

  • La placa del circuito principal del sensor se fijará al fondo de la caja con dos tornillos centrales. Tras lo que tendremos a la vista el espacio para colocar el conector de alimentación en la parte superior derecha. Si vamos alimentar el circuito con 12V tendremos que soldar la entrada del adaptador a la parte interna de este conector.

  • Por otra parte vamos a preparar el tubo Geiger para que quede en el exterior de manera que sea más sensible a la radiación Alfa. Para ello utilizaremos dos cables gruesos, de diferentes colores para mantener la referencia de la polaridad. Estos cables van soldados directamente al tubo y a un casquillo de fusible en el otro extremo.

Nos aseguraremos de aislar bien todas las partes donde el conector del tubo haya quedado expuesto al aire. El tubo se alimenta de 380V que es una tensión peligrosa.

  • La antena Wifi se podrá situar fácilmente en la esquina superior derecha de la caja:

  • Antes de fijar la placa transparente que soporta la PCB, conectaremos el cable de tres hilos.

Demo

Video de la prueba con la fuente de emisión de partículas alpha de isótopo 241 de americio. Prueba de un sensor de radiactividad conectado a internet

Software

1. Instalación del IDE de Arduino (Ver 2.0.1)

Puedes descargar la última versión del IDE de Arduino desde este sitio web si aún no la tienes.

Los sistemas Mac y Windows tienen opciones de instalación típicas. Los usuarios de Linux pueden beneficiarse de esta información adicional en el sitio web de Arduino.

2. Añadir la placa ESP en el manager

Una vez que se haya instalado el IDE de Arduino, ábralo y haga clic en preferencias .

Tendremos que agregar esta URL em la caja de texto de "Additional board manager URLs":

https://arduino.esp8266.com/stable/package_esp8266com_index.json

Si ya hay URL registradas se puede hacer clic en el ícono pequeño a la derecha del cuadro de texto para registrar varias URL's.

3. Añadir las placas ESP para el configurador

Ahora podemos agregar los tableros ESP haciendo clic en la opción herramientas > tablero > administrador de tableros… en el menú.

Busca el paquete ESP8266 e instálalo. Una vez que se haya instalado, puedes cerrar el administrador de placas.

4. Elige la placa y el puerto

A continuación, debemos seleccionar la placa Wemos D1 Mini PRO del menú de herramientas. Tendremos que seleccionar LOLIN (WEMOS) D1 mini PRO de los dispositivos ESP recién agregados.

Puede suceder que la aplicación encuentre dependencias u otras librerías des-actializadas. Aparecería un mensaje como este que deberás aceptar.

Finalmente, debemos elegir el puerto correcto en el menú de herramientas . En Mac/Linux esto aparecerá como algo así como dev/cu.usbserial-xxxx y en Windows será **COMX**.

5. Testing Point

En este punto vamos a chequear todo cargando un sketch que hará que la luz azul de la placa parpadee. Este programa lo podrás encontrar en la ruta de ejemplos:

Estos serían los mensajes de salida cuando se carge el ejemplo en el microcontrolador:

6. Añadir la librería de MQTT

Nuestro sensor va a utilizar colas MQTT para publicar sus lecturas y recbir comandos. Esta es la razón por la que hay la llamada a esta librería: #include <PubSubClient.h>

Por lo tanto hay se buscarla e instalarla con todas sus dependencias:

7. Configuración y carga del firmware

Con todo lo anterior configurado ahora solo tendrás que bajarte el programa de la carpeta IoT_nuclear_radiation_sensor que contiene el sketch de Arduino formado por dos archivos.

Uno de los archivos es el de configuración settings.h que contiene las credenciales para la conexión WiFi que hay que poner, y la configuración MQTT de nuestro servidor o de uno externo. Para hacer las pruebas iniciales hemos utilizado un servidor MQTT (Broker) público. El HiveMQ nos permite usar de una forma simple, sin usuario, este servicio.

// WiFi Configuration
const char* ssid = "??";
const char* password = "??";

// MQTT Configuration
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* mqtt_id = "radiation_sensor";
const char* mqtt_sub_topic_healthcheck = "/home/meteo/radiation_sensor";
const char* mqtt_sub_topic_ip = "/home/meteo/radiation_sensor/ip";
const char* mqtt_sub_topic_operation = "/home/meteo/radiation_sensor/operation";
const char* mqtt_pub_topic_radiation = "/home/meteo/radiation_sensor/cpm";

// Other params
const int pin_detector = 14; //D5

Con todo lo anterior configurado ahora solo tendrás que abrir el programa y Tras pulsar al botón de cargar (upload) y al cabo de un rato, el firmaware nuevo se cargará en la placa empezando a parpadear el LED y con estos mensajes de salida en la aplicación:

Ajuste de la lectura

Puede pasar que no se estén recibiendo los datos del circuito del contador Geiger. Segurante se deba a que la resistencia variable está en un valor muy alto.

Toca ahora hacer su ajuste. Giraremos a la posición de 0 ohm hasta ver como empiezan a mostrarse las lecturas en la consola del IDE de Arduino:

****************    17 CPM
**************    14 CPM
*****************    17 CPM

Seguidamente iremos girando el ajuste hasta que dejemos de recibir la lecturas. En ese punto sólo habrá que retroceder un poco hasta que de nuevo tengamos lecturas. De esta manera ajustaremos la tensión de entrada del puerto a un valor seguro.

Registrar el dispositivo

Vamos a utilizar la plataforma de GMC.MAP que está desarrollada por el fabricante GQ Electronics LLC y que amablemente ha abierto a la comunidad para que podamos integrar nuestros sensores en su GIS.

Crear una cuenta

El registro del dispositivo se hace desde la web https://www.gmcmap.com/userAccountLogin-x.asp donde tendremos que darnos de alta con una dirección de correo.

Añade el dispositivo

Desde My account entramos en la opción de: Manage my Geiger Counters y pulsamos: Add a device. Lo primero que nos pedirán será la ubicación geográfica del sensor que se determina buscando en el mapa el punto de instalación y marcando con el ratón el lugar.

Hecho esto, tendremos que editar de nuevo la ficha del dispositivo para completar algunos datos más. Pulsando Update My Geiger Counter habremos acabado el proceso quedándonos con el Geiger Counter ID que utilizaremos para la API.




Integración con Node-RED

Como hemos visto en la configuración del firmware del microcontrolador tenemos un servidor MQTT al que el dispositivo enviará una trama de datos cada minuto. Si visualizamos directamente el topic donde llegan estos valores, veremos esto:

  • Dirección IP de red del dispositivo
  • El valor de cpm que es el total de pulsos por minuto.

Para una primera prueba de recepción de datos. Tenemos este sencillo flujo cuyo código fuente lo puedes obtener en: IoT_nuclear_radiation_sensor_Nodered_BASIC.json

Este programa va a subscribirse a los dos topic de MQTT para recuperar los valores de cpm e IP transmitidos por el sensor y representará sus valores en unos sencillos gráficos del dashboard de NodeRED:

Integración con GMC.MAP

Vamos a utilizar la aplicación Nore-RED de control de flujos para procesar y encaminar los datos recibidos por subscripción al topic de MQTT hacia la API del servidor web de GMC.MAP. Este es el esquema básico del flujo cuyo código fuente lo puedes obtener en: IoT_nuclear_radiation_sensor_Nodered_GMC.json

El primer nodo es el que lee el topic de MQTT obteniendo el mensaje JSON descrito anteriormente. El segundo, ¨Compose URL¨ crea una cadena con los parámetros y los valores para la llamada a la API. El siguiente nodo sencillamente cambia el atributo del mensaje, tiene que ser URL. Para que luego sea lanzada la petición con el método POST. El último nodo nos mostrará en la ventana de mensajes de debug la respuesta de la API. Si todo ha ido bien será: OK.ERR0

La aplicación realmente es mas compleja porque tiene que calcular valores de media horaria y minutal. Ya que la petición API requiere de estos valores. Los campos necesarios para la petición son:

  • UserAccountID: el identificador de usuario. Se obtiene tras el registro en la web.
  • GeigerCounterID: el identificador único del dispositivo registrado en la web según los pasos descritos anteriormente.
  • nCPM: número de cuentas por minuto. Es el número de partículas detectadas.
  • ACPM: media de CPM en una hora.
  • nuSv: micro-Sievert/hora calculados según la fórmula: ¨CMP * 0,0065¨

De esta manera nuestras lecturas serán incorporadas a esta plataforma donde nuestros datos se guardarán y el último valor será mostrado en un punto el mapa con el color en función al valor de CPM.

Para este proyecto se ha ampliado la aplicación Node-RED con el fin de ofrecer una web donde observar en tiempo real las lecturas y su evolución: http://radiacion.mooo.com:48059/ui

El flujo necesario para esto es más complejo y su código también está repositado aquí.

Agradecimientos

  • Adrian Brancolino por sus buenos consejos para resolver los problemas de electrónica a los que me he enfrentado.
  • GQ Electronics LLC por la iniciativa de GMC.map.

About

Taller IoT para construir un medidor Geiger conectado. Basado en el ESP8266, MQTT, Node-RED e integrado en la red GMC

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published