Arduino Code LED Dimmen

  • Hallo,


    hat mal jemand einen Beispiel Code für mich um per Arduino (Uno), zusammen mit dem Zeit Modul eine LED je nach Uhrzeit auf und ab zu dimmen?


    Danköööö


    Lars

  • Hallo Lars,


    auf der Seite gibt es einen Link für die Firmware, in der auch die .ino Dateien sind, wo der Klartext des Arduino-Programmcodes zu sehen ist. Dort kannst Du Dich bedienen. Schwierig wird es dann, wenn Du keine Kenntnisse in der Arduino-Programmierung hast, dann wird der Weg zum Ziel sehr weit.


    Marco (Vanles) hat auch den Code von seiner Implementation veröffentlicht, diese ist etwas schlichter als der Storm-X Controller und ein guter Anfang. Bei seinem Platinen-Layout kann man auch direkt mit der Fritzing-Software sehen, wie die Komponenten verlötet sind.


    Gruß
    Sandy

  • Hi Lars,
    Wirklich wild ist das nicht.hast du dir die IDE mal installiert?
    Da gibt es Basis Sketche. Zum einen für die ds1307 und dann auch einfache fade Sketche.


    Ein wenig beschäftigen damit würde ich die schon raten, sonst wird das nix.
    Im arduino Forum wird auch Super geholfen.


    Wenn du schon eine erste Version gebastelt hast poste sie mal hier, schau mit die gerne an und helfe dir weiter, bis das Ding dann steht.


    Glaub mir wenn ich die meinen Sketch schicke bringt dir das nix, andere lineares, andere Komponenten etc...


    BG thorsten






    Sent from my iPhone using Tapatalk

  • Nabend,

    auf der Seite gibt es einen Link für die Firmware, in der auch die .ino Dateien sind, wo der Klartext des Arduino-Programmcodes zu sehen ist. Dort kannst Du Dich bedienen. Schwierig wird es dann, wenn Du keine Kenntnisse in der Arduino-Programmierung hast, dann wird der Weg zum Ziel sehr weit.

    Ich hab mir die Firmware mal angesehen. Ich habe zwar schon in diversen Sprachen Programmiert (und sogar mal eine Handy-App veröffentlicht) aber halt immer Just For Fun und noch nie für Arduino. Von daher war mir die Firmware erstmal etwas zu komplex

    Wirklich wild ist das nicht.hast du dir die IDE mal installiert?
    Da gibt es Basis Sketche. Zum einen für die ds1307 und dann auch einfache fade Sketche.

    Jup, IDE ist drauf und ein erster Test mit der OnBoard LED läuft.


    Wenn du schon eine erste Version gebastelt hast poste sie mal hier, schau mit die gerne an und helfe dir weiter, bis das Ding dann steht.


    Glaub mir wenn ich die meinen Sketch schicke bringt dir das nix, andere lineares, andere Komponenten etc...

    ´Danke für das Angebot. Das mit dem reinen Dimmen bekomme ich sicher hin. Mich interessiert vor allem eine Routine die z.B. um 8 Uhr morgens über eine eine Stunde auf dimmt. Da das ganze ja immer in einem Dauerloop des Processors ausgeführt wird bin ich mir noch nicht ganz im klaren wie ich das am besten realisieren soll.


    Gruß


    Lars

  • grundprinzip:


    eine funktion die einen kanal mit übergabewert auf einen DIMwert setzt

    C
    void PWM_set( unsigned char led , unsigned int  value )
    // led ist eine variable die den canal bestimmt ... 
    // value der wert der aktuell gesetzt werden soll


    dann einen timer der zB 1x die sekunde aufgerufen wird
    ( viele nutzen hier die RTC in dem mainloop )
    hier überprüfst du ob :
    1: die startzeit erreicht ist
    2:UND ob der aktuelle wert dem zielwert entspricht (
    solange dieser nicht erreicht ist erhöhst du diesen wert wert++;
    damit bei jedem timerdurchlauf wird die PWM neu gesetzt wird ( mit obiger funktion ) bis der wert erreicht ist
    damit leuctet die LED langsam heller


    wenn du die zeit bestimmen willst von 8uhr bis 9uhr sonnenaufgang . dann musst du die zeit rausrechnen und entweder
    1: timer schneller laufen lassen für diesen kanal
    2: den stritt ausrechnen den man je drchlauf raufrechnet



    das ist das raufdimmen ..
    runterdimmen ist das gleiche nur mit rückwärtszählen


    Pro kanal brauchst du nun ein paar parameter
    startzeit - helligkeit - stopzeit


    für tagesverläufe musst du weiter parameter hinzufügen
    die überprüfung ist dann genau so .. nur das du dir noch merken musst wo du gerade bist

    Dirk

    Einmal editiert, zuletzt von saddevil ()

  • In einem anderen Thread habe ich gelesen das die KSQ nur 2.5 Volt am PWW Eingang verträgt, der Arduino aber 5 Volt raus bläst.. zum Glück noch rechtzeitig gesehen. .sonst wäre der erst mal im Eimer :blackeye:

  • Hi,
    welche KSQ nutzt du denn?


    Hier mal ganz kurz und knapp mein ANsatz:


    Zunächst habe ich Beleuchtungsarrays definiert (nur ein Ausschnitt, eine Zeile je PWM out:

    Code
    //  0   | 1   | 2   | 3   | 4   | 5   | 6   | 7   | 8   | 9   | 10  | 11  | 12  | 13  | 14  | 15  | 16  | 17  | 18  | 19  | 20  | 21  | 22  | 23  
    const int lightArray[16] [24] = { { 4095, 4095, 4095, 4095, 4095, 4095, 4095, 3500, 2500,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0, 3500, 4095, 4095, 4095 },



    In der Loop frage ich regelmäßih Uhrzeit und PWM values ab

    Code
    void loop()
    { 
      getTime(); // die entsprechende FUnktion ist relativ ähnlich wie aus den Beispielsketches, hier nicht aufgeführt
      getLight();
      setLight();


    PWM value wird für jeden der 16 Kanäle (bei mir) berechnet


    Und dann wird der Wert gesetzt

    Code
    void setLight() {
      for (int i=0; i<16; i++) {
        Tlc.set(LED[i], valueLight[i]);
        Tlc.update();
      }
    }


    Ist ein alter COde von mir, habe gerade keinen aktuelleren hier, sollte aber vom Ansatz her helfen


    BG


    //EDIT
    nicht wundern, der TLC arbeitet mit 12Bit, daher Werte bis 4095.
    Zudem musste ich Aufbau bedingt die Werte invertieren, d.h. PWM=0 entspricht hier 100%.
    Ist aber irrelevant für den Ablauf.

  • ich bin fast fertig (hoffe ich).


    Ich muss noch den PWM anschließen und den Wert setzen:


  • Hi,
    ohne großartig Deinen Code gelesen zu haben, eines vorab:
    Nimm das Delay(5000) raus!!! Ist ein NoGo und hat da nix zu suchen, du stoppst damit das komplette Programm für 5 Sekunden! Was genau willst du damit bezwecken?
    Ein hartes Delay wird meist nur bei Sensoren eingesetzt, dann auch nur mit wenigen ms.


    Wenn du ein Delay benötigst, bitte in dieser Form:
    http://playground.arduino.cc/Learning/BlinkWithoutDelayDe


    BG
    Thorsten

  • Ich hab den Delay drin weil mir gesagt worden ist das das RTC Modul es nicht verträgt so oft abgefragt zu werden.


    in den Beipeilcodes sind dafür auch immer Delays drin.


    Werde mal das Beispiel mit ein bauen.


    BTW gibt es irgendwo einen Arduino Emulator wo ich den Code testen kann ohne den Arduino vor Ort zu haben?

    Einmal editiert, zuletzt von Taurec42 ()

  • Hi,
    ich würde die Uhr auch nur jede Sekunde abfragen. Wenn man das nicht dürfte, könnte ja nie eine Uhr mit Sekundenanzeige gebastelt werden ;)
    Aber bitte nicht mittels Delay:


  • Hab den Code noch etwas Optimiert und das PWN Dimmen eingebaut. Morgen das Modul Anlöten und testen:


  • Also ich habe mir so etwas auch schon mal gebaut. Leider kann ich das RTC Modul nicht empfehlen, da der Sekunden Versatz viel zu hoch ist. Sprich jeden Tag verlierst du 30-60 Sekunden. Versuche dir lieber einen LAN Anschluss zu basteln, um die Zeit aus dem Internet zu ziehen, somit läuft die immer richtig und du musst nicht jeden Monat dein Modul neu kalibrieren, bzw. Eine Stunde nachstellen. Außerdem kann später eventuell noch mit einem Web Interface drauf zugegriffen werden. Grüße

  • Hoi,


    ich hatte das auf einem arduino Yun laufen. pwm dimmung mittels zeit aus dem internet mit der Time library (arduino hat selbst eine uhr dann, ohne RTC). jede stunde updaten aus dem internet. auch sensor data auf ner internet seite (auch mit webcam zum fische schauen :P ).


    habe aber jetzt eine X1 drüber, somit ist die ganze dimmschaltung entfallen und wird nurnoch jede minute die wasser und umgebungs temperatur gelogd.


    bei pwm dimmung mit arduino rate ich dringend dazu die auflösung der analogen ausgänge zu erhöhen. Standard ist diese 256 punkte, und da sieht man vorallem bei niedrigen werten den helligkeitssprung der lampen sehr arg. bei 1024 ist dies viel gleichmässiger.


    Auch hilft eine lineare mapping der led helligkeit, weil sonst ist 50% pwm nicht gleich 50% helligkeit der leds, und man sieht kaum dimmung bis die leds fast aus sind.


    Wenn du den code noch brauchst, ich hab noch ein backup davon. kann es posten wenn ich zuhause binn.


    Grüsse,


    Lorenz

  • Auch hilft eine lineare mapping der led helligkeit, weil sonst ist 50% pwm nicht gleich 50% helligkeit der leds, und man sieht kaum dimmung bis die leds fast aus sind.


    das ist aber nur für das auge so ...
    die strahlungsleistung ist ja wichtig ..


    und die liegt bei 50% PWM irgendwo in der nähe von 50% ...

    Dirk

  • das ist aber nur für das auge so ...
    die strahlungsleistung ist ja wichtig ..


    und die liegt bei 50% PWM irgendwo in der nähe von 50% ...


    das kann gut sein, nur kriegt man dan den effekt das man über eine stunde verteilt runterdimmt, und das licht sich nicht verändert für 55 minuten und in den letzten 5 minuten sehr schnell aus geht. Dann kan man ja fast genausogut einfach das licht aus machen ohne dimmung.


    Wie gesagt, das ist meine erfahrung und ich fand es als sehr störend zu dimmen ohne die werte anders zu mappen.

  • ich hab bei mir einen timerinterrupt mit 1ms
    seit dem letzten stromausfall vor > 1/" jahr geht die uhr ( softwareuhr mit 1ms zeitbasis )
    um ein paar sek falsch

    Dirk

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!