Station météo Arduino avec capteurs BME280, DHT11 et capteur de poussière
Station météo Arduino avec capteurs BME280, DHT11 et capteur de poussière
Ce projet permet de créer une station météo connectée Arduino capable de mesurer plusieurs paramètres environnementaux :
- température
- humidité
- pression atmosphérique
- qualité de l'air (poussière)
- température ressentie
- point de rosée
Les données sont affichées sur un écran LCD puis envoyées vers un serveur web via un module WiFi ESP8266.
Matériel utilisé
Carte microcontrôleur
- Arduino UNO ou compatible
Capteurs
- BME280 : température, humidité, pression atmosphérique
- DHT11 : humidité et température
- GP2Y1010AU0F : capteur de poussière
Communication
- ESP8266 (utilisé en mode AT)
- communication série via SoftwareSerial
Affichage
- écran LCD 16x2
Fonctionnement du module
- lecture des capteurs environnementaux
- calcul du point de rosée
- mesure de la qualité de l'air (poussière)
- affichage des valeurs sur écran LCD
- envoi des données vers un serveur web via ESP8266
Calcul du point de rosée
Le point de rosée correspond à la température à laquelle l'humidité de l'air se condense.
double dewPoint(double celsius, double humidity) {
const double a = 17.27;
const double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity * 0.01);
return (b * temp) / (a - temp);
}
Configuration du module WiFi ESP8266
Le module ESP8266 est utilisé en mode AT pour transmettre les données vers un serveur web via HTTP.
SoftwareSerial softSerial(10, 11); String SSID = ""; String PASS = "";
Code Arduino complet
#include "SparkFunBME280.h"
#include "Wire.h"
#include "SPI.h"
#include "DHT.h"
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(3,4,5,6,9,8);
#define REFRESH 3000
#define DHTPIN 2
#define DHTTYPE DHT11
SoftwareSerial softSerial(10, 11);
String SSID = "";
String PASS = "";
DHT dht(DHTPIN, DHTTYPE);
BME280 capteur;
int dustPin = 7;
int ledPin = 0;
float voltsMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
float Temperature = 0;
float Pression_at = 0;
double dewPoint(double celsius, double humidity) {
const double a = 17.27;
const double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity * 0.01);
return (b * temp) / (a - temp);
}
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
capteur.settings.commInterface = I2C_MODE;
capteur.settings.I2CAddress = 0x76;
capteur.begin();
dht.begin();
lcd.begin(16,2);
softSerial.begin(9600);
}
void loop() {
voltsMeasured = analogRead(dustPin);
calcVoltage = voltsMeasured * (5.0 / 1024.0);
dustDensity = 0.17 * calcVoltage - 0.1;
Temperature = capteur.readTempC();
Pression_at = capteur.readFloatPressure();
float humidity = dht.readHumidity();
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.print(Temperature);
lcd.setCursor(0,1);
lcd.print("Hum:");
lcd.print(humidity);
delay(REFRESH);
}
Format des données envoyées au serveur
Exemple de requête HTTP envoyée :
GET /meteo/receive.php?capteur=1&temperature=22&pression=1013&humidite=45
Améliorations possibles
- ajouter écran OLED
- ajouter stockage carte SD
- utiliser ESP32
- envoi MQTT
- boîtier étanche extérieur
- historique des mesures
Conclusion
Cette station météo Arduino permet de collecter des données environnementales complètes et de les transmettre vers un serveur web. Elle constitue une excellente base pour un projet IoT ou domotique.
Auteur de l'article
jensepas