menu home
 
  Derniers projets :

•   Serveur mail Postfix/Dovecot sur Raspberry Pi sous Raspbian

•   Circuit vidéo anti-Macrovision / Macrovision remover

•   Indicateur de niveau d'humidité de la terre pour plante

•   Récupération consommation EDF via Raspberry Pi

•   Station Météo avec Raspberry Pi

•   ...

[ Voir la suite ... ]    

 
  Derniers projets :

•   Manipuler les GPIO d'un RaspberryPi sous Raspbian en Java

•   Programme pour le convertisseur impulsions téléphoniques en signal DTMF pour téléphone à cadran

•   ...

[ Voir la suite ... ]    

 
  •   Cathode Corner
 
•   Kosbo
 
•   Semageek
 
 
a propos
 
contact
 
  categorie
  Station Météo avec Raspberry Pi
  > Capteurs, Raspberry Pi
img avancement
Commencé le 07/01/2014 à 23:10  
Mis à jour le 06/10/2014 à 22:42  


Cela faisait un moment que je voulais me faire une station bien complète, je regardais par-ici et par-là sur le web ... Puis, j'ai commencé, il y a un mois, à regarder les Raspberry Pi.

Depuis, je ne cesse pas de me dire que ce sont comme de gros microcontrôleurs surpuissant !



Le circuit du "Thermomètre électronique 2" (ici) avait une sortie numérique mais celle avait une précision de 1°C avec uniquement la température et il fallait un PC, type tour, tout le temps en marche à coté avec un port LPT, une connectique qui n'est plus du tout courante désormais.

Avec le Raspberry Pi, je peux le laisser en marche, il ne consomme que 3-4W, il possède des entrées numériques facilement accessibles que ce soit en script console ou programme compilé et grâce à la communauté qui existe autour de ce petit ordinateur, on peut facilement trouver des scripts existants qu'on peut modifier pour soit même !

Mon Raspberry Pi utilisant Rasbian, un dérivé de Debian pour processeur ARM, je me suis imaginé que je pourrais construire quelque chose qui relèverait des informations sur la météo et qui enverrais à un ordinateur suffisamment puissant en vue de les traiter, et, éventuellement, de faire une petite prévision météo sur base statistique.



Bref, je me suis lancé dans l'aventure et j'ai commencé des tests !







Hardware :

J'ai d'abord un simple circuit avec température, pression atmosphérique et hygrométrie. Pour la température et l'humidité, j'ai utilisé un capteur RHT03, et pour la pression atmosphérique, j'ai utilisé un module BMP085.

Mon test était simple, un Raspberry Pi branché sur secteur via son entrée micro-USB et une plaque d'essai, le tout dehors à l'abri de la pluie :

img



Plusieurs problèmes sont survenus :

- Si le capteur reçoit un reflet de soleil (via la vitre d'une fenêtre par exemple), les valeurs sont faussés car le reflet chauffe le capteur de température. (20°C l'après midi ? on sentait qu'il faisait froid, c'était bizarre) : donc mettre à l'ombre

- L’alimentation des ports USB pour connecter une clé Wifi ou un clavier est insuffisante sur le Raspberry Pi, manque d'intensité. Impossible d'utiliser une clé Wifi, la connexion ne tenais que quelques secondes et à moins d'1 mètre de ma box. Si j'utilisais un clavier avec rétroéclairage (type Logitech G15), j'avais des traits sur l'image vidéo analogique (prise jaune) voir une instabilité du circuit, il m'est arrivé que le Raspberry redémarre juste en branchant le clavier. Dans mon projet, j'ai donc utilisé une alimentation séparé pour le Raspberry, une autre pour un port USB et une dernière pour le 2e port USB.

- Autre problème auquel je ne m'attendais pas, comme vous voyez sur l'image, il faisait assez froid à cette période. A cause du froid, la SD a lâche au bout de ... 1 semaine ! (Elle est vraiment morte, plein de secteurs défectueux) Et je n'avais pas encore fait d'image de la carte vu que j'étais encore un période de test ... Je ne pensais pas que ça allait lâcher si vite ! Maintenant, à chaque fois que je termine quelque chose dessus (configuration, programme qui fonctionne ...), je fait une image de la carte. Ça fait 4Go à chaque fois, mais au moins je suis tranquille. Dans la version finale, vu qu'on est dans un boitier et qu'on a des régulateurs de tensions qui chauffe, une certaine température est maintenu à l'intérieur du boitier. Ce qui est bien pour les cartes SD qui n'ont pas l'air d'aimer le froid ...

- Un dernier problème, qui n'est pas encore arrivé, mais qui a des chances dans futur : chez moi, j'ai des micro-coupures tous les mois ! Tellement que j'ai du acheter un onduleur pour mon PC et mon NAS ! Je crains que l'OS du Raspberry subisse des dégâts à force de redémarrer de façon inattendue. Une solution avec une batterie a été utilisée dans ma réalisation.


Après analyse de tous ces problèmes, j'ai commencé la construction. Mais j'ai aussi pensé ajouter autre chose de pas très courant dans une station météo : un compteur Geiger ! Cela faisait longtemps que j'avais des tubes (des russes SI-29BG) mais je n'avais pas encore trouvé d'utilité, hormis pour un compteur Geiger basique. De plus, avec ces nuages radioactifs qui passent suite à des centrales nucléaires qui explosent (Tchernobyl, Fukushima ...) et les médias qui font en sorte d'en parler le moins possible, je préfère avoir mes propres relevés pour savoir ce qui se passe. Ce tube utilisant une tension de 400V pour pouvoir fonctionner, j'ai donc dû améliorer mon alimentation pour tube Nixie (ici) pour augmenter ses performances : j'ai pu arriver à faire un circuit capable de produire jusqu'à 600V ! Le tube génère une impulsion à chaque fois qu'il détecte un élément radioactif qui s'est désintégré. Un compteur CD4024 permet de compter ces impulsions pour être ensuite récupérés via le script de comptage dans le Raspberry.



Et donc voici le résultat :
img
img



Les schémas des circuits :
img
img



Software :

Maintenant au niveau software, je me suis basé sur les codes téléchargeable d'Adafruit pour manipuler en C le RTH03 et en Python le BMP085, que j'ai légèrement modifiés.

capteur_RHT03.c

pression.py qui utilise Adafruit_BMP085.py

Pour le compteur Geiger, j'ai du créer moi-même le programme en script Shell Linux pour utiliser les GPIO et récupérer le niveau de radiation en Becquerel(Bq) (1 Bq = 1 désintégration d'un atome) par minute. Je compte les désintégration pendant 4 minutes pour je fais une moyenne dans un fichier.

comptage_geiger.sh

Toutes ces données sont ensuite enregistrés toutes les 5 minutes via une tâche planifiée (tâche CRON) dans une base de données MySQL dans le Raspberry avant d'être envoyés via un webservice en PHP à mon NAS (qui est un PC standard avec du RAID 10 sous Ubuntu 12.04 LTS avec un Core i3) en vue d'être stockés pour une future exploitation !

enregistrer_valeurs.sh

client_webservice.php

Vu la moyenne fiabilité des cartes SD, les données ne sont pas stockés de manière définitive sur le Raspberry. Au final, la base MySQL du Raspberry sert surtout de tampon en cas de coupure du réseau ou s'il n'arrivais pas à envoyer les données par webservice.



Tous les scripts et exécutables pour Raspberry sont récupérables ici -> Station_meteo.zip
Le serveur de webservice -> Serveur_webservice.zip
(Le webservice semble complexe mais il est voué à être utilisé avec d'autres outils, pas uniquement la station météo)


Edit du 19/01/2014 :

Suite à d'étranges relevés de températures, 15°C au lieu de 8°C par exemple, je me suis rendu compte que la chaleur produite par les composants dans le boitier (régulateurs, CPU Raspberry) provoquait un dégagement de chaleur qui était capté par le capteur de température RHT03 vissé au boitier, je l'ai donc détaché et les relevés semblent désormais normaux.
img


Exemple de relevés :
img



Edit du 06/10/2014 :

Suite à de multiples problèmes de cartes SD qui finissent par lâcher avec le temps (la plus courte à duré 3 semaine et la plus longue 6 mois), j'ai décidé d'utiliser un disque dur externe pour contenir l'OS. Mais le Raspberry boot obligatoirement sur la carte SD donc j'ai laissé la partition de boot sur la carte (partion DOS d'environ 50 Mo) et j'ai copié la partition Linux ext4 sur un disque dur externe branché en USB.

L'opération est la suivante :

1) Branchez le disque dur en USB, vous devriez pouvoir le voir si vous faites un ls /dev/sd* :

img


2) Utilisez la commande sudo cfdisk /dev/sdX (où X la lettre de votre lecteur) pour utiliser le partionneur de disque dans la console. Créez une partition de disque de type Linux (type 83) et enregistrez vos modifications.

img


3) Formatez la partition avec la commande sudo mkfs.ext4 /dev/sda1 (si sda1 est votre partition).

4) Inspectez la liste des partitions en faisant sudo blkid et répérez la partition root. C'est celle-ci qui contient le répertoire racine que vouz allez copier.

img


5) Faites ensuite une copie de cette partition de la carte SD vers la partition sur le disque dur en utilisant la commande sudo dd if=/dev/mmcblk0p2 of=/dev/sda1 bs=4.

6) Modifiez le fichier /boot/cmdline.txt avec votre éditeur préféré en remplaçant root=/dev/mmcblk0p2 par root=/dev/sda1.

7) Montez la partition du disque à un endroit. Ici, dans /media/root_sd en faisant :


8) Modifiez le fichier /etc/fstab (ici /media/root_sd/etc/fstab) en commantant la ligne de l'emplacement racine sur la carte SD et ajouter une nouvelle ligne pour que la racine soit prise sur le disque dur :

9) Faire un reboot du Raspberry en faisant sudo reboot et, si tout va, il démarre maitenant sur le disque.



Cette solution devrait contrer le problème des cartes SD qui ont une durée de vie réduite du fait de leur nombre de cycle d'écriture limité mais je ne sais pas si le disque dur va arriver à tenir dehors l'hiver prochain avec des températures négatives ... On vera bien ! :D


    Aucun commentaire
Commencé le 07/01/2014 à 23:10  
Mis à jour le 06/10/2014 à 22:42  

Nom:  
E-Mail:  
Site Web:  

 
Vérification:  
 
Recopiez les lettres/chiffres et donnez le résultat du calcul :
captcha


 


JLR's Blog   |   Programmation et design: JLR   |   Version 2.0   |   Généré en 0.027 seconde(s)