### 4.3.6 Regenwasserüberwachung
#### 4.3.6.1 Übersicht

Wenn der Regenwasser-Sensor Regen erkennt, sendet er ein Signal an die micro:bit-Platine, um verschiedene Aktionen auszulösen. Zum Beispiel kann der micro:bit-Lautsprecher einen Alarm ausgeben, um die Benutzer darauf hinzuweisen, dass es regnet, und die aktuelle Regenmenge wird in Echtzeit auf dem OLED angezeigt. Dies ist besonders im Freien bei Wetter- oder Umgebungsüberwachung nützlich und ermöglicht es den Benutzern, notwendige Vorsorgemaßnahmen zu ergreifen. Darüber hinaus kann ein Regenwasser-Überwachungssystem, bestehend aus Regenwasser-Sensor, OLED-Display und micro:bit-Platine, Lecks in Dächern oder Gebäuden erkennen, um Schäden durch Wassereintritt zu verhindern.
Insgesamt ist es ein multifunktionales und effizientes Werkzeug, das in verschiedenen Anwendungen das Vorhandensein von Regenwasser erkennen kann.

#### 4.3.6.2 Komponentenwissen

**Regenwasser-Sensor**

Der Regenwasser-Sensor kann das Vorhandensein von Wasser erkennen und wird daher typischerweise in Regenwasser-Erkennungssystemen eingesetzt. Wenn Regenwasser mit der leitfähigen Fläche (Detektionsbereich) des Sensors in Kontakt kommt, sendet er ein Signal an das Entwicklungsboard (micro:bit usw.), um verschiedene Aktionen auszulösen. Je mehr Wasser sich im Detektionsbereich befindet, desto größer wird der analoge Wert sein.

**Schaltbild:**

Er erkennt die Wassermenge über die freiliegenden parallel verlaufenden Leiterbahnen auf der Leiterplatte. Je mehr Wasser vorhanden ist, desto mehr Leitungen werden verbunden. Mit zunehmender Kontaktfläche für die Leitung steigt die Spannung am Pin 2 des Sensors allmählich an, und desto größer ist der analoge Wert, der am Signalausgang S detektiert wird. Zusätzlich zu Wasser kann er auch Wasserdampf in der Luft erkennen.
**Parameter:**
- Betriebsspannung: DC 3.3V~5V
- Betriebsstrom: (Max)1.5mA@5V
- Maximale Leistung: 0.075W
- Signaltyp: Analogsignal

#### 4.3.6.3 Benötigte Komponenten
| |  | |
| :--: | :--: | :--: |
| micro:bit V2 main board ×1 | micro:bit shield ×1 | OLED display ×1 |
|| ||
| steam sensor ×1 | micro USB cable ×1 | 4 pin wire ×1 |
||||
| 3 pin wire ×1 | battery holder ×1 | AA battery(**self-prepared**) ×6 |
#### 4.3.6.4 Verdrahtungsdiagramm
⚠️ **Achten Sie beim Verdrahten bitte auf die Kabelfarben.**
| OLED display | wire color | micro:bit shield pin | micro:bit board pin |
| :----------: | :--------: | :------------------: | :-----------------: |
| GND | black | G | G |
| VCC | red | V2 | V |
| SDA | blue | 20 | P20 |
| SCL | green | 19 | P19 |
| steam sensor | wire color | micro:bit shield pin | micro:bit board pin |
| :----------: | :--------: | :------------------: | :-----------------: |
| G | black | G | G |
| V | red | V1 | V |
| S | yellow | 1 | P1 |

#### 4.3.6.5 Code-Ablauf

#### 4.3.6.6 Test-Code
⚠️ **Tipp 1: Bevor Sie den Code auf die Microbit-Platine herunterladen, importieren Sie bitte die Bibliotheksdatei “oled_ssd1306\.py” gemäß ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” .

⚠️ **Tipp 2: Der Schwellenwert in der Bedingung “if()...elif()...” kann je nach tatsächlicher Situation angepasst werden.**
**Vollständiger Code:**
```Python
'''
Theme: Rainwater monitoring
Function: OLED displays the amount of rainwater and the steam sensor controls the fan and atomization module
Compiling IDE: MU 1.2.0
Author: https://docs.keyestudio.com
'''
from microbit import *
from oled_ssd1306 import *
import math
import music
# Initialize OLED
initialize()
clear_oled()
# Configuration parameters
RAIN_PIN = pin1
WET_VALUE = 1023
DRY_VALUE = 0
def map_value(value, in_min, in_max, out_min, out_max):
"""Linearly map the input values to the output range"""
if in_max - in_min == 0:
return out_min
return (value - in_min) * (out_max - out_min) // (in_max - in_min) + out_min
def get_rain_percentage():
raw_value = RAIN_PIN.read_analog()
percentage = map_value(raw_value, DRY_VALUE, WET_VALUE, 0, 100)
return max(0, min(100, percentage)), raw_value
def get_rain_level(percentage):
if percentage < 10:
return "dry", 0
elif percentage >= 10 and percentage < 20:
return "slightly wet", 1
elif percentage >= 20 and percentage < 40:
return "wet", 2
elif percentage >= 40 and percentage < 60:
return "Very wet", 3
else:
return "hydrops", 4
def display_rain_info():
percentage, raw_value = get_rain_percentage()
level_text, level = get_rain_level(percentage)
# Display on OLED
clear_oled()
add_text(0, 0, "Rainfall Monitor")
add_text(0, 1, "Analog: {}".format(raw_value))
add_text(0, 2, "Humidity: {}%".format(percentage))
add_text(0, 3, "State: {}".format(level_text))
add_text(0, 4, "Class: {}".format(level))
draw_screen()
return percentage, level_text
while True:
percentage, status = display_rain_info()
# Display on the LED matrix and speaker plays different tones
if percentage >= 10 and percentage < 20:
display.show(Image("00000:00000:00900:00000:00000")) # dot
music.play("C3:1") # speaker plays C3 tone
elif percentage >= 20 and percentage < 40:
display.show(Image("00000:00900:09990:00900:00000")) # small circle
music.play("C4:1") # speaker plays C4 tone
elif percentage >= 40 and percentage < 60:
display.show(Image("00900:09990:99999:09990:00900")) # middle circle
music.play("C5:1") # speaker plays C5 tone
elif percentage >= 60:
display.show(Image("09990:90009:90009:90009:09990")) # large circle
music.play("B5:1") # speaker plays B5 tone
else:
display.show(Image("00000:00000:00000:00000:00000")) # do not display any patterns
music.reset() # no tone
sleep(1000) # Update every second
```

**Kurze Erklärung:**
① Bibliotheken microbit, oled_ssd1306, music und math importieren.
```Python
from microbit import *
from oled_ssd1306 import *
import music
import math
```
② OLED-Pixel initialisieren, das OLED löschen.
```Python
initialize() # initialize oled
clear_oled() # clear oled
```
③ Pin sowie Maximal- und Minimalwert-Variablen des Regenwasser-Sensors initialisieren.
```Python
RAIN_PIN = pin1
WET_VALUE = 1023
DRY_VALUE = 0
```
④ Definieren einer Map-Subfunktion (um beliebige Zahlenbereiche auf einen anderen abzubilden).
```Python
def map_value(value, in_min, in_max, out_min, out_max):
"""Linearly map the input values to the output range"""
if in_max - in_min == 0:
return out_min
return (value - in_min) * (out_max - out_min) // (in_max - in_min) + out_min
```
⑤ Definieren einer Subfunktion zur Ermittlung der Intensität der Regenmenge.
```Python
def get_rain_percentage():
raw_value = RAIN_PIN.read_analog()
percentage = map_value(raw_value, DRY_VALUE, WET_VALUE, 0, 100)
return max(0, min(100, percentage)), raw_value
```
⑥ Definieren einer Subfunktion zur Bestimmung der Regenstufe.
```Python
def get_rain_level(percentage):
if percentage < 10:
return "dry", 0
elif percentage >= 10 and percentage < 20:
return "slightly wet", 1
elif percentage >= 20 and percentage < 40:
return "wet", 2
elif percentage >= 40 and percentage < 60:
return "Very wet", 3
else:
return "hydrops", 4
```
⑦ Definieren einer Subfunktion zur Anzeige der Regeninformationen auf dem OLED.
```Python
def display_rain_info():
percentage, raw_value = get_rain_percentage()
level_text, level = get_rain_level(percentage)
# Display on OLED
clear_oled()
add_text(0, 0, "Rainfall Monitor")
add_text(0, 1, "Analog:: {}".format(raw_value))
add_text(0, 2, "Humidity: {} %".format(percentage))
add_text(0, 3, "State: {}".format(level_text))
add_text(0, 4, "Class: {}".format(level))
draw_screen()
return percentage, level_text
```
⑧ Die auf dem OLED angezeigten Werte Variablen percentage und status zuweisen.
```Python
percentage, status = display_rain_info()
```
⑨ Entscheidungsstruktur: if()...elif()...elif()...elif()...else...
Wenn die erkannte Regenmenge größer oder gleich 10% und kleiner als 20% ist, zeigt die 5×5-LED-Matrix  an und der Lautsprecher spielt zur Warnung den Ton C3.
```Pytho
if percentage >= 10 and percentage < 20:
display.show(Image("00000:00000:00900:00000:00000")) # dot
music.play("C3:1") # speaker plays C3 tone
```
Wenn die erkannte Regenmenge größer oder gleich 20% und kleiner als 40% ist, zeigt die 5×5-LED-Matrix  an und der Lautsprecher spielt zur Warnung den Ton C4.
```Python
elif percentage >= 20 and percentage < 40:
display.show(Image("00000:00900:09990:00900:00000")) # small circle
music.play("C4:1") # speaker plays C4 tone
```
Wenn die erkannte Regenmenge größer oder gleich 40% und kleiner als 60% ist, zeigt die 5×5-LED-Matrix  an und der Lautsprecher spielt zur Warnung den Ton C5.
```Python
elif percentage >= 40 and percentage < 60:
display.show(Image("00900:09990:99999:09990:00900")) # middle circle
music.play("C5:1") # speaker plays C5 tone
```
Wenn die erkannte Regenmenge größer oder gleich 60% ist, zeigt die 5×5-LED-Matrix  an und der Lautsprecher spielt zur Warnung den Ton B5.
```Python
elif percentage >= 60:
display.show(Image("09990:90009:90009:90009:09990")) # large circle
music.play("B5:1") # speaker plays B5 tone
```
Andernfalls zeigt die 5×5-LED-Matrix nichts an und der Lautsprecher bleibt stumm.
```Python
display.show(Image("00000:00000:00000:00000:00000")) # do not display any patterns
music.reset() # no tone
```
④ Verzögerung 1000 ms (1 s).
```Python
sleep(1000) # Update every second
```
#### 4.3.6.7 Testergebnis

Nach dem Verdrahten und dem Einschalten per micro USB-Kabel schließen Sie die externe Stromversorgung (6 AA-Batterien) an, um eine ausreichende Stromversorgung sicherzustellen, und klicken Sie „Flash“, um den Code auf die micro:bit-Platine herunterzuladen.

Nach dem Hochladen des Testcodes drücken Sie die Reset-Taste auf der Rückseite des micro:bit.

Das OLED zeigt die erkannte Regenmenge in Echtzeit an. (**Beispiel: Verwenden Sie eine feuchte Hand, um den Detektionsbereich des Regenwasser-Sensors zu berühren, um fallenden Regen zu simulieren**).
Wenn die erkannte Regenmenge größer oder gleich 10% und kleiner als 20% ist, zeigt die 5×5-LED-Matrix  an und der Lautsprecher spielt zur Warnung den Ton C3.
Wenn die erkannte Regenmenge größer oder gleich 20% und kleiner als 40% ist, zeigt die 5×5-LED-Matrix  an und der Lautsprecher spielt zur Warnung den Ton C4.
Wenn die erkannte Regenmenge größer oder gleich 40% und kleiner als 60% ist, zeigt die 5×5-LED-Matrix  an und der Lautsprecher spielt zur Warnung den Ton C5.
Wenn die erkannte Regenmenge größer oder gleich 60% ist, zeigt die 5×5-LED-Matrix  an und der Lautsprecher spielt zur Warnung den Ton B5.
Wenn die erkannte Regenmenge kleiner als 10% ist, zeigt die 5×5-LED-Matrix nichts an und der Lautsprecher bleibt stumm.

⚠️ **Hinweis: Die Bausteine im Experiment sind nicht in diesem Kit enthalten.**
(**Tipp:** Wenn kein Ergebnis angezeigt wird, drücken Sie bitte die Reset-Taste des micro:bit-Boards.)
