Die DosingTime Platine ist entstanden aus einer kleinen Abwandlung des MiniControllers. Dabei wurde alles zur Steuerung des LED Teils ausenvor gelassen, dafür Schaltung von Steckdosen hinzu genommen.

Somit ergibt sich von der Funktion her eine 7fach Düngersteuerung und 4 Fach Steckdosensteuerung. Zusätzlich kann ein Keypad direkt an die Platine angeschlossen werden und es wurden die Pins raus geführt die für den I²C Bus benötigt werden um ein Display an zu schließen.
Als letztes ist noch ein Analoger Pin (A1) per Steckerleiste verfügbar, dieser kann aber auch als Digitalpin zum Anschluß eines Temperatursensors (DS18B20) verwendet werden.

Um die Platine möglichst klein Produzieren zu können sind alle Bauteile auf der Rückseite der Platine angeordnet zwischen den Beinen des Arduino Nanos. Leider versperrt im jetzigen Design aber der Batteriehalter für die RTC den USB Port. Hier muss noch einmal nachgebessert werden. Leider würde dies nur weit größere Platinen ergeben, weswegen dies auf die nächste Board Version verschoben wurde. Um den USB Port aber nicht zu verdecken empfehle ich den Halter der RTC Batterie auf die Rückseite zu Löten, das macht die Platine „unförmiger“ zum einbau aber bequemer zum Programmieren.

2014-06-17 22.54.072014-08-12 20.15.142014-08-12 20.13.132014-08-12 20.13.34

Zur Steuerung und der Software:
Bei der Entwicklung wurde drauf geachtet das der Code sehr nah an der MiniControl Steuerung ist. Der Dosierteil wurde daher komplett übernommen. Auch die Funktionen für LCD, Serial Communication und Keypad sind gleich geblieben, wurden nur soweit modiviziert das die Relay Steuerung Platz hat.

Wie bei der MiniControl wurde der Sourcecode auch auf GitHub zur Verfügung gestellt und in die Arduino IDE unter Beispiele eingebaut.

Die wichtigsten Config einstellungen möchte Ich euch aber hier kurz erklären:

Fangen wir an mit dem Üblichen. Im ersten Teil werden die Anzahl der Pumpen, Relays und Adressen fest gelegt. Relays müssen 4 drin bleiben da mehr im Layout nicht vorgesehen sind. Die Pumpen sind ebenfalls an die Anschlüsse gebunden. 7 Sollten sthen gelassen werden, auch wenn nur 4 angeschlossen sind.

#define PUMPCOUNTS 7 // Number Pumps
#define RELAYCHANNELS 4
#define RELAYTIMES 6
#define KEYPADI2C 0x20
#define LCD_ADR 0x27

Als nächstes kommt das Pin mapping. Da die Platine kaum abweichungen erlaubt sollte dies auch so bleiben.

// PIN MAPPING NICHT ÄNDERN!!!
#define PIN_TEMP A1 // Temperatur
#define RELAY1 2
#define RELAY2 3
#define RELAY3 4
#define RELAY4 5
#define DOSE7 6 // Dosierpumpe
#define DOSE6 7 // Dosierpumpe
#define DOSE5 8 // Dosierpumpe
#define DOSE4 9 // Dosierpumpe
#define DOSE3 10 // Dosierpumpe
#define DOSE2 11 // Dosierpumpe
#define DOSE1 12 // Dosierpumpe

Auch bei dieser Steuerung habe ich wieder die möglichkeit gegeben im Display den Füllstand des Düngers an zu zeigen. Wenn Ihr z.b. 1L habt tragt hier 1000 ein. Die anzeige später ist in % (bei LCD) oder ml (bei Oled), also maximal 100(%)/1000(ml).

// Größe Vorratsflaschen Dünger in ml
const int dose_val = 1000;

Ich weiß das ich mir nicht immer merke welches Kabel ich zu welcher Pumpe lege. Daher auch hier die Anpassung der Dosierpins. So kann man bequem Pumpe 1 am dritten Pin haben. Achtet bitte drauf dass der Wert PUMPCOUNTS gleich ist zu der Anzahl an werten im Array. Habt ihr oben also 5 hinterlegt dann gehören hier auch 5 rein (7 Standart).
Zusätzlich sollten die Pumpen dann einmal geeicht werden und der Wert eingetragen werden. Hierfür müsst ihr im Serial Monitor „3=2:60“ eingeben um pumpe 2 60 Sekunden pumpen zu lassen. Den Wert dann messen und die ml eintragen. Bitte aufpassen: Ich fange bei 0 an zu zählen. 3=0:60 ist also Pumpe1 an pin DOSE1.

// Neu zuordnung der Pins für Dosierung
const byte dosingPins[PUMPCOUNTS]={DOSE1,DOSE2,DOSE3,DOSE4,DOSE5,DOSE6,DOSE7};
// Milliliter per minute in Reihenfolge wie Pumpen oben Achtung Maximum 255ml/Minute
const byte dosingMlMin[PUMPCOUNTS]={60,60,60,60,60,60,60};

Wieder das wichtigste: Wie wollen wir überhaupt dosieren? Als erstes wieder die Uhrzeit mit komma getrennt (10,0,0 ist 10:00:00 Uhr). Dann die einstellung ob Pumpe Aktiv (1) ist oder ignoriert werden soll (0). Zur orientierung könnt ihr einen Namen vergeben, ABER nur 2 Zeichen. „EI“ für Estimate Index geht, „Nitrat“ statt „NO“ allerdings nicht. Danach kommt der Pin der Pumpe. Ich benutze die Stelle in der Ihr es unter dosingPins geschrieben habt. 0 ist also DOSE1, 3 wäre DOSE4. Ihr könnt die Zahlen natürlich mehrfach schreiben um eine Pumpe mehrmals am Tag Pumpen zu lassen. Als letztes kommen dann noch die Exakten ml die dosiert werden sollen.
Soltet ihr eine Pumpe mehrfach nutzen wollen und mehr als 7 Schaltzeiten benötigen dann kopiert eine Zeile und erweitert so die Dosierzeiten. WICHTIG: Bei 7 Pumpen können unter Pins nur werte zwischen 0 und 6 eingegeben werden!

/ Pumpen Einstellungen
// Uhrzeit, Aktive, Name, Pin Adresse (von array oben 0 ist erste Pumpe "Dose1") Milliliter pro Dosierung
const PUMP dosing[] = {
{get_ts(10,0,0),1,"D1",0,5},
{get_ts(11,0,0),1,"D2",1,6},
{get_ts(11,25,0),1,"D3",2,3},
{get_ts(11,26,0),1,"D4",3,3},
{get_ts(11,23,0),1,"D3",4,3},
{get_ts(11,28,0),1,"D1",5,5},
{get_ts(11,28,0),1,"D1",6,5},
};

// Wird verwendet um zu sehen ob schon dosiert wurde. Nicht Ändern!!!
boolean dosingState[sizeof dosing / sizeof dosing[0]];

Sagt alles: NICHT ÄNDERN!!!

Die Relay einstellungen sind fast gleich zu den Dosiereinstellungen. Erstmal die Pins wie die Relays angeschlossen sind.
Danach kommen die Schaltzeiten. Wichtig ist hier das der Controller logisch vorgeht. Er erwartet also das die 2te Zeit später ist als die erste. Die 0 und 1 dahinter definiert ob er ein oder ausschalten soll. Hier gibt es allerdings unterschiede in den Relays und dem Anschluss. Ihr müsst also notfalls ausprobieren ob 0 ein oder 0 aus bedeutet.

const byte relayPIN[]= {RELAY1,RELAY2,RELAY3,RELAY4};
RELAY relays[RELAYCHANNELS][RELAYTIMES] = {
{{get_ts(0,0,0),1},{get_ts(17,10,0),0},{get_ts(17,15,0),1},{get_ts(17,20,0),0},{get_ts(17,25,0),1},{get_ts(17,30,0),0}},
{{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}},
{{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}},
{{get_ts(0,0,0),0},{get_ts(10,0,0),1},{get_ts(11,30,0),0},{get_ts(19,0,0),1},{get_ts(20,0,0),0},{get_ts(21,30,0),0}}
};

Wenn ihr dies eingestellt habt könnt ihr den Sketch auch schon hochladen. Danach müsst ihr noch den Serial Monitor aufrufen und die Uhrzeit über „1=2014/03/05/18:28“ (Jahr,Monat,Tag,Stunde,Minute) einstellen. Achtet drauf das unten rechts 9600 Baud und „Sowohl NL als auch CR“ steht.

Noch kurz zum Keypad:
Die Tasten A,B,C,D Schalten die Relays an bzw aus (im Wechsel). Da damit die Automatik ausgehebelt wird müsst Ihr 9 drücken um wieder im in automatik Modus zu kommen.
1-7 steuern die Pumpen die im dosingPins hinterlegt sind. Jeder Tastendruck fördert wieder einen ml. Langes drücken dieser Tasten „füllt“ die Vorratsflasche zu 100% auf.

Das Projekt als DIY gibt es auf Flowgrow unter Dosierpumpen mit Schaltsteckdosen – Ein AquaGrow Mod

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.