Konfiguration DIY Controller

*Update 18.04.2014*
*Update 23.07.2014*

Nachdem wir alle Komponenten getestet haben wollen wir nun einmal unseren richtigen Sketch laden, einstellen und testen.

Hierzu laden wir erstmal die DIYMinimalistikController.ino und wechseln zum Tab config.h.

config

Schauen wir uns die Datei mal im einzelnen an:

#define PUMPCOUNTS 4 // Number Pumps
#define LIGHT_CHANEL 8 // Anzahl LED Kanäle
#define LIGHT_VALUES 8 // Zeiten Pro Kanal
#define KEYPADI2C 0x20 // Adresse Keypad
#define LCD_ADR 0x27 // Adresse LCD
#define LED_DRV 0x40 // Adresse LED Driver, bei mehreren 0x70 eingeben für Broadcast adresse


PUMPCOUNTS steht für die Schaltzeiten. NICHT für die Anzahl der Pumpen. Wir können also z.B. 3 Pumpen je 2 mal am Tag Schalten oder 2 einmal und 2 2 mal.
LIGHT_CHANEL ist für die Verfügbaren Kanäle. 8 da wir immer 2 zusammen gefasst haben. Solltet Ihr diese Zahl verändern (auf 16 z.B.) müsst Ihr an anderer Stelle auch Dinge ändern. Das kommt später erst wie das geht.
LIGHT_VALUES ist die Anzahl an Programmierbaren Zeiten. Wenn Ihr z.b. nur einmal rauf und später wieder runterdimmen wollt reichen auch 4. Das spart Speicher.
KEYPADI2C Ist die Adresse des Port Expanders für das Keypad. Diese solltet Ihr euch mit dem I2C Scanner auslesen oder in der Beschreibung des Moduls schauen. Bei dem von mir bestellten und auf der Platine verbauten ist es 0x20.
LCD_ADR ist die Adresse des LCD Backpacks. Tragt die aus dem LCD Test ein.
LED_DRV steht für das PWM Driver Modul. Es hatte 2 Adressen, eine (0x70) ist die sogenannte Broadcast Adresse. wenn Ihr mehrere Module habt kann man darüber alle gleichzeitig ansprechen. Für uns relevant ist aber erstmal nur die andere.


#define NANO
//#define AGMINI

Hierdrüber „steuern“ wir welches Board wir besitzen und welches Pinmapping geladen wird. Wenn wir also den Nano verwenden wollen müssen wir nix machen. Sollten wir noch die erste Version des Minicontrollers besitzen müssen wir die // vor #define AGMINI weg nehmen und vor Nano setzen:

//#define NANO
#define AGMINI


/ PIN MAPPING NICHT ÄNDERN!!!
// Pin Mapping für Nano
#define PIN_TEMP 4 // Temperatur
#define DOSE1 6 // Dosierpumpe1 (Nahe an LED)
#define DOSE2 7 // Dosierpumpe
#define DOSE3 8 // Dosierpumpe
#define DOSE4 9 // Dosierpumpe
#define DOSE5 10 // Dosierpumpe
#define DOSE6 12 // Dosierpumpe6 (Nahe an + Pol / Keypad)
#define PIN_PWM 11 // PWM PIN // Lüfter


Hier werden die einzelnen Pins konfiguriert und was dort angeschlossen ist. Wer sich an meine Vorgaben hält muss hier nix ändern. Nach dem oben angegebenem Board wird automatisch das richtige geladen.

Nun geht es an den „richtigen“ Teil:
// Temperatur ab Wann Lüfter an gehen (Ganzzahl)
const int coolingTemp = 40;
const float cTemp = 60;
// Geschwindigkeit der Lüfter -> 0 Aus, 255 Maximale Geschwindigkeit
const int pwmValue = 255;

coolingTemp ist die Temperatur wo die Lüfter anfangen zu regeln. Wichtig ist das es eine „Ganzahl“ ist, also kein 32,5. Sollte diese Temperatur überschritten werden drehen die Lüfter auf. Falls die Lüfter zu schnell drehen oder zu laut sind könnt ihr sie mit pwmValue „drosseln“. Der wert muss zwischen 0 und 255 liegen und manche Lüfter starten erst bei 100 oder so. Testet einfach nen bisschen rum welches Value besser ist.
cTemp ist eine „Emergency Temperatur“ sollte dieser Wert erreicht werden (was ich nicht hoffe) schalten Die LEDs aus. 50°C ist dabei schon ein guter Max wert. denkt daran das die LED Wärmer werden als die Kühler Luft.

// Größe Vorratsflaschen Dünger in ml
const int dose_val = 500;
Hier können wir die Anzeige des Düngervorrats bestimmen. Tragt die ml Menge er Flaschen ein. Wer zum Beispiel die großen Aquasabi Flaschen hat 1000 für 1Liter. Hieraus errechnet sich dann wieviel % noch in den Flaschen sind und wann Ihr auffüllen müsst. Mit dem Keypad reset wird dieser wert wieder in den arduino speicher geschrieben. Wer 500ml und 1000ml Flaschen dran hat sollte 1000 rein schreiben und bei 50% auswechseln.


// Neu zuordnung der Pins für Dosierung
const int dosingPins[]={DOSE1,DOSE2,DOSE3,DOSE4};
// Milliliter per minute in Reihenfolge wie Pumpen oben
const int dosingMlMin[]={60,60,60,60};

Hier legen wir fest welche Pumpe wo angeschlossen ist. Sagen wir Ihr habt ausverehen die Ganz Rechte Pumpe an den 3ten Pin angchlossen, dann könnt Ihr das hiemit Korrigieren. In diesem Faalle Wäre es Dose3,Dose1,Dose2,Dose4.
Zum besseren Einstellen der ml kann man zusätzlich hinterlegen wieviel die Pumpen pro 60 Sekunden fördern. Diesen Wert kann man über Serial ermitteln und dann eintragen. Wichtig: Jeder Pumpe gehört ein Wert. Der erste Wert der Pumpe die unter Pins als erstes Steht (also Dose1).

Es ist eigentlich nur ne kleine Hilfe für den Code und müsste nicht verändert werden, außer ihr habt mehr Pumpen dran oder mit anschließen vertan.


// Pumpen Einstellungen
// Uhrzeit, Aktive, Name, Pin Adresse (von array oben 0 ist erste Pumpe "Dose1"), Status (ignorieren, nur wichtig für Programm), Milliliter pro Dosierungconst
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),0,"D3",2,3},
{get_ts(11,26,0),0,"D4",3,3},
//{get_ts(11,23,0),0,"D3",2,3},
//{get_ts(11,28,0),0,"D1",0,5},
};

Hier geht die Eigentliche Konfig der Pumpen los. Jede Zeile steht dabei für
Uhrzeit, ist Schaltzeit Aktive (1 für an, 0 für aus), Dünger Name (nur für euch zum merken, maximal auch nur 2 Zeichen), Welche Pume genutzt wird, Milliliter des Düngers was gedüngt werden soll.
Wenn wir zum Beispiel jeden Morgen um 10:30 4ml Eisen Düngen wollen auf der Pumpe die am Pin angeschlossen ist, der im Array dosingPins als erstes steht dann sieht die Zeile so aus:
{get_ts(10,30,0),1,"Ei",0,4},

Kommen wir zum Licht:
// Licht Einstellungen immer paar aus Uhrzeit und % angabe. Je reihe Zahl von LIGHT_VALUES, so viele Reihen wie in LIGHT_CHANEL
LIGHT light_channels[LIGHT_CHANEL][LIGHT_VALUES] ={
{{get_ts(0,1,0),0},{get_ts(10,0,0),0},{get_ts(11,30,0),100},{get_ts(19,0,0),100},{get_ts(20,0,0),0},{get_ts(21,30,0),0},{get_ts(23,30,0),0},{get_ts(23,32,0),0}},
{{get_ts(0,1,0),0},{get_ts(9,0,0),0},{get_ts(11,0,0),100},{get_ts(19,0,0),100},{get_ts(21,0,0),0},{get_ts(21,30,0),0},{get_ts(23,30,0),0},{get_ts(23,32,0),0}},
{{get_ts(0,1,0),0},{get_ts(10,0,0),0},{get_ts(11,30,0),100},{get_ts(19,0,0),100},{get_ts(20,0,0),0},{get_ts(21,30,0),0},{get_ts(23,30,0),0},{get_ts(23,32,0),0}},
{{get_ts(0,1,0),0},{get_ts(9,0,0),0},{get_ts(11,0,0),100},{get_ts(19,0,0),100},{get_ts(21,0,0),0},{get_ts(21,30,0),0},{get_ts(23,30,0),0},{get_ts(23,32,0),0}},
{{get_ts(10,30,0),0},{get_ts(11,30,0),0},{get_ts(12,30,0),0},{get_ts(13,30,0),0},{get_ts(14,30,0),0},{get_ts(15,30,0),0},{get_ts(16,30,0),0},{get_ts(17,30,0),0}},
{{get_ts(10,30,0),0},{get_ts(11,30,0),0},{get_ts(12,30,0),0},{get_ts(13,30,0),0},{get_ts(14,30,0),0},{get_ts(15,30,0),0},{get_ts(16,30,0),0},{get_ts(17,30,0),0}},
{{get_ts(0,1,0),0},{get_ts(8,30,0),0},{get_ts(9,0,0),20},{get_ts(9,30,0),0},{get_ts(20,0,0),0},{get_ts(20,30,0),70},{get_ts(21,0,0),0},{get_ts(23,30,0),0}}, //Rot
{{get_ts(8,30,0),5},{get_ts(9,30,0),0},{get_ts(20,30,0),0},{get_ts(21,0,0),40},{get_ts(21,30,0),20},{get_ts(21,50,0),10},{get_ts(21,55,20),10},{get_ts(23,55,20),5}} // Blau
};

Sieht kompliziert aus? Ist es aber nicht… Eigentlich kann man alles auf einen kleinen Block reduzieren der sich immer wieder wiederholt:
{get_ts(0,0,0),0}
Zuerst holen wir uns mit get_ts() eine Uhrzeit. In () steht nur Stunde,Minute,Sekunde. Also für 14:43:20 wäre das get_ts(14,43,20). Danach kommt ein „,“ und dann wie hell es sein soll. Das ganze ist in %, also 0-100%. Wenn wir um 14:43:20 zu 78% Dimmen wollen dann ist der Wert: {get_ts(14,43,20),78}.
Wichtig ist das der Controller immer zwischen 2 werten dimmt. Also wenn wir von o auf 50% dimmen wollen zwischen 12:00 und 13:30 dann ist das:
{get_ts(12,0,0),0},{get_ts(13,30,0),50}
Wenn wir die Helligkeit bis 20:00 Uhr haben wollen und dann um 23:30 das Licht aus sein soll ist das:
{get_ts(12,0,0),0},{get_ts(13,30,0),50},{get_ts(20,0,0),50},{get_ts(21,30,0),0}
Sollten wir die 20:00 vergessen fängt er ab 13:30 an aus zu dimmen.
Wichtig ist auch das die Zeiten chronologisch sind, also nicht 10uhr hinter 13 uhr steht ({get_ts(13,0,0),50},{get_ts(10,0,0),50}). Das lässt alles abstürzen.
Da wir nun wissen was ein Wert bedeutet können wir diesen einfach so oft hintereinander schreiben wie wir unter LIGHT_VALUES angegeben haben. Also in unserem Fall 8 mal. Dann kopieren wir die Zeile so oft wie wir Kanäle angegeben haben, also 8 mal. Die Einstellung im Code ist schon für 8×8 richtig. Tauscht nur Uhrzeiten und % aus. Daas Blau/Rot könnt Ihr ignorieren. Das kommt von meinem Becken.

5 Kommentare auf “Konfiguration DIY Controller

  1. Ich lese bei dir immer gerne mit :) und würde mich freuen wenn man die steuerung bei dir kaufen oder nachbauen könnte.

    Wie weit bist du jetzt schon mit der Tageslicht simulation und wie hast du dir die umsetzung vorgestellt?

    Wenn ich zum beispiel 30 LEDs anschliesen möchte braucht man eigentlich nur 1 Kanal wenn ich das richtig verstehe.
    Die LEDs werden ja nur über die mA gedimmt.

    • Hi,
      die Steuerung wird es auf keinen Fall bei mir zu kaufen geben. Alle Teile müssen selber besorgt werden. Ich gebe nur Beispiele wo man die bekommen könnte.

      Eine Tageslicht/Wolkensimulation habe Ich mal programmiert, fand es dann im Aquarium nicht schön mit dem „flackern“. Deswegen hab Ich die rausgeschmissen. Die Tageslicht Simulation im Moment sieht so aus das man die LED Konstant über 10 Werte dimmen kann (Sieht Text). Etwas anderes wird es erstmal auch nicht geben (also keine Wolken oder Mondlicht Simulation), auch weil der Nano nicht „Starkt“ genug dafür ist. Evt später mal…

      30 LED kannst du auf keinen Fall an einen Kanal hängen. Dafür gibt es keine Passenden KSQ. Die Stärksten die Ich kenne haben 53V. Bei normalen High Power LEDs kannst du von 7-8 aus gehen pro Kanal. Der Controller dimmt aber nicht über die mA sondern dadurch das er die LED oft An/Aus schaltet. Eine so genante PWM Dimmung. Wenn du eine Abdeckung bauen willst und Hilfe brauchst empfehle Ich dir das Forum von Flowgrow. Hier im Blog kann Ich diese Hilfestellung leider nicht geben.

  2. Hallo,
    wo bekomme ich die Software DIYMinimalistikController.ino her? Der Link führt ins leere.
    Leider ist bei meiner Anlage der Wurm drin, Uhrzeit verstellt etc.
    Ich bin für jeden Hinweis dankbar.

Schreibe einen Kommentar

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