4.3.6 Regenwasserüberwachung

4.3.6.1 Übersicht

Img

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.

Img

4.3.6.2 Komponentenwissen

Img

Regenwasser-Sensor

Img

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.

Img

Schaltbild:

Img

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:

  • Betriebs­spannung: DC 3.3V~5V

  • Betriebsstrom: (Max)1.5mA@5V

  • Maximale Leistung: 0.075W

  • Signaltyp: Analogsignal

Img

4.3.6.3 Benötigte Komponenten

Img

Img

Img

micro:bit V2 main board ×1

micro:bit shield ×1

OLED display ×1

Img

Img

Img

steam sensor ×1

micro USB cable ×1

4 pin wire ×1

Img

Img

Img

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

Img

4.3.6.5 Code-Ablauf

Img

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” .

Img

⚠️ Tipp 2: Der Schwellenwert in der Bedingung “if()…elif()…” kann je nach tatsächlicher Situation angepasst werden.

Vollständiger Code:

'''
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

Img

Kurze Erklärung:

① Bibliotheken microbit, oled_ssd1306, music und math importieren.

from microbit import *
from oled_ssd1306 import *
import music
import math

② OLED-Pixel initialisieren, das OLED löschen.

initialize()  # initialize oled
clear_oled()  # clear oled

③ Pin sowie Maximal- und Minimalwert-Variablen des Regenwasser-Sensors initialisieren.

RAIN_PIN = pin1
WET_VALUE = 1023
DRY_VALUE = 0

④ Definieren einer Map-Subfunktion (um beliebige Zahlenbereiche auf einen anderen abzubilden).

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.

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.

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.

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.

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 Img an und der Lautsprecher spielt zur Warnung den Ton C3.

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 Img an und der Lautsprecher spielt zur Warnung den Ton C4.

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 Img an und der Lautsprecher spielt zur Warnung den Ton C5.

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 Img an und der Lautsprecher spielt zur Warnung den Ton B5.

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.

display.show(Image("00000:00000:00000:00000:00000"))  # do not display any patterns
music.reset()  # no tone

④ Verzögerung 1000 ms (1 s).

sleep(1000)  # Update every second

4.3.6.7 Testergebnis

Img

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.

Img

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

Img

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 Img 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 Img 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 Img 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 Img 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.

Img

⚠️ 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.)

Img