Introduccion
En este artículo, le diré cómo conectar el dosímetro AtomTag a través del módulo Bluetooth Bluegiga BLED112 al Raspberry PI para transferir los resultados de la medición al servicio de Monitoreo de personas .AtomTag: dosímetro Bluetooth de baja energía para teléfonos inteligentes y tabletas con contador Geiger SBM-20. El dispositivo transmitirá al servidor: tasa de dosis, error estadístico y carga de la batería. Al final del artículo, veremos cómo las lecturas del dosímetro están relacionadas con los eventos climáticos.(narodmon.ru) — SaaS ( , ) (, , ., , , ), - () .
Generic Attribute Profile (GATT)
El dosímetro AtomTag admite el perfil GATT. En la terminología de Bluetooth, un perfil es un conjunto de características o capacidades disponibles para un dispositivo Bluetooth específico.El perfil GATT define la estructura jerárquica del almacenamiento de datos. La estructura se muestra en la figura: Un
servicio es un contenedor que contiene varios atributos llamados características. Todos los servicios tienen identificadores únicos UUID y HANDLE. Por ejemplo, el dosímetro tiene 2 servicios:1. Un servicio para el usuario, que contiene las características para leer los resultados de medición y registrar la configuración del usuario (configuración de alarma sonora).2)Un servicio que contiene características para almacenar la configuración de fábrica: factores de calibración, nombre del dispositivo, etc.Característica : consta de:1. Valores (generalmente no más de 20 bytes).2. Descriptor: aquí se describe el propósito de la característica, el tipo de datos almacenados y también la configuración de la característica.3. Identificador único UUID y HANDLE.Los datos que nos interesan: la cantidad de pulsos registrados y la carga de la batería se almacenan exactamente en las características.BLED112
El módulo es un dispositivo USB-CDC, que se define en el sistema como / dev / ttyACM0 y no requiere la instalación de ningún controlador en Raspbian Jessie Lite con la versión 4.4 del kernel. El intercambio de datos con el módulo también se realiza como con un puerto serie. El protocolo de intercambio es binario. No escribiremos el analizador de protocolo nosotros mismos, porque Hay muchos comandos para este módulo y toma el SDK en C del fabricante. Un enlace al SDK estará al final del artículo.Software Raspberry PI
Necesitamos los siguientes archivos del SDK:1. cmd_defs.c, cmd_defs.h2. apitypes.h3. commands.c4. uart.c, uart.cla API es una basada en la devolución de llamada. El archivo command.c declaró implementaciones de código auxiliar para devoluciones de llamada no utilizadas. El SDK define 2 tipos de mensajes que pueden provenir del módulo: el evento y el resultado de la operación. En nuestro programa, recibiremos datos del dosímetro mediante alertas enviadas por el dosímetro cada 2 segundos cuando cambie la característica de medición. Como resultado, cada 2 segundos se producirá un evento desde el módulo y se llamará a la devolución de llamada correspondiente.Analicemos el algoritmo para conectar e intercambiar datos con el dosímetro:1. Abre el puerto /dev/ttyACM0
2.Reiniciamos el módulo Bluetooth usando la función api ble_cmd_system_reset();
3. Nos conectamos al dispositivo en su dirección usando ble_cmd_gap_connect_direct()
4. Solicite la lista de servicios del dispositivo y los rangos de valores que incluyen los MANILLOS de las características en estos servicios ble_cmd_attclient_read_by_group_type()
5. Después del evento, ble_evt_attclient_procedure_completed
solicitamos la lista de características usando ble_cmd_attclient_find_information().
6. En el evento, ble_evt_attclient_find_information_found
recuerde MANOS de la característica de medición y el Descriptor de configuración característica del cliente (CCCD).7. En el caso, ble_evt_attclient_procedure_completed
active las alertas. En el párrafo anterior, reconocimos el MANGO del CCCD y podemos leerlo o escribirlo. Para habilitar las notificaciones, debe establecer el indicador "notificaciones habilitadas" en el descriptor CCCD utilizando la funciónble_cmd_attclient_attribute_write()
. Después de desconectarse del dispositivo, se restablece el valor de este controlador.8. Ahora, al cambiar los valores de las características del dispositivo, se generará un evento ble_evt_attclient_attribute_value(const struct ble_msg_attclient_attribute_value_evt_t *msg)
. Puede distinguir una característica de otra por el parámetro: defina la estructura del valor de la característica de medición:msg->atthandle.
typedef struct __attribute__((__packed__)){
uint8 status_flags;
float dose;
float doserate_search;
uint16 pulses_last2sec;
uint8 battery;
uint8 temperature;
} atomtag_measurement_t;
atomtag_measurement_t measurement_char;
Dado que el orden de bytes en el valor de la característica de medición es poco endian, es suficiente copiar todos estos bytes en una estructura empaquetada:memcpy((uint8 *)&measurement_char, msg->value.data, msg->value.len);
La tasa de dosis se calculará en un intervalo de tiempo de 6 minutos. No enviaremos testimonios al servidor narodmon.ru más de una vez cada 6 minutos. Además de la tasa de dosis, enviaremos una carga de batería y un error estadístico. Todos los cálculos se realizan en la devolución ble_evt_attclient_attribute_value()
de llamada en el archivo. Las main.c.
lecturas se envían al puerto 8283 narodmon.ru utilizando el protocolo tcp. La respuesta del servidor no está marcada. Protocolo de texto:#00:00:00:00:00:00\n
#R1#10.5#err = 10%, batt = 100%\n
##
Primero viene la dirección MAC del dispositivo (6 bytes). En la fuente, la dirección MAC se introduce por ejemplo, ¡no olvide cambiarla! Además, donde 10.5 es la tasa de dosis en μR / h, err es el error estadístico.Compile todo esto con gcc:gcc -std=gnu99 -lm main.c cmd_def.c commands.c uart.c web.c -o narodmon-bin
Para que el programa se inicie automáticamente después de cargar el sistema operativo, agregué las siguientes líneas antes de salir del archivo rc.local:cd /
./home/pi/narodmon/narodmon-bin /dev/ttyACM0 5c:31:3e:da:e8:9c
5c: 31: 3e: da: e8: 9c: dirección del dispositivo Bluetooth, que se puede encontrar si ejecuta este programa con el parámetro de escaneo:./narodmon-bin /dev/ttyACM0 scan
Resultados
Después de un par de días de funcionamiento del dispositivo, aparecieron cosas interesantes en las listas. Aquí puede ver cómo cambió la tasa de dosis durante la nevada. 11 de noviembre a las ~ 17: 00 ... 18: 00 horas, la lluvia helada se detuvo y comenzó a nevar. A medida que aumentaba el espesor de la capa de nieve, la tasa de dosis promedio disminuía. El dosímetro se instala a una altura de 2 metros del suelo.La disminución en la tasa de dosis se explica por el hecho de que la capa de nieve protege parcialmente la radiación gamma natural en la superficie de la tierra. Además, la capa de nieve bloquea el acceso del gas radón a la superficie, cuyos productos secundarios pueden detectarse mediante un dosímetro convencional.Ahora podemos estimar el grosor de la nieve :) En esos días, cayeron alrededor de 8-10 centímetros de nieve. La fotografía aérea se practica en el mundo para evaluar el espesor de la nieve en las áreas donde se ubican las centrales hidroeléctricas, con el fin de comprender qué tipo de inundaciones se esperan en la primavera. Solo allí se utilizan espectrómetros gamma con detectores de centelleo debido a su mayor sensibilidad.Se observa una imagen similar en los otros dosímetros del servicio de monitoreo popular, aunque no todos brindan datos con tanta frecuencia y no está claro qué algoritmos para calcular la tasa de dosis se utilizan allí.El programa se puede modificar agregando un búfer en el que se guardarán las lecturas del dosímetro cuando no haya conexión a Internet. La API de monitoreo de personas le permite enviar lecturas de manera retroactiva. También vale la pena conectar raspberry pi a la fuente de alimentación ininterrumpida. A pesar de la simplicidad del diseño, fue posible obtener un tiempo de actividad de unos treinta días. El dosímetro en el mapa de monitoreo nacional se puede encontrar aquí. No patees, soy nuevo en Linux.
Referencias
1. Dosímetro AtomTag2. Documentación SDK y Bluegiga BLED1123. Servicio de monitoreo de personas4. Bluetooth LE, especificaciones5. Código fuente del
programa para Raspberry PI6. Aplicación de Android de monitoreo de monitoreo de personas