Liebe Teilnehmerinnen des Girls-Day, wie ihr vielleicht bemerkt habt, hört die Pflanze nicht auf zu meckern. Uns ist da ein kleines Upsie passiert. Mehr dazu findet ihr unter der Überschrift Warum hört meine Pflanze nicht auf zu fluchen.
Zum Girls Day haben wir dieses Jahr den Workshop “Meine Pflanze flucht” angeboten. Basierend auf dem Projekt von AchNina und dem Workshop von nullaufeins haben wir den Bausatz auf den ESP32 mit Circuitpython portiert und konnten ihn so einfacher und kostengünstiger gestalten. In diesem Artikel findet ihr alle Informationen rund um den Workshop.
Teil | Funktion |
---|---|
LOLIN S2 Mini (Wemos) | Mikrocontrollerplatine |
MAX98357A 3W Class D Amplifier | Audio Dekoder und Verstärker |
HR-SR501 PIR Sensor | Bewegungsmelder |
Capacitive Soil Moisture Sensor v2.0 | Bodenfeuchtigkeitssensor |
4Ohm 3W Lautsprecher | - |
farbige Kabel | - |
3D-gedrucktes Gehäuse | - |
Der Mikrocontroller basiert auf dem ESP32-S2. Er ist WLAN-fähig und hat genügend Speicher um ein paar Audiodateien zu speichern.
I2S ist ein Protokoll um zwischen zwei Chips digital Musik zu übertragen. Der MAX98357A Chip kann das I2S Signal, das vom S2 Mini gesendet wird, dekodieren und besitzt zusätzlich einen Verstärker, mit dem ein 4Ohm 3W Lautsprecher betrieben werden kann.
Dieser Infrarot Bewegungsmelder misst Wärmestrahlung. Die Distanz, die der Sensor erfassen kann, lässt sich zwischen drei und sieben Meter einstellen.
Der Bodenfeuchtesensor misst die elektrische Kapazität und ist damit besonders langlebig im Vergleich zu Sensoren, die den Widerstand messen. Er liefert eine analoge Spannung zwischen 0 Volt und 3,3 Volt je nach dem wie feucht und dicht die Erde ist. Mit dem 16-bit Analog-zu-Digital-Wandler des S2 Mini lässt sich also eine Zahl zwischen 0 und 65536 ablesen.
Die Komponenten sollen wie folgt verbunden sein:
S2 Mini | MAX98357A Class D Verstärker |
---|---|
VUSB | Vin |
GND | GND |
33 | DIN (Data In) |
35 | BCLK (Master Clock) |
37 | LRC (Word Select) |
S2 Mini | HR-SR501 PIR Bewegungsmelder |
---|---|
VUSB | VCC |
GND | GND |
9 | OUT |
S2 Mini | Bodenfeuchtesensor v2.0 |
---|---|
VUSB | VCC |
GND | GND |
7 | AOUT |
Wir haben uns für die Circuitpython Firmware entschieden. Sie verfügt über umfangreiche Standardbibliotheken und wird stetig für alle unterstützten Geräte weiterentwickelt. Außerdem zeigt sich der Mikrocontroller als USB-Stick, wenn man ihn mit einem PC verbindet. Das macht das Interagieren mit dem Mikrocontroller besonders niederschwellig und kindereinfach.
Um die Firmware zu flashen muss der Mikrocontroller über USB mit dem PC verbunden und in den Downloadmodus gebracht werden, indem man die Knöpfe BOOT
und RESET
gedrückt hält und dann RESET
zuerst wieder loslässt. Es braucht möglicherweise mehrere Anläufe. Dann kann die Firmware wie folgt geflasht werden:
sudo esptool erase_flash
sudo esptool write_flash -z 0x0 adafruit-circuitpython-lolin_s2_mini-de_DE-9.2.7.bin
Jetzt den RESET
Knopf antippen und schon zeigt sich das Gerät als USB-Stick. Der Quellcode kann einfach darauf kopiert werden.
Am Anfang des Quellcodes werden zwei Variablen definiert. ZU_TROCKEN
gibt den Schwellwert an, ab dem die Pflanze anfängt zu meckern. Der Bodenfeuchtesensor ist von Feuchtigkeit, Dichte und Beschaffenheit der Erde abhängig. Man muss etwas herumprobieren um einen guten Wert zu finden. 45000
ist ein guter Anfangswert. Die zweite Variable MECKERPAUSE
ist die Verzögerung nach erfolgter Nörgelei.
Sprüche, die die Pflanze sagen soll, können mit beliebiger Software aufgenommen werden. Danach müssen sie in das Wave Format umgewandelt werden. Unter Linux geht das mit dem Standardwerkzeug ffmpeg
:
ffmpeg -i input.mp3 -f wav -bitexact -ar 16000 -ac 1 -c:a pcm_s16le output.wav
-i input.mp3
die aufgenommene Audiodatei-f wav -bitextact
notwendig damit eine wohlgeformte Wave Datei erzeugt wird-ar 16000
Sampling Rate 256kbit/s-ac 1
nur ein Audiokanal (Mono)-c:a pcm_s16le
16bit Kodierungoutput.wav
Name der AusgabedateiDie resultierenden Ausgabedateien können einfach auf den Mikrocontroller in den Ordner wav
kopiert werden. Sind die Dateien noch immer zu groß, kann mit einer kleineren Sampling Rate -ar 10000
eine bessere Komprimierung erzielt werden.
Liebe Teilnehmerinnen des Girls Days, wie ihr vielleicht bemerkt habt, hört die Pflanze nicht auf zu fluchen… Wir haben am Girls Day folgende Verdrahtung vorgenommen:
Nach etwas Recherche bin ich in der Dokumentation von Espressif auf Folgendes gestoßen:
Since the ADC2 module is also used by the Wi-Fi, reading operation of
adc2_get_raw()
may fail betweenesp_wifi_start()
andesp_wifi_stop()
. Use the return code to see whether the reading is successful.
Das bedeutet, dass der zweite Analog-zu-Digital-Wandler, den wir benutzen um den Bodenfeuchtesensor auszulesen, nicht funktioniert, wenn das Wifi Modul verwendet wird. Leider lässt sich das Wifi Modul nicht vollständig deaktivieren. Das scheint ein Fehler in der Firmware zu sein. Um das Projekt zu reparieren muss der Bodenfeuchtesensor mit dem ersten Analog-zu-Digital-Wandler verdrahtet werden. Im Folgenden Diagramm wird Pin 9 des Mikrocontrollers benutzt.
Im Quelltext muss jetzt noch die Zeile …
BODENFEUCHTE_PIN = board.IO18
… abgewandelt werden, sodass Pin 9 benutzt wird:
BODENFEUCHTE_PIN = board.IO9
Jetzt sollte alles funktionieren. Falls ihr Probleme habt den Fix anzuwenden oder das erforderliche Werkzeug zum Öffnen und Verlöten des Projekts nicht habt, könnt ihr gerne am Donnerstag bei uns vorbeikommen oder einen anderen Termin vereinbaren. :-)