Voici un petit bricolage autour d'un Arduino UNO pour détecter la foudre (et autres parasites électromagnétique). D'autres cartes du même type feraient l'affaire du moment qu'il y a un convertisseur Analogique/Digital. L'idée est de relier une antenne directement à l'entrée analogique et de voir ce que ça donne. C'est le tout premier pas vers ce que l'on appelle la Radio logicielle ou encore SDR: Sofware Define Radio.
Rappels:
- Le convertisseur A/D du UNO permet de mesurer sur 10 bits une tension comprise entre 0 et 5 volts. Donc 0 Volts = 0 ... 2.5 Volts = 512 ... 5 Volts = 1023.
- Une éclair émet un rayonnement électromagnétique dans le bande de
fréquence 1 Hz - 300 Mhz et aussi dans la bande de fréquence du
visible. Si l’éclair atteint le sol, on parle de foudre, et une
impulsion supplémentaire dan la bande VLF est émise au environ de 10 kHz. C'est elle que
l'on cherche à détecter.
- Afin d'analyser l'onde captée avec le plus de fidélité possible il faut
échantillonner le plus souvent possible. Si la fréquence
d'échantillonnage est Fech la fréquence maximum mesurable sera Fech/2 (théorème de Nyquist-Shannon). Donc moins on passera de temps entre deux mesures successives plus la fréquence maximale mesurable sera élevée.
La première chose que l'on constate est la nécessité de créer un offset de tension sur l'entrée A/D afin de pouvoir mesurer des variations de tension positives et négatives. C'est le rôle du potentiomètre POT1 de 20 Ko. Le but est de régler POT1 pour que la valeur mesurée 'au repos' soit proche de 512. Ainsi une variation positive de tension donnera une valeur entre 512 et 1024 et une variation négative donnera une valeur entre 512 et 0. Le potentiomètre POT2 de 3 Mo permet de régler l’atténuation du signal capté (il ne faut pas saturer l'entré du convertisseur).
- Au démarrage, pendant 20 secondes, il mesure la valeur moyenne que la broche du convertisseur A/D et l'envoi sur le port USB. De plus si la valeur est < 512 il éteint la led du UNO et si la valeur est > 512 il allume la led. Ces 20 secondes sont l’occasion d'ajuster POT1 pour recevoir sur le port USB une valeur proche de 512 et avoir la led du UNO qui frétille. L’idéal est d'avoir l'antenne débranché pendant cette étape. Voir fonction calibrate().
- En envoyant beaucoup de données pendant la boucle principale loop() j'ai eu des problèmes de perte de données. Avant Serial.print() j'utilise donc systématiquement la fonction ws() pour m'assurer qu'il y a suffisamment de place dans le buffer de transmission.
- Les valeurs lues sur le convertisseur A/D sont stockées dans une file circulaire de N éléments. Les nouvelles valeurs remplaçant les plus anciennes. Quand une événement est détecté (valeur dépassant la moyenne de plus ou moins 30%) on garde les N/3 échantillons précédant cet événement et on capture les 2N/3 échantillons suivants puis on envoi les N échantillons via le port USB et on fait sonner le buzzer. Ainsi on n’envoie sur le port USB une série de N valeurs contenant à coup sur un événement.
- Pour maximiser la vitesse d'échantillonnage le boucle principale n'utilise pas analogRead() car cette fonction est bloquante. Pour gagner quelques cycles le démarrage et la détection de fin de conversion sont gérés à la main. Ce code permet de faire environ 7400 échantillonnages par secondes : 7.4 kHz soit 135µs entre deux conversions.
Exemples :
Les valeurs envoyées sur le port USB du UNO sont
- capturées avec PuTTY (qui a la possibilité de sauver une session),
- nettoyées du superflus et sauvées avec l’extension .csv
- importées dans un tableur pour générer un graphe.
Note: L'IDE Arduino est capable de faire des graphiques à partir des valeurs reçues sur le port usb mais on ne peut pas sauver ces valeurs ni faire varier l’échelle du temps ni revenir en arrière dans la visualisation. D’où l'utilisation d'un tableur.
Remarques:
- La ligne rouge (660) est le seuil de détection des événements (foudre).
- A,B,C,E,F sont des événements réels capturés, en D le doigt était posé sur l'antenne.
- Comme rien n'est transmis quand il n'y a pas de pics au dessus de 660 il peut s’être écoulé plusieurs minutes en les événements A,B,C,E,F présentés ici.
- Dans la zone 'F' la 'porteuse' de 50 Hz était mieux captée et dépassait systématiquement la valeur 660 sans que pour autant il y ai de véritables événements. Il faudrait perfectionner le code pour détecter les pics non pas par leur valeurs mais par leur fréquence (vitesse de variation du signal).
Autre exemple avec dépassements supérieurs et inférieurs :
Réseaux de détection de foudre
Ces réseaux utilisent bien sur un système de détection bien plus sophistiqué que celui présenté ici.
- Blitzortung réseau communautaire de détection. Récepteur en kit.
- Meteorage (Filiale de Météo France)
- Le 'World Wide Lightning Location Network' de l’université de Washington
Autre technique
Les fréquences radio que l'on cherche à échantillonner pour détecter la foudre sont très faibles. Au point que des cartes prévues pour échantillonner des signaux sonores peuvent être utilisées; Les cartes d'acquisition son échantillonnent à 44 kHz ou 48 kHz et fournissent un flux numérique en USB. Il faut utiliser un adaptateur entre l'antenne et l'entrée micro et un logiciel pour analyser le flux numérique : SAQrx. est l’outil parfait pour cela. Voir ce cas pratique par F6ACU.