Ich plane eine Lichsteuerung auf Arduino Basis für die 80cm Nuri Klasse zu entwickeln.
Kurz vorweg das Anliegen dieses Threats : Da die Entwicklungkosten für eine solche Steuerung (im Verhältnis zu dem was das entgültige Projekt kosten würde) relativ hoch sind wollte ich Frage ob der ein oder andere Interesse an einer kompletten Lichtsteuerung für solch einen Nuri hätte. Würden sich ein paar Leute finden, die Interesse hätten könnte ich einseits die Entwicklungskosten minimieren und andererseite wärs natürlich auch ein super Vereinsprojekt ;)
Jetzt zurück zum Projekt :
Welcher Flieger und welche Leuchten?
Bei uns würde die Steuerung auf einem Hacker SkyCarvan eingesetzt werden. Die Stereurung soll dann 4 RGB LED Strips ansteuern. Die Strips werden im Flieger wie an der Stelle eines Holmes in die Fläche eingelassen. Jeweils rechts und links dann einmal nach vorne und hinten zeigend. Durch das Einlassen der Strips leuchtet dann das ganze EPP und man hat 4 unterschiedlich ansterbare Bereiche in der Fläche. Natürlich könnte die Steuerung auch auf jedem anderen Flieger untergebracht werden ;)
Was für hardware wird eingesetzt?
Die Entwicklung würde auf einem Arduino Duemilanove statt finden und das fertige Projekt wird dann auf ein (hardwaregleichen) Arduino Pro Mini übertragen. Neben dem 18x33mm kleinen Arduino Pro Mini werden nur noch ein paar Transistoren benötigt. Der Modul ist also so klein, dass es auf/in jedem Flieger dieser Größe unterzubringen ist.
Was soll die Steuerung können?
Die Steuerung kann alles was der programmieren kann ;D Spaß beiseite : Also Die Steuerung soll 1 (oder vielleicht auch 2) RC Signale aus dem Empfänger auswerten können. je nachdem ob der Kanal dann über einen Drehregler oder 3-Stufen-Schalter etc. betrieben wird können unterschiedlich viele Beleuchtungsprogramme einprogrammiert werden (Bei einem 3-Stufen-Schalter logischerweise nur 3, bei einem Proportionalkanal dann so viele wie man möchte).
Die Programme können dann im Prinzip fast alles. Ein paar Beispiele : - Stroboskopblinken aller Strips (auch in unterschiedlichen Farben möglich) - Durchfaden (Übergänge) zwischen allen möglichen Farben - Wildes geflacker mit zufälligen Farben - Simple Positionsbeleuchtung - usw ;)
Es ist also wirklich fast alles möglich - nur muss der Pilot damit ja auch noch klarkommen
Also, ich hoffe ihr könnt euch ein grobes Bild von meinen Vorstellungen für das Projekt machen!
Preislich kann ich nur ganz grobe Angaben machen, aber ich denke mal ich könnte die Steuerung inkl. RGB Strips für etwa 50 - 60€ anbieten.
Also, wenn ihr Interesse an soetwas hättet, dann meldet euch hier eifach mal ;)
Wenn ihr euch meldet ist das nichts bindendes, ich weiß ja selbst noch nicht einmal ob es dann verwirklicht wird und auf welche Probleme man unterwegs stolpert ;)
Zum Nachfliegen beim Vereinsfest wird es leider denke ich mal nichts mehr, da ich auch noch eine Woche auf Stufenfahrt mit der Schule bin ;)
So, jetzt hab ich so viel geschrieben, jetzt seid ihr dran :D
hört sich sehr interessant an was du da planst. Wenn es zeitlich bei mir klappt würde ich da gerne mit machen. Evtl. kann ich ein bisschen bei der Programmierung helfen. Wobei ich schon sehr lange kein C mehr programmiert habe . In letzter Zeit habe ich nur Code-Generatoren dafür geschrieben.
Viele Grüße,
Stefan
-- T8FG Super Arcus Talent (Robbe) Shocky (Typ Erich) Little Captain Light (Decker Planes) MiniMag, Easy Glider Pro (Multiplex) Chinook, Pixel (Robert Schweißgut) mCP X v2 (Blade)
Heute ist der Arduino Duemilanove gekommen - leider noch nicht die RGB Strips und sonstigen Bauteile.
Aber ein paar Sachen konnte ich schon testen.
Die Software PWM Library ( http://code.google.com/p/rogue-code/wiki...ryDocumentation ) zum dimmen der LEDs funktioniert schonmal! Es ist leider kein Ausgleich für die unlinearität von LED Helligkeiten vorhanden (eine LED mit 50% angesteuert ist nicht 50% hell, sondern geschätze 75% - da das menschliche Auge diese Helligkeit nicht linear wahrnimmt). Das wäre aber nur entscheident, wenn wir später exakte Mischfarben erstellen wollen.. Wenn es nur um bunt geht ist eine leichte abweichung der Farben ja nicht so entscheident.
Dann habe ich den pulseIn Befehl getestet um das RC-Signal einzulesen. Was soll ich sagen - einfach perfekt. Es kommt ohne irgendeine Glättung oder sonstwas aus. Ich kriege bei -150% bis 150% Servoweg Werte von ca. 900µs bis 2100µs zurück, was auch herauskommen sollte ;)
Leider scheinen die beiden Befehle bzw. die Library auf dem selben Timer oder soetwas zurückzugreifen. War erst verwirrend, stellt aber schlussendlich kein großes Problem dar.
Die ausgelesenen Werte vescheiben sich einfach auf den Bereich zwischen 600 und 1400µs.. Keine Ahnung, warum das genau passiert, aber es scheint trotzdem zu funktionieren ;)
Dann habe ich ein mini-programm geschrieben, wass die Helligkeit der LED in 4 Stufen, je nach Stickposition, dimmt.
Hier ein kleines Video dazu (Bitte entschuldigt die Qualität.. Ist nur zur Info kurz mitm handy aufgenommen) : http://youtu.be/w2WmQKmz9MU
Für Leute die eventuell was damit anfangen können, hier der Code :
Zitat #include <SoftPWM.h>
int rcpin = 12; //Pindefinitionen int rcValue = 0;
void setup() { Serial.begin(9600); //Nur zur Kommunikation mit dem PC SoftPWMBegin(); //Initialisieren des SoftwarePWM
Das RCSignal wird jetzt nicht mehr über die Funktion PulseIn gemessen, sondern über einen Interrupt.
Die steigende Flanke des PWM Signals des Empfängers löst einen Interrupt aus. Dieser speichert den aktuellen Zeitwert auf 1µs genau ab. Die fallende Flanke löst wieder einen Interrupt aus, der wieder den aktuellen Zeitwert abspeichert. Die Differenz dieser beiden Werte ist dann die Länge des Pulses. Diese möglichkeit beißt sich auch nicht mit dem SoftPWM der LEDs. Ich bekomme jetz also exakte Werte zwischen 900 und 2100µs.
Ein weiterer Vorteil ist, dass so jeder(!) Puls des Empfängers gelesen wird. Ändert man also während eines laufenden Programmes (Welche später grade bei Fadeprogrammen einige Sekunden lang sein können) das Signal, so kann direkt das neue Programm gestartet werden, ohne das das alte erst zu Ende laufen muss (Wäre bei der Methode mit PulseIn der Fall gewesen). EDIT : Das ist doch leider nicht so ganz richtig.. Hab gedacht, ich könnte aus dem Interrupt die main Loop neu starten, aber das scheint nicht zu gehn - Schade. Damit ist eigentlich der Hauptvorteil wieder zu nicht gemacht. Mal sehen, ob ich schlussendlich den Interrupt oder doch den PulseIn befehl verwenden werde. Schlussendlich ists eigentlich egal - hat beides Vor- und Nachteile.
Einziger Nachteil ist natürlich die erhöhte Prozessorbelastung, da jeder Puls gemessen wird. Bei einem solchen Proejekt kommen wir aber um Längen nicht an die Leistungsgrenze des ATMega328, von daher ist das egal ;)
Und ich habe fleißig zusammengetüddelt und programmiert ;)
Nach ein paar anfänglichen Schwierigkeiten, die unter anderem durch Montagsmodelle der Transistor-Array-ICs und der chinesischen Verwechslung von Grün und Blau bedingten waren, hat es dann jetzt doch schließlich geklappt!
Erstaunlicherweise bin ich auf keine größeren Probleme gestoßen, sodass ich euch schonmal Version 1 vorstellen kann!
Das ganze kommt mit sehr wenigen Bauteilen aus : dem Arduino Board, den RGB Strips und zwei ULN2003A Darliton Transistor Arrays..
Hier das Video, wo ich einmal alle drei bis jetz exitierenden Programme zeige. Ich suche noch Ideen für ein viertes Programm, oder Anregungen zur Veränderung/Verbesserung der ersten drei!
Was hast du denn bis jetzt programmiert? Nutzt du das PWM Signal des Empfängers zum Ändern des laufenden Programms? Was für Lichteffekte möchtest du noch relisieren?
~Stefan
-- T8FG Super Arcus Talent (Robbe) Shocky (Typ Erich) Little Captain Light (Decker Planes) MiniMag, Easy Glider Pro (Multiplex) Chinook, Pixel (Robert Schweißgut) mCP X v2 (Blade)
ohne zusätzliche ICs kann ich allerdings max. 4 RGB LEDs ansteuern + noch 5 normale LED (im Notfall kann hier auch noch eine RGB LED angehängt werden.
Mit zusätzlichen ICs wie z.B. dem TLC5940 (super Teil, aber schwer zu bekommen) könnte man soweit ich weiß 64 (natürlich nicht mit einem TLC5940, aber man kann mehrere hintereinander hängen) weitere RGB LEDs ansteuern ;)
Mit anderen Transistorstufen kann man auch etwas anschließen, was mehr als 500mA verbraucht..
Der Rest ist dann Hirnschmalz des Programmierers :D
Also erstmal habe ich neu ein viertes Programm hinzugefügt. Es ist eine Art lauflicht, was halt im Kreis wandert mit zufälligen Farben. Diesmal aber nicht komplett zufällig sondern zufällig aus 10 vorher einprogrammierten Farben.
Desweiteren habe ich angefangen die Schaltung fürs Modell zu bauen. Am Anhang dazu die ersten Bilder!
http://youtu.be/fN5hY-XNACY Qualität ist leider wie immer eher bescheiden, da sich die LEDs schlecht filmen lassen.. bei Nachtfliegen gibts dann das Original zu gucken ;)
Leider ist die Qualität der LED Strips bescheiden.. Es haben sich jetzt schon an einigen Stellen ein paar LEDs verabschiedet :( Original sind die Strips mit einem Silikon zum Spritzwasserschutz überzogen.. Da das aber extrem schwer ist haben wir das abgezogen. Anscheinent hat das den Lötkontakten der LEDs nicht so gut getan..
Habe mich mal drangesetzt und siehe da, nun klappt die Steuerung über zwei RC Kanäle!
Der eine Schalter dient nur zur allgemeinen Aktivierung.. Also nur wenn der Aktiviert ist leuchtet überhaupt irgendwas und die Programme können durchgeschaltet werden. Der zweite Schalter ist dann der Momentschalter mit dem man ein Programm weiter schalten kann.
Hier dann auch nochmal der Code für die, die was damit anfangen können ;)
#define rechts_oben 8 #define rechts_unten 11 #define links_oben 2 #define links_unten 5 #define rcPin1 A3 #define rcPin2 A2 #define aussen1 A0 #define aussen2 A1 int rcValue = 0; int counterprog2 = 0; int counterprog3 = 0; int oldtime = 0; int time = 0; int value = 0; int counter = 0; boolean freigegeben = false; boolean first = true;
int randomRot[10] = {255,0,0,255,255,0,255,255,72,148}; int randomGruen[10] = {0,255,0,255,0,255,255,140,209,0}; int randomBlau[10] = {0,0,255,0,255,255,255,140,204,211};