Marcel Krüger

Selbstbau Düngedosierung mit Raspberry Pi

Mit Kanonen auf Spatzen

11. Dez. 2019

Gesamtaufbau

Warum düngen?

Für ein stark bepflanztes und beleuchtetes Aquarium ist eine Düngung unerlässlich. Gerade dann wenn sich wenig Bewohner darin befinden, die von pflanzen verwertbare Nährstoffe ausscheiden.

Eine tägliche Düngung ist, gegenüber der wöchentlichen, optimal, aber dank meiner Vergesslichkeit oft ausgefallen. Dies erzeugt ein Nährstoffungleichgewicht im Aquarium, was dem Pflanzenwachstum schadet und gleichzeitig das Algenwachstum fördert. Die Lösung: Düngeautomat. Das Problem: Teuer. Daraus folgt: DIY.

Vorerst soll Eisenvolldünger und Makrodünger von dem Automat gedüngt werden. Zusätzlich soll es noch einen Extrakanal geben für einen Dünger, den ich später evtl. düngen will. Drei Pumpen müssen demnach angesteuert werden.

Zur Steuerung der Dosierpumpen soll ein Raspberry Pi zum Einsatz kommen, der hier momentan herumliegt und keine Verwendung hat. Der Raspberry Pi mit Netzteil und SD-Karte kostet rund 50 €. Diese Lösung stellt eine quick and dirty Zwischenlösung dar, bis der sich in Planung befindliche Aquariencomputer fertig ist. Die Steuerung mit dem Raspberry Pi ist also eher etwas für solche, die entweder einen Raspberry Pi übrig haben der den Raspberry Pi weiter zur Aquariensteuerung ausbauen wollen. Ansonsten ist der Pi, mit einem vollwertigen Linux als Betriebssystem, doch etwas überdimensioniert um einmal am Tag zwei Pins zu schalten.

Hardware

Der Raspberry Pi kann die Pumpen nicht direkt antreiben. Die Himbeere schafft höchstens 3 mA bei 3,3 V pro Kanal. Es muss zusätzlich noch eine kleine Schaltung her, die über Transistoren und Relais die Pumpen schaltet. Die tägliche Düngung soll über ein Bash-Skript realisiert werden. Dieses soll per CRON ein Mal täglich zur gewünschten Zeit ausgeführt werden.

Als Hardware kommen drei Dosierpumpen von eBay zum Einsatz. Jeweils für ca 15 € zum selbst ausbauen aus einem kleinen elektrischen Gerät, wie es in der Beschreibung so schön heißt. Dazu ein bisschen Sperrholz, Schrauben für ein „Gehäuse“ und ein bisschen Elektronik. Hier die Bauteilliste im Detail:

Anzahl Bezeichnung Bezugsquelle Preis gesamt
3 Dosierpumpen Ebay 50 €
3 Sperrholz 12 mm x 240 mm x 85 mm Baumarkt 2 €
1 Sperrholz 12 mm x 240 mm x 350 mm Baumarkt 2 €
1 Raspberry Pi mit Netzteil und SD-Karte z.B. Reichelt ~ 50 €
3 Relais Finder FIN 36.11 5V Reichelt 3 €
1 Steckernetzteil 9 V Reichelt 7,50 €
3 Transistor BC548A Reichelt 0,15 €
- Kabel, Widerstände (4,7 kΩ), Freilaufdioden Reichelt, Vorräte -
1 Schlauch 2,5 m (CO2 Schlauch) Baumarkt 2,70 €
Summe ~ 117,35 €

Aufbau

Flaschenhalterung und Pumpen

Mein Aufbau ist angelehnt an diese Dosieranlage eines Nutzers von flowgrow.de. Sie besteht aus einer Bodenplatte, auf der die 500 ml Düngerflaschen stehen, einer weiteren Platte über der Bodenplatte mit großen Löchern, in der die Flaschen stehen, um einen sicheren Stand zu gewährleisten (mangels Lochsäge noch nicht umgesetzt), einer Platte, an der die Pumpen befestigt sind und eine Rückwand, die das Ganze verbindet. Zusammen gehalten werden die Platten durch je zwei Schrauben und etwas Leim.

Pumpen und Sub-D

Relaisplatine

Relaisplatine

Zum schalten der Pumpen mit einem Ausgang des Raspberri Pi wurde eine Relaisplatine entworfen. Der Raspberry Pi liefert höchstes 3 mA an seinen Ausgängen, was nicht reicht um die Relais zu schalten. Es ist demnach ein Transistor von Nöten, der den höheren Strom schaltet. Eine Diode parallel zum Relais baut die beim abschalten der Spule entstehende Spannungsspitze ab. Nachfolgend der Schaltplan des Aufbaus.

Schaltplan

Bestimmung des Durchflusses

Um später die gewünschte Düngemenge düngen zu können, muss natürlich noch die Fördermenge der Pumpen bestimmt werden. Dafür habe ich die Pumpen einzeln je 10 Minuten von einem vollen Wasserglas in ein leeren Behälter fördern lassen. Anschließend habe ich die geförderte Menge durch das auspumpen des Gefäßes mit einer 5 ml Spritze bestimmt. Wesentlich schneller und weniger nervig wäre hier eine genaue Küchenwaage, oder ein genauer Messbecher.

Software

Die Software, die die Ansteuerung der Pumpen übernimmt ist nichts anderes als ein simples Bash-Skript (siehe unten). Im Array fertilize werden die Zeiten in Sekunden angegeben, die der jeweilige Kanal eingeschaltet sein soll. Danach folgen die Funktionen zur Initialisierung der GPIO Pins des Raspberry Pis und die zum ein- und ausschalten der Relais. Der eigentliche Programmablauf folgt am Ende der Datei. Zuerst wird die Initialisierungsfunktion aufgerufen, anschließend werden die einzelnen Düngekanäle nacheinander ein und ausgeschaltet. Das Skript wird von CRON zu einem beliebigen Zeitpunkt aufgerufen. Bei mir sieht der Eintrag in die Crontab zum täglichen Düngen um 10 Uhr morgens folgendermaßen aus:

0 10 * * * /bin/bash /root/fertilize.sh

Die Crontab wird üblicherweise mit crontab -e bearbeitet. Nicht vergessen: Das Skript muss ausführbar sein, sonst wird sich nichts tun! Dies erreicht man mit chmod +x fertilize.sh

Im Folgenden das komplette Skript.

#!/bin/bash

fertilize[0]=2.8 # 1 ml
fertilize[1]=1.2 # 0.5 ml
fertilize[2]=0

function init {
    if [ ! -f /sys/class/gpio/gpio17/direction ]
    then
        echo "17" > /sys/class/gpio/export
        echo "out" > /sys/class/gpio/gpio17/direction
    fi

    if [ ! -f /sys/class/gpio/gpio22/direction ]
    then
        echo "22" > /sys/class/gpio/export
        echo "out" > /sys/class/gpio/gpio22/direction
    fi

    if [ ! -f /sys/class/gpio/gpio23/direction ]
    then
        echo "23" > /sys/class/gpio/export
        echo "out" > /sys/class/gpio/gpio23/direction
    fi
}

function relais1_on
{
    echo "1" > /sys/class/gpio/gpio17/value
}

function relais1_off {
    echo "0" > /sys/class/gpio/gpio17/value
}

function relais2_on {
    echo "1" > /sys/class/gpio/gpio22/value
}

function relais2_off {
    echo "0" > /sys/class/gpio/gpio22/value
}

function relais3_on {
    echo "1" > /sys/class/gpio/gpio23/value
}

function relais3_off {
    echo "0" > /sys/class/gpio/gpio23/value
}

init
relais1_on
sleep ${fertilize[0]}
relais1_off
sleep 0.2
relais2_on
sleep ${fertilize[1]}
relais2_off
sleep 0.2
relais3_on
sleep ${fertilize[2]}
relais3_off