DIY erreicht das nächste Level

Seit ich angefangen habe mit Controllern, Steuerungen und LED’s zu basteln war eins immer mein Ziel: Eine Alternative zu schaffen zu teuren Markenartikeln und Herstellern.

Jetzt gehe Ich sogar noch einen Schritt weiter: Das Portfolio von AquaGrow wird um alles erweitert was man braucht um Perfekte Aquarienbeleuchtungen zu bauen.
Mit der MiniControl habe ich vor über einem Jahr die Möglichkeit für viele geschaffen LED’s zu dimmen und das Aquarium mit den benötigten Nährstoffen zu versorgen. Seit dem arbeite Ich nicht nur an der Weiterentwicklung des Codes für diese Platine, Ich entwickelte auch ständig an neuen. Mit der MiniTFT ist nun der Nachfolger fertig geworden und befindet sich grade in Produktion. Doch das ist nicht alles was Ich die letzten Monate entwickelt habe. Dimmbare KSQ mit 30 und 40V werden ebenfalls grade Produziert damit fleißig weiter gebaut werden kann.

Die größte Erneuerung ist aber das Ich eine Komplettlösung bieten möchte für alle DIYler, angefangen bei dem Controller, über KSQ und LED’s, bis hin zu Kühlkörpern und Halterungen. Aus dem Grunde habe Ich mir die letzten Monate viele LED’s angesehen, Kühlkörper vermessen, Angebote eingeholt und mit Freunden und Bekannten geschrieben. Raus gekommen sind dabei Lampen die auf jedes Aquarium passen durch flexible Aufsatz oder Seilhalterungen. 6 Verschiedene Multichip Emitter Platinen für Süß- und Meerwasser erfüllen unterschiedliche Wünsche an Spektrum, Lichtfarbe und Effizienz. Hochleistungs-Kühlkörper aus Deutschland sorgen für die Nötige Kühlung und Spritzwasserschutz, sowie Seitenblenden aus lasergeschnittenen Acrylglas geben den Lampen das nötige Finish.

Doch das Herzstück und Highlight der Lampen bleibt der neue MiniTFT Controller mit Touchscreen Bedienung und sehr vielen einfach zu bedienenden Funktionen:

  • 16-Kanal LED Dimmung, Jeder Kanal einzeln mit 10 Zeiten und 12bit (superfeine 4096 Schritte) Dimmung.
  • Temperaturüberwachung des Kühlkörpers mit Notabschaltung der LED’s bei Überhitzung (Temperatur frei Einstellbar).
  • Lüftersteuerung Temperaturabhängig, gib an wann der Lüfter angehen soll und wann er Maximale Kühlung erreicht. Dazwischen wird die Leistung automatisch geregelt. (Maximal 500mA an Lüftern ~3 Stück)
  • 5 Kanal Dosierpumpensteuerung mit Vorratsüberwachung, Manueller Dosierung und Eichfunktion für jede Pumpe einzeln.
  • Sehr genaue, Temperaturkompensierte Echtzeituhr für alle funktionen mit Backup Batterie. Keine Sorge bei Stromausfall oder Hitzeschwankungen. Genauigkeit: 2ppm ~ 1 Sekunde Abweichung Maximal in 5,7 Tagen. (Eine „normale“ DS1307 hat 10ppm wenn es gut läuft bei gleichbleibender Temperatur um 20°C, also über 5fache Ungenauigkeit…)
  • Zusätzliche Erweiterbarkeit der Platine um: (Zusätzliche Hardware/Platinen erforderlich!)
    • Lüftererweiterung für 10 oder mehr Lüfter damit auch größte Lampen gekühlt werden können
    • Wasserstandsüberwachung mit Automatischer Nachfüllung (Weg mit Teuren Nachfüllanlagen, schlechten Sensoren und billigen Tauchpumpen)
    • Wassertemperaturüberwachung mit Lüftersteuerung zum Abkühlen (Keine überteuerten Ventilatorlösungen mehr mit Höllenlärm statt Effizienz)
    • Multiplexen der Dimmkanäle: Erweitert die Dimmung kostengünstig um 16 oder 32 zusätzliche Kanäle
    • Updatefähig: Spielt neue Software über Funk, Wlan, USB oder Bluetooth auf

Aber das eigentliche Highlight an der Steuerung ist die Einstellbarkeit über das 2,4 Zoll TFT Display:

2015-03-23 23.12.29

  • Alle 16 Kanäle auf einen Blick mit prozentualer Helligkeit
  • Jeder Kanal Farblich passend einstellbar, seht direkt welcher Kanal Kaltweiß, Weiß, Rot oder blau ist (11 Farben zur Wahl)
  • Tagesverlauf mit einem wisch über das Display einstellbar, Zeiten Minutengenau wählbar,
  • Schutz vor Fehleinstellungen bei Zeiten und Prozent
  • Manuelle Helligkeit zum abstimmen des Lichtes aller 16 Kanäle
  • 5 Dosierpumpen mit täglicher Dosierung von 1-100ml, bis zu 10 Dosierzeiten täglich beliebig verteilbar.
  • ml genaue Kalibrierung jeder Pumpe einzeln
  • Einstellbare Vorratsflaschengröße die bei jeder Dosierung (manuell oder automatisch) reduziert wird. Im Display sieht man direkt wie viel noch in den Flaschen/Kanistern ist.
  • Einfache Temperatureingabe ab wann der Lüfter kühlen soll, wann er maximal dreht und wann die LED’s in Not aus gehen. Leistung wird bei Unterschreitung automatisch reduziert und im Sicheren bereich gehen LED’s wieder an
  • Bei Wassertemperatur Überwachung schaltet Display alle 10 Sekunden zwischen Wasser und Kühlkörper Temperatur um, beide sind immer im Blick
  • Bei Aktivierter Vorratsautomatik wird angezeigt wie viel Wasser noch im Vorrat ist und Automatisch angepasst.

 

Ihr wollt mehr Erfahren? Im laufe der Woche gibt es mehr Details und sobald die letzten Bestellungen eingetroffen sind ist sofort alles verfügbar!

Vorzeitige Weihnachten

Weihnachten… Die Zeit des Kommerzes und des Sinnlosen Geldausgebens wo nicht das harmonische Beisammensein mit der Familie wichtig ist sondern es einzig und alleine darum geht wer das neuste, modernste und teuerste Geschenk kauft und am besten noch etwas was die Familie und besonders die Kinder dazu bringt das man nicht mehr mit ihnen spielen muss sondern sie ganz bequem vor dem Computer, Konsole oder so parken kann!

Ja man kann es erahnen, Ich bin kein Freund der modernen Entwicklung und dem was die Werbung uns suggeriert, da Ich aber meine Postings gerne mit einem einleitenden Satz eröffne empfand ich es als akzeptabel einmal ein wenig Kritik an der Werbung und unserer Konsumgesellschaft zu üben.

 

Nun aber wieder zurück dazu warum Ich hier vor frühzeitigen Weihnachten spreche:
Auch Ich bin dem Kaufrausch verfallen und habe neues Spielzeug gekauft für das nächste Jahr. Zuerst einmal wäre da etwas wo Ich nun schon seit März dran arbeite, Einen Controller auf Sam3x8e Basis (aka Arduino Due) mit Touch display und jeglichem Scheiss den ich mir in meinem Kranken Kopf ausdenke…
Zuerst wollte ich diesen als Addon Platine entwickeln, einfach auf zu stecken auf einen Due mit allen benötigten Anschlüssen. Hierfür existieren inzwischen auch mehrere Prototypen und die Menüs und einstellungen sind fast fertig. Doch der Lötaufwand für eine solche Platine, der EK des Due in Deutschland ist mit 40-50€ recht hoch. Klar man kann diesen natürlich in China für 15€ kaufen als Clone, was Ich ja auch mache aber trotzdem… Ich wollte einen Controller der auf das Optimiert ist was Ich mir vorstelle.

Ich präsentiere, den Prototypen des AquaGrow Sam3 Controllers

Sam3

Die entwicklung ist inzwischen allerdings sehr richtung Meerwasser gegangen, obwohl immer noch alle wichtigen Funktionen des Süßwassers unterstützt werden.
Anschluss für MiniControl mit 6 Dosierpumpen, Ventilator, LED Temperaturüberwachung, 16 (Einzel-)Kanal LED Dimmung, 3 zusätzlichen Digital/Analoge Ports
TFT Anschluss für „standard“ 8bit parralel, SD Card, Touch (3,2″/5″)
10 Analoge/Digital Ports, 4 Digital Ports zur freien Verfügung -> Anschluss Sensoren für Wasserstand, Nachfüllautomatik, 2x Futterautomat, Lebendfutter ect
RF433Mhz Sockel zum Auslesen/ansteuern von Funksteckdosen
2 Steckplätze für Atlas Scientific Stamps wie PH, Leitwert, Redox
2 Zusätzliche Temperatursensoren -> Wassertemp, Bodentemp mit Differenz Steuerung
2 Strömungspumpen oder andere PWM Steuerungen
1 Oscilattionssteuerung für Meeresströmung/Wellenbewegung über Servos
Zusätzlich kann noch 1 I2C Kanal getrennt abgegriffen werden und die Sam3 interne Uhr mit Backup Batterie verwendet werden. Wenn das klappt ist man in zukunft nicht mehr auf die RTC der Mini angewiesen und ich könnte da auch kleinere, günstigerere Boards bauen (Zukunftspläne).

 

Mein 2tes Geschenk besteht dann in dem wunsch kleine, Flache Lampen mit hohem Bedienkomfort bauen zu können mit LED Dimmung. Hierfür wurde eine Minicontrol auf das wichtigste kastriert und um SPI Interface erweitert. Dazu ist der Nano Sockel runter geflogen und ein MCU mit passendem Serial USB Converter drauf gekommen… Hört sich kompliziert an? ist es aber nicht. Denkt euch einfach ein TFT, so groß wie ein Feuerzeug mit LED Dimmung und Ihr wisst was ich vor habe. Das ganze soll dann aber nach wie vor auch über eine Temperatur und Lüftersteuerung verfügen und möglichst einfach ein zu stellen sein. Der USB ist eigentlich auch nur für Updates da, weil Ich den gesammten Code schon vorab aufspielen kann.

MiniTFT

Sollten die Platinen und die umsetzung der Sam3 erfolgreich sein wird die Version 1.2 der MiniControl ebenfalls über fertige Controller verfügen anstelle der Nano Sockel. Statt verbindungen zum Sam3 wird die Platine dann reduziert und für LED und Dosierpumpen eine neue Platine treten ohne Uhr aber den erweiterungen die im jetzigen Layout nicht zur verfügung stehen,

 

Zu guter letzt habe Ich mich einmal mehr meinen KSQ angenommen. Nachdem Ich wusste das Ich den Strom und Helligkeit über Poti einstellen kann, warum dann nicht diesen auf die Platine setzen, sie vorab auf 1200mA einstellen lassen und jedem User die chance geben „seinen“ Strom selber zu bestimmen? Gesagt, getan: neue KSQ sind auf dem weg. Dank eines Bekannten habe Ich auch in einem ein Upgrade geplant des LED driver IC. Sollten diese Platinen funktionieren werden in Zukunft Chips verbaut die bis zu 40V Pro Kanal ab können und somit (durch Verfügbare Netzteile) ohne weiteres bis 35V (36V Netzteil) belastet werden können.

KSQ_ZLED

 

Und dann noch etwas ganz wichtiges: Alle Platinen wurden mit 3mm Bohrungen versehen um sie endlich vernünftig an bringen zu können.

Freut euch mit mir aufs neue Jahr!!!

 

10 mal abgeschnitten und immer noch zu kurz…

Kennt Ihr den Satz? Ich auch. *grins

Mittlerweile haben einige den Controller in betrieb und so kommt auch immer mehr Rückmeldung. Dabei tauchen auch kleine Fehler auf die mir nicht aufgefallen sind, Ich aber dokumentieren möchte bevor ich sie fest ändere und somit auch ein bugfixen ohne komplettes löschen des Codes möglich ist.

1.: in der datei keypad.ino Zeile 35:
if(dimming[chanel].level==1){
dimming[chanel].level=0;
ledDriver.setLEDOff(chanel*2);
ledDriver.setLEDOff(chanel*2-1);
manualLight=true;
}else if(dimming[chanel].level==0){
dimming[chanel].level=1;
ledDriver.setLEDOn(chanel*2);
ledDriver.setLEDOn(chanel*2+1);
manualLight=true;
}

Wichtig hierbei die Zeile „ledDriver.setLEDOff(chanel*2-1);“. Es muss heißen
ledDriver.setLEDOff(chanel*2+1);

2.: Das manuelle Dimmen durchs Halten der Taster (wie hier beschrieben:
http://aqua-grow.de/jetzt-wird-es-ernst/) funktioniert gar nicht. -> Ja es musste leider deaktiviert werden durch speicher Probleme… Hoffe das es später mal wieder kommt.

3.: Die ausgabe im Serial Monitor ist wärend der Programmierung geändert, aber nicht dokumentiert wurden. Ich werde versuchen mal ne etwas sinnigerere Ausgabe zu schrteiben und diese dann ein zu bauen.

4.: Die LEDs sollten sich über den Serial Monitor einstellen lassen. Hier scheint es aber ein kleines Problem zu geben welches ich nicht genau gefunden habe. Verantwortlich ist die Zeile 29 aus Serial.ino:
case 2:
pin= input.substring(2,3).toInt();
val= input.substring(4,7).toInt();
setLED(pin,4095-int(val*40.95));
manualLight=true;
Serial.print(pin);
Serial.print(F(" -> "));
Serial.println(4095-int(val*40.95));
break;

Eigentlich stimmt der code. wenn man „2=2:90“ an den Controller schickt sollte dieser mit „2 -> 409“ antworten und dann auf 90% Licht dimmen. evt hilft ein verschieben der Zeile „manualLight=true;“ vor setLED(); (eins nach oben), ich werde das aber noch genau untersuchen und dann schauen.

5.: Wo wir bei den LEDs sind: Ich möchte nochmal drauf hinweisen das der Controller 16 Kanäle dimmen kann ABER nur 8 unabhängig von einander. Das heist Kanal 1 und 2 haben immer die gleiche Schaltzeit, zustand ect. Gleiche auch 3/4,5/6,7/8,…,13/14,15/16.

6.: Wo wir beim dimmen sind: Die Dimmzeit kann man nicht beeinflussen. Das kommt daher das der Contoller IMMER dimmt, von einem zum anderen wert. Also sagen wir um 10uhr habt ihr 20% eingestellt und um 11 soll es hell sein (100%) dann dimmt der von 10-11 von 20% zu 100%. bis 16uhr soll es so hell bleiben, dann 2 stunden runterdimmen: Dafür müsst ihr 16uhr mit 100% erneut angeben und dann 18uhr mit 10 oder 0%. In der Zeit von 11-16 „dimmt“ der controller von 100% zu 100%, ergo er ist immer ganz an. Die Dimmzeit ist also nur die Spanne zwischen einer Uhrzeit und der anderen. So könnt ihr aber auch ne „Kurvendimmung“ machen: (bisschen pseudocode)
10->0%
11->10%
12->30%
13->70%
14->100%
15->0%
19->100%
22->0%
Jetzt dimmt der 4 Stunden, erst langsam, dann schnell ein, eine stunde wieder auf 0, 4 stunden wieder auf ganz hell und 3 stunden langsam runter auf 0%.

Dann hat mir Stefan noch nen schönes Bild geschickt von seiner Lampe beim Testen des Controllers, welches ich finde sieht sehr gut aus und daher möchte ich es euch nicht vor enthalten:

IMG_20140701_215920

Die Produktion hat begonnen

Es ist vollbacht! Heute ist die Bestellung für die Platinen raus gegangen. Mit der geplanten Überproduktion (Ich möchte ja auch noch paar haben) und damit es eine schöne runde Summe ergibt, wurden insgesammt 50 Platinen und KSQ in auftrag gegeben.
Dadurch steht aber auch fest das ich auf jeden Fall noch 10 in reserve habe für die jenigen die sich noch entscheiden müssen. Dann wird es aber bis Juni keine mehr geben, da ich an den nächsten 2 Projekten/Platinen dran sitze und erst wenn dies durch ist werde ich wieder neue Fertigen lassen.
DANKE an alle besteller bisher und die Jenigen die das Projekt unterstützen und mit gestalten.
Zur Info noch meine Pläne:
Wenn alles gut geht werden die Platinen um Ostern rum an mich gesendet. bis 25.4. Sollten Sie aber hier sein. Vor dem 1.5. werde Ich alle Platinen dann aan euch raus schicken.
Über Ostern werde Ich nochmal den gesammten Code Checken und ein HowTo pdf erstellen mit allen schritten und neuen Bildern (sofern Platinen da sind). Dies wird dann natürlich zum Download hier zur verfügung gestellt.
In der Zeit bis der Controller geliefert wird und ich nicht am DIY Touch Controller arbeiten kann, werde Ich an einem Code update arbeiten, da mir 2 Nette Ideen gekommen sind, ich aber nicht weiß ob ich die Umsetzen kann. Dieses soll dann auch mit dem pdf am 1.5. Raus kommen so das alle Anleitungen Final auf einem Stand sind.
Ab diesem Zeitpunkt werde ich einen Strich unter die weiterentwicklung ziehen und nur noch bugfixen falls fehler auftauchen.
Für die Zukunft ist dann geplant das Ich quasi regelmässig die Platinen fertigen lasse und auch immer paar hier habe um Wartezeiten zu verrkürzen. Nach wie vor will ich aber nicht groß Geld damit verdienen sondern nur die Weiterentwicklung refinanzieren. Aus dem Grund wird der Preis auch gleich bleiben, auch wenn ich in Zukunft Geld spare (30€ für die SMD Schablone). Da ich mit 35€ immer noch unter dem Preis der China Komponenten bin ist das denke ich fair. ;)

Ein Controller nimmt Gestalt an

 

 

Ein großes Ziel seit Ich Controller und Steuerungen entwickel war es einen Controller zu schaffen der das hat was man wirklich braucht und nicht durch wahnsinnigen schnickschnack unnötig Teuer ist.
Dabei ist aber vor allem die Frage: Was brauch man wirklich? Eine Frage die Ich zwar für mich beantworten konnte, aber nicht für jeden.

So kam es auch das Ich zu Anfang mit Arduino Mega2560 rum experimentiert habe und dadurch das AquaGrow Shield entstanden ist. Später habe Ich dann angefangen und wollte einen „Richtigen“ Controller basteln der alles kann, erweiterbar ist und neben Temperatur und Dosierpumpen auch noch PH, EC, Redox messen und Regeln kann, Informationen über das Becken bereit hält und vieles mehr…
Ich muss zu geben ein sehr großes Projekt wo mich am meisten aber die Menschen enttäuscht haben die mit mir dran arbeiten wollten. Einzig dadurch dass Ich feststellen musste das immer mehr eigene Interessen in den Vordergrund gerückt wurden und nicht der Endbenutzer der es später nutzen soll.

Aus dem Grunde habe Ich mich von diesem Projekt (erstmal) verabschiedet und mich auf die Entwicklung eines LED Controllers konzentriert.
Ziel war es möglichst günstig und einfach eine LED Abdeckung zu steuern und zu dimmen um Sonnen Auf- und Untergänge zu simulieren. So ist die erste Verion des LED Controllers entstanden. Nach Fehlerbeseitigung, testen und Umgestaltung ist daraus der 2te Controller geworden an dem Ich nun seit 1,5 Wochen unter Hochdruck arbeite.

Inzwischen habe Ich erste Tests absolviert, viel am Controllercode gearbeitet und auch die passende PC Software geschrieben. Diese ist mittlerweile so weit das Ich einen Preview geben kann:

LEDControl1

Die erste Seite ist recht komplex geworden weswegen Ich sie ein wenig erläutern möchte:
Nach Anschluss des Controllers und Treiber Installation kann man den Com Port auswählen und den Controller verbinden. Anhand der Uhrzeit sieht man das alles funktioniert (hier ist keiner angeschlossen). Nun kann man wenn man möchte 2 Relays mit bis zu 6 (Bild nur 5) verschiedenen Schaltzeiten wählen. Also entweder ein Relay 6 mal am Tag an/aus schalten oder 2 Relays je 3 mal an/aus.
Unten sind die einstellungen für bis zu 4 Dosierpumpen. Hierbei teilen sich aber die Pumpe 3 und 4 einen Anschluss mit den Relays. Wer also Steckdosen schalten möchte muss auf diese verzichten. Ansonsten kann man bei jeder Dosierumpe eine ml Menge pro Tag einstellen und diese auf bis zu 20 mal verteilt. Wer nur einmal Düngt kann auch eine bestimmte Uhrzeit angeben, ansonsten heißt es z.B. 8 mal in 24 Stunden. Über die ml pro Minute kann man seinem Controller dann noch mit geben wie viel die Pumpen fördern was eine präzisiere Düngung ermöglicht.
Oben, mittig die Buttons speichern dann alle Einstellungen im Controller. Hier werden dann auch noch Funktionen zu einer Lüftersteuerung hin kommen.

LEDControl2

 

Die 2te Seite ist der LED Steuerung vor behalten. Wie man sieht kann man 16 Kanäle einzeln Steuern und dimmen. Zu erst einmal wäre hier die Zeit wann die LED überhaupt an und aus gehen. Diese Zeiten sind aber der Punkt wo sie Anfangen/Aufhören zu dimmen und nicht ihr Maximum erreichen.
Die eindimm und ausdimm Zeit kann man bequem über Schieberegler zwischen 0 und 120 Minuten einstellen. Viele Controller arbeiten hier mit einer linearen Dimmung, d.h. nach der hälfte der Zeit sind die LEDs zu 50% an. Da unser Auge aber helles Licht sehr schwer auseinander hellt, Unterschiede im niedrigen Bereich aber sehr gut, ist meine Dimmung nicht linear sondern mehr dem Menschlichen Auge angepasst. Zusätzlich ist sie mit 12bit noch sehr fein, somit kann man fast keine Stufen mehr erkennen,selbst nicht wenn man ganz langsam dimmt und in die LED’s schaut. Die letzten beiden Einstellungen sind für die Maximale und Minimale Helligkeit. Nehmen wir mal an wir haben eine LED die über Tag Hell sein soll und Nachts noch minimales Mondlicht geben soll: Kein Problem. Max 100%, Min 2% und schon haben wir unseren Wunsch. Wir können aber auch sagen das eine LED immer nur zu 80% leuchten soll wenn wir z.B. zu viele LED eingebaut haben oder zu hoch bestromen. Zum testen der „optimalen“ Beleuchtung kann man auch jeden Kanal direkt einstellen über die Buttons neben den Uhrzeiten. Entweder über die „preSets“ auf der ersten Seite in 25% Schritten oder direkt über +/- jeden Kanal einzeln. Dies ermöglicht dann die beste Max/Min pro Kanal zu finden.

Ein paar funktionen Fehlen aber noch:

  • Temperaturkontrolle: Es kann ein Temperaturfühler eingebaut werden der entweder Kühlen oder heizen kann. Im Heizmodus kann über ein weiteres Relay ein Heizstab geschaltet werden. Im Kühlmodus steuert er die angeschlossenen Lüfter und sollte das nicht reichen fährt er automatisch alle LED’s runter.
  • Mondsimulation und Sonnensimulation: Dies wird noch ein wenig dauern aber in einer späteren Controllerversion möchte Ich auch ein an den Mondzyklus angepasste Nachtbeleuchtung einbauen sowie eine Simulation von Wolken.
  • Eure Ideen: Kein Scherz… Ich bastel hier nix weil Ich reich werden will. Ich bin immer offen für neue Ideen und vorstellungen und wenn Ihr ne gute Idee habt, warum soll Ich mir die nicht anhören und evt später mal einbauen.

Und zum Ende möchte Ich euch dann noch die Platine vorstellen:
Da dieser Umfang zuerst gar nicht geplant wurde sind die Anschlüsse leider etwas doof angeordnet. Ausserdem sind zum Anschluss der Dosierpumpen externe Schaltungen mit TIP122 oder ähnlichem nötig. Softwareseitig wird zwar alles von Anfang an unterstützt doch muss man nach wie vor zum Betrieb Anschlüsse und Extra Schaltungen löten. Mittlerweile gibt es aber schon einen Platinen Entwurf der nur noch über Steckklemmen angeschlossen werden kann. Außerdem ist als Zwischenlösung eine Adapterplatine geplant.

LEDControl3

AquaGrow Platine Software und Einstellungen

Der Letzte Schritt zum Funktionierenden Aquariencontroller: Software runter Laden und auf den Controller überspielen.

Hierzu brauchen wir erstmal die Arduino Umgebung und alle nötigen Treiber. Hierzu möchte Ich auf die Arduino Dokumentation unter http://arduino.cc/de/Guide/HomePage verweisen.

Den Code den man braucht um alle Komponenten steuern zu können findet Ihr unter http://svn.ravendev.de. Hierbei gibt es 2 wichtige Ordner:
Development -> Der Ordner an dem Ich immer mal wieder arbeite. Alles was hier drin ist ist evt nicht funktionsfähig.
Finals -> Lauffähiger und getesteter Code. Final steht hierbei nicht für Final, sondern nur dafür das es läuft. Der Code ist work in progress und wird evt immer mal wieder geändert und erweitert.

Wichtig ist zuerst einmal das Ihr euch die Ordner unter /Finals/arduino-1.0.4/libraries/ runter ladet und installiert. Diese libs werden Zwangsläufig benötigt.
Unter /Finals/MAQ/ ist das Eigentliche Programm/ der Code für den Controller. Diesen könnt Ihr komplett runter laden, entpacken und in Arduino öffnen.

Besondere Programmteile möchte Ich euch noch kurz erklären.

Zuerst einmal alle tabs die Ihr im oberen Rand seht. Hierbei steht jeder für eine Rubrik an Funktionssammlungen die zur Übersicht gesplittet wurden.

tabs

 

MAQ Ist der Hauptcode, Clock alles was unsere Uhr betrifft, Display die grafische Ausgabe, Duengung unsere Dosiereinheit, Functions Hilfsfunktionen ohne zugehörigkeit, Licht für alles was man dimmen kann (inc 10V Schnittstelle) und Menü mein Sorgenkind. ;)

Zuerst sollten wir mal schauen das die Parameter die wir einstellen müssen stimmen.

Display:
Hierbei ist wichtig das wir die richtige Adresse auswählen. Wir schauen also auf unsere Platine und suchen den IC2, neben dem Poti. Dieser trägt entweder die bezeichnung PCF8574P oder PCF8574AP.
Nun suchen wir die Zeile

1
LiquidCrystal_I2C lcd1( 0x38 ,20,4,LCD_BL); // LCD Adress / Chars / Rows / PWM Pin

Im Falle des PCF8574P muss 0x38 in 0x20 geändert werden.
Nun gibt es 2 Methoden um das Hintergrund Licht des Displays zu steuern: Automatisch und Manuell. Hierfür sind weiter unten die Zeilen

1
2
// lcd1.backlight(DaylightLevel*2.55);
lcd1.backlight(255);

zuständig. Die obere steht dafür für ne Automatische Anpassung nach „Tageslicht“, die untere für immer ganz an. Als Zahl kann man alles zwischen 1 und 255 eingeben, wobei 255 das Hellste ist.
Das was auf dem Display erscheint findet Ihr unter „Display“ und dann in der Funktion main_Screen(). Die könnt Ihr anpassen um sie nach euren wünschen zu gestalten.

Temperatursensoren:
Jeder Sensor ha teine eigene ID. Diese muss erstmal ausgelesen werden und dann eingetragen werden, so das der Controller bescheid weis. Öffnet am Besten den Beispiel Sketch ds18b20_demo. Ladet den auf euren Controller und schaut im Serial Monitor welche ID’s es gibt und welcher Sensor welche hat. Ihr müsst aber im Beispiel den Pin auf 44 ändern:

1
DS18B20_List ds18b20(44);

Dann sucht Ihr unter MAQ die Zeilen

1
2
#define TempOnBoard 0xC7B5
#define TempWater 0xBFAE

und ändert Sie passend ab.
Bisschen weiter unten finden wir noch die Temperatur.

1
2
//WasserTemperatur
float Water_Temp = 25.5;

Damit die Heizung nicht zu schnell schaltet wird immer +-1°C geregelt. 25.5 heist also das bei 25 geheizt wird und bei 26 es aus geht.

Relays: 
Nun geht es noch daran die Richtigen Pins den Relays zu zu ordnen.

1
2
3
4
5
6
7
8
const int RELAY1 = 23;  // Heizung
const int RELAY2 = 25;  // Netzteil LED
const int RELAY3 = 27;  // Filter
const int RELAY4 = 29;  // CO2
const int RELAY5 = 31;
const int RELAY6 = 33;
const int RELAY7 = 35;
const int RELAY8 = 37;

Licht und Dimmung: 
Die Dimmung ist etwas komplexer. Sie besteht aus 2 Teilen: Ein Array was alle gespeicherten Werte enthält und ein struct was die Werte interpretiert. Schauen wir uns zuerst einmal das Struct an:

1
2
3
4
5
6
7
8
9
10
typedef struct {
boolean Active;    // Über diesen Kanal Dimmen
float Sunrise;    // Zeit Sonnenaufgang
float Sunset;    // Zeit Untergang (Dunkel)
int Min;     // Minimum Helligkeit
int Max;    // Max Helligkeit
int Dim_in;    // Länge minuten eindimmen
int Dim_out;    // Länge Minuten ausdimmen
boolean Invert;  // Werte vertauschen
}LIGHT;

Was bedeutet das für uns? Jeder Kanal hat diese ganzen Einstellmöglichkeiten und wir können festlegen wann eine Lampe an/aus geht, wie hell die minimal/maximal ist und wie lange das ein/ausdimmen geht. Manche EVG’s und KSQ arbeiten nach anderen Prinzipien. So kann es passieren das 0 = ganz an und 100% ganz aus ist. Das legen wir über Invert fest. Doch wo stellen wir das Jetzt ein?

1
2
3
4
5
LIGHT light_channels[20] = { 
{ 0, get_ts(10,0,0), get_ts(23,0,0),0, 100, 30, 45,1}, 
{ 0, get_ts(10,30,0), get_ts(22,0,0),0, 100, 60, 120,1}, 
.....
.....

Genau hier. Die Reihenfolge ist gleich zum Struct oben. Doch anstelle von Zeiten ein zu geben benutzen wir ne kleine hilfsfunktion:
float get_ts(int h, int m, int s) macht nix anderes als eine Uhrzeit mit Komma getrennt in Sekunden um zu rechnen. also 10,0,0 steht für 10:00:00 Uhr, 10,30,0 für 10:30:00Uhr.
Noch wichtig ist die Zeile

1
2
3
4
5
6
7
//Abweichung für Tageslicht basierten Verlauf
int LightOffset[24]={
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0
};

Hiermit können wir einen Tagesverlauf festlegen. jede Zahl steht dabei für eine Stunde. Wenn man jetzt eine 10 an 12ter Stelle schreibt bedeutet das das es um 12:00Uhr 10% Heller ist. -10 bedeutet 10% dunkler. Beachtet das 110% nicht möglich ist. Also wer seinen Kanal schon auf max 100 gestellt hat wird nix regeln können.

Uhrzeit:
Bleibt noch die Aktuelle Zeit. Hierfür finden wir in Clock 2 Zeilen:

1
2
  TimeIsSet = 0xffff;
RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));

Wenn wir den Sketch hoch laden wird automatisch die PC Zeit in die Uhr geschrieben. Es gibt aber einen Nachteil: Im Falle eines Resets wird diese Zeit wieder genommen. Da wir aber eine Backup Batterie haben und nicht immer diese Uhrzeit nehmen wollen, müssen wir den Sketch 2 mal hochladen. Einmal mit diesen Zeilen so wie sieh stehen, einmal mit auskommentierten Zeilen:

1
2
 // TimeIsSet = 0xffff;
// RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));

Wer mal testen möchte wie das Licht um irgend eine andere Zeit ist oder einfach eine Falsche Zeit einstellen möchte, der kann im Block unter diesen Zeilen den Wert manuell setzen.

Dünger:Bleibt noch der Dünger. Hierfür müssen die Düngermengen und Düngerzeiten angepasst werden.

1
2
3
4
5
6
7
8
9
10
11
12
// Düngermengen
float duenger1 = 3.00;    // Spezial N 1ml/50L
float duenger2 = 1.00;    // Spezial Flowgrow 2ml/100L
float duenger3 = 2.00;    // Mikro Basis Eisen 2ml/100L
float duenger4 = 1.00;
float duenger5 = 3.00;    // Estimate Index 5ml/40l
//Dünger Zeiten
float d1Time= get_ts(9,0,0);    // 9:00
float d2Time= get_ts(10,0,0);
float d3Time= get_ts(11,0,0);    // 11:00
float d4Time= get_ts(20,0,0);    // 18:00
float d5Time= get_ts(21,0,0);    // 12:00

Das sind quasi meine Mengen die Ich täglich dünge. Für die Zeiuteinstellung nehmen wir wieder unsere funktion get_ts(). Mit kleiner anpassung kann man auch 2 mal täglich einen dünger düngen. Wir müssen nur eine neue Variable für die Zeit schaffen und dann die passende Funktion:

1
2
//Achtung, dies ist keine Standart Variable, Sie kommt von mir!
float d2Time1= get_ts(15,0,0);

Und unter dem Reiter/Tab Duenger

1
2
3
4
5
  if(Daystamp>=d2Time1 && Daystamp<d2Time1+duenger2&&digitalRead(TIP2)==LOW){
digitalWrite(TIP2,HIGH);
}else if((Daystampd2Time1+duenger2) && digitalRead(TIP2)==HIGH){
digitalWrite(TIP2,LOW);
}

Neue Platinen, Neue Anleitungen

Nachdem die Prototypen gut über die Bühne gegangen sind und auch die 2te Sammelbestellung fast abgeschlossen ist steht immer noch viel Arbeit für mich an.
Zur Zeit werden alle Anleitungen überarbeitet und neue Bilder gemacht. Das ganze Soll es ermöglichen die Platinen Stressfrei auf zu bauen und in Betrieb zu nehmen. Dies kann aber noch ein paar Tage dauern, Ich möchte daher auf die alte Bastelanleitung verweisen und Notfalls Nach zu fragen. Hier aber eine Auflistung der Bauteile und wo Sie hin gehören:
Partlist

Part Value
0-10V pinheader
12VPUMP screwcramp
ANALOGE1 connector
ANALOGE2 connector
ARDUINO_VOLTAGE pinheader
C1 10uf
C2 10uf
C3 10uf
C4 10uf
C5 100nf
C6 100nf
C7 100nf
C8 100nf
C9 10uf
C10 10uf
C11 10uf
C12 optional 100uf
C13 100nf
C14 leer
C15 leer
C16 10uf
C17 10uf
C18 10uf
C19 10uf
D1 1N4007
D2 1N4007
D3 1N4007
D4 1N4007
D5 1N4007
DIGITAL-OUT pinheader
DIM1 pinheader
DIM2 pinheader
DIM3 pinheader
DIM4 pinheader
DS18B20 pinheader
ETHERNET connector
ETH_J1 connector
G2 CR2032V
GRD_5V pinheader
IC2 PCF8574P
IC3 DS1307
IC4 LM324N
IC5 TLC5940
IC6 DS18B20
KEYPAD connector
LCD connector
PWM connector
Q1 32.768kHz
R1 4,7K
R2 4,7K
R3 4,7K
R4 1K
R5 1K
R6 10K
R7 1K
R8 3,3Ohm
R9 10K
R10 1K
R11 1K
R12 1K
R13 1K
R14 22k
R15 10K
R16 22K
R17 10K
R18 22k
R19 22k
R20 10K
R21 22K
R22 10K
R24 22K
R25 22k
R27 22K
RX connector
T1 TIP122
T2 TIP122
T3 TIP122
T4 TIP122
T5 TIP122
T8 BC547
TLC5490_OUT pinheader
TLC_J1 pinheader
TLC_J2 pinheader
TLC_J3 pinheader
V_IN GRD__12V__5V
V_SEL pinheader

AquaGrow Platine Inbetriebnahme

Alles ist verlötet, alle Komonenten Angeschlossen, jetzt wollen wir es natürlich auch in Betrieb nehmen.
Hierführ sind 2 Schritte nötig:
Strom Anschliessen, Jumper setzen.

Fangen wir mit dem Strom an. Ich empfehle ein 2 Spannungsnetzteil mit 5 und 12V zu verwenden. 1A bei 5V, 2A bei 12V sollten ausreichen. Dennoch empfehle Ich bei Neukauf ein Meanwell RD65A (Datenblatt).
Alternative kann ein 2Spannungs PC Netzteil oder getrennte 5V und 12V genommen werden. Hier ein Beispiel eines Zweckenfremdeten Netzteils einer Externen Festplatte:

Beim Anschluss habe Ich mich an eine Stanard Farbkodierung aus dem PC Bereich orientiert. Diese ist Ground (Minus) Schwarz, 5V Rot, 12V Gelb. 230V kommt an L,N. Ich rate dringend dazu ein 3 Adriges Kabel für Netzspannung zu verwenden und Gelb/Grün an Erde an zu schliessen! Ganz rechts mit ADJ kann man die Spannung an 5V zwischen 4.75 und 5.5V Einstellen. Dreht den Regler ganz gegen den Uhrzeigersinn und dann im Uhrzeigersinn bis Ihr am Multimeter 5V ablesen könnt. Wer kein Multimeter hat sollte sich eins zulegen, es geht aber auch indem er ca die Mitte wählt. +/- paar Volt ist niocht schlimm und alle Chips sind Voltage tollerant bis 6V.

Den Platinenanschluss findet Ihr oben Links. Hierbei muss Rot, Gelb,Schwarz von oben Nach unten angeschlossen werden. Nun geht es darum die Jumper auf dem Board zu verteilen. Der erste ist Optional:
Der Arduino kann über ein 6-12V Netzteil am Board betrieben werden, allerdings auch über Vin, auf dem Mega zu finden neben den Grd. Dies berücksichtigt auch die Platine. Wer also kein Extra Netzteil verwenden möchte für seinen Mega muss unter den Schraubklemmen, über der Batterie den Jumper setzen.

Nun gibt es 2 verschiedene Konfigurationen:
Wir möchten den TLC5940 verwenden und/oder die 0-10V Dimmung oder wir möchten die Ports frei halten/geben um sie anders zu nutzen. Für den TLC5940 der die LED Dimmung übernimmt sind die Jumper TLC_J1 – TLC_J3 im oberen Bereich zuständig.
Für die 10V Dimmung sind die Jumper DIM1-DIM4 nötig.
TLC Aktivieren/Nutzen:
J1, J2, J3 zwischen 2 und 3 setzen.
0-10V Dimmung Aktive:
DIM1-DIM4 zwischen 1 und 2 setzen.
Die Bilder zeigen wie alle gesteckt werden müssen um TLC und Dimmung zu aktivieren.

2013-06-05 15.18.54

TLC deaktivieren/nicht nutzen:
J1, J2, J3 zwischen 1 und 2 setzen.
0-10V Dimmung deaktivieren:
DIM1-DIM4 zwischen 2 und 3 setzen.

ACHTUNG: Wer den TLC5940 UND andere Geräte nutzen möchte die den SPI Bus benötigen (z.B. Ethernet Module) muss alle TLC Jumper kurz schliessen, d.h. 1,2 und 3 miteinander verbinden. Damit können die Pins ganz normal verwendet werden und auch doppelt belegt werden. Zusätzlich ist für ein Ethernet Modul eine 3,3V Spannung nötig und ein zusätzlicher Pin. Das ist auf der Platine zwar schon berücksichtigt (Ethernet Connector, IC7 und Jumper ETH J1), wird aber von mir noch nicht unterstützt da der Test und die Software fehlt.

AquaGrow Platine Komponenten anschliessen

Wir haben inzwischen unseren Controller zusammen gebaut und wollen nur auch Dinge Steuern, Messen und Regeln.

Fangen wir mit dem Temperatursensor an. Der bei mir mitbestellte Wasserdichte DS18B20 Sensor hat 3 Kabel: Weiss -> Daten, Rot->Plus, Schwarz->Minus. Auf der Platine muss Weiß in die Mitte, Rot nach Links (an den Rand) und Schwarz nach Rechts.
2013-06-05 14.48.432013-06-05 14.52.03

Weiter geht es mit den Schaltrelais. Hierfür sind 2 verschieden Anschlüsse nötig: Einmal die Versorgungsspannung der Relais und einmal die Steuersignale.
Versorgungsspannung findet Ihr oben, unter dem Display Port, gekennzeichnet mit GRD_5V. Pin 4 und 3 sind – oder Ground, Pin 2 und 1 5V oder VCC. einen Grd und 5V müsst Ihr mit Grd und 5V auf dem Relais Board verbinden. Für die Steuerleitungen kann man eigentlich jeden Digital IO Port nehmen. Ich empfehle aber die Ports 22 und aufwärts (22-30 für 8er Relais) oder einen Stecker auf jeden 2ten Port (sprich einen 4er oder 8ter auf 20,22,24 usw). Diese sind rechts auf der Doppelleiste. Laut Arduino Reference Design müssen die obersten beiden 5V sein. So sind die auch auf der Platine. Dadrunter sind die Ports die wir brauchen. Verbindet einfach einfach Pin 22 mit In1, 23 mit In2 usw oder lötet den Stecker ein. Zur besseren Orientierung solltet Ihr auf den Mega2560 schauen. Dort sind die Pins markiert.

Weiter geht es mit dem Display. Hier kann man entweder Litze nehmen oder ein Flachbandkabel was Ich normalerweise bei lege. Da es allerdings kein 12 Adriges gibt müssen wir uns ein 10+2 Kabel Basteln. Verbunden wird es fast 1zu1. Auf der Platine links (bei LCD 1) das Kabel muss zu LCD1, 6 an 6 und dann 4 frei lassen, also Platine 7 an LCD11, 8 an 12 usw.

2013-06-05 14.56.41 2013-06-05 14.57.31 2013-06-05 14.57.41

 

Dann hätten wir noch den Reset Switch und das Keypad. Der Switch wird einfach mit den linken beiden am Stecker neben der Batterie verbunden. Wie rum ist egal da er bei drücken nur nen durchgang schaffen muss.
Das Keypad wird so angeschlossen wie auf dem Bild zu sehen.

2013-06-05 14.11.05 2013-06-05 15.06.20

 

Im Oberen Bereich finden wir noch die Anschlüsse für 0-10V. Hierbei gehören die ersten beiden zum DIM Kanal 1 und dann immer Paarweise weiter. Wer dort z.B. einen Lüfter anschliessen möchte kan 1, 3, 5, 7 als + Verwenden und 2, 4, 6, 8 als Minus. Bei Anschluss eines Dimmbaren EVG’s bitte die Polung und Anschluss des Herstellers beachten.

2013-06-05 15.10.10

Zum Abschluss dann nochmal das Board mit allen nötigen Anschlüssen und werten:

Platine

Zum Anschluss von KSQ komme Ich an anderer Stelle.

AquaGrow Platine Zusammenstellung

Was Brauch man für welchen Zweck und was soll man bestellen wenn man sich an einer Sammelbestellung beteiligt?
Eine Schwere Frage, da das System so aufgebaut ist das es sich nach belieben kombinieren lässt. Ich möchte dennoch versuchen nen kleinen LKeitfaden zu geben:

Definieren wir unsere Einsatzzwecke.

1. Aquariendimmung nur über Netzteile mit 1-10V Schnittstelle, Messen der Wassertemperatur, Steuern eines Heizstabs
2. Aquarienbeleuchtung über LED direkt mit KSQ, Messen Wassertemp, Steuern Heizstab
3. Display für Anzeige aller Werte, Keypad zur bequemen Einstellung über Menü
4. Zusätzlich 5 Dosierpumpen für Dünger/Mineralien
5. Komplette Techniksteuerung, geplanter Ausbau für Leitwert, PH, Redox Messung, Ethernet, Anschluss eines 2ten Beckens

 

  Für 1 Für 2 Für 3 Für 4 Für 5
Arduino x x x x x
Platine x x x x x
Standart Bauteile x Besser Nachricht das nur Uhr gebraucht wird. x x x
LED Chip   x     x
Display     x   x
Keypad     x   x
Extra Wasserrsensor         x
Schaltrelay x x   x x
Netzteil x     x x
Dosierpumpen       5 Stück x
Preis  73,50€  44,50€  58,50€ 133,00€ 149,00€