Beiträge Alraune zum Geburtstag - Überblick
Post
Cancel

Alraune zum Geburtstag - Überblick

Fans von Fantasy Geschichten, Rollenspielen oder Harry Potter kennen sie bestimmt: Die Alraune. Alraunen oder auch Mandragora sind eine Pflanzengattung. Ihre Wurzeln sind verzweigt, wodurch sie manchmal wie kleine Menschen aussehen. Das dürfte auch der Grund sein, warum ihnen magische Fähigkeiten zugeschrieben werden. In Harry Potter schreien sie ganz fürchterlich, aber man kann Tränke aus ihnen brauen. Auf Youtube könnt ihr euch in einem Ausschnitt einen Eindruck davon machen. Nachdem der Geburtstag eines Potterfans und mir sehr wichtigem Menschen anstand, sollte ein besonderes Geschenk her.

Also wollte ich eine Alraune bauen, die automatisch bewässert wird und die Eigentümerin anschreit, wenn der Wasservorrat alle ist. Mit einem Microcontroller, einer Pumpe, Feuchtigkeitssensoren und ein bisschen Programmieren, wird das schon nicht so schwer sein, war mein irriger Gedanke. Ich hatte vorher noch keinerlei Erfahrung mit IoT Projekten oder wie man Microcontroller wie einen Arduino oder ESP8266 programmiert und wusste daher noch nicht, was alles auf mich zukommen würde. Ich habe aber zumindest etwas Erfahrung im Löten und Arbeiten mit Elektronik und Holz, so dass ich zumindest so zuversichtlich war, dass ich nicht meine Wohnung in Brand stecken würde.

Dieser Bericht ist mit Vorsicht zu genießen, da ich nicht zu jedem Zeitpunkt akkurate Notizen gemacht habe und keine Garantie für die Funktion oder Sicherheit übernehmen kann. Wenn ihr euch auch eine Alraune bauen möchtet und noch nie gelötet habt, solltet ihr euch Unterstützung holen. Wenn es keine erfahrenen Freund*innen oder Bekannte gibt, gibt es vielleicht einen Makerspace in der Nähe. Und falls ihr Verbesserungsvorschläge für mich habt, kontaktiert mich gerne. Es gibt immer was zu lernen.

Grundidee

Das fertige Projekt sollte wie folgt funktionieren: Die Pflanze hat einen Feuchtigkeitssensor, der dem Controller meldet, ob sie gegossen werden muss. Wenn es soweit ist, schaltet der Controller für ein paar Sekunden eine kleine Pumpe an, die Wasser aus einem Vorratsbehälter pumpt. So wird die Pflanze optimal mit Wasser versorgt. Ist der Behälter leer, wird über einen Lautsprecher eine entsprechende Meldung an die anwesenden Menschen ausgegeben, damit sie den Behälter auffüllen. Oder anders ausgedrückt: Die Alraune versorgt sich selbst mit Wasser und soll die Leute anschreien, wenn das Wasser alle ist.

Da die Alraune nicht bei mir im Haus stehen würde, sollte sie WLAN mit eingebaut haben, damit sie Logs und Metriken zu meinem Server schicken und Updates empfangen kann. So könnte ich im Nachhinein noch Bugs fixen und mit den Metriken ein Dashboard bauen und Alarmierungsfunktionen umsetzen.

Bauteile

  • Eingetopfter Ginseng (Alraunen werden zu groß und können stinken)
  • WeMos D1 Mini (z.B. von AZ-Delivery)
  • Set aus 5V-Pumpe, Relay und Feuchtigkeitssensor mit max. 3V Ausgangsspannung (z.B. von RUNCCI-YUN auf Amazon)
  • DFPlayer Mini (z.B. von AZ-Delivery)
  • Lautsprecher
  • MicroSD Karte
  • Lochplatine
  • Kabel in Schwarz, Rot und Gelb
  • USB-Buchse zum Verschrauben
  • Passendes USB-Kabel
  • USB-Netzweil
  • Kleine Holzkiste
  • Wasserbehälter wie z.B. eine Vase
  • Zum Löten einen Lötkolben mit dünner Spitze, Lötzinn etc.
  • Zum Bearbeiten der Kiste ein Multitool wie z.B. Dremel 4250

Um mir etwas Arbeit zu sparen, hatte ich mich für ein fertiges Pumpenset entschieden, das neben der Pumpe auch ein Relay und einen Feuchtigkeitssensor mitbrachte. Die Teile können auch einzeln gekauft werden. Ursprünglich wollte ich zwei Sensoren haben. Einen der die Feuchtigkeit der Erde misst und die Pumpe steuert und einen für den Wasserbehälter. Allerdings hat der D1 Mini nur einen Analogeingang. Daher habe ich mich entschieden, nur einen zu verwenden und den Bedarf an neuem Wasser über den Programmcode zu ermitteln. Wenn ich Wasser zur Pflanze gepumpt habe und sie danach immer noch trocken ist, muss das Wasser alle sein.

Den Gingseng hatte ich zufällig zu Beginn des Projektes in einem Supermarkt gesehen und spontan mitgenommen. Viele Kleinteile hatte ich noch in meiner Lötkiste.

Schaltplan ausdenken

Zunächst habe ich anhand der guten Dokumentation (DFPlayer Mini) oder sehr verpixelter und unleserlicher Bildchen (Pumpenset) ermittelt, was wie verbunden werden muss. Den Aufbau habe ich hier mit Fritzing visualisiert. Das OpenSource Tool kann man gegen eine Gebühr herunterladen oder selbst kompilieren und bietet einen visuelleren Zugang als reine Schaltpläne. Bei größeren Installationen wird es aber unübersichtlich. Daher habe ich den Plan in mehrere Stücke zerlegt, da sie im Grunde unabhängig voneinander funktionieren und nur den D1 Mini als Bindeglied und Schaltzentrale beinhalten.

Sensor und Pumpe

Bei dem Pumpenset war ein verpixelter Schaltplan auf der Produktseite abgebildet, bei dem man grob erahnen konnte, wie die Teile zusammengehören sollten. Letztendlich brauchte ich eine Stromversorgung vom D1 Mini zu dem Sensor und zum Relay. Der Sensorwert sollte an den einzigen analogen Eingang des D1 Mini gehen und einer der Digitalausgänge sollte dann das Relays schalten und somit die Pumpe steuern.

Sensor

Ich habe den Sensor an den 3V Ausgang des D1 Mini und Ground gehängt. Die Datenleitung führt zum einzigen Analoginput A0. Der A0 Eingang des D1 Mini kann im Gegensatz zum verbauten ESP8266 einen Bereich von 0-3V am Eingang vertragen, den er dann über ein Paar Widerstände auf die 0-1V für den ESP8366 reduziert.

Steckplatinenbild mit dem Sensor

Auf dem Steckbrett sieht die Schaltung auch recht übersichtlich aus.

Steckbrett mit dem Aufbau für den Sensor und den D1 Mini

Pumpe

Das Relay hängt auf der einen Seite an 5V und Ground und das Steuerungssignal wird mit dem Digitalausgang D0 des D1 Mini verbunden. Über diesen kann ich das Relays umschalten. Auf der anderen Seite wird ebenfalls die 5V des D1 Mini angeschlossen und der Pluspol der Pumpe. Der Minuspol der Pumpe wird ohne Relay dazwischen am Ground des D1 Mini angeschlossen. Ein 5V USB Netzteil liefert genügend Strom für die Pumpe und den Controller.

Steckplatinenbild mit der Pumpe

Wegen des zusätzlichen Verkabelungsaufwandes mit dem Relay ist dieser Schaltungsteil etwas komplizierter. Das Bauteil rechts ist ein Netzteil für das Steckbrett, dass den D1 Mini mit Strom versorgen kann. Es ist für den Aufbau nicht relevant.

Steckbrett mit dem Aufbau für die Pumpe und den D1 Mini

MP3 PLayer

Als nächtes benötigte ich eine Verbindung vom D1 Mini zum DFPlayer. Es gibt eine Bibliothek für Arduino für den Player, die über eine serielle Schnittstelle mit dem Player kommuniziert. Also musste ich die beiden PINs mit zwei digitalen Ein-/Ausgängen des D1 Mini verbinden und diese später als Schnittstelle nutzen. Dazu kommt auch hier eine Stromversorgung mit 5V. Vom Player gehen dann noch die beiden Kabel zum Lautsprecher. Der DFPlayer hat eine gute Wiki mit Pinbelegung und Codebeispielen.

Steckplatinenbild mit dem DFPlayer Mini

Und hier die Schaltung auf dem Steckbrett.

Steckbrett mit dem Aufbau für den DFPayer Mini und den D1 Mini

Gesamtaufbau

Im folgendem ist der Gesamtaufbau der Elektronik der Alraune zu sehen. Die Kabel für Strom und Sensoren gehen jetzt schon drunter und drüber.

Steckplatinenbild mit dem DFPlayer Mini

Ein Photo des Steckbrettes erspare ich euch, da man wegen der zahlreichen Kabel nicht mehr sehr viel erkennt.

Erster Versuch

Ich habe das ganze dann erst einmal auf einem Steckbrett zusammengesetzt. Lämpchen gingen an und der Lautsprecher knackte beim Einschalten. Es fehlte aber noch die komplette Programmierung.

Softwareentwicklung

Ich hatte vorher noch keine IoT Erfahrung und habe mir für einen leichteren Einstieg die Arduino IDE installiert. Damit der D1 Mini unterstützt wird, muss zunächst noch das passende Zeug installiert werden.

Danach versuchte ich eines der Demoprogramme und stellte fest, dass der D1 Mini sich nicht flashen ließ. Nach längeren Suchen im Internet und ausprobieren zahlreicher Tipps, wand ich mich an AZ-Delivery, bei denen ich den Controller gekauft hatte und sie schickten mir ein Ersatzgerät zu. Dieses ließ sich dann auch ohne Probleme und Tricks flashen.

Ein Programm für den ESP besteht immer aus drei Teilen.

  • Imports und Deklarationen von Variablen
  • Einer setup() Methode
  • Einer loop() Methode

Sensor auslesen

Mit den Beispielen aus der IDE konnte ich schnell den Sensor auslesen. Um den Wert auszulesen und über die serielle Schnittstelle auszugeben war in wenigen Zeilen Code erledigt.

1
2
3
4
5
6
7
8
9
10
11
12
13
setup(){
  // Initialize serial interface for debugging
  Serial.begin(9600);
  Serial.println(F("Serial inteface for debugging is initialized with 9600 baud."));
}

loop(){
  // Print current sensor value
  Serial.println(analogRead(sensorPin));
  
  // Wait a second
  delay(1000);
}

Pumpe ansteuern

Fast genauso einfach war das ansteuern der Pumpe. Man muss lediglich den Pin als Ausgangskanal definieren und kann die Signale HIGH und LOW senden. Der folgende Versuch schaltet die Pumpe einmal an, wartet 10 Sekunden und schaltet sie wieder aus.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const int releayPin = D0;

setup{
  // Trigger the relay and start the pump
  digitalWrite(releayPin, LOW);

  // wait 10 seconds
  delay(10 * 1000);

  // Power off the pump
  digitalWrite(releayPin, HIGH);
}

void loop() {
  // Do nothing
  delay(1000);
}

DFPlayer Mini ansteuern

Der MP3 Player hat wie erwähnt eine vorbildliche Dokumentation und eine Bibliothek zur Steuerung über eine weitere serielle Schnittstelle.

Wichtig ist, dass nicht die eigentliche serielle Schnittstelle des D1 Mini verwendet wird, da sonst Ausgaben über Serial.println oder auch das Flashen nicht mehr richtig funktionieren.

Die Bibliothek für den Player und die Schnittstelle ist schnell eingebunden. Die beiden Pins des D1 Mini, mit denen die Pins RX und TX des Players verbunden sind, werden für die serielle Schnittstelle definiert.

Für ein erstes Experiment kann man direkt in der setup-Funktion des Arduino den Player initialisieren und die erste Datei auf der MicroSD-Karte abspielen.

Der Player kann keine richtigen Dateinamen sondern richtet sich nach der Reihenfolge, in der sie auf die Karte geschrieben wurden. Die Dateien müssen 0001.mp3, 0002.mp3 und so weiter heißen. Man kann auch mit Ordnern arbeiten, dann müssen die Ordner 01, 02 und so weiter heißen und die Dateien darin 001.mp3, 002.mp3 und so weiter. Dann kann man auch auf die Ordner Zugreifen, was ich später für Sounds für das Wasserauffüllen und Weihnachts- und Geburtstagsgrüße nutze.

Wenn der Player nicht richtig startet, läuft das Programm hier absichtlich in eine Endlosschleife und der Watchdog des D1 Mini startet das System nach kurzer Zeit neu. Diese Prüfung schalte ich mit dem parameter false in der begin() Methode ab, da die Signalqualität wohl manchmal nicht ausreicht, obwohl das Abspielen selbst ohne Probleme funktioniert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial audioSerial(D2, D1); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

void setup()
{
  // Serial interface for debugging
  Serial.begin(115200);

  Serial.println(F("Start DFPlayer. This may take 3~5 seconds"));

  // Start serial interface for controlling the DFPlayer
  audioSerial.begin(9600);
  
  // Start the player but don't require a response
  if (!myDFPlayer.begin(audioSerial, false)) {
      Serial.println(F("Error start DFPlayer! 1.Please recheck the connection! 2.Please insert the SD card!"));
      while(true);
  }
  Serial.println(F("DFPlayer succesfully started"));

  // Set volume. Valid is 0-30
  myDFPlayer.volume(10);

  // Play the first mp3 on the micro SD card
  myDFPlayer.play(1);
}

void loop() {
  // Do nothing
  delay(1000);
}

Gehäuse und Wassertank

Als Gehäuse für die Alraune habe ich eine kleine, alt aussehende Holzkiste genommen. Ähnliche Modelle gibt es in verschiedenen Größen bei Deko Discountern oder im Internet.

Mit dem Dremel habe ich eine passende Öffnung für einen Lautsprecher ausgefräst. Genauso entstand eine halbwegs rechteckige Öffnung für die Aufnahme des USB-B Steckers. Aus Deckel und Korpus fräste ich jeweils einen Halbkreis, so dass sie eine runde Öffnung für das Herausführen der Kabel für Sensor und Pumpe ergaben. Dazu bohrte ich noch Löcher für die Verschraubung des USB-B Steckers und der Platine. Auch in die Platine habe ich passend vier Löcher gebohrt, die weit genug von den Komponenten entfernt waren. Die entstandenen Kanten habe ich so gut wie möglich abgeschliffen.

Danach klebte ich den Lautsprecher mit Holzleim in die vorgesehene Öffnung und verschraubte den USB Stecker.

Das Kabel des USB Steckers habe ich aufgeschnitten und die nötigen Adern für 5 Volt und Masse an die Platine gelötet. Auch die Lautsprecherkabel habe ich jetzt festgelötet.

Kiste mit Kabeln und Lautsprecher in der Rückansicht

Das Releay ist nur mit einem Kabelbinder auf der Platine befestigt, da keine Füßchen zum anlöten vorhanden sind.

Für die Platine habe ich vier Gewindeschrauben durch die Bohrlöcher gesteckt und jeweils mit einer Mutter festgeschraubt. Dann habe ich mit Abstand zur Kiste einen weiteren Satz Muttern auf die Schrauben gedreht und die Platine dann mit einem dritten Satz Muttern dagegen gedrückt. Vielleicht nicht die beste Methode, eine Platine zu verbauen, aber ich hatte das Material da.

Die Kabelstränge für den Sensor mit drei Leitungen und die Pumpe mit zwei Leitungen habe ich jeweils mit dünnem Kabelmanagementschläuchen ausgestattet und durch die Öffnung zwischen Deckel und Korpus der Kiste geführt. Auf der Innenseite habe ich dann einen Kabelbinder an beiden Strängen befestigt, damit dieser verhindert, dass an den Lötstellen gezogen wird.

Innere der Kiste mit Schaltung und Kabeln

Für den Wassertank habe ich für die Tests eine Smoothieflasche aus Glas genommen. Die Beschenkte hat nämlich schon ein Design für den Wassertank im Kopf, so dass ich hier keine Zeit investiert habe. Ich hatte am Anfang aber darüber nachgedacht, eine größere Kiste zu nehmen und den Wassertank darin zu verstecken, so dass nur der Schlauch für das Wasser und der Kabelstrang für den Sensor nach außen führen würden.

Zwischenstand

Alraune in der Gesamtansicht mit Ginseng, Wassertank und Kiste mit Schaltung

Die Alraune war soweit aufgebaut. Was noch fehlte war die richtige Ansteuerung der Pumpe, Logik für Logging, automatische Updates über das Netz, Abspielen der richtigen Sounds, die Sounds selbst, Statusseite, Setup fürs WLAN und und und. Damit der Artikel nicht zu lange wird, teile ich das auf weitere Artikel auf, die bald folgen werden. Beim Code waren schon noch einige Steinchen aus dem Weg zu räumen.

Edit: Der Code ist jetzt auf GitHub verfügbar: seism0saurus/alraune

Bis bald,

seism0saurus

Dieser Blogbeitrag wurde vom Autor unter der CC BY 4.0 lizenziert.