Bonjour à tous,
Depuis quelques temps , je souhaite pouvoir détecter la probabilité de risque de pluie avec un Arduino ( localement car je ne souhaite pas interroger les sites en ligne à cause du quota)
Les détecteurs actuels sont peu ou pas fiables car l'idéal n'est pas de tester la présence de l'eau ( c'est trop tard ) mais bien la proba lité qu'elle arrive
Ce faisant , il pourrait exister une solution en mesurant de façon périodique la température et l'humidité extérieures et ainsi me donner quelques solutions
- soit par un modèle d'approche "par apprentissage automatique"
je mesure et je stocke les données T° et RH%
puis j'utilise un "model" pour en déterminer la probabilité mais là je n'ai pas le type de modele
-soit je détermine alors des seuils
je mesure T° et RH% et suivant des seuils tels que :
- Si humidité > 90% et température < 20°C, forte chance de pluie. (vPluie = 1 )
- Si humidité < 60%, pluie peu probable. (vPluie = 0)
j'expérimente çà :
Code:
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); }
Je voudrais donc simplement ici avoir votre avis ou peut-être avez-vous d'autres solutions
merci bien
pascal