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 : Sélectionner tout - Visualiser dans une fenêtre à part
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