Station météo V1

sation_météo_image

Avant de commencer à présenter ce projet de station météo fait maison, je tiens déjà à souligner que j’ai récupéré des éléments trouvés sur Internet. Que ce soit sur des sites d’autres bidouilleurs comme Anderson69s ou des forums comme Instructables

Choix de la plateforme

Cela fait quelques années maintenant que je m’amuse à créer des systèmes avec des Raspberry Pi et des Arduino, mais là c’est du concret, c’est une station météo. J’en avais deja crée une premiere version avec une visualisation drectement avec un écran LCD branché sur une Arduino. Mais le probleme de ce système là était que je ne pouvais consulter ces données à distance. J’ai donc cherché une solution pour avoir la même chose mais avec une visualisation distante. J’ai alors trouvé sur le site Anderson69s, un site qui s’appelle Thingspeak qui réceptionne les données et crée des graphiques avec celles-ci. J’ai donc décidé de l’utiliser et de tester un moment pour voir si ça fonctionnait bien, et quelles en étaient les limites.

thingspeak

Choix du matériel

J’ai donc décidé de me mettre à la conception de cette station météo avec une Arduino Nano pour récupérer les données, et une Raspberry pour les envoyer sur Internet. J’ai choisi l’Arduino Nano car elle est compacte, peu énergivore et a suffisamment d’E/S pour les composants que je vais y brancher.

 arduino_nano

Puis une Raspberry Pi 2 Model B pour sa connectivité (4Ports USB, port Ethernet, 900MHz de processeur et 1GB de RAM) ce qui fait qu’elle est parfaite pour ce que je vais en faire.

 raspberry_pi_2

Ensuite concernant le(s) composant(s) pour faire que ces cartes se transforment en station météo, j’ai décidé de prendre une sonde DHT11, avec une gamme de température entre 0 et 50°C et 20-90% RH. Ce n’est pas une sonde de compétition, mais c’est de l’expérimentation, donc ça suffit bien pour le moment ( voici le lien pour voir plus en détail: DHT11)

Les connexions

Les cartes communiquent entre elles avec un câble USB, en effet ce câble USB sera le moyen d’envoyer les données de l’Arduino vers la Raspberry mais aussi le moyen d’alimenter l’Arduino. Pour ce qui est de la liaison du capteur de température/humidité (DHT11), il suffit de regarder le schéma ci-dessous:

 wiring_arduino_nano wiring_raspberry

Le code !

Maintenant on va passer au vif du sujet, le code !

Voici le code de l’Arduino Nano:

 

#include "DHT.h"
#define DHTPIN 8 // broche ou l'on a branche le capteur
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE); //déclaration du capteur

float h;
float t;

void setup()
{
Serial.begin(9600);
dht.begin();
}
void loop()
{
// La lecture du capteur prend 250ms
// Les valeurs lues peuvet etre vieilles de jusqu'a 2 secondes (le capteur est lent)
float h = dht.readHumidity(); //on lit l'humidite
float t = dht.readTemperature(); //on lit la temperature en celsius (par defaut)
// pour lire en farenheit, il faut le paramère (isFahrenheit = true)
int humidity = dht.readHumidity();
int temperature = dht.readTemperature();

//Affichages :
Serial.print(h);
Serial.print(",");
Serial.print(t);
Serial.println();

delay(60000);
}

Voici le code de la Raspberry:

#!/usr/bin/env python
import httplib, urllib
from time import localtime, strftime
import time
import serial
ser = serial.Serial('/dev/ttyUSB0', baudrate=9600, xonxoff=False,
rtscts=False, dsrdtr=False, timeout=None)
time.sleep(20)
ser.flushInput()
def doit():
humidity= 0
temperature = 0
result = 0
ser.flushInput()
result = ser.readline()
humidity, temperature = result.split(',')
params = urllib.urlencode({'field1': humidity, 'field2': temperature,
'key':'YOUR_KEY_HERE'}) headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
conn = httplib.HTTPConnection("api.thingspeak.com:80")
try:
conn.request("POST", "/update", params, headers)
response = conn.getresponse()
data = response.read()
conn.close()
except:
print "Connection failed"
pressure = 0
temperature = 0
result = 0
ser.flushInput()
doit()
#sleep for 40 seconds (api limit of 15 secs)
if __name__ == "__main__":
while True:
doit()
ser.flushInput()
time.sleep(35)


Vous pouvez ensuite voir le résultat sur la page de visualisation Ici

Je vous laisse aussi aller voir la version 2 de ma station météo : ici

A bientôt !

F.

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.