vendredi 26 septembre 2014

Aurora detector

En cours de rédaction...

En cherchant sur Internet 'Aurora detector', on tombe en premier sur le 'Pop-bottle detector' proposé par l'AuroraWatch UK de l'université de Lancaster; aussi connu sous le nom de 'jam-jar magnetometer'. Un aimant pendu à un fil dans une bouteille ou un pot de confiture se déplace au gré des fluctuations du champ magnétique ambiant. Les aurores étant liées aux perturbations du champ magnétique terrestre par le vent solaire, on essaye de détecter celles-ci au moyen de ce magnétomètre 'maison'. Ces perturbations étant faibles en Belgique, il convient d'amplifier le 'signal' pour en faciliter la mesure. Traditionnellement, on colle un petit miroir sur l'aimant, on l'éclaire par une source plus ou moins ponctuelle et on s'intéresse au 'spot' lumineux réfléchi sur un mur (un dixième de degré de rotation se traduit par un déplacement du spot de près d'un centimètre et demi à quatre mètres (4*tg(2*.1)=1.01396 (à vérifier...)). Le dispositif a la réputation d'être très sensible malgré sa simplicité : avec un fort aimant et un fin fil, on détecte le mouvement de voitures à plusieurs dizaines de mètres.

C'est amusant mais ce n'est pas très pratique. Il faudrait encore détecter les mouvement du spot lumineux pour l'enregistrer, générer une alarme, que sais-je encore... On trouve maintenant de petits magnétomètres dans les téléphones portables, les boussoles électroniques, les GPS,... On peut même acheter des kits comprenant le HMC5883L pour un peu plus d'un euro sur eBay (GY-271). Il s'interface facilement avec un Arduino ou un Raspberry Pi, les trois petits magnétomètres X-Y-Z fournissent leurs mesures sur 12 bits sur un bus i²c. Rien n'est plus simple à interfacer : 4 fils, quelques lignes de code et nous voilà avec un magnétomètres mesurant jusqu'à 8 gauss avec une résolution de 2 milligauss. Est-ce suffisant pour 'détecter les aurores'? Pas sûr. Le champ magnétique terrestre fait 500 mG... (il faudrait tester sans l'aimant et trouver des références expliquant que les perturbations peuvent atteindre 10% (où?))

Par contre, un truc amusant, c'est de placer ce détecteur dans le champ de l'aimant pendu au fil dans le bocal... L'idée, c'est que l'aimant va prendre sa place dans le champ ambiant tout en générant un champ beaucoup plus puissant et donc plus facile à mesurer. En fait, on s'intéresse à la variation du champ suite au déplacement infime de l'aimant (et on espère que ces variations seront facilement mesurables)...

Avec des aimants de disque dur, cela donne quelque chose comme :
Si on s'intéresse au spectre du signal avec GNU Octave (plotspec.m),
on trouve une oscillation de 4-5 secondes. Cela doit correspondre à l'oscillation naturelle de l'aimant au bout du fil. Sa période dépend du moment d'inertie de l'aimant et des forces de rappel qu'exercent le fil et l'interaction des champs magnétiques. Si on zoome sur le graphique, on observe bien les oscillations.
Dans ce cas-ci, je prends (environ) deux mesures par seconde. La fréquence d'échantillonnage n'est pas exactement 2 Hz parce que l'interrogation boucle dans un script qui relance chaque fois le programme... Pour l'instant, ce n'est pas très important, c'est donc 'bon assez'. À noter que cette technique de mesure a certaines conséquences : on ne mesure pas le champs instantané, on ne risque pas de louper une brève perturbation pour autant qu'elle ait un effet sur le pendule qui réagit comme une balançoire : on peut pousser dans le sens du mouvement ou à contre-temps. Ensuite, on a tout le temps pour prendre la mesure, le bidule oscille autour du champ non perturbé (-> balance de pharmacien; on n'attend pas que l'oscillation s'arrête, on la centre (?)).

Si on analyse le résultat global, sur ces 10 premières heures, je ne détecte pas vraiment d'aurores mais beaucoup de perturbations locales : fortes, des passages de voitures vers/de l'arrière de l'immeuble pendant les heures de bureaux et moyennes, les véhicules qui passent dans la rue; cela se calme en soirée; c'est encore plus calme pendant la nuit et reprend le matin. À noter que ces voitures passent d'ouest en est dans la rue et (principalement) du nord au sud le matin et du sud au nord à 17 heures dans le passage latéral (où les camions, bus,... ne peuvent pas passer).

On note quand même une tendance à la baisse. Mais, on ne peut pas vraiment savoir si c'est le fil qui s'allonge sous la fatigue, une modification de l'hygrométrie, de la température ou un autre phénomène. Il faut aussi noter que le bidule est sur la table du salon au milieu de la pièce et que les pas sur le plancher laissent probablement également leur empreinte. On note également que l'oscillation est amortie mais c'est très lent, il est très rare qu'elle s'amortisse suffisamment pour noyer le signal dans le bruit du capteur avant qu'une nouvelle perturbation du champ ne vienne remettre l'aimant en mouvement. Il faut encore apprendre à connaître, apprivoiser le dispositif...

D'où l'intérêt de lancer une plus longue campagne de mesure...
Elle court pendant une semaine et un jour (du 23 septembre à 15:37 jusqu'au 30 septembre mi-journée + un jour sans bocal). La présence de l'aimant dans le bocal amplifie bien le signal (XYZ devient quasi plat quand on retire le bocal, il n'y a pas une simple modification de la direction; à noter que les autres directions saturaient avec l'aimant). On observe les entrées/sorties de voitures dans le passage latéral (une vingtaine (?) de voitures chaque fois). Le reste, c'est du trafic dans la rue (il faudrait que je me procure un horaire des bus...). Notez que le 27 est un samedi et qu'il n'y a pas d'entrées massives vers les bureaux dans le passage latéral. Mais, ce que l'on observe aussi, c'est une variation de grande ampleur. En fait, pour le moment, SpaceWeather montre des aurores. Le NOAA NOAA's Space Weather Prediction Center affiche
Le graphe ne redescend pas, cela semble dû au vieillissement de quelque chose qui se laisse aller (?)... (Entre-temps, je pourrais vérifier que la fréquence d'oscillation est restée constante, ce qui aurait tendance à indiquer que ce n'est pas lié au fil mais c'est vrai qu'un changement dans l'intensité du champ va aussi provoquer une modification de la fréquence...).

Quand la nuit est calme, on peut observer l'amortissement des oscillations. Cela met vraiment très longtemps. Après une perturbation à 03h17 le 28/09, on peut toujours percevoir les oscillations 40 minutes plus tard (?) (sans que l'on puisse percevoir d'autres perturbations).
En fait, c'est la méthode utilisée lors des premières études du magnétisme terrestre à la fin du XVIII-ième siècle. Notamment par Robert de Lamanon lors de l'expédition de La Pérouse. La force du champ magnétique dépend de la latitude. Cela se traduit par des oscillations plus lentes à l'Équateur qu'aux latitudes plus élevées. Y-a-t-il bien un lien entre la déviation et l'apparition d'aurores? Il semble que oui. Par exemple, lors de l'aurore du 21 octobre 2001, en Belgique, on peut observer une déviation à l'observatoire de Chambon-la-Forêt et à Wingst (pas de mesures à Dourbes (plus proche) à cette époque). Ces déviations sont rares, très rares, exceptionnelles à nos latitudes, d'ordinaire, c'est le calme plat.

En empilant un tas de petits cylindres au néodium et en le pendant à une fibre extraite d'un lacet, on peut observer l'inclinaison magnétique. L'inertie du bareau étant plus importante, la période d'oscillation augmente quand on l'allonge.

À suivre...

Parmi les trucs à regarder de près, la géométrie de l'aimant, le type et la longueur du fil, la position du capteur pour maximiser la dynamique en fonction du mouvement (mais sans saturer). À noter que si on plonge l'aimant dans un bain d'huile, l'amortissement des oscillations est radical mais la sensibilité disparaît également. Évaluer (par calcul quand j'aurai un aimant plus orthodoxe) le moment d'inertie et les forces de rappel (par mesure des périodes avec des barreaux similaires (aimanté et non aimanté).

Bref, plein de trucs intéressants à faire pour quelques euros... ;-)

lundi 15 septembre 2014

Filtrons avec Octave

Chipotons un peu avec GNU Octave (MATLAB)... Je m'étais intéressé, il y a quelques mois à la détection des signaux faisant basculer les compteurs électriques bihoraires au moyen d'un simple fil sur le connecteur microphone d'un PC. Je vais utiliser un bout de fichier pour faire du 'traitement de signal' (filtrage numérique).
$ echo 'date "+%g%m%d.%H%M%S"' > now; chmod +x now
$ arecord -f S16_LE -t raw -r 25000 > 25000.`./now`
$ dd if=25000.131204.064758 of=sample.raw bs=1000 count=5 skip=1
$ sox -r 25000 -e signed -b 16 -c 1 sample.raw sample.wav
Et dans Octave,
x = wavread('sample.wav');
y = x - mean(x);   # remove the DC component
plot(y)
print -dpng 'bzzz_50Hz.png'
donne
et
plotspec(y, 1/25000)
print -dpng '50Hz_spectrum.png'
donne
On voit (ou pourrait voir en zoomant avec le bouton de gauche de la souris) que la composante principale du spectre se trouve à +/- 50 Hz mais que l'on trouve des harmoniques avec une magnitude atteignant 10% de la composante principale. Ce n'est probablement pas la bonne manière de faire (?) mais le but est ici de jouer avec les fonctions de filtrage de MATLAB/GNU Octave. Par exemple, éliminons les harmoniques avec un FIR :
b = fir1(120, 0.0035);
z=filter(b, 1, y);
clf;
plotspec(z, 1/25000);
print -dpng 'spectrum_50Hz_filtered_FIR_120_0.0035.png'
donne
La réponse fréquentielle du filtre nous est donnée par :
clf;
freqz(b, 1, 512, 'half', 25000);
print -dpng 'filter_FIR_120_0.0035.png'
Essayons d'isoler l'harmonique à 250 Hz en concevant un FIR avec remez() (firpm() dans MATLAB. On spécifie la réponse fréquentielle approximative que l'on désire au moyen de deux vecteurs (fréquences/réponses) :
f = [0 0.03 0.04 1];
a = [0 1    0    0];
w = [1 1];
b = remez (120, f, a, w);
clf;
freqz(b, 1,512,'half',25000);
print -dpng 'remez.120_0-1-0-0_0-.03-.04-1_freq.png'
z=filter(b, 1, y);
clf;
plot(z);
hold on;
plot(y, 'r');
print -dpng 'remez.120_0-1-0-0_0-.03-.04-1_result.png'
donne
et
Le filtre n'est pas très sélectif mais le 250 Hz ressort bien (en bleu).


...En cours de rédaction / y-a un truc qui cloche...
Le 0.0035 passé à 'fir1()' est à comparer avec 50/(25000/2) ('fréquence normalisée'), on coupe un peu dans le 50Hz, cela aurait dû être supérieur à 0.004 (50/12500) (?). La pente du filtre n'est pas extraordinaire, on est à -10 dB à 250 Hz...