Meine Pflanze flucht

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.

Materialienliste

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 -

LOLIN S2 Mini Der Mikrocontroller basiert auf dem ESP32-S2. Er ist WLAN-fähig und hat genügend Speicher um ein paar Audiodateien zu speichern.

MAX98357A Class D Amplifier 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.

HR-SR501 PIR Bewegungsmelder Dieser Infrarot Bewegungsmelder misst Wärmestrahlung. Die Distanz, die der Sensor erfassen kann, lässt sich zwischen drei und sieben Meter einstellen.

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

Verkabelung und Zusammenbauen

Fritzing Diagramm

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

Zusammenbauen Teil 1 Zusammenbauen Teil 2 Zusammenbauen Teil 3 Zusammenbauen Teil 4

Firmware und Quellcode

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.

Audiodateien umwandeln und komprimieren

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 Kodierung
  • output.wav Name der Ausgabedatei

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

Warum hört meine Pflanze nicht auf zu fluchen?

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: Fritzing Diagramm vom Girls Day

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 between esp_wifi_start() and esp_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.

repariertes Fritzing Diagramm vom Girls Day

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. :-)