Conectamos um dosímetro de radiação sem fio ao serviço "People's Monitoring" via Raspberry PI

1. Introdução


Neste artigo, mostrarei como conectar o dosímetro AtomTag por meio do módulo Bluetooth Bluegiga BLED112 ao Raspberry PI para transferir os resultados da medição para o serviço de Monitoramento de Pessoas .

AtomTag - Dosímetro Bluetooth Low Energy para smartphone e tablet com contador Geiger SBM-20. O dispositivo transmitirá ao servidor: taxa de dose, erro estatístico e carga da bateria. No final do artigo, veremos como as leituras do dosímetro estão relacionadas a eventos climáticos.

(narodmon.ru) — SaaS ( , ) (, , ., , , ), - () .

Generic Attribute Profile (GATT)


O dosímetro AtomTag suporta o perfil GATT. Na terminologia Bluetooth, um perfil é um conjunto de recursos disponíveis para um dispositivo Bluetooth específico.

O perfil do GATT define a estrutura hierárquica do armazenamento de dados. A estrutura é mostrada na figura: Um



serviço é um contêiner que contém vários atributos chamados características. Todos os serviços possuem identificadores exclusivos UUID e HANDLE. Por exemplo, o dosímetro possui 2 serviços:

1. Um serviço para o usuário, que contém as características para ler os resultados da medição e registrar as configurações do usuário (configurações de alarme sonoro).

2)Um serviço que contém características para armazenar configurações de fábrica: fatores de calibração, nome do dispositivo etc.

Característica - consiste em:

1. Valores (geralmente não superiores a 20 bytes).

2. Descritor - aqui são descritos o objetivo da característica, o tipo de dados armazenados e as configurações da característica.

3. Identificador exclusivo UUID e HANDLE.
Os dados nos interessam: o número de pulsos registrados e a carga da bateria são armazenados exatamente nas características.

BLED112



O módulo é um dispositivo USB-CDC, definido no sistema como / dev / ttyACM0 e não requer a instalação de nenhum driver no Raspbian Jessie Lite com a versão 4.4 do kernel. A troca de dados com o módulo também é realizada como em uma porta serial. O protocolo de troca é binário. Nós não vamos escrever o analisador de protocolo, porque Existem muitos comandos para este módulo e tomam o SDK em C do fabricante. Um link para o SDK estará no final do artigo.

Raspberry PI Software


Vamos precisar dos seguintes arquivos do SDK:

1. cmd_defs.c, cmd_defs.h
2. apitypes.h
3. commands.c
4. uart.c, uart.c A

API é baseada em retorno de chamada. O arquivo commands.c declarou implementações stub para retornos de chamada não utilizados. O SDK define 2 tipos de mensagens que podem vir do módulo: o evento e o resultado da operação. Em nosso programa, receberemos dados do dosímetro usando alertas enviados pelo dosímetro a cada 2 segundos quando a característica de medição mudar. Como resultado, a cada 2 segundos, um evento do módulo ocorrerá e o retorno de chamada correspondente será chamado.

Vamos analisar o algoritmo para conectar e trocar dados com o dosímetro:

1. Abre a porta /dev/ttyACM0

2.Reiniciamos o módulo Bluetooth usando a função api ble_cmd_system_reset();

3. Conectamos ao dispositivo em seu endereço usando ble_cmd_gap_connect_direct()

4. Solicite a lista de serviços do dispositivo e os intervalos de valores que incluem as HANDLs das características desses serviços ble_cmd_attclient_read_by_group_type()

5. Após o evento, ble_evt_attclient_procedure_completedsolicitamos a lista de características usando ble_cmd_attclient_find_information().

6. No evento, ble_evt_attclient_find_information_foundlembre-se HANDLs da característica de medição e Descritor de Configuração de Características do Cliente (CCCD).

7. No evento, ble_evt_attclient_procedure_completedative alertas. No parágrafo anterior, reconhecemos o MANUSEIO do CCCD e podemos lê-lo ou escrevê-lo. Para habilitar as notificações, você precisa definir o sinalizador "notificações habilitadas" no descritor do CCCD usando a funçãoble_cmd_attclient_attribute_write(). Após desconectar do dispositivo, o valor desse identificador é redefinido.

8. Agora, ao alterar os valores das características do dispositivo, um evento será gerado ble_evt_attclient_attribute_value(const struct ble_msg_attclient_attribute_value_evt_t *msg). Você pode distinguir uma característica de outra pelo parâmetro: Defina a estrutura do valor da característica de medição:
msg->atthandle.



typedef struct __attribute__((__packed__)){
uint8 status_flags;
float dose; //    
float doserate_search; //    
uint16 pulses_last2sec; //-       2 
uint8 battery; //     0  100
uint8 temperature; //  
} atomtag_measurement_t;

atomtag_measurement_t measurement_char;

Como a ordem de bytes no valor da característica de medição é pouco endian, basta copiar todos esses bytes em uma estrutura compactada:

memcpy((uint8 *)&measurement_char, msg->value.data, msg->value.len);

A taxa de dose será calculada durante um intervalo de tempo de 6 minutos. Não enviaremos testemunhos para o servidor narodmon.ru mais de uma vez a cada 6 minutos. Além da taxa de dose, enviaremos uma carga de bateria e um erro estatístico. Todos os cálculos ocorrem no retorno de chamada ble_evt_attclient_attribute_value()no arquivo.As main.c.

leituras são enviadas para a porta 8283 narodmon.ru usando o protocolo tcp. A resposta do servidor não está marcada. Protocolo de texto:

#00:00:00:00:00:00\n
#R1#10.5#err = 10%, batt = 100%\n
##

Primeiro vem o endereço MAC do dispositivo (6 bytes). Na fonte, o endereço MAC é inserido por exemplo, não esqueça de alterá-lo! Além disso, onde 10,5 é a taxa de dose em μR / h, err é o erro estatístico.Compilado
tudo isso com gcc:

gcc -std=gnu99 -lm  main.c cmd_def.c commands.c uart.c web.c -o narodmon-bin

Para que o programa inicie automaticamente após o carregamento do sistema operacional, adicionei as seguintes linhas antes da saída 0 no arquivo rc.local:

cd /
./home/pi/narodmon/narodmon-bin /dev/ttyACM0 5c:31:3e:da:e8:9c

5c: 31: 3e: da: e8: 9c - endereço do dispositivo Bluetooth, que pode ser encontrado se você executar este programa com o parâmetro scan:

./narodmon-bin /dev/ttyACM0 scan

Resultados


Após alguns dias de operação do dispositivo, coisas interessantes apareceram nas paradas. Aqui você pode ver como a taxa de dose mudou durante a queda de neve. 11 de novembro às ~ 17: 00 ... 18: 00 horas, a chuva congelante parou e começou a nevar. À medida que a espessura da cobertura de neve aumentava, a taxa média de dose diminuía. O dosímetro é instalado a uma altura de 2 metros do solo.

A diminuição da taxa de dose é explicada pelo fato de que a camada de neve protege parcialmente a radiação gama natural na superfície da terra. Além disso, a camada de neve bloqueia o acesso do gás radônio à superfície, cujos produtos derivados podem ser detectados por um dosímetro convencional.

Agora podemos estimar a espessura da neve :) Naqueles dias, caíram cerca de 8 a 10 centímetros de neve. A fotografia aérea é praticada no mundo para avaliar a espessura da neve nas áreas onde as usinas hidrelétricas estão localizadas, a fim de entender que tipo de inundação esperar na primavera. Somente os espectrômetros gama com detectores de cintilação são utilizados devido à sua maior sensibilidade.

Uma imagem semelhante é observada nos outros dosímetros do serviço de monitoramento folclórico, embora nem todos eles forneçam dados com tanta frequência e não está claro quais algoritmos para calcular a taxa de dose são usados ​​lá.

O programa pode ser modificado adicionando um buffer no qual as leituras do dosímetro serão salvas quando não houver conexão com a Internet. A API de monitoramento de pessoas permite enviar leituras retroativamente. Também vale a pena conectar o raspberry pi à fonte de alimentação ininterrupta. Apesar da simplicidade do design, foi possível obter tempo de atividade por cerca de trinta dias. O dosímetro no mapa do monitoramento nacional pode ser encontrado aqui. Por favor, não chute - eu sou novo no linux.




Referências


1. Dosímetro AtomTag
2. Documentação SDK e Bluegiga BLED112
3. Serviço de monitoramento de pessoas
4. Bluetooth LE, especificações
5. Código-fonte do
programa para Raspberry PI

6. Aplicativo Android para Monitoramento de Pessoas

Source: https://habr.com/ru/post/pt399839/


All Articles