Arduino
50 Station meteo Ethernet
Sommaire
La (page 39) décrit l'utilisation d'un BMP180/085 pour mesuser la température et la pression atmosphérique.
Le DHT11 est un capteur mesurant l'humidité de l'air.
On peut créer un petit serveur Web dans l'arduino (page 23),
et utiliser Internet pour synchroniser son horloge avec le protocole NTP (page 24).
On peut imaginer utiliser une simple résistance LDR pour mesurer la luminosité ...
Et avoir des tendances sur 24 heures, avec bargraphes.
La présence de la carte SD sur les cartes Ethernet va permettre d'avoir une page html assez riche, avec des bargraphes !
En additionnnat tout ca, j'ai voulu faire une station météo consultable par Ethernet http: , donc Internet (grâce au routeur de ma box).
Autres idées à creuser :
- journal dans la SD
- vidage du journal par http page spéciale, ou voie série
- utilisation d'un fichier dans la SD pour mémoriser les données vives en cas de coupure d'alimentation
- afficheur local (type série c'est le plus simple
A faire : télécommandes TOR par http
Nous verrons qu'à force d'en rajouter, on atteint rapidement la limite de l'Arduino UNO ou Ethernet (32k+2k), et que pour en faire plus, il faut passer à une configuration Arduino MEGA(256k+8k) + shield Ethernet.
En ce qui concerne la taille du programme, le compilateur va vous alerter si votre programme est trop gros, par contre, en ce qui concerne la RAM, donc la prtie des variables, l'alerte n'existe pas, ni à la compilation, ni à l'exécution, sinon que cette dernière 'plante', parfois avec des hiéroglyphes sur la voie série ...
Tout écrire à la fois conduit rapidement au bazar ! voici les étapes que j'ai effectuées, avec entre parenthèse la taille du programme obtenu.
J'ai commencé avec un Arduino Ethernet.
a: Web Server * exemple du site ARDUINO (ARDUINO ETHERNET = 11894)
Ce n'est pas très compliqué, mais cela permet de se familiaser avec un webserver, et de paramétrer la box ...
L'ARDUINO a une adresse sur le réseau LOCAL, et réponds sur le port 80. On peut donc tester en LOCAL avec http://adresse:80/
Nota :80 est inutile, c'est la valeur par défaut de http://. Si on veut, on peut mettre n'importe quel autre port (sauf si utilisé par un autre service). Pour moi, j'ai utilisé le 100 ou 101. Cela permet de conservre le 80 pour un VRAI serveur Web ...
b: intégration des .h Goodfields sur le temps et streaming
amélioration du code HTML (ARDUINO ETHERNET = 17538)
c: mesures de temps du HTML, ajout des grafcets capteurs et HTML (19882)
d: récup heure par NTP avant mesures capteurs, heure locale et UTC (24612)
e: intégration des capteurs BMP180 (pression et température) et DHT11(humidité et température) (30000)
sortie des routines en modules séparés
Note : on atteint la limite des 32k+2k du UNO. Il faut limiter les debugs au strict minimum ...
f: on passe au MEGA, utilisation de la carte SD, et explosion du HTML
Pour avoir des pages HTML fournies, j'ai inventé la méthode suivante :
- stockage dans la Sd de fichiers contenant du HTML, en fait des morceaux de la page HTML finale
- dans lesquels je mets des variables sous la forme $Xnn, et qui seront remplacées par leurs valeurs avant envoi au client http://
- nn = 00 à 99
- plusieurs types de varivales :
* $I : entiers
* $J : entiers, mais qui seront divisés par 10 à l'éxécution (températures en dixièmes de degrés)
* $K : entiers, mais ene 1/100
* $F : flottants, affichés avec 2 décimales
* $V : affichage de la version de programme (#define versionx)
* $H : horodatages
- dans le programme ADRDUINO, on positionne les valeurs par transferts
une routine
(faire enregistrer la cible sous...)
Hooking up the BMP085 to the Arduino works just like any other I2C part:
Connect VCC to VCC and GND to GND, SCL goes to analogue pin 5, SDA to analogue pin4.
Adding some pull up resistors (1K to 20K, most often something like 4.7K) between SDA, SCL and VCC finishes the setup (this was included in my breakout board).
The BMP085 accepts 1.8 to 3.6 Volts ? so no chance to connect it directly to 5 Volts.
The BMP085 has an additional EOC (end of conversion) pin indicating the successful data capture.
This was connected to analogue pin 2 ? but not used in the software implementation.
Software
Fortunately the code by Jeenode contained all the functionality, you need, taken directly from the datasheet.
The only thing I added was the ability to use all oversampling modes (the BMP085 offers 4 oversampling mode,
each on taking longer than the other and using more energy, but delivering more precise results).
http://interactive-matter.eu/blog/2009/12/05/arduino-barometric-pressure-sensor-bmp085/
BMP180 Sparkfun. No regulation 3.3V inside.
https://www.sparkfun.com/products/11824
BMP180 Adafruit
http://www.adafruit.com/products/1603
https://learn.adafruit.com/bmp085/using-the-bmp085
BMP085 et BMP180 sur ARDUINO Yun :
https://learn.adafruit.com/cloud-connected-weather-station-with-the-arduino-yun-and-temboo/connections
BMP085 breakout :
http://www.geeetech.com/wiki/index.php/BMP085_Barometric_Pressure_Sensor_Breakout
BMP085 : Get pressure, altitude, and temperature from the BMP085.
Serial.print it out at 9600 baud to serial monitor.
Fixed for Arduino 1.0+ by iLabBali.com
Based largely on code by Jim Lindblom via the repost at
http://bildr.org/2011/06/bmp085-arduino/
Dernière mise à jour : 11:40:10 18/09/2020