Grundlast gegen automatische Abschaltung Power Bank Ravpower 10000mAh und seltsames Verhalten

Moin zusammen,

der Tonuino ist mein erstes Arduino-Projekt seit langem. Nachbau auf dem Breedboard war unkritisch und softwareseitig läuft alles so, wie´s soll. Vor dem Einzug in die Box möchte ich die Schaltung noch verlöten, ich habe allerdings noch meine Fragezeichen in Bezug auf die Powerbank.

Rahmendaten meiner Box: Alles soweit Standard in Layout und Software. Ich nutze die aktuelle DEV. Planung ist neben den 3 Tasten ein weiterer Öffner für einen „Hardreset“ der Stromversorgung nach Abschaltung, sowie eine Kontroll-LED. Dann muss ich die Box nicht immer öffnen und auch für meine Tochter sollte es leicht erlernbar sein, wenn sie soweit ist (noch ist sie 11 Monate alt)

Ich habe mich bis jetzt erfolglos durch die Beiträge gekämpft (und mich daher mal angemeldet) und ein merkwürdiges Verhalten bei der automatischen Abschaltung meiner Powerbank.

Folgende Situation; die RAVPOWER 10000mAh Power Bank schaltet sich erwartungsgemäß im Idle nach dem Start nach ca. 30 Sekunden aus bei voller Kapazität. Zum Test habe ich neben meiner Kontroll-LED weitere LEDs zur Steigerung der Grundlast angeschlossen. Fazit: 4 LEDs nötig, um ausreichend Grundlast zu erzeugen, um die Power Bank am Einschlafen zu hindern. Gemessen je LED rd. 10mA , somit in Summe rd. 40-50mA zusätzlicher Grundlast notwendig (hiervon ist ja meine Kontrolleuchte noch abzuziehen).
Interessant wird es allerdings, dass die Grundlast nur für die ersten 30 Sekunden erforderlich ist. Danach können die LEDs entfernt werden und dennoch läuft der Arduino im Idle bis zum Ablauf des Sleeptimers stabil (bzw. die Power Bank). Dies ist beliebig reproduzierbar - alternativ kann auch innerhalb der ersten 30 Sekunden nach dem Einschalten der Powerbank ein Musiktitel in adäquater Lautstärke gespielt werden, um das Einschlafen der Power Bank zu verhindern - nach ca. 30 Sekunden kann der Titel gestoppt werden, ohne dass die Power Bank Dornröschen spielt.

Viel Text - nun meine Hilferufe :blush:

Kennt ihr das Phänomen? Ich vermute (bin Bürokraft und kein Elektroniker), dass der DFPlayer bei dem Start nicht aufwacht.

Ich suche nach einer erträglichen Lösung. Entweder schalte ich via Transistor (habe noch ein paar 547C Transistoren und Widerstände liegen) eine Grundlast für die ersten 30 Sekunden via Pin 6, oder ich pulse die Last dauerhaft während des Betriebs alle paar Sekunden für ein paar ms. Welche Möglichkeit sollte ich bevorzugen?

Oder gibt es alternative Möglichkeiten bzw. Ideen?

Viele Grüße
Lars

Hallo Lars,

verwende ein ähnliches Setup wie du, unter anderem die gleiche Powerbank.
Beim Testen hat sich die Powerbank auch ab und an deaktiviert gehabt. Nach dem Verlöten eines Ein/Aus-Schalters mit LED oder das Festlegen von Shortcut 3 (Startsound nach dem Boot) hatte sich das Thema bei mir erledigt. Kann es nicht genau sagen, da beides ziemlich zeitgleich erfolgte.
Es könnte also deine Vermutung richtig sein, dass der DFPlayer beim Start nicht auf wacht.

Grüße
Nico

Meine Lösung für das Problem war eine Anker Powerbank. Hilfreich ist das aber vermutlich nur, wenn man noch nichts beschafft hat…

Die Powerbank habe ich schon. Somit ist ein Tausch keine Option.

Der Shortcut funktioniert nur, wenn Musik deutlich laut gespielt wird. Sprache funktioniert beispielsweise nicht (wie schon irgendwo im Forum mal berichtet). Es reichen auch hier +/- 30 Sekunden, aber das ist insgesamt unkomfortabel, da ich nicht irgendwelche Jingles vorab spielen will.

Ein Leuchtschalter ist zwar nett, aber damit würde ich den Stromverbrauch unnötig erhöhen. Wenn der nur die maximal nötige Grundlast erzeugen würde (40mA) reduziert sich die Gesamtlaufzeit um ca. 40%, unterstellt dass das System etwa 60mA verbraucht (+/-). Bedeutet fast doppelt so häufiges Laden. Das möchte ich dann doch etwas anders lösen.

Bemerkenswert finde ich eben das Verhalten, nur
für 30 Sekunden die notwendige Last anlegen zu müssen. Das hatte ich hier bisher nirgends gelesen. Ich hatte mich schon mit einem Dauerpuls abgefunden, würde dann aber die Leistungsaufnahme lieber weiter reduzieren.

VG
Lars

Dann müsste man ja nur eine Funktion schreiben, daß für die ersten 30 Sekunden die Last erhöht wird. Da hilft millis, das die Zeit seit einschalten „misst“. Nach den 30 Sekunden geht dann die Last aus und gut ist.

Hi,

ich hätte jetzt quick und dirty ein delay genommen. Aber millis wäre wohl tatsächlich die bessere Variante. Danke für den Tip. Hoffe ich komme Freitag mal dazu…

Hi,

noch mal eine Frage an die Code-Spezis:

Ich würde den Pin 6 nutzen wollen. Hab mal folgenden Codeschnipsel gebastelt. Komme aktuell nicht zum testen. Würde das so funktionieren?

#define Grundlast = 6;

unsigned long CurrentTime = millis ()

 

void setup() {

pinMode (Grundlast, OUTPUT);

}

 

void loop()

{

If ((CurrentTime < 30000) && (Grundlast==LOW))

{

digitalWrite(Grundlast,HIGH);

}

If ((CurrentTime >= 30000) && (Grundlast==HIGH))

{

digitalWrite(Grundlast,LOW);

}

Der Ansatz ist ok. Du musst currentTime aber innerhalb von Loop immer wieder aktualisieren. Außerdem würde ich Grundlast im Setup einmalig auf HIGH setzen und so die erste der beiden if-Abfragen einsparen.

Ich dachte die Abfrage erfolgt automatisch mit der Definition currenttime=millis(). Habe ich einen Denkfehler?

Sonst teste ich mal wenn ich wieder an meinen PC komme

Du setzt die Variable currentTime einmalig auf den dann gerade aktuellen Wert, den die Funktion millis() zurückgibt. Danach ändert sich currentTime nicht mehr, der Rückgabewert von millis() aber schon…

1 Like

Danke Peer.

Ein klassisches Wald/Baum-Problem.

Hatte nicht gesehen, dass ich außerhalb der Loop war. Werde das mal umschreiben und testen.

War ein HIGH-setzen im Setup nicht verpönt?

Höre ich zum ersten Mal. Warum sollte das verpönt sein?

Hallo,
habe genau das gleiche Problem. Nach 30 Sek Last schaltet meine Powerbank nicht mehr aus.
Wenn dein Code funktioniert, kannst du ihn bitte hier nochmals Posten und beschreiben wo man ihn einführen muss?

Grüße Matzzz

Klar. Kann nur ein paar Tage dauern. Alternativ kannst du ja auch die Last dauerhaft anlegen. Ich bin halt etwas kniepig mit dem Verbrauch. Denke aber daran, dass, wenn du mehr als 20mA an einem Digitalausgang schaltbar benötigst, du einen Transistor schalten musst.

Das mit dem high im Setup hatte ich in einem englischen Forum gelesen. Ist schon ein paar Jahre her.

Verstehe. setup() ist aber ne Funktion wie jede andere auch. Also keine Scheu. :wink:

Hallo zusammen,
ich habe einen Widerstand und Transistor den ich immer mal wieder kurz mit dem Arduino ansteuer gebaut. Funktioniert wunderbar. Schaut mal in mein Repo.

Vorheriger Post:

Repo:

1 Like

So, jetzt habe ich es endlich mal wieder an meinen PC geschafft. Danke für die Antworten. Mein Codeschnipsel sieht jetzt wie folgt aus:

    #define Grundlast 6


void setup() {

pinMode (Grundlast, OUTPUT);
digitalWrite (Grundlast, HIGH);
}


void loop() {

unsigned long CurrentTime = millis ();

if (CurrentTime >= 10000){
  digitalWrite(Grundlast,LOW);
}
}

In die MASTER bekomme ich es auch ohne Probleme integriert - allerdings zickt die DEV mich an. Da ich keine tiefergehenden Programmierkenntnisse habe, bräuchte ich vielleicht doch mal Hilfe, das Problemchen zu lösen.

Ziel ist es, die zusätliche Stromentnahme konstant zu lassen und für die Dauer von ~30 Sekunden zu begrenzen.

Allerdings finde ich keinen Ansatz, den Code für die Loop zu integrieren. Wenn ich es an den Beginn der Loop setze, wird der Befehl anscheinend durch eine Abfrageroutine unterbrochen. Erst nach Ablauf der Zeit und dem Auflegen einer Karte bzw. dem Start des DFPlayers wird der Befehl ausgeführt. Hat hierzu jemand eine Idee?

@philipp14: Dein Code ist recht komplex und für Noobs wie mich schwer zu integrieren. Ich habe zwar den Inhalt verstanden, allerdings bekomme ich das weder angepasst noch in die DEV integriert. Zudem möchte ich lieber eine feste Begrenzung des Stroms. Bei Deiner Logik wird zwar nur für 150ms alle 4S geschaltet, aber nach 14 Minuten Laufzeit der Box wird dann unnützt Strom verbraten. Meine Powerbank ist nach 30 Sekunden erhöhter Last zufrieden und schaltet dann nicht mehr ab…

So, ich habe noch ein wenig herumprobiert. Grundsätzlich funktioniert es, wie es soll. Zwar schaltet die zusätzliche Last nicht nach der gewünschten Zeit ab, ohne dass eine Karte aufgelegt wird, aber zusammen mit dem Sleeptimer ist es dennoch eine passable Lösung. Im Ergebnis schaltet die Box ja nach 5 Minuten Standby ab. Durch den Standby fällt auch die Powerbank in den gewünschten Schlaf und kann mit einem Öffner wieder geweckt (Neustart des Arduino) geweckt werden. Und wenn eine Karte aufgelegt wurde, läuft die Loop weiter und schaltet nach 30 Sekunden die Zusätzliche Last ab.

Nichtsdestottrotz wäre ich dankbar, wenn jemand eine Idee hat, den Code so zu bauen, dass auch ohne Karte auflegen der Timer berücksichtigt wird.

VG
Lars

Du musst einfach was du in loop() hast in die do..while() Schleife setzen (für die DEV zwischen 947 u. 948):

In dieser Schleife wartet die Firmware auf die Karte, checkt die Buttons usw.

1 Like