Skip to main content

Der Code

Hier ist ein Beispielcode für eure Programmierung in Micropython in der IDE Thonny auf dem Raspberry Pi Pico.

#import Bibliothekentime
ladenimport #---------------------------------------------------------------------random
from machine import Pin, ADCUART
from dfplayer import timeDFPlayer

# HC-SR501 Bewegungsmelder
pir_sensor = Pin(28, Pin.IN)  # Verbinde den Bewegungsmelder mit Pin 28

# Onboard-LED des Raspberry Pi Pico
led_pico = Pin(25, Pin.OUT)  # Onboard-LED an Pin 25

# Busy-Pin des DFPlayer Mini
busy_pin = Pin(22, Pin.IN)  # Verbinde den Busy-Pin des DFPlayer mit Pin 22

# UART-Konfiguration für DFPlayer
uart = UART(0, baudrate=9600, tx=Pin(16), rx=Pin(17))

# DFPlayer MP3 Player
dfplayer = DFPlayer(uart_id=0, tx_pin_id=16, rx_pin_id=17)  # Initialisiere DFPlayer mit UART Pins

time.sleep(2)  # Warte, bis der DFPlayer vollständig bereit ist

# Setze die Lautstärke einmalig
print("Setze Lautstärke...")
dfplayer.volume(10)  # Lautstärke auf 15 setzen (Bereich 0-30)
time.sleep(0.5)

# Funktion zum Abspielen einer zufälligen MP3-Datei
def play_random_mp3():
    track_number = random.randint(1, 4)  # Wähle eine zufällige Datei im Bereich 001-004
    time.sleep(0.2)  # Kurze Pause nach der Zufallsauswahl
    print(f"Spiele MP3-Datei {track_number} ab...")
    dfplayer.play(1, track_number)  # Spiele die Datei im Ordner ./01/
    time.sleep(0.2)  # Zusätzliche kurze Pause für Stabilität
    print("MP3-Wiedergabe gestartet.")

# Hauptprogramm
playing = False
waiting_for_reset = False
reset_timeout = 5  # Timeout für die LEDsBewegungserkennung led_redin Sekunden
reset_start_time = Pin(15, Pin.OUT)
led_yellow = Pin(14, Pin.OUT)
led_green = Pin(13, Pin.OUT)0  # ADC-PinStartzeit für dendas Bodenfeuchtigkeitssensor
#---------------------------------------------------------------------
soil_sensor = ADC(26)

# Schwellenwerte für Feuchtigkeit
#---------------------------------------------------------------------
DRY_THRESHOLD = 30000    # Unter diesem Wert wird es als trocken betrachtet
MOIST_THRESHOLD = 60000  # Ober diesem Wert wird es als feucht betrachtet

def read_soil_moisture():
    # Bodenfeuchtigkeit auslesen
    return soil_sensor.read_u16()Timeout

while True:
    moisture_level# Prüfen, ob der Sensor keine Bewegung mehr meldet, bevor eine neue erkannt werden kann
    if not playing and not waiting_for_reset and pir_sensor.value() == 1:
        print("Bewegung erkannt!")
        led_pico.value(1)  # LED einschalten
        play_random_mp3()
        playing = read_soil_moisture()True  # BodenSetzt den Status auf "abspielend"

    if playing:
        # Überprüfe den Status des Busy-Pins und steuere die LED entsprechend
        if busy_pin.value() == 0:  # Busy-Pin ist trocken,LOW, rotewenn LEDeine leuchtetDatei #---------------------------------------------------------------------abgespielt ifwird
            moisture_levelprint("DFPlayer <spielt DRY_THRESHOLD:MP3-Datei led_red.value(1)ab.")
        led_yellow.value(0)else:
            led_green.print("DFPlayer ist im Leerlauf.")
            led_pico.value(0)  # Boden hat wenig Feuchtigkeit, gelbe LED leuchtetausschalten
            #---------------------------------------------------------------------playing elif= moisture_level < MOIST_THRESHOLD:
        led_red.value(0)
        led_yellow.value(1)
        led_green.value(0)False  # BodenWiedergabe ist feuchtabgeschlossen
            genug,waiting_for_reset grüne= LED leuchtet
#---------------------------------------------------------------------
    else:
        led_red.value(0)
        led_yellow.value(0)
        led_green.value(1)True  # Warte eineauf Sekundedie bevorBeendigung der nächsteBewegungserkennung
            Wertreset_start_time gemessen= wirdtime.time()  #-# Startzeit für das Timeout setzen

    # Überprüfen, ob das Timeout abgelaufen ist oder der Sensor keine Bewegung mehr meldet
    if waiting_for_reset:
        if pir_sensor.value() == 0:
            print("Bereit für neue Bewegungserkennung.")
            waiting_for_reset = False
        elif time.time() -------------------------------------------------------------------- reset_start_time > reset_timeout:
            print("Timeout erreicht. Bereit für neue Bewegungserkennung.")
            waiting_for_reset = False

    time.sleep(0.1)  # Kurze Pause, um Sensor nicht zu überlasten