Station météo à base d’Arduino

Grâce aux nombreux capteurs compatibles avec l’Arduino, il devient très facile de construire une station météo complète. Voici comment procéder.

Les composants

Pour réaliser sa station météo, il faut tout d’abord choisir ce que l’on souhaite enregistrer. J’ai opté pour la température, l’humidité et la pression atmosphérique. On pourrait aussi songer à la quantité de précipitation, à la luminosité, au taux d’oxygène, etc. Le tout est de trouver le bon composant. Attention tout de même au nombre limité de pins sur votre Arduino. Au delà d’un certain nombre de capteurs, il faudra recourir à d’autres composants permettant d’augmenter le nombre d’entrées/sorties de l’Arduino. Ici, on souhaite conserver un montage simple, voici les composants que l’on a utilisés:

– pour la pression, un BMP085

BMP085

– pour l’humidité, un DHT22

large_DHT22

L’avantage de ces deux capteurs est qu’ils embarquent un capteur de température utilisé pour leur propre compensation. Celui du BMP085 est le plus précis, mais on enregistrera tout de même les données du DHT22.

Maintenant que nous avons les capteurs, il faut de quoi enregistrer les données et savoir à quelle heure on les enregistre. On opte pour :

– un breakout pour carte SD pour stocker les mesures

SD Breakout

– un composant appelé TinyRTC pour Real Time Clock

tiny-rtc

Au coeur de tout ça, on rajoute un ATMEGA 328P que l’on utilisera avec son oscillateur interne à 8MHz pour simplifier encore le montage. Pour l’alimentation, on souhaite pourvoir alimenter avec une batterie 9V, on rajoute donc un LM075 qui se chargera de la partie régulation.

Ensuite, on souhaite pourvoir régler la date et visualiser les valeurs des capteurs sans l’intermédiaire d’un ordinateur. On rajoute donc un écran LCD de Nokia 5110 sur un breakout ainsi que quelques boutons poussoirs pour interagir avec l’ATMEGA.

IMG_2402

Quelques résistances pour assurer les conversions 5/3.3 volts et le tour est joué, il ne reste plus qu’à effectuer les branchements.

Branchements

Avant de souder le tout définitivement, on travaille avec un Arduino Uno sur une plaque de prototypage. Pour effectuer le câblage, on remarque que la RTC et le BMP085 communique tous deux avec le protocole I2C, ce qui nécessite une unique boucle de câblage via les ports SDA et SCL de ces deux unités.

Pour la carte SD, le protocole est un peu plus coûteux en câble et en pins, puisque en plus de l’alimentation, il faut compter 4 pins (MISO, MOSI, CS, SCK).

Le DHT22 est de loin le plus économique avec un seul pin pour la mesure.

On modifie légèrement le TinyRTC en dessoudant la diode et en branchant directement l’alimentation sur l’emplacement la pile bouton. En effet, ce composant est censé fonctionner avec une pile bouton rechargeable, assez difficile à se procurer, et de toute manière, dans ce montage, l’alimentation sera toujours disponible au moins pour alimenter l’Arduino.

Le reste des pins disponibles de l’Arduino nous sert à envoyer un affichage sur l’écran LCD et à récupérer les infos de 4 boutons poussoirs.

Voici le câblage avec un Arduino Uno sans l’écran LCD et les boutons poussoirs. Ce montage permet déjà de réaliser les mesures et les enregistrer sur une carte SD :

WeatherStation

Code et librairies

Concernant la partie programmation, le plus difficile est de trouver les bonnes librairies qui permettent de communiquer avec toutes les unités. Voici le choix que j’ai effectué:

– Tiny RTC: la librairie d’Adafruit disponible ici

– SD Breakout: la librairie SD disponible dans l’IDE Arduino et réalisée par Sparkfun

– DHT22: la librairie réalisée par Adafruit disponible ici

– BMP085:la librairie réalisée par Adafruit disponible ici

On se rend compte que le nombre élevé de composants signifie également un nombre élevé de librairies. Cela peut devenir gênant à la fois au niveau du nombre de pins disponibles qu’au niveau de la mémoire disponible pour charger le programme et les librairies. C’est donc un paramètre à prendre en compte au plus tôt de la conception.

Ensuite, il ne reste qu’à initialiser les capteurs en leur affectant les bons pins et boucler sur la prise de mesure et l’écriture sur la carte SD. Sitôt la mesure effectuée, on met l’ATMEGA en veille pour une minute. Comme on ne réveille pas l’ATMEGA par une interruption extérieure, on ne peut autoriser que des veilles de 8 secondes maximum. On les enchaîne jusqu’à atteindre une minute. La boucle reprend pour la mesure suivante.

Voici le code complet que l’on charge directement sur l’ATMEGA (faire défiler pour voir l’intégralité du code):

Finalisation

Il est temps de rendre définitif le montage pour une utilisation en extérieur.

On opte pour deux boîtier en plastique rigide découpés à la scie à chantourner et assemblés à la colle. On souhaite rendre indépendant l’écran LCD, qui ne résisterait pas à des conditions extérieures, et pour pouvoir l’utiliser sur plusieurs stations météo. Le code permet de le débrancher sans interrompre la prise de mesure. Et le bouton Reset permet de le brancher à tout moment en redémarrant l’ATMEGA.

Pour le montage avec les capteurs, on laisse un côté de la boîte amovible pour un accès facile à la carte SD et à la pile. Enfin une ouverture est pratiquée pour connecter l’écran LCD via une nappe IDE. De petits trous sont pratiqués sur une autre face pour permettre l’échange d’air entre l’extérieur et les capteurs de pression, humidité et température. Les capteurs sont positionnés en bas afin que la chaleur dégagée par le montage ne perturbe pas les mesures.

Le tout est inséré sous une cloche en alu, découpée également à la scie à chantourner, assemblée par des rivets et peinte en blanc pour ne pas chauffer au soleil et fausser les mesures. Toutes les jointures sont rendues étanches par du silicone afin de rendre la station résistante à la pluie.

On accroche le montage dans la cloche par un système de crochet, et la cloche sur un arbre avec une sangle.

Mode d’emploi

  1. On insère la carte SD avant de brancher la pile.
  2. Après avoir branché la pile dans la station, on connecte l’écran via la nappe IDE.
  3. Un appui bref sur le bouton RESET permet de redémarrer le montage et de reconnaître l’écran.
  4. Un appui long (>8sec) sur le bouton SET permet de rentrer dans le mode de configuration.
  5. On peut alors reconfigurer date et heure avec les boutons + et -.
  6. Après avoir vérifié les données à l’écran, on le débranche à chaud et on insère le montage sous la cloche.
  7. A la fin de la période de mesure, on débranche la pile et on extrait la carte SD
  8. Le contenu de la carte SD peut être ensuite lu sur un ordinateur.

IMG_2423

Les données sont enregistrées sur la carte SD sous la forme suivante:

On retrouve la date, l’heure, la température et la pression retournées par le BMP085, puis la température et l’humidité retournées par le DHT22. On peut les importer et tracer des graphiques automatiquement à l’aide du classeur Excel suivant : WeatherStationAnalysis.xlsm

Améliorations possibles

Le défaut principal de cette station météo est l’alimentation. Beaucoup de composants peuvent être alimentés en 3.3V, alors qu’on les alimente en 5V, chacun effectuant sa propre conversion, sauf pour la carte SD où la conversion est réalisée via des résistances. De plus, on alimente le tout en 9V via un LM075. Bref, beaucoup de pertes là où on aurait pu peut être alimenter directement en 3.3V. Mais est-il possible d’alimenter un ATMEGA en 3.3V ? C’est la question à résoudre pour améliorer grandement ce montage.

Pour réduire les impacts de ce défaut de conception, on ne prend des mesures qu’une fois par minute, et pendant le temps intermédiaire, on met l’ATMEGA dans un mode de veille, ce qui permet de diviser par deux le courant.

Une dernière amélioration serait évidemment d’opter pour une horloge capable de réveiller l’ATMEGA toutes les minutes, ce qui permettrait d’éteindre l’ensemble des composants pendant une minute entière entre deux mesures.

9 commentaire sur “Station météo à base d’Arduino

  1. Superbe!
    Proposition d’amélioration
    Ajout d’une carte sim et de la possibilité d’interroger la station météo à distance avec un SMS 😉
    du genre « bonjour, quel temps fait-il? » -> envoi
    retour -> les données météo acquises.

  2. différence mesure temperature jusqu’à 3 degres entre la mesure bmp et dht22 ? bien que le dht22 est donné pour une precison +/- 0,5 deg dans la datasheet
    belle réalisation bravo

    1. Merci pour ce retour !
      Pour la carte SD, aux dernières nouvelles, la station est au fin fond d’un pierrier sous 5 mètres de roches dans le massif central pour suivre les paramètres pression, humidité et température dans le cadre d’une étude sur le peuplement de ces zones par des escargots. Du coup, la SD reste encore bien d’actualité ! Car à moins de tirer un câble Eth de plusieurs kilomètres, monter des relais Wifi jusqu’au lycée ou rester dans le rayon de portée d’un 433MhZ/686 tout l’hiver, aucun moyen de stocker la donnée ! Et je parle pas de la conso d’un shield de communication.
      Mais ce serait une super idée dans le cadre d’une station météo qui resterait non loin d’une habitation !

  3. Bonsoir,
    Votre montage m’intéresse et pour contourner une des limites, ne serait-il pas possible d’utiliser un PCF8563 qui fournit via l’I2C une horloge, une mémoire Eeprom et une alarme pour générer des interruptions au µc pour le réveiller toutes les minutes ?
    Cordialement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *