Nous connectons un dosimètre de rayonnement sans fil au service «People’s Monitoring» via Raspberry PI

Présentation


Dans cet article, je vais vous expliquer comment connecter le dosimètre AtomTag via le module Bluetooth Bluegiga BLED112 au Raspberry PI afin de transférer les résultats de mesure au service People Monitoring .

AtomTag - Dosimètre Bluetooth Low Energy pour smartphone et tablette avec compteur Geiger SBM-20. L'appareil transmettra au serveur: débit de dose, erreur statistique et charge de la batterie. À la fin de l'article, nous verrons comment les relevés du dosimètre sont liés aux événements météorologiques.

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

Generic Attribute Profile (GATT)


Le dosimètre AtomTag prend en charge le profil GATT. Dans la terminologie Bluetooth, un profil est un ensemble de fonctionnalités ou de capacités disponibles pour un appareil Bluetooth spécifique.

Le profil GATT définit la structure hiérarchique du stockage des données. La structure est illustrée dans la figure: Un



service est un conteneur qui contient plusieurs attributs appelés caractéristiques. Tous les services ont des identifiants uniques UUID et HANDLE. Par exemple, le dosimètre a 2 services:

1. Un service pour l'utilisateur, qui contient les caractéristiques pour lire les résultats de mesure et enregistrer les paramètres utilisateur (paramètres d'alarme sonore).

2.Un service qui contient les caractéristiques de stockage des paramètres d'usine: facteurs d'étalonnage, nom de l'appareil, etc.

Caractéristique - se compose de:

1. Valeurs (généralement pas plus de 20 octets).

2. Descripteur - ici le but de la caractéristique, le type de données stockées, ainsi que les paramètres de la caractéristique sont décrits.

3. Identifiant unique UUID et HANDLE.
Les données qui nous intéressent: le nombre d'impulsions enregistrées et la charge de la batterie sont stockés exactement dans les caractéristiques.

BLED112



Le module est un périphérique USB-CDC, qui est défini dans le système comme / dev / ttyACM0 et ne nécessite l'installation d'aucun pilote sur Raspbian Jessie Lite avec la version 4.4 du noyau. L'échange de données avec le module s'effectue également comme avec un port série. Le protocole d'échange est binaire. Nous n'écrirons pas l'analyseur de protocole nous-mêmes, car Il y a beaucoup de commandes pour ce module et prenez le SDK en C du fabricant. Un lien vers le SDK sera à la fin de l'article.

Logiciel Raspberry PI


Nous aurons besoin des fichiers suivants du SDK:

1. cmd_defs.c, cmd_defs.h
2. apitypes.h
3. commandes.c
4. uart.c, uart.c L'

API est basée sur le rappel. Le fichier commandes.c a déclaré des implémentations de stub pour les rappels inutilisés. Le SDK définit 2 types de messages pouvant provenir du module: l'événement et le résultat de l'opération. Dans notre programme, nous recevrons des données du dosimètre à l'aide d'alertes envoyées par le dosimètre toutes les 2 secondes lorsque la caractéristique de mesure change. Par conséquent, toutes les 2 secondes, un événement du module viendra et le rappel correspondant sera appelé.

Analysons l'algorithme de connexion et d'échange de données avec le dosimètre:

1. Ouvre le port /dev/ttyACM0

2.Nous redémarrons le module Bluetooth à l'aide de la fonction api ble_cmd_system_reset();

3. Nous nous connectons à l'appareil à son adresse à l'aide de ble_cmd_gap_connect_direct()

4. Demandez la liste des services de l'appareil et les plages de valeurs qui incluent les HANDL des caractéristiques de ces services ble_cmd_attclient_read_by_group_type()

5. Après l'événement, nous ble_evt_attclient_procedure_completeddemandons la liste des caractéristiques à l'aide de ble_cmd_attclient_find_information().

6. Dans l'événement, ble_evt_attclient_find_information_foundsouvenez - vous HANDL de la caractéristique de mesure et du descripteur de configuration des caractéristiques du client (CCCD).

7. Dans ce cas, ble_evt_attclient_procedure_completedactivez les alertes. Dans le paragraphe précédent, nous avons reconnu la POIGNÉE du CCCD et pouvons le lire ou l'écrire. Pour activer les notifications, vous devez définir l'indicateur «notifications activées» dans le descripteur CCCD à l'aide de la fonctionble_cmd_attclient_attribute_write(). Après la déconnexion de l'appareil, la valeur de cette poignée est réinitialisée.

8. Maintenant, lorsque vous modifiez les valeurs des caractéristiques de l'appareil, un événement sera déclenché ble_evt_attclient_attribute_value(const struct ble_msg_attclient_attribute_value_evt_t *msg). Vous pouvez distinguer une caractéristique d'une autre par le paramètre: Définissez la structure de la valeur de la caractéristique de mesure:
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;

Étant donné que l'ordre des octets dans la valeur de la caractéristique de mesure est peu endian, il suffit de copier tous ces octets dans une structure compactée:

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

Le débit de dose sera calculé sur un intervalle de 6 minutes. Nous n'enverrons pas de témoignages au serveur narodmon.ru plus d'une fois toutes les 6 minutes. En plus du débit de dose, nous enverrons une charge de batterie et une erreur statistique. Tous les calculs ont lieu dans le rappel ble_evt_attclient_attribute_value()dans le fichier Les main.c.

lectures sont envoyées au port 8283 narodmon.ru en utilisant le protocole tcp. La réponse du serveur n'est pas vérifiée. Protocole de texte:

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

Vient d'abord l'adresse MAC de l'appareil (6 octets). Dans la source, l'adresse MAC est introduite pour un exemple, n'oubliez pas de la changer! De plus, où 10,5 est le débit de dose en μR / h, err est l'erreur statistique.
Compilé tout cela avec gcc:

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

Pour que le programme démarre automatiquement après le chargement du système d'exploitation, j'ai ajouté les lignes suivantes avant de quitter 0 dans le fichier rc.local:

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

5c: 31: 3e: da: e8: 9c - adresse du périphérique Bluetooth, qui peut être trouvée si vous exécutez ce programme avec le paramètre de scan:

./narodmon-bin /dev/ttyACM0 scan

Résultats


Après quelques jours de fonctionnement de l'appareil, des éléments intéressants sont apparus sur les graphiques. Ici, vous pouvez voir comment le débit de dose a changé pendant les chutes de neige. Le 11 novembre à ~ 17: 00 ... 18: 00 heures, la pluie verglaçante s'est arrêtée et il a commencé à neiger. À mesure que l'épaisseur de la couche de neige augmentait, le débit de dose moyen diminuait. Le dosimètre est installé à une hauteur de 2 mètres du sol.

La diminution du débit de dose s'explique par le fait que la couche de neige protège partiellement le rayonnement gamma naturel à la surface de la terre. De plus, la couche de neige bloque l'accès du radon à la surface, dont les produits filles peuvent être détectés par un dosimètre conventionnel.

Maintenant, nous pouvons estimer l'épaisseur de la neige :) À cette époque, environ 8 à 10 centimètres de neige sont tombés. La photographie aérienne est pratiquée dans le monde pour évaluer l'épaisseur de neige dans les zones où se trouvent les centrales hydroélectriques, afin de comprendre à quel type d'inondations il faut s'attendre au printemps. Seuls les spectromètres gamma avec détecteurs à scintillation sont utilisés en raison de leur plus grande sensibilité.

Une image similaire est observée sur les autres dosimètres du service de surveillance folklorique, bien que tous ne fournissent pas des données si souvent et que l'on ne sache pas quels algorithmes de calcul du débit de dose y sont utilisés.

Le programme peut être modifié en ajoutant un tampon dans lequel les lectures du dosimètre seront enregistrées en l'absence de connexion Internet. L'API People’s Monitoring vous permet d'envoyer des relevés rétroactivement. Il vaut également la peine de connecter le raspberry pi à l'alimentation sans coupure. Malgré la simplicité de la conception, il était possible d'obtenir un temps de fonctionnement d'environ trente jours. Le dosimètre sur la carte de la surveillance nationale peut être trouvé ici. S'il vous plaît ne coup pas - je suis nouveau sur Linux.




Les références


1. Dosimètre AtomTag
2. Documentation SDK et Bluegiga BLED112
3. Service de surveillance des personnes
4. Bluetooth LE, spécifications
5. Code source du
programme pour Raspberry PI

6. Application de surveillance des personnes pour Android

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


All Articles