1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include <math.h>
// Taille de l'écran OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// Initialisation de l'écran OLED (adresse 0x3C)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Capteur DHT
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Coefficients issus du modèle de régression logistique
float a = -0.34513;
float b = 0.09128;
float c = -1.43782;
void setup() {
Serial.begin(9600);
dht.begin();
// Initialisation de l'écran OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Écran SSD1306 non détecté"));
for (;;); // Boucle infinie en cas d'erreur
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Station Meteo");
display.display();
delay(2000);
}
void loop() {
float temp = dht.readTemperature();
float humid = dht.readHumidity();
if (isnan(temp) || isnan(humid)) {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Erreur capteur!");
display.display();
delay(2000);
return;
}
// Calcul de la probabilité de pluie
float z = a * temp + b * humid + c;
float proba = 1.0 / (1.0 + exp(-z)); // <=====================
// Affichage sur OLED
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);
display.print("Temp: ");
display.print(temp, 1);
display.println(" C");
display.print("Humid: ");
display.print(humid, 0);
display.println(" %");
display.print("Pluie: ");
display.print(proba * 100, 0);
display.println(" %");
// Message en fonction du seuil
display.setCursor(0, 48);
display.setTextSize(1);
if (proba >= 0.5) {
display.println("Pluie probable");
} else {
display.println("Pluie peu probable");
}
display.display();
Serial.print("Temp: ");
Serial.print(temp);
Serial.print(" | Humid: ");
Serial.print(humid);
Serial.print(" | Proba pluie: ");
Serial.println(proba, 2);
delay(5000);
} |
Partager