Abschaltung der Powerbank mit blinkender LED verhindern

Hallo, ich finde das Projekt echt super und bin an der Erstellung der ersten Box. Die Phoniebox habe ich wegen aus meiner Sicht bestehender Nachteile im Vergleich zum Tonuino aufgegeben. Ich habe ohne Vorkenntnisse auch aufgrund der guten und zahlreichen Anleitungen hier im Forum inzwischen grundsätzlich alles rudimentär zum Laufen gebracht. Das Ausschalten der Powerbank verhindere ich mit einer LED an D6 (mit Widerstand), entsprechend den Hinweisen und Code-Vorlagen (zum Einschalten und Ausschalten), welche sich hier im Forum finden lassen. Allerdings benötigt meine Powerbank eine relativ hohe Grundlast (mehr als 2 LEDs, wieviele genau, bin ich noch am evaluieren, Umsetzung soll dann mit LED-Streifen erflogen). Meine Frage ist, ob ich die LED ohne weitere Funktionen blinken / pulsieren lassen kann (also alle 20 Sekunden für eine Sekunde einschalten, um Strom zu sparen und dennoch das Ausschalten der Powerbank zu verhindern). Ich würde gerne beim „originalen“ Code bleiben und benötige auch nicht die vielen Funktionen der „Status“ LED. Lässt sich ein „einfaches“ Blinken der LED an D6 mit einfachen Code für Anfänger realisieren? Ich habe zwar Erfahrung mit Skripten, Linux, etc., aber nicht mit Programmierung, Arduino, etc…
Vielen Dank für eine kurze Antwort / Hinweis.
Michael
P.S. gerne mache ich mit der Frage auch ein neues Thema auf / verschiebe es zu einem passenderen Ort…

Hallo, ich habe meine Frage bereits bei einem anderen Beitrag gestellt (Nun brauche ich wirklich Hilfe - #10 von kkmichi), bin aber vermutlich hier „richtiger“. Gerne lösche ich einen der beiden Posts auch.

Meine Frage ist, ob ich die LED ohne weitere Funktionen der „Status LED“ blinken / pulsieren lassen kann (also alle 20 Sekunden für eine Sekunde einschalten, um Strom zu sparen und dennoch das Ausschalten der Powerbank zu verhindern). Ich würde gerne beim „originalen“ Code bleiben und benötige auch nicht die vielen Funktionen der „Status“ LED. Lässt sich ein „einfaches“ Blinken der LED an D6 mit einfachen Code für Anfänger realisieren? Danke für eine kurze Antwort. Michael

Welche Powerbank verwendest du denn?
Am einfachsten ist es natürlich eine Powerbank zu verwenden, die nicht ungewollt abschaltet.

Schaltet der TonUINO auch ab während etwas abgespielt wird oder hast du das Problem nur bei pausierter Wiedergabe?

Willst du eine normale LED oder eine PWM-LED verwenden?

Es gibt hier in der Kategorie #stromversorgung auch einige Themen, die sich mit der ungewollten Abschaltung und Lösungen dafür beschäftigen.

Willkommen @kkmichi ,

Nein, einfach ist es in diesem Code leider nicht. Er ist in sich recht verschachtelt und hat keinen Punkt an dem er regelmäßig vorbeiläuft um eine LED zum leuchten zu bringen.
Wenn du Strom sparen möchtest, brauchst du eine externe Schaltung, die etwas zum Blinken bringt. Einen Attiny, wie ihn @marco-117 in seinem Neopixel Modul nutzt oder eine Bistabile Kippstufe, die in einer Ecke im Tonuino vor sich hinkippt.
Ist dir der Stromverbrauch doch nicht so wichtig, kannst du über den einen Ausgang 2 WS281x LEDs einschalten, die brauchen dann genug Strom.

Hallo, ich habe eine EasyAcc 20000 (da ich urspr. eine Phoniebox bauen wollte, für Tonuino vielleicht etwas überdimensioniert, aber halt vorhanden). Der Tonuino schaltet auch ab, wenn etwas abgespielt wird. Bisher habe ich es mit einfachen LEDs und Vorwiderstand probiert - 2 LEDs reichen jedenfalls nicht aus (auch nicht beim abspielen). Heute Abend werde ich ein einfaches LED-Band (5V) probieren - das soll auch in der finalen Box verbaut werden. PWM / dimmen will ich nicht verwenden. Für mich wäre ein kurzes Aufblinken der LEDs die einfachste Lösung (wenn es sich einfach per Code umsetzen ließe), da keine weitere Hardware erforderlich und einfach umsetzbar. Ich habe viele der Beiträge bereits gelesen, aber als „für mich nicht einfach genug“ befunden. Auch eine neue Powerbank wäre zwar möglich, aber aus Nachhaltigkeitsgesichtspunkten und auch finanziellen Aspekten nicht die beste Lösung.

Da sollte der Stromverbrauch ja nun keine Rolle spielen.
Dann kannst du auch über einen Widerstand noch die fehlenden mA einfach dauerhaft in Wärme verbraten.

grds. nicht, aber blinken wäre besser :slight_smile:
und auch Wärme könnte man pulsieren…

Astabile Kippstufe

Damit kannst du permanent blinken, dann wählst du Kondensatoren und Widerstände so, dass drei Sekunden Zustand 1 ist, dort ein 10kOhm für 0,5mA. Und dann ist 200ms Zustand 2, mit 100 Ohm um 50mA fließen zu lassen

Danke - damit werde ich mich beschäftigen. Kann man ggf. etwas „vorhandenes“ kaufen / verwenden, bspw. NE555 Schaltungen » Aufbau und Funktionsweise des Timers erklärt? Ich habe zwar einen Lötkolben und kann rudimentär auch etwas irgendwo anlöten, aber so richtig wohl fühle ich mich nicht dabei (und so einfach sind Schaltpläne für mich auch nicht zu verstehen).
Aber danke schon mal für eure Hilfe. Und ich habe verstanden, dass es nicht einfach mit ein paar Zeilen Code funktioniert :slight_smile:

Verstehe ich es richtig, dass du die LED im Standby Modus pulsieren lassen möchtest?

Nein, dauerhaft, also immer wenn der Tonuino läuft, egal welcher „Modus“. Und zwar für 1 Sekunde, alle 20 Sekunden und am liebsten mit dem „Original“ -Code

Das geht nicht ohne HW-Änderung.

Ansonsten könntest du mit ein paar Zeilen an bestimmten Stellen im Code zumindest die LED ca. alle 20 Sekunden pulsieren lassen. Aber da musst du dann ein paar Aufrufe und eine Funktion einfügen.

Für meinen SonosUINO habe ich die Status-LED für mehrere Informationen genutzt.

Also wenn ich „Copy/Paste“ an definierten Stellen etwas in den Code einfügen muss, bekomm ich das hin. Auskennen mit Arduino / Programmierung tue ich mich nicht. Auf welchen Code hast du denn aufgesetzt?

Auf der DEV.

Müsste die Codestellen mal raussuchen, wenn Interesse besteht (ist halt nicht darauf ausgerichtet, alle 20s für 1s zu pulsieren/blinken).

Ja, ich habe großes Interesse - vielen vielen Dank schon mal für dein Angebot. Ggf. / Vrsl. bekomme ich die Zeitabstände hin, wenn ich weiß wo ich grds. was einfügen muss…

Nach #define shutdownPin 7
#define TonuinoOnLEDPin 6
einfügen.

Vor void setup()
const int KonstLEDHell = 150;
und direkt am Anfang in void setup()

  pinMode(TonuinoOnLEDPin, OUTPUT);
  digitalWrite(TonuinoOnLEDPin, HIGH);

einfügen. Hier wird aber lediglich die LED auf Dauerleuchten gesetzt. Kannst digitalWrite(TonuinoOnLEDPin, HIGH); auch auf LOW setzen oder erstmal ganz weglassen. Wie du willst.

Vor void loop()

int helligkeit = 150;
int richtung = 4;
unsigned long previousMillis = 0; 
const long interval = 1000;    // Blinkdauer 
unsigned long currentMillis = 0;
bool ledState = LOW;

void StatusLED(int state) {
    
   // - Pin D6: Status LED:(TonuinoOnLEDPin) wird direkt beim Starten des Arduinos aktiviert

  switch (state) {
    case 0: {Serial.println(F("StatusLED Case 0"));  // Leuchtet normal (z.B. Musik wird abgespielt)
        analogWrite(TonuinoOnLEDPin, KonstLEDHell);
      }
      break; 
    case 1: {Serial.println(F("StatusLED Case 1"));  // blinken
      currentMillis = millis();
      if (currentMillis - previousMillis >= interval) 
        { previousMillis = currentMillis;
          ledState = !ledState;
          digitalWrite(TonuinoOnLEDPin, ledState);
        } 
      }
      break;
    case 2: {Serial.println(F("StatusLED Case 2"));  //pulsierende LED
      analogWrite(TonuinoOnLEDPin, helligkeit); 
      helligkeit = helligkeit + richtung;
      if (helligkeit >= 200 || helligkeit <= 5) {
        richtung = richtung * -1; 
        } 
      }
      break;
      
      case 99: {Serial.println(F("StatusLED Case 99"));  // LED aus
        digitalWrite(TonuinoOnLEDPin, LOW);
      }
      break; 
  }
}

Nun die folgenden Stellen suchen und jeweils die Zeile mit StatusLED einfügen:
In void loop:

if (pauseButton.wasReleased()) {
  if (activeModifier != NULL)
    if (activeModifier->handlePause() == true)
      return;
  if (ignorePauseButton == false)
    if (isPlaying()) {
      mp3.pause();
      setstandbyTimer();
    }
    else if (knownCard) {
      mp3.start();
      disablestandbyTimer();
      StatusLED(1);  // LED soll leuchten
    }

und

  if (readCard(&myCard) == true) {
    if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) {
      playFolder();
      StatusLED(1);
    }

In void adminMenu

  disablestandbyTimer();
  mp3.pause();
  StatusLED(1);

Am Ende von uint8_t voiceMenu

  } else {
    ignoreDownButton = false;
  }
}
StatusLED(1);
  } while (true);
}

Am Anfang von void checkStandbyAtMillis() {
StatusLED(1);


Ich habe mal den Select case drin gelassen, dann kannst ein bisschen Spielen mit pulsieren StatusLED(2), blinken StatusLED(1), dauerhaft an StatusLED(0) oder dauerhaft aus StatusLED(99).
Die Blinken-Funktion musst du allerdings noch anpassen. Das ist momentan ein gleichmäßiges Blinken (Ein und Aus ist gleich lang). Dauer wird mit interval in Millisekunden eingestellt.

Hallo Manuel, ganz vielen Dank. Ich werde erst heute Abend dazu kommen es auszuprobieren und werde morgen Rückmeldung geben. Aber ich danke schon mal ganz herzlich.

Habe oben noch etwas ergänzt:

Edit: Nicht in der DEV vorhanden...

Hallo Manuel,
vielen Dank für deine Hilfe, der Code funktioniert (nur den Abschnitt void WriteRFID() habe ich bei mir nicht gefunden). Im Codebeispiel war noch TonuinoOnPin und zum Teil TonuinoOnLEDPin definiert, was ich auf ersteres vereinheitlicht habe.

Zur Info, falls jemand dieselbe Powerbank (EasyAcc 20000) hat: die Powerbank schaltet trotz LED-Band mit knapp 20 LEDs trotzdem noch ab, wenn keine Musik gespielt wird. Wenn Musik gespielt wird, schaltet sie mit der oben genannten Blinkschaltung von LEDs jetzt nicht mehr ab.
Ich habe jetzt mal mit Widerständen gespielt (ohne LEDs je 10 Ohm in Reihe an D6 dazugeklemmt) und bei 30 Ohm bleibt die Powerbank auch ohne Musik an (bis der Tonuino in Standby geht), bei 40 Ohm schaltet sie nach 20-30 Sekunden ab. Ich werde jetzt eine Kombination aus LEDs und Wärme (Widerstände) einsetzen um das Abschalten der Powerbank zu verhindern. Durch das Blinken spart das auf jeden Fall Strom und die LEDs bringen noch einen Effekt. Das Aufwecken der Powerbank und Einschalten des Tonuino werde ich durch einen (vom Tonuino getrennten) zusätzlichen Schalter an einem zweiten USB-Anschluss der Powerbank umsetzen mit 30 Ohm Widerstand dazwischengeschalten - dann schaltet mit der Powerbank der Tonuino ebenfalls ein.

Nur falls jemand das einfach beantworten kann: wie kann ich den Abstand des Aufblinkens auf bspw. 20 Sekunden verlängern, ohne das Aufblinken selbst zu verlängern? Falls das kompliziert ist, lasse ich es bei dem aktuellen Blinkverhalten.

Ich danke Euch allen jedenfalls für die ganzen Antworten und Hilfe, die ich bei Euch im Forum erhalten habe.

################################################################################

Da ich die max. Anzahl der heute möglichen Beiträge erreicht habe, hier noch mein Fazit :slight_smile:

Dann sind 30 Ohm bei 5 V auf jeden Fall zuviel, da ca. 160mA. Also die Powerbank mit LEDs/Wärme wach zu halten funktioniert dann nicht so einfach… Vielleicht ist es doch das einfachste eine neue Powerbank zu kaufen…

Danke

Danke, hab’s korrigiert.

Pass bitte auf. So ein Ausgang darf max. mit 40mA belastet werden. 20mA sollten auf Dauer nicht überschritten werden!

2 Like