Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • sepp62
    Member
    • 26.06.2011
    • 322
    • Bernd

    #1

    Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

    Im Rahmen des Aufbaus meiner Masterart Huey 500 habe ich ein kleines Beleuchtungsmodul auf Arduino-Basis gebastelt. Das Ganze ist recht nett geworden und so habe ich eine kleine Doku geschrieben und die Software auf Open-Source-Basis bereitgestellt.

    Was kann das Modul ? Das Video zeigt ungefähr, wie das Ganze arbeitet.


    Entscheidend war für mich ein möglichst geringer Lötaufwand. Das Arduino-Modul kann für ca. 10 Euro erworben werden, damit halten sich die Kosten ebenfalls im Rahmen. Der Arduino Nano ist direkt per USB an den PC anschliessbar und man muss nicht mit unhandlichen "Programmern" rumhantieren.

    Die Software inklusive Dokumentation kann hier heruntergeladen werden:
    Download arduinounipwmlib for free. Small library for Arduino nano (only) for software PWM control. This is a library for Arduino nano for use in RC model building. It allows allows control of 8 PWM channels for LED or servo operation.


    An wen richtet sich das Projekt ?
    --> An alle, die sich ein Beleuchtungsmodul selbst bauen möchten (aber lötfaul sind).
    --> An Leute mit ein wenig Arduino-Erfahrung oder solchen, die dieselbe im Rahmen eines solch einfachen Projekts erwerben möchten.

    Ich denke, das Projekt ist nicht geeignet als 100% nachbausichere Do-It-Yourself-Lösung für Nicht-Elektronik-/Mikroprozessor-affine Menschen.

    Man muss sicher kein richtiger Programmierer sein, um die Software nutzen zu können, aber Systematik und akkurates Vorgehen wird stark empfohlen.

    Falls Interesse besteht, kann ich noch etwas mehr darüber schreiben.
  • sepp62
    Member
    • 26.06.2011
    • 322
    • Bernd

    #2
    AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

    Hier die Doku noch mal separat.

    Edit by Mod: Anhang auf Wunsch des Users entfernt.

    Kurt
    Zuletzt geändert von DerMitDenZweiLinkenHänden; 12.07.2014, 14:38.

    Kommentar

    • goemichel
      Senior Member
      • 11.01.2012
      • 4180
      • Michael
      • FMSC-Steinfurt / Münster und anderswo

      #3
      AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

      Cooles projekt! Schreib und entwickel bitte weiter.

      Kommentar

      • sepp62
        Member
        • 26.06.2011
        • 322
        • Bernd

        #4
        AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

        Ich habe die Programmierung nun etwas einfacher und intuitiver gemacht.


        Mit dieser Zeile lässt sich z.B. ein Beacon-Licht programmieren:

        [FONT="Courier New"]SEQUENCE( beacon) = { RAMP(0,45,20), RAMP(45,200,20), CONST(200,20), RAMP(200,45,20), RAMP(45,0,20), PAUSE(20) };[/FONT]

        Das Beacon-Licht schwillt dabei über 2 lineare Rampen an und wieder ab.

        Insgesamt kann man so mit wenigen Zeilen ein komplettes phasenkonstantes Beleuchtungschema programmieren, das sich über den Sender umschalten lässt. Das "beacon"-Beispiel arbeitet auf einem "nackten" Arduino-Modul ohne dass man einen Lötkolben in die Hand nehmen muss.

        Kommentar

        • sepp62
          Member
          • 26.06.2011
          • 322
          • Bernd

          #5
          AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

          Hier noch ein Beispiel, wie man das Servo für den Landescheinwerfer programmiert.

          Es gibt zwei Sequenzen, eine zum Ausfahren und eine zum Einfahren. Das Server fährt bei beiden innerhalb einer Sekunde in die Position.

          [FONT="Courier New"]#define RETRACT_POS 10
          #define ASCEND_POS 255
          SEQUENCE( retract ) = { RAMP( ASCEND_POS, RETRACT_POS, 100 ), HOLD( RETRACT_POS ) };
          SEQUENCE( ascend ) = { RAMP( RETRACT_POS, ASCEND_POS, 100 ), HOLD( ASCEND_POS ) };[/FONT]

          So fährt man das Servo aus:

          [FONT="Courier New"]pwm.SetOutChannel( LANDING_SERVO, ARRAY( ascend ), UniPWMChannel::ANALOG_SERVO );[/FONT]


          Eine solche Sequenz lässt sich millisekundengenau mit dem Einschalten des Landescheinwerfers koppeln. Man kann diesen einschalten, sobald das Servo in der Ausgefahren-Position ist. Der Landeschweinwerfer lässt sich dann auch wieder über eine Sequenz steuern, man kann ihn z.B. langsam" verlöschen lassen.

          Kommentar

          • sepp62
            Member
            • 26.06.2011
            • 322
            • Bernd

            #6
            AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

            So sieht die Anfangskonfiguration zum Experimentieren aus. Für ca. 12 Euro bekommt man das Modul in einem großen Internet-Warenhaus.



            Teil dieses Projekts ist auch eine kleine Zusatzplatine, die einen 8-fach-Treiber mit je 500mA pro Ausgang, sowie einen Optokoppler bereitstellt. Der Nano kann direkt auf die Platine aufgesteckt werden.

            Kommentar

            • sepp62
              Member
              • 26.06.2011
              • 322
              • Bernd

              #7
              AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

              Die Version 1.02 ist nun verfügbar. Was ist neu ?
              • Vereinfachte Programmierung durch neues Interface
              • Erweiterung auf max. 10 Kanäle
              • Abschaltung bei niedrigem Batteriestand

              Der Download-Link:
              Download arduinounipwmlib for free. Small library for Arduino nano (only) for software PWM control. This is a library for Arduino nano for use in RC model building. It allows allows control of 8 PWM channels for LED or servo operation.


              Direkter Link für die neue Doku:


              Beispiel für das neue Programmier-Interface:
              1. Sequenzen definieren.
              2. Objekt initalisieren und Sequenzen zu "Patterns" zusammenfassen.
              3. Schalterpositionen definieren und Patterns zuweisen
              4. Starten

              Der Code für einen Zweikanal-Blitzer (mit nur einem Pattern und daher ohne Umschaltung. Weitere Beispiele finden sich im Software-Archiv):

              [FONT="Courier New"][SIZE="2"]
              // Pins fuer LEDs
              #define PIN_TOP_STROBE 8 // rot doppelt blitzend
              #define PIN_BOT_STROBE 6 // rot einfach blitzend, alternierend mit TOP

              SEQUENCE( singleFlash ) = { PAUSE(80), CONST(200,20), PAUSE(40) };
              SEQUENCE( doubleFlash ) = { PAUSE(10), CONST(200,20), PAUSE(10), CONST(200,20), PAUSE(80) };

              // PWM Control Objekt
              UniPWMControl ctrl;

              void setup()
              {
              ctrl.Init( 2 ); // max 2 Kanäle
              ctrl.AddSequence( 0, PIN_TOP_STROBE, ARRAY( doubleFlash ) );
              ctrl.AddSequence( 0, PIN_BOT_STROBE, ARRAY( singleFlash ) );
              ctrl.ActivatePattern( 0 ); // wir haben nur ein Pattern, das aktivieren wir
              }

              void loop()
              {
              delay( 500 );
              }[/SIZE][/FONT]

              Kommentar

              • timo
                Senior Member
                • 05.06.2002
                • 1148
                • timo
                • Allendorf - Haiger

                #8
                AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

                Hi,

                hat sich mal jemand an das Projekt gewagt und kann berichten?

                Gruß Timo
                http://mfsv-haiger.de
                "Great lovers don't need big helis" T-Rex 250

                Kommentar

                • sepp62
                  Member
                  • 26.06.2011
                  • 322
                  • Bernd

                  #9
                  AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

                  Nachdem Timo Interesse angemeldet hat, habe ich mal ein kleines Video gedreht, dass das Modul plus Software in Aktion zeigt. Leider bin ich nicht der große Filmer, aber es zeigt prinzipiell wie es geht.

                  Mit meiner Huey 500 ist die Software ziemlich unterfordert. Wenn man mal von dem Landescheinwerfer absieht, könnte man das bisschen Blinken leicht mit ein paar Zeilen Code machen und sich den ganzen Aufwand sparen.

                  Das Ganze lohnt sich erst, wenn man kompliziertere Blinkmuster hat oder eben ein Servo plus Licht synchron steuern und dabei nur einen Kanal opfern möchte.

                  Zudem entsteht Spaß an der Sache, wenn man an den Sequenzen ein wenig rumspielen und sie schnell mal ändern möchte. Dann ist man mit einfachem Code schnell am Ende.

                  Hier nun das Video:

                  Kommentar

                  • sepp62
                    Member
                    • 26.06.2011
                    • 322
                    • Bernd

                    #10
                    AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

                    Hier noch ein Bild der verbauten Hardware. Das Modul ist ein Arduino Nano. Die Schaltung, auf der die Platine basiert, befindet sich in der Doku der Library.
                    Angehängte Dateien

                    Kommentar

                    • Capelini81
                      Member
                      • 26.03.2014
                      • 291
                      • Marcel

                      #11
                      AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

                      Hallo Bernd,

                      ich habe heute meine Arduino (Micro) bekommen und erstmal ohne deine Lib experimentiert. Ist schon einige Jahre her das ich in der Schule etwas mit C am Hut hatte.

                      Habe deinen Thread leider zu spät gesehen, sonst hätte ich mir gleich einen Nano gekauft... egal, werde ich wohl noch nachholen.

                      Ich habe da aber ein paar Frage zu deinen Codezeilen:

                      SEQUENCE( singleFlash ) = { PAUSE(80), CONST(200,20), PAUSE(40) };
                      SEQUENCE( doubleFlash ) = { PAUSE(10), CONST(200,20), PAUSE(10), CONST(200,20), PAUSE(80) };

                      Ich habe mit deiner Doku rausgefunden das die Werte hinter "PAUSE" die Dauer ist. Sind das entsprechend Millisekunden?
                      Der erste Wert hinter "CONST" (200) gibt die PWM an, richtig? Welcher Wertebereich ist hier möglich? 0 = aus, max = ?
                      Kann ich die entsprechenden PWM Werte auch für die Ansteuerung eines Servos verwenden?


                      Wie gesagt, ich fuchse mich da gerade komplett neu rein und da habe ich doch noch die eine oder andere Frage...

                      VG
                      Marcel

                      Kommentar

                      • sepp62
                        Member
                        • 26.06.2011
                        • 322
                        • Bernd

                        #12
                        AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

                        Hallo Marcel,

                        ja, das stimmt so. Außer, dass der Dauer-Wert nicht Millisekunden angibt, sondern Mehrfache von 10 Millisekunden.

                        PAUSE( 80 ) schaltet das Ausgangssignal also 800 Millisekunden lang ab.

                        Der PWM-Wert ist ein 8-Bit-Zähler-Wert. 8 Bit bedeutet, Du hast 256 Stufen (von 0 bis 255). Wenn Du den PWM-Wert auf 128 setzt, ist das ein "Duty-Cycle" von 50%. D.h. der Puls ist die Hälfte der Zeit eingeschaltet.

                        Die PWM-Frequenz beträgt im Standard 100Hz, d.h. ein Zyklus beträgt 10 Millisekunden. Nachdem Du diesen Zyklus in 256 Schritte unterteilen kannst, verändert jeder Schritt den Puls um 40 Mikrosekunden.

                        Ein Servo benötigt Pulse zwischen 1.0 und 2.0 Millisekunden Dauer. D.h. der komplette Servoweg entspricht einer Pulsänderung von 1000 Mikrosekunden (=1 ms). Wenn sich der Puls pro PWM-Wert um 40 Mikrosekunden ändert, hast Du eine Auflösung von 25 Schritten. D.h. Du kannst den kompletten Verfahrweg des Servos in 25 Schritte einteilen. Das ist relativ grob und Du musst schauen, ob Dir das reicht.

                        Zudem halten nicht alle Servos 100Hz aus (die meisten Digitalservos aber schon). Du solltest prüfen, ob Dein Servo heiss wird, bevor es eventuell den Geist aufgibt.

                        Damit Du ein Servo doch zufriedenstellend ansteuern kannst, gibt es einen speziellen Modus: ANALOG_SERVO. Dieser Modus funktioniert aber nur an Pin 9, da nur dieser Pin über einen höher auflösenden Zähler angesteuert werden kann. Die Ansteuerfrequenz an diesem Pin beträgt auch nur 50 Hz, so dass auch Analogservos funktionieren.

                        Hier ein Beispiel, wie man den Modus setzt:

                        ctrl.AddSequence( PATTERN_STARTUP, LANDING_SERVO, ARRAY( retracted ), UniPWMChannel::ANALOG_SERVO ); // servo

                        Die PWM-Werte, die Du für ein bestimmtes Servo brauchst, musst Du experimentell ermitteln. Hier bitte vorsichtig, damit das Servo bei extremen Werten nicht in den Endanschlag fährt.

                        Wenn Du weitere Fragen hast --> kein Problem.

                        Kommentar

                        • ThomasC
                          Senior Member
                          • 10.02.2012
                          • 3963
                          • Thomas
                          • Giessen

                          #13
                          AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

                          Servus,

                          bin gerade über diesen Thread gestolpert. Habe zwar derzeit keinen Bedarf an der Schaltung, fühle mich aber phantasiemäßig inspiriert und möchte erwähnen: solche Selbstbauprojekte sind für mich ganz großes Kino im Modellbau - die Links sind in meine Modellbaulinksammlung aufgenommen, ich bin mir fast 100% sicher, daß ich darauf zurückkommen werde, und sei es nur, um meine völlig verstaubten Programmierkenntnisse zu reanimieren - weiter so!

                          Gruß

                          ThomasC
                          Es könnt' alles so einfach sein - isses aber nicht

                          Kommentar

                          • Capelini81
                            Member
                            • 26.03.2014
                            • 291
                            • Marcel

                            #14
                            AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

                            Zitat von sepp62 Beitrag anzeigen
                            Hallo Marcel,

                            ja, das stimmt so. Außer, dass der Dauer-Wert nicht Millisekunden angibt, sondern Mehrfache von 10 Millisekunden.

                            PAUSE( 80 ) schaltet das Ausgangssignal also 800 Millisekunden lang ab.

                            Der PWM-Wert ist ein 8-Bit-Zähler-Wert. 8 Bit bedeutet, Du hast 256 Stufen (von 0 bis 255). Wenn Du den PWM-Wert auf 128 setzt, ist das ein "Duty-Cycle" von 50%. D.h. der Puls ist die Hälfte der Zeit eingeschaltet.

                            Die PWM-Frequenz beträgt im Standard 100Hz, d.h. ein Zyklus beträgt 10 Millisekunden. Nachdem Du diesen Zyklus in 256 Schritte unterteilen kannst, verändert jeder Schritt den Puls um 40 Mikrosekunden.

                            Ein Servo benötigt Pulse zwischen 1.0 und 2.0 Millisekunden Dauer. D.h. der komplette Servoweg entspricht einer Pulsänderung von 1000 Mikrosekunden (=1 ms). Wenn sich der Puls pro PWM-Wert um 40 Mikrosekunden ändert, hast Du eine Auflösung von 25 Schritten. D.h. Du kannst den kompletten Verfahrweg des Servos in 25 Schritte einteilen. Das ist relativ grob und Du musst schauen, ob Dir das reicht.

                            Zudem halten nicht alle Servos 100Hz aus (die meisten Digitalservos aber schon). Du solltest prüfen, ob Dein Servo heiss wird, bevor es eventuell den Geist aufgibt.

                            Damit Du ein Servo doch zufriedenstellend ansteuern kannst, gibt es einen speziellen Modus: ANALOG_SERVO. Dieser Modus funktioniert aber nur an Pin 9, da nur dieser Pin über einen höher auflösenden Zähler angesteuert werden kann. Die Ansteuerfrequenz an diesem Pin beträgt auch nur 50 Hz, so dass auch Analogservos funktionieren.

                            Hier ein Beispiel, wie man den Modus setzt:

                            ctrl.AddSequence( PATTERN_STARTUP, LANDING_SERVO, ARRAY( retracted ), UniPWMChannel::ANALOG_SERVO ); // servo

                            Die PWM-Werte, die Du für ein bestimmtes Servo brauchst, musst Du experimentell ermitteln. Hier bitte vorsichtig, damit das Servo bei extremen Werten nicht in den Endanschlag fährt.

                            Wenn Du weitere Fragen hast --> kein Problem.
                            Super!

                            Manchmal steh ich ja echt auf dem Schlauch - logo das es bei 8Bit 256 Schritte sind... Die Umrechnung auf die Zeiteinheiten für die Servoansteuerung hab ich auch verstanden, schön erklärt. Die 25 Schritte sollten zum experimentieren reichen.

                            Wünsch dir jetzt erstmal frohe Weihnachten!

                            Kommentar

                            • Kyrill
                              Kyrill

                              #15
                              AW: Beleuchtungsmodul auf Arduino-Nano-Basis (Open-Source)

                              Hallo Sepp62,

                              danke für Deine Antwort im RC-Network. Ich denke hier wird das Thema wenigstens von ein paar anderen mit verfolgt und man sollte hier weiter diskutieren.
                              Ich persönlich fliege nur Flächenmodell (aus EPP hauptsächlich und gerne auch in 200% Versionen mit E- Antrieb) deshalb bin ich hier eher Exot im Heli-Forum, aber Deine Leistung und Vorarbeit bei der Programmierung des Arduino Nano hat mich hierher verschlagen. Danke nochmal dafür!
                              Dein Programm bietet mir im Grunde genau das was ich mir bei einer Lichtsteuerung vorstelle. Darauf kann ich bestimmt aufbauen, sobald meine Arduinos aus China den Weg zu mir gefunden haben. Leider wird das noch ca 6 Wochen dauern wenn ich Pech habe.
                              Trotzdem schon mal mein eigenes Problem.
                              Ich betreibe an meinen beiden großen Magnums LED Strips mit 12 Volt Eingangsspannung direkt an einem 3S Lipo oder aber über 12 Volt Festspannungsregler an 4S. Zur Zeit wird das List nur über einen Relaisschalter aus einer alten Servoplatine geschaltet ohne Blinkefekte. Dabei will ich Deine Arduinoschaltung einsetzen. allerdings sind die LED Streifen recht Leistungshungrig und nehmen 16 Watt pro Meter Länge auf. Da kommen schnell mal 2-3 Ampere Strom zusammen bei den "Positionslichtern" siehe Avatar. Da liegt die Stromaufnahme bei ca 3 Ampere. (Fast 3 Meter LED-Band mit 5050 LEDs)

                              Jetzt die Frage kann man hinter dein Darlington-Array noch einen weiteren Darlington Leistungstransistor pro Kanal mit 2 bis 3 Ampere anhängen? Oder gibt es da bessere Lösungen, um pro Kanal des Arduino Nano so 3 Ampere schalten zu können?
                              Zuletzt geändert von Gast; 26.12.2014, 18:21.

                              Kommentar

                              Lädt...
                              X