Hallo,
ich bin neu im Forum und noch recht unerfahren in der Arduinoprogrammierung.
Ich habe dennoch eine Leuchte entworfen. Die ersten Funktionen sind einsatzfähig. Bei der Programmierung hat mein Bruder geholfen, danke Thomas!
Leider kann er im Moment nicht weiterhelfen. Daher erhoffe ich mir Hilfe an dieser Stelle. Entweder konkret zielgerichtet für die weitere Entwicklung der Leuchte bis zum Prototyp oder auch gerne in Form von "Nachhilfe" bei der Arduino-Programmierung.
Die Leuchte "Horizon" ist ein Moodlight mit zwei Licht-Farben, die sich im Tagesverlauf ändern. Eine Anleitung habe ich mit CC-Lizenz auf meiner Website veröffentlicht:
http://flexiblestream.org/project/horizon
Die wichtigsten Bauteile:
- Arduino Uno
- 2 Stk. BlinkM MaxM
- Real Time Clock Module
- Drehgeber (rotary encoder)
- RGB-LEDs
Die Funktionen, bisher:
- Es gibt drei "Menüs", der Menüwechsel erfolgt über langes Drücken des Drehgebers (rotary encoder):
menu 1) Automatisches Moodlight (vordefinierte Farben im Arduino-Sketch)
menu 2) HSB-Kontrolle für Licht 1, kurzes Drücken des Drehgebers schaltet zwischen Helligkeit, Sättigung und Farbe
menu 3) HSB-Kontrolle für Licht 2, kurzes Drücken des Drehgebers schaltet zwischen Helligkeit, Sättigung und Farbe
Auf FlexibleStream steht auch noch: "The actual color can be manipulated and stored for the following days." Diese Funktion ist noch nicht integriert. Damit bin ich auch bei meinen Fragen angekommen. Wie erweitere ich am Besten die Programierung, damit in der nächsten Version die folgenden Funktionen zur Verfügung stehen?
Farb-Liste
Ist durch ein Array bereits implementiert.
Die Farbwerte für eine vorgegebene Sequenz sind im Arduino-Sketch festgeschrieben. Änderungen sind nur durch Änderung des Arduino-Sketch möglich.
Farbwechsel
Ist mit smooth_fades bereits implementiert.
Die Farbwechselfunktion ermöglicht sanfte Farbwechsel ohne dass man allzuviele Farbwerte im Array definieren zu muss.
Mehrere Modi, über einen zweiten Drehgeber auszuwählen
Ist noch nicht implementiert.
Es soll ein zweiter Drehgeber eingebunden werden um die Moduswahl zu erleichtern und später mehr als zwei Modi zu implementieren.
Standardmodus beim Start des Programms ist das „Automatic Moodlight“: wie bereits implementiert mit zwei sich ändernden Farben.
Zweiter Modus ist der „Constant Mode“: durch einen Dreh am (neuen) zweiten Drehgeber zu erreichen. Es gibt eine Rückmeldung durch ein kurzes weißes Aufblinken beider Licht-Farben. Dann werden aber zunächst die Farben aus dem Automatic Moodlight übernommen und lassen sich nun dauerhaft einstellen.
(Dritter, vierter ... Modus: in der nächsten Version können weitere Modi angelegt werden.)
Farbe/Helligkeit/Sättigung ändern
Anpassung nötig.
Über den jetzt bereits eingebundenen Drehgeber sollen weiterhin die Farben geändert werden. Weil der Moduswechsel nun aber über den (neuen) zweiten Drehgeber erfolgen soll, sind für den ersten Drehgeber nur noch 2 Menüs nötig: Farbe 1 und Farbe 2
Der erste Drehgeber ändert die Farben des Lichts so:
Im Modus „Automatic Moodlight“: H, S und B des ersten Lichts lassen sich durch Drehen einstellen, nacheinander zu erreichen durck kurzes Drücken. Das zweite Licht erreicht man durch langes Drücken, dann Einstellung wie beim ersten Licht. In diesem Modus wechseln die Farben der Lichter mit Hilfe der Funktion smooth_fades langsam zu den übernächsten Farben in der im Array. Warum die übernächsten Farben? Weil die nächste Farbe schon in der nächsten Minute anstehen kann und das wäre dann zu schnell.
Im Modus „Constant Mode“: Einstellung der Farben wie oben, aber dauerhaft solange der Modus gewählt ist.
Farbwerte für die Zukunft speichern (Modus „Automatic Moodlight“)
Ist noch nicht implementiert.
Die Farben des „Automatic Moodlight“ sollen dauerhaft für bestimmte Tageszeiten angepasst werden können. Das festeingeschriebene Array im Arduino-Sketch soll durch die individuellen Farben des Benutzers ergänzt oder ersetzt werden. Hier fehlt noch ein Konzept zur Funktionalität, weil ein Zusammenspiel zwischen festen und individuellen Licht-Farben sicher kompliziert ist, oder? Es soll aber für den Benutzer und für die Programmierung so einfach wie möglich sein.
Die individuellen Änderungen können im EPROM des Arduino gespeichert werden. Dieses hat nur eine Größe von 512 Bytes. Ist das zu wenig, könnte ein externer EPROM (z.B. 24LC64) oder gar eine SD-Karte verwendet werden. Es ist auch zu bedenken, dass die garantierten Schreib- und Lesezyklen des internen EPROM „nur“ bei 100.000 liegen. Fürs Erste sollte das interne EPROM aber reichen.
Auch schön wäre:
- Die einzustellende Licht-Farbe soll blinken und nicht einfach die Erste.
- Neue Reihenfolge HSB: BSH (Helligkeit, Sättigung, Farbe)
Anmerkungen:
- Zur Zeit läuft der Sketch mit Arduino Version 0022! (Sonst gibt es Schwierigkeiten mit den BlinkM_funcs.h sowie Arduino-internen Bibliotheken.)
- Die "microphone options" im Sketch sollen ignoriert werden.
Ich bin gespannt auf die Antworten und vielleicht ein Angebot zur "Nachhilfe"