Inhaltsverzeichnis
Pipimat 2000 - Die Teppichnässer- Alarmanlage
Klingt komisch, is aber so: Diese Schaltung macht MP3- Radau, wenn die Sensormatte einen vierbeinigen Mitbewohner dabei erwischt, dass er mal wieder seine Reviermarke in den Teppich setzt.
Installation von Circuit Python
Wenn der Pico sich am Rechner nicht als USB-Drive zeigt: Beim Einstecken den BOOTSEL- Button so lange gedrückt halten, bis das Laufwerk erkannt wird.
Dann das aktuelle UF2 File von circuitpython homepage herunterladen und durch Drag & Drop auf dem Pico installieren.
Der Pico wird dann neu booten und sich als CIRCUITPI
neu anmelden.
Dann wird der Audio-Anteil verkabelt wie auf https://learn.adafruit.com/mp3-playback-rp2040 gezeigt:
Signal | Pico | Pin |
---|---|---|
PAM8302 A+ | GP0 | 1 |
PAM8302 A- | GND | 3 |
PAM8302 VIN | VBUS (USB 5V) | 40 |
PAM8302 GND | GND | 23 |
Für's Audio- Signal brauchen wir MP3 Mono 16Bit PCM max. 24kHz Sample Rate. Wie man das mit Audacity hinbekommt, steht auf https://learn.adafruit.com/microcontroller-compatible-audio-file-conversion
Das Programm
import board import audiomp3 import audiopwmio import time import analogio import digitalio led = digitalio.DigitalInOut(board.LED) led.direction = digitalio.Direction.OUTPUT led.value = True # Set up an analog input on ADC0 (GP26), which is physically pin 31. # E.g., this may be attached to photocell or photointerrupter with associated pullup resistor. sensor = analogio.AnalogIn(board.A0) alarm = False supress_alarm= False lower_threshold = 50000 upper_threshold = 55000 button = digitalio.DigitalInOut(board.GP2) button.switch_to_input(pull=digitalio.Pull.UP) audio = audiopwmio.PWMAudioOut(board.GP0) decoder = audiomp3.MP3Decoder(open("trash.mp3", "rb")) while True: if alarm: led.value = not led.value else: led.value = True # Read the sensor once per cycle. sensor_level = sensor.value # uncomment the following to print tuples to plot with the mu editor print(sensor_level) if alarm: if sensor_level > upper_threshold: led.value = False alarm = False print("Off") else: supress_alarm=False if sensor_level < lower_threshold: led.value = True alarm = True print("On") if not button.value: audio.play(decoder) while audio.playing: pass print("Done playing!") if alarm and not supress_alarm: audio.play(decoder) while audio.playing: if not button.value: supress_alarm=True audio.stop() # comment the next line if the alarm shall run endless #supress_alarm=True print("Done alarm playing!") time.sleep(1) # slow sampling to avoid flooding