Stom sparen

  • Hallo Leute!

    Ich stehe gerade an einem Punkt an, wo ich nicht mehr ohne richtungsweisenden Tip weiterkomme.

    Zur Vorgeschichte:

    Habe für meine Frau zum Hochzeitstag LED-Herzen gebastelt. Insgesamt 16 LEDs an 2 Stück 74HC595 Schieberegister gesteuert über einen Arduino Nano.
    Funktioniert alles prima und sieht meiner Meinung nach sehr schön aus. ABER: nach spätestens 4 Stunden ist der 9V-Block leer. :(

    Hier mal die Version 1:

    Hab jetzt mal einiges zu Energiesparen gelesen und fürs erste viele delays mit PowerDown aus der LowPower-library ersetzt und auch teilweise die Pausen erhöht.
    Sieht dann so aus:

    Damit sollte die Batterie schon einiges länger halten, hab ich aber noch nicht getestet.
    Als nächsten Schritt werde ich die Power-on LED des Arduinos entfernen. Sollte nochmal ein paar mA sparen.

    Und jetzt der Punkt an dem ich nicht weiterkomme:
    Es müsste doch möglich sein, immer nur eine LED leuchten zu lassen. So wie das zB. bei 7-Segment Anzeigen gemacht wird.
    Nur fehlt mir jetzt der Plan, wie ich das umsetze.
    Zweiter Thread geht ja leider nicht. Also brauche ich eine while Schleife, die die LEDs durchläuft bis ... und genau da steh ich an. Auf was soll ich prüfen? Wenn ich auf millis() prüfe, wie weiß ich dann, wo ich im Programm stehe (also welche Sequenz als nächste laufen soll)? Und was passiert, wenn millis() überläuft?

    Ich hoffe auf eure Hilfe und sage jetzt schon mal :danke_ATDE:

    Liebe Grüße
    Markus

  • Moinsen,
    nette Idee ...
    Dass Deine Batterie so schnell leer ist, liegt imho nicht am Arduino und seinem Stromverbrauch sondern an den LEDs ...
    Wie hast Du die denn angschlossen und welche hast Du verwendet (low current?) ...

    btw: -> hier <- ist auch noch was zum Thema Arduino und Strom sparen ...

    cu,
    -ds-

  • wie werden denn die überschüssigen 4V aus dem 9V Block umgesetzt?
    Doch hoffentlich mit einem DC/DC Schaltregler, sonst mit Linearregler hast du mindestens 50% Verlust

    mit einem 8MHz Arduino, einem DC/DC Wandler auf 3,3V und ultra helle LEDs >2Cd kannst du etliche mA sparen

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Edited once, last by jar (November 15, 2015 at 11:00 PM).

  • Es gibt Softwareseitig noch weitere Möglichkeiten Strom zu sparen. Stichworte hierzu wäre: Interrupt, Watchdog, Sleep.

    Da du 10 Minuten Pause hast, sehe ich kein Grund darin wieso sich der Nano nicht für diese Zeit schlafen legen sollte. Das einzige was du zZt machst ist den ADC und den BOB abzuschalten, aber hast kein sleep_mode. Da verbraucht der Nano aber immer noch einige mA, zu viel ;)
    Also dein kompletter Nano verbraucht ca. 20mA ; aber wär er im Standby nur umdie 100μA.
    So viel mA braucht der Nano alleine schon wegen der Onboard LED's. Wenn du zB. die Blaue LED entfernst sind es immer noch 17mA. Der FT232RL braucht wenn er aktiv ist 15mA. Im USB suspend mode sinds trotzdem noch 2.5mA nur für den FT232RL Chip auch wenn kein USB Kabel eingesteckt ist... Der Nano hat zudem bereits einen 5V Regulator der nur 60 bis max. 87% Effizienz besitzt.

    Frage wäre also ob du dafür unbedingt einen Nano brauchst. Für nur 5 Pins reicht auch ein einzelner AVR Chip wie zB ATtiny84

  • Wie hast Du die denn angschlossen und welche hast Du verwendet (low current?) ...

    btw: -> hier <- ist auch noch was zum Thema Arduino und Strom sparen ...

    cu,
    -ds-

    Hallo dreamshader,
    dass die LEDs die Hauptverbraucher sind, ist mir schon bewusst. Deshalb auch die Idee immer nur eine statt alle gleichzeitig leuchten zu lassen. Die LEDs hatte ich noch rumliegen. Vor ca. 15 Jahren bei Conrad gekauft :shy: Ich hab mal mit 20mA gerechnet.
    Danke für den Link. Die Low-Power-Lib stammt aus dem ersten Link :)



    wie werden denn die überschüssigen 4V aus dem 9V Block umgesetzt?
    Doch hoffentlich mit einem DC/DC Schaltregler, sonst mit Linearregler hast du mindestens 50% Verlust

    mit einem 8MHz Arduino, einem DC/DC Wandler auf 3,3V und ultra helle LEDs >2Cd kannst du etliche mA sparen

    Hallo jar!
    Um die 9V auf verträgliche 5V zu bringen, hängt ein LM2596 zwischen Batterie und Arduino. Würde theoretisch auch mit dem on-board-Regler funktionieren, aber bei angenommenen 20mA pro LED wäre der fast an seiner Leistungsgrenze.
    Der Aufbau ist schon komplett verlötet und verklebt - will da eigentlich nur softwareseitig noch was rausholen. Ich kann doch nicht das Hochzeitsgeschenk meiner Frau wieder komplett auseinandernehmen :daumendreh2:



    Es gibt Softwareseitig noch weitere Möglichkeiten Strom zu sparen. Stichworte hierzu wäre: Interrupt, Watchdog, Sleep.

    Da du 10 Minuten Pause hast, sehe ich kein Grund darin wieso sich der Nano nicht für diese Zeit schlafen legen sollte. Das einzige was du zZt machst ist den ADC und den BOB abzuschalten, aber hast kein sleep_mode.


    Frage wäre also ob du dafür unbedingt einen Nano brauchst. Für nur 5 Pins reicht auch ein einzelner AVR Chip wie zB ATtiny84

    Hallo meigrafd,
    wenn ich die Beschreibung der LowPower-Lib richtig verstanden habe, schickt LowPower.powerDown den Atmega sehr wohl in den sleep_mode. Lässt ja auch nur maximal 8 Sekunden zu, was dem Watchdog zuzuschreiben ist (zumindest hab ichs so verstanden). sleepForever bräuchte dann einen externen Interrupt.
    Klar reicht da was kleineres locker aus, aber der Nano war halt schon da und mir gehts auch eher darum mehr über AVRs zu lernen.


    Falls ich irgendwo Blödsinn geschrieben habe, korrigiert mich bitte. Will eigentlich nur das Beste aus der vorhandenen Hardware rausholen.

    Liebe Grüße
    Markus


  • Die LEDs hatte ich noch rumliegen. Vor ca. 15 Jahren bei Conrad gekauft :shy: Ich hab mal mit 20mA gerechnet.

    das war Fehler Nr. 1 olle 20mA Dunkel LEDs verwenden


    Um die 9V auf verträgliche 5V zu bringen, hängt ein LM2596 zwischen Batterie und Arduino.

    Immerhin ein Schaltregler mit besserem Wirkungsgrad als:


    Würde theoretisch auch mit dem on-board-Regler funktionieren, aber bei angenommenen 20mA pro LED wäre der fast an seiner Leistungsgrenze.

    der vernichtet richtig Power ohne Sinn als Linearregler


    Der Aufbau ist schon komplett verlötet und verklebt - will da eigentlich nur softwareseitig noch was rausholen.

    aber nicht wirklich viel das es lohnt


    Ich kann doch nicht das Hochzeitsgeschenk meiner Frau wieder komplett auseinandernehmen :daumendreh2:

    nur bei den LEDs kannst du effektiv sparen, evtl noch mit PWM Tag und Nacht und Sleepmodi sowie RTC DS3231 die den Atmel nachts abschaltet (bzw er sich selber nach Alarmregister in der RTC zum Wecken stellen) , in den Tiefschlaf schickt und am Tage per INT über sein Alarmregister den Atmel wieder weckt

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Edited once, last by jar (November 16, 2015 at 7:08 PM).

  • Ok, ich versteh ja schon, die Hardware ist nicht die beste Basis. Aber mit meiner Idee, die LEDs nach der Reihe zu schalten, müsste sich doch noch was rausholen lassen!?
    Angenommen es leuchtet nur eine LED nach der anderen statt alle 16 gemeinsam. Dann müsste sich doch der Stromverbrauch um Faktor 16 verringern.
    Ich hab bis jetzt noch keinen Grund gefunden, warum das nicht funktionieren sollte - allerdings auch noch keine Idee wie ich das Programm entsprechend anpassen kann.

    LG
    Markus

  • Hallo Markus,


    allerdings auch noch keine Idee wie ich das Programm entsprechend anpassen kann.

    na, das kann doch so schwer nicht sein.

    Du hast eine Reihe an Pins definiert, die über

    Code
    pinMode(n, OUTPUT);


    geschaltet sind.

    Dann hast Du alle der Reihe nach mit

    Code
    digitalWrite(n, HIGH)


    zum Leuchten gebracht.

    Wenn nur eine LED leuchten soll, bedeutet das, dass alle anderen LED ungleich n so

    Code
    digitalWrite(n, LOW)


    geschaltet werden.
    Dann wird kurz gewartet / geschlafen...
    und dann wird LED [n+1] eingeschaltet, n wieder aus. Überschreitet n die letzte LED wird n auf die erste LED gesetzt.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas (November 16, 2015 at 7:56 PM).

  • Hallo Andreas!
    Die LEDs hängen an Schieberegistern, aber vom Prinzip her ist da ja nicht viel um. Die entsprechende LED hätte ich mit "<<" und "&" ausgewählt. Bis dahin ist mir noch alles klar.
    Jetzt will ich aber in einer Schleife die LEDs permanent durch"loopen" lassen, damits genau so aussieht wie jetzt, nur mit dem Unterschied, dass nur eine gleichzeitig an ist.
    Was mir noch nicht ganz klar ist, ist die Abbruchbedingung der Schleife. millis() läuft ja irgendwann über --> könnte zum Problem werden, aber vielleicht ist ja auch die Batterie vorher leer :D
    Und sonst fällt mir nichts ein, wie ich kontrollieren kann, wie lang/oft die Schleife durchläuft.

    LG
    Markus


  • Ok, ich versteh ja schon, die Hardware ist nicht die beste Basis. Aber mit meiner Idee, die LEDs nach der Reihe zu schalten, müsste sich doch noch was rausholen lassen!?
    Angenommen es leuchtet nur eine LED nach der anderen statt alle 16 gemeinsam. Dann müsste sich doch der Stromverbrauch um Faktor 16 verringern.
    Ich hab bis jetzt noch keinen Grund gefunden, warum das nicht funktionieren sollte -

    ja wenn jede LED nur 1/16 an ist ist die Helligkeit ja auch 1/16

    dann brauchst du auch nix umbauen sondern nur die LEDs an die PWM bringen oder die Vorwiderstände auf x16 vergrößern, was aber bei diesen Dunkelleds auch dunkel wird.

    Die bekommen ja deswegen keine größere Lichtausbeute.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Vielleicht hilft dir das: AVR: Rundumlicht Sketch beziehungsweise AVR: Rundumlicht Sketch
    (dort verwendete ich besagten ATtiny84)
    Oder das dies und dies ...im Bezug auf millis() merken und entsprechend nutzen.

    Und mein nächster Tipp wäre nicht delay(); zu verwenden sondern stattdessen ebenfalls deine LowPower Funktionen von der Rocket Scream lib. Das hast du an eigen Stellen auch schon gemacht aber irgendwie nicht konsequent an allen. :s


  • Vielleicht hilft dir das: AVR: Rundumlicht Sketch beziehungsweise AVR: Rundumlicht Sketch
    (dort verwendete ich besagten ATtiny84)
    Oder das dies und dies ...im Bezug auf millis() merken und entsprechend nutzen.

    Und mein nächster Tipp wäre nicht delay(); zu verwenden sondern stattdessen ebenfalls deine LowPower Funktionen von der Rocket Scream lib. Das hast du an eigen Stellen auch schon gemacht aber irgendwie nicht konsequent an allen. :s

    Danke für die Links, werd ich mir mal genauer ansehen.
    Dass nicht überall die LowPower Funktionen genutzt werden liegt daran, dass du nur fixe Werte für Sleep hast und nicht nach belieben wie bei delay (außer man schreibt eine Funktion mit einer Schleife dafür).

    jar: das mit der Helligkeit ist ein Argument. Daran hab ich noch gar nicht gedacht :denker:

    LG
    Markus

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!