ich will hier mal ein kleines Projekt vorstellen, was ich grade am ertüfteln bin ;)
Aktuell ist es noch der allererste Prototyp, aber ich will euch schonmal vorstellen, was es werden soll
Wie ihr alle wisst, bin ich für Beleuchtungsspielereien immer zu haben und je bunter desto besser ;)
Daher habe ich mich daran gesetzt eine Arduino Library zu entwickeln, die es Anwendern ermöglich ohne Programmierkenntnisse tolle Beleuchtungen sich "zusammen zu klicken".
Zum Beispiel für Erik habe ich ja schon eine Beleuchtung mit den WS2812 RGB LED Strips geschrieben. Das Problem ist halt, dass die dadurch entstandenen Codes immer sehr spezialisiert sind und kaum auf andere Modelle übertragbar - und genau dass soll die Library ändern.
Beim aktuellen Ansatz gibt es eine Art Effektkatalog, aus dem man wählen kann. Zusätzlichen können wichtige Parameter jedes Effekts natürlich eingestellt werden. Die einzelnen Bereiche, wie z.B. Fläche werden als einzelne Objekte angelegt und dann können die Effekte beliebig und unabhängig von einander eingelernt werden! So stellt man z.B. den Rumpf auf Blinken, während über die Fläche ein Lauflicht läuft.
Die Library ist so gestaltet, dass ein ein unerfahrener Anwender sich das Programm mit wenigen, selbsterklärenden Zeilen zusammenklicken kann ;)
Im aktuellen Prototyp gibt es nur zwei Effekte, Dauerlicht in einer Farbe und ein Lauflicht mit beliebiger Farbe und Geschwindigkeit.
So sieht das ganze dann im Moment aus :
Achtung, ab hier kommt Technikgelaber, wer keine Ahnung von Programmieren hat, wird hier wohl eh nichts verstehen
Wie ist das ganz umgesetzt? Zum Ersten habe ich für die reine Ansteuerung der Strips die WS2812 Lib von Adafruit genommen - man muss das Rad ja nicht neu erfinden :D
Da Arduino auf C++ basiert habe ich einen objektorientierten Ansatz gewählt. Es gibt eine klasse FlightStrip. Von dieser Klasse werden mehrere Objekte erstellt, nämlich für jeden Teilbereich eins. Also eins für die Fläche, eins für den Rumpf usw. Diese Objekte bekommen dann das Adafruit Objekt zum manipulieren und die Grenzen seines Bereiches mitgeteilt. Besteht der Strip z.B. aus 30 LEDs werden der Fläche 0-19 zugeordnet und 20-29 bekommt dann das Rumpf Objekt.
Der Vorteil des objektorientierten Ansatzes ist, dass die Objekte nun unabhängig voneinander arbeiten.
Nun kann jedes Objekt eingestellt werden mit Effekten, Paramtern usw.
Im Loop werden dann nur noch die einzelnen Objekte geupdated und der Strip aktualisiert.
So, mehr gibt es erstmal nicht zu berichten..
Ich habe den Code mal angehängt, wers versteht kann ja mal reingucken ;)
Meine S Bach wartet schon drauf das dieses Projekt fertig wird... So die S Bach ist jetzt auch fertig verkabelt und mit einem Testlauf funscht auch schon alles.
Zuerst noch, wie ich ganz vergessen hatte (danke Bernd) - Wie wird das ganze angeschlossen.
Kurze Antwort - simpler gehts nimmer ;D
Benötigt wird nur ein Arduino Pro Mini (benötigt zusätzlich FTDI Programmieradapter) oder ein Arduino Nano (hat den Programmieradapter schn integriert, ist dafür etwas größer und teurer, wobei groß und teuer beides relative Begriffe sind ) So ein Arduino kostet zwischen 3 und 15€, je nachdem ob aus HK oder DE und welche Version.
Zusätzlich braucht man noch einen 100 Ohm Wiederstand - hat man 200 oder 150 da, auch garkein Problem. Das ist nur ein Schutzwiederstand um den Strom zu begrenzen, unter 100 Ohm sollte man aber nicht gehn. (Zur Not funktioniert das ganze auch ohne Wiederstand, aber besser ist es mit..)
Dann braucht man nur noch zwei Servokabel und eine Stromversorgung. Der Arduino nimmt sich seine Energie (wenige mA) aus dem Empfänger, der Strip muss aber über ein extra BEC versorgt werden. Wichtig ist hier exakt 5V einzuhalten. Ein 6V BEC grillt den Strip früher oder später. Durch die geringe Spannung ist der Strom recht hoch - 1m Strip mit 30 LEDs pro Meter zieht bis zu 1,8 Ampere pro Meter! Mit 60 LEDs oder mehrere Meter kann sich jeder selber ausrechnen was dabei rumkommt ;) Diesen maximalen Strom erreicht man zwar nur, wenn man alle LEDs volle Helligkeit Weiß ansteuert, was so gut wie nie vorkommt, aber trotzdem sollte das BEC das von den Specs abkönnen. (Meist ist ja auch nicht das drin, was drauf steht).. Wichtig ist außerdem noch, dass man nie länger als ~ 1,5-2m Strip mit einem Stromanschluss versorgen sollte. Ist der Strip länger empfiehlt es sich 5V und GND zusätzlich noch am Ende des Strips oder irgendwo in der Mitte einzuspeisen. So Verteilt sich der Strom besser und die dünnen Leiterbahnen in den Strips werden nicht überlastet.
Beim Anschließen immer drauf achten was auf den Strips steht. Die Reihenfolge von DIN, 5V und GND ist scheinbar immer wieder verschieden.. (Meine hier haben z.B. DIN in der Mitte und nicht außen, wie auf dem Bild)
Bei den Strips handelt es sich um LED Strips mit WS2812 LEDs (Manchmal auch WS2812b genannt). Es gibt noch diverse andere Strips mit z.B. WS2811 oder ganz andere Namen - teilweise sind die kompatibel, meist aber nicht.. Also das nehmen wo WS2812 oder WS2812b draufsteht.
Preislicht richtet es sich einmal nach der LED Anzahl (30 oder 60 pro Meter) und aus DE oder HK..
30 LEDs/m - DE : 12 - 13 €/m 30 LEDs/m - HK : 5 - 10 €/m
60 LEDs/m - DE : 16 - 17 €/m 60 LEDs/m - HK : 10 - 15 €/m
Für Modelle unter 1m Spannweite würde ich die mit 60 LEDs/m empfehlen. Bei allem was größer ist reichen die 30 LEDs/m völlig aus. Von der Helligkeit soweiso, und die feinen Unterschiede bei 60 LEDs/m kann man in der Luft eh nicht von der gröbereren Auflösung bei den 30 LEDs/m unterscheiden. Und vom Stromverbrauch werdet ihr feststellen das da einiges zusammenkommt und ihr somit schnell dicke bzw. mehrere BECs benötigt..
So, das war erstmal alles zum allgemeinen geplenkel :D
Jetzt noch ein paar Neuigkeiten zum Code.
Inzwischen sind noch weitere Effekte programmiert und nun können die Effekte ein mehreren Modi eingelernt werden. Dazu folgendes Praxisbeispiel :
So sieht es aus :
Im Code muss der Anwender nur noch folgendes machen :
Hier wurden die 3 Bereiche definiert. LED 0-19 (hier sei gesagt, in der Infomatik fängt man immer bei 0 an zu zählen. Muss man sich dran gewöhnen, aber naja - is halt so :D ) ist der Bereich der "Tragfläche" LED 20-29 ist dann der Rumpf und 30-32 ist das Ruder. Gesamt also 33 LEDs.
Hier wurden dann die benötigten Objekte (flaeche, rumpf und ruder) der Klasse FlightStrip (Diese Klasse entwickel ich grade - da drin passiert ganz viel, was den einfachen Anweder eben garnicht interessieren braucht ;D ) erzeugt. In der Klammer ist das erste immer "strip", der zweite und dritte Eintrag sind dann die oben definierten Grenzen des Bereichs.
Hier fängt dann der Lernprozess des Strips an - hier gebt ihr vor welcher Teil bekommt welchen Effekt. Das Kommando ist immer <Name des Objekts>.learnMode(<Modu Nummer>, <Effektname>); Mode Nummer ist nacher das, was ihr durchschalten könnt. Im Modus 0 lernt die Fläche also den Effekt Theater Chase. Was das ganau ist, wird später mit Videos dokumentiert, da die Namen alleine (außer vielleicht Doubleflash) meist nicht sehr aussagekräftig sind ;D Der Rumpf lernt also im Modus 0 den Effekt Fill Against und das Ruder bekommt den Doubleflash.
Hier steht ihr die gleichen Kommandos, nur Mode Nummer ist jetzt nicht 0, sondern 1, also der 2. Mode (ich weiß, am Anfang verwirrend ;D ) Zusätzlich bekommt jedes Obejekt im Modus 1 natürlich einen andern Effekt.
Alle Effekte haben Standardparameter, wenn man will (und man sollte auch, sonst es es langweilig ;D ) kann man nun die Effekte "bearbeiten".
Die Parameter, die eingestellt werden können hängen natürlich vom jeweiligen Effekt ab. Bei Theater Chase ist z.B. Parameter 1 die Farbe und Parameter 4 die Geschwindigkeit (Zeit in ms bis es einen Schritt weiter geht). Parameter 2 und 3 sind hier unbenutzt. Nun will ich aber nur die Zeit verändern und nicht die Farbe, also trage ich bei allem wo ich nichts verändern will einfach 0 ein. Die Zeit ist standardmäßig auf 50ms eeingestellt, hier wurde der Wert jetzt auch 70ms erhöht.
Beim Effekt Chase Thriple Color gibt es, wie der Name erahnen lässt, 3 Farben die eingestellt werden können. Das sind die Parameter 1 bis 3 und bei 4 wird wieder die Zeit verändert. Das ganze wird jetzt für die anderen Effekte auch gemacht, verläuft aber immer nach dem selben Schema. Welcher Effekt welchen Paramter besitzt und was damit verändert wird, wird natürlich noch dokumentiert.
Aus geometrischen Gründen kann es manchmal vorkommen das die Effekte falschrum laufen. Will man z.B. die Tragfläche immer von innen nach außen aufleuchten lassen kann es sein, dass es einfach nicht passt. Beide laufen z.B. von rechts nach links. Dann kann man mit dem Kommando reverse() das Objekt virtuell umdrehen, sodass es passt ;)
Das wars auch schon. Im Loop des Arduinos muss nun nur noch immer wieder
aufgerufen werden, damit alles neu berechnet wird.
Ich hoffe ich konnte euch hier einen kleinen Einblick geben, wie das ganze auf User Seite später funktionieren wird.. Ich weiß, es ist immer noch nicht alles auf den ersten Blick verständlich, aber es ist schon eine sehr User freundliche Umsetztung, finde ich ;D
Ich könnt mir ja mal sagen ob ihr das Beispiel oben verstanden habt und wenn nicht, was noch unklar ist. Häufig ist es ja so, dass wenn man selber Ahnung davon hat einem Schwierigkeiten anderer garnicht bewusst sind..
Jep, das sieht gut aus! Bei den Effekten helfe ich dir dann, da gerade das Einstellen ohne Dokumentation schwierig ist.. Gestern habe ich noch den Knighrider fertig gemacht, ich muss dann mal nachschauen was noch fehlt.
Das nur die ersten beiden Modi funktionieren hat den einfachen Grund, dass im Moment noch kein RC Signal ausgewertet wird ;D
Im Moment wird alle 10 Sekunden nur zwischen Modus 0 und 1 hin und hergeschaltet ;D Das hätte ich vielleicht erwähnen sollen :D
Ich werde die Tage noch die RC anbindung einprogrammieren, das ist kein großes Ding ;)
Und manche deiner Zeilen wo du die Parameter der Effekte einstellts machen leider keinen Sinn (was da natrülich ohne Dokumentation nicht wissen kannst)..
Du verändert teilweise Parameter, die es garnicht gibt ;D
Aber auch die Dokumentation wird die Tage dazukommen ;) Einfach noch ein bisschen Geduld, dann wird das schon ;)
So, lange war es hier still, aber jetzt habe ich Zeit gefunden um mal weiter zu machen (ist schließlich auch nicht ganz unwichtig für den Vereins-Swift ;) )
Vom Code her gibt es jetzt V05.
Zusätzlich habe ich mir viel Arbeit gemacht und eine Dokumentation gemacht. Der wichtigste Teil ist denke ich der, dass dort alle einstellbaren Parameter genauer erklärt werden und welche Effekte es überhaupt gibt.
Mein anfänglicher Plan eine komplett einsteigerfreundliche Variante zu "erfinden" muss ich leider in gewissem Maße verwerfen. Beim Durchschauen ist mir doch aufgefallen, dass es gänzlich ohne Erfahrungen doch schwierig werden könnte etwas mit diesem Projekt anzufangen. Naja, ich hoffe es interssiert trotzdem den Ein oder Anderen. Zumindest das Ergebnis wird ja in einiger Zeit in einer ganzen Menge kleiner Swifts unterwegs sein ;) Allein dafür hat es sich gelohnt ;)
Hier gibt es nun ein Video das alle aktuellen Effekte zeigt (in der jeweiligen Standardkonfiguration) Farben und Geschwindigkeiten lassen sind individuell einstellen