Hallo zusammen ![]()
Als schreibender Nutzer bin ich neu hier, habe aber aus div. Threads hier schon dutzende nützliche Informationen ziehen können - an der Stelle schonmal ein Danke an die Community hier
![]()
Alsooo wie folgt:
Ich habe eine Anzuchtbox gebaut mit Hilfe eines Arduinos. Gestartet mit einem Arduino Rev3, aufgrund Mangels an RAM aber dann - nach circa 4 Tagen Recherchen & Codeoptimierung, welche aber nicht zum abschließenden Erfolg führte - zum Rev4 Minima gewechselt.
An diesem angeschlossen ist folgende Hardware:
- Datalogging-Shield (https://www.arrow.com/en/products/1141/adafruit-industries)
- 2x 4fach-Relais-Modul (HLRELM-4 von Sertronics; darf als neuer Nutzer nicht so viele Links teilen)
- CCS811-Sensor (von Joy-It; darf als neuer Nutzer nicht so viele Links teilen)
- DHT11-Sensor (von Joy-It; darf als neuer Nutzer nicht so viele Links teilen)
- Boden-Feuchtigkeitssensor (Iduino ME110, keine Herstellerseite gerade auffindbar)
- über die Relais dann 1x Lüfterausgang für Anzuchtbox, 1x Lüfter für Kühlung Elektronik-Box, 3x verschiedene LED-Bänder, 1x Wasserpumpe & 1x 230VAC auf 24VDC-Netzteil
- der Arduino wird über ein 12V-Steckernetzteil (1,5A) versorgt, diese 12V werden auch über die Relais an die beiden Lüfter-Ausgänge geschickt
Der Code hat inzwischen so einige Zeilen, aber ein Versuch der Zusammenfassung:
- Libraries: SD.h, RTClib.h, DFRobot_CCS811.h, EEPROM.h & DHT.h
- Ausgabe der IDE: 83968 Bytes (32%) für Sketch , 7184 Bytes (21%) des RAMs (mindestens..^^) belegt
-
Setup: U.a. Initialisierung von allem, SD-Karte wird mit zwei Logdateien beschrieben, einmal für Sensorwerte & einmal für Log der geschalteten Relais.
-
Loop:
- Unterscheidung 'Tag-Modus' & 'Nacht-Modus'; Überprüfung aktuelle Uhrzeit, dementsprechend Überprüfung ob alles so geschalten, wie es soll, wenn nicht, wird geschalten inkl. Logging auf SD-Karte
- Einholen aktueller Sensorwerte & Uhrzeit; Logging auf SD-Karte (& Output auf Serial für Wartungszwecke)
- div. If's & While's, so dass 'tagsüber' Loop bei Sekunde Null der nächsten Minute neu startet & 'nachts' Loop bei Sekunde Null der nächsten Viertel Stunde neu startet; sprich 'intelligente' Wiederholung div. Delays - auch wenn die scheinbar weng verschrien sind

- Extra Funktionen für Serial-Ausgabe bei SD-Error, und Aktualisierung verschiedener chars[] für Timestamps.
Nun zu meinen 'Challenges' & Ideen:
Ich muss jeweils aktuell den Sketch anpassen, Arduino neu programmieren (was Neustart & erneuter Durchlauf Setup bedeutet..), wenn ich die Zeiten für 'tagsüber' & 'nachts' neu definieren mag.
Ebenso muss ich dies tun, wenn ich die Einschaltdauer für die Wasserpumpe anpassen mag.
Und, ich muss jedes mal die SD-Karte ziehen ('Hot-Swappable' ist im Code) um aktuelle Sensorwerte oder aber meinen Laptop an Arduino hängen um die Serial-Outputs zu sehen.
Ich habe daher die Idee über I2C (per Ethernet-Patchkabel) eine zweite kleine Box anzuschließen, die zum einen einen 'Port Expander' beinhaltet, paar Taster, Schalter & LEDs und zum anderen ein LCD-Display.
Die Produkte wären:
MCP23017: MCP23017 Serielles Interface Modul kompatibel mit Arduino
LCD-Display: HD44780 1602 LCD Modul Display Bundle mit I2C Schnittstelle 2x16 Zeich
An dem MCP23017 würde ich gerne verschiedene Buttons anschließen, 6x für 'Wert +/-1; +/- 10; +/-100', für 'Hoch', 'Runter' und 'Enter'. Zusätzlich zwei Schalter & zwei LEDs.
Der eine Schalter [1] soll - zwecks Stromsparen - das Display erst aktivieren oder deaktivieren. Der andere Schalter [2] soll - auch zwecks der Delays in meinem Code - ermöglichen eine extra while-Schleife am Anfang meines Loops zu 'betreten', so dass ich Einstellungen bzw. Werte anpassen kann, und sobald dieser Schalter wieder umgelegt wird, läuft der Loop einfach ganz normal durch, ohne irgendwas besonderes.
Auf dem Display will ich - solange Schalter [1] umgelegt - aktuelle Werte anzeigen lassen. Zusätzlich - solange Schalter [1] & [2] umgelegt - will ich die Möglichkeit haben mit Hilfe der Buttons verschiedene Werte, wie z.B. Einschaltdauer Wasserpumpe oder Defintionen für wann 'Tag' & 'Nacht' ändern können.
Die LEDs sollen mir nur anzeigen, wann ich die SD-Karte ziehen kann (sprich, wo ich mich im Loop befinde), so dass ich nicht mehr gespannt & konzentriert warten muss (ggf. halt eine Minute oder falls kurz geblinzelt auch paar mehr^^) muss, bis kurz die LEDs auf dem Datalogging-Shield aufgeblinkt haben und ich die knapp 58 Sekunden Zeit ('tagsüber') habe.
Hier die erste Frage:
- Ist es möglich die beiden Teilnehmer zusätzlich auf den I2C-Bus hängen? Bisher sind da der CCS811 und das RTC-Modul drauf. I2C-Adressen habe ich schon recherchiert und wäre zumindest von der Seite möglich. Mit dem Ethernet-Kabel habe ich auch keine Bedenken, der CCS811 kriegt über 3,5mm-Buchsen und eigens gelötetem 3x0,75² Kabel über Distanz von knapp 2-3m (scheinbar
) ausreichend stabile Verbindung hin.
Das Display, die Buttons & LEDs würde ich gerne mit auf die 5V vom Datalogging-Shield (/ Arduino) hängen. Die Inputs für die Taster würde ich per Software mit Pull-Widerständen versehen.
Nächste Frage:
- Wird das da schon langsam problematisch mit der Stromversorgung über die 5V vom Arduino? Sprich, muss ich sonst die 12V mitnehmen und mit Widerständen o.ä. dann auf die Inputs/Outputs des MCP23017?
Und abschließend die Fragen:
- Ist das Codetechnisch so möglich, dass ich z.B. eine While (Schalter[2] auf high)-Schleife an den Anfang des Loops setze und dann da drin mit Hilfe des Displays meine Werte anpasse?
- Ist es Hardware- & Softwaretechnisch möglich, das Display ein- & auszuschalten, ohne dass z.B. der I2C-Bus Faxen macht, weil der Teilnehmer nicht mehr da, oder kann ich da die 5V an dem Display z.B. nur wegnehmen?
Ist möglicherweise alles bisschen viel & ggf. zu detailliert, aber denk mir, lieber gleich alles wovon ich denke, dass es wichtig ist, hinschreiben ;-D Und habe zwar lehrreiche & interessante Erfahrungen durch Try&Error beim bisherigen Aufbau sammeln können, habe aber das Gefühl, dass das gerne ein wenig weniger werden darf - zusätzlich dazu würde ich bei gefühlter Reife des Projekts (bin bei meinem Changelog für mich inzwischen bei Version 2.5
) dieses dann hier auch gerne teilen, so dass andere ggf. etwas mitnehmen können (oder ggf. natürlich auch ich zusätzlichen Input kriege).
Ich danke vielmals im Voraus,
rnddude

