Automatische Abschaltung von Powerbanks als Arduino-Stromversorgung bei geringer Grundlast verhindern

Powerbanks eignen sich als preisgünstige Stromspender für mobile Arduino-Projekte. Ist die Grundlast allerdings gering und fließen nur wenige Milliampere Strom, dann verhindert eine interne Abschaltautomatik die Nutzung als Dauerstromquelle. Mit drei elektronischen Bauteilen und einem kleinen Code-Schnipsel verhindert man das vorzeitige abschalten.

Im Vergleich zu herkömmlichen Akkus sind Powerbanks sehr kompakt und preiswert. Außerdem liefern Powerbanks eine recht konstante Ausgangsspannung von 5 Volt. Eine gute Powerbank wie beispielsweise die Anker PowerCore II mit einer (theoretischen) Nennkapazität von 20.000 mAh bekommt man schon für etwa 35 Euro. Optimal also, um damit auf Arduino-Boards basierende Projekte mobil zu befeuern.

Abschaltautomatik

In der Praxis hakt es jedoch ab und zu, denn Powerbanks schalten in der Regel nach ein paar Sekunden, manchmal auch erst nach Minuten oder Stunden ab, wenn ein Arduino damit betrieben wird. Erkennbar ist das am Erlöschen der Akkustandanzeige, die bei den meisten Powerbanks aus mehreren LEDs besteht. Der Grund für das Abschalten ist ganz einfach: Eigentlich ist eine Powerbank nicht als Dauerstromversorgung gedacht, sondern soll den Akku von Geräten aufladen, die am (Mikro-)USB-Anschluss angeschlossen sind. Im Inneren ist deshalb eine Elektronik verbaut, die überprüft, ob der Akku eines angeschlossenen Gerätes bereits voll geladen ist oder nicht. Das erkennt die Elektronik über den Stromfluss. Fließt ein höherer Strom, ist der Akku noch nicht vollständig geladen und der USB-Ausgang bleibt aktiv. Sinkt der Strom aber unter einen bestimmten Grenzwert von einigen Milliampere, dann schaltet die Elektronik den USB-Ausgang ab. Sie nimmt an, dass der Geräteakku aufgrund des geringeren Stromflusses aufgeladen ist. Im Prinzip dient das dazu, den Akku des angeschlossenen Gerätes nicht zu überladen. Er könnte sonst überhitzen und in Brand geraten, denn nicht alle Geräteakkus verfügen über eine Ladebegrenzung. Die Grenze für den Stromfluss ist bei Powerbanks allerdings nicht einheitlich. Einige schalten erst bei 40 mA ab, andere schon bei 100 mA oder mehr.

Viele Arduino-Projekte arbeiten recht stromsparend. Die kleinen Arduino Boards wie nano, mini oder mini Pro benötigen im Normalbetrieb zwischen 22,1 bis 24,7 mA. Im Sleep-Modus sind sie sogar noch deutlich sparsamer. Selbst wenn ein paar Sensoren angeschlossen sind, übersteigt der fließende Strom den Grenzwert der Abschaltautomatik der Powerbank nicht immer, sodass sie abschaltet.

Powerbanks ohne Abschaltautomatik

Powerbanks ohne eine solche Abschaltautomatik sind in Europa kaum noch zu bekommen, denn die Abschaltung ist hier gesetzlich verpflichtend. Einige preiswerte China-Powerbanks verzichten darauf, besitzen dann aber häufig einen Schalter, um sie manuell ausschalten zu können. Möchte man die Powerbank nicht nur zum Betrieb eines Arduinos, sondern auch zum Aufladen von Akkus verwenden, dann sollte man aus Sicherheitsgründen auf eine Powerbank mit Abschaltautomatik zurückgreifen.

Grenzwert der Powerbank-Abschaltautomatik bestimmen

Um zu verhindern, dass die Powerbank abschaltet, muss die Grundlast so erhöht werden, dass der Grenzwert der Abschaltautomatik überschritten wird. Gleichzeitig soll aber der Stromverbrauch nicht ins Unendliche steigen, um die Powerbank nicht zu schnell leerzulutschen.

Um das zu erreichen, bestimmt man zunächst, ab welchem Stromfluss die Powerbank überhaupt abschaltet. Dazu schließt man ein Strommessgerät zwischen den USB-Ausgang der Powerbank und einem Poti an und ermittelt, wann die Automatik der Powerbank aktiv wird.

Gesamtstromaufnahme impulsartig erhöhen

In einem zweiten Schritt misst man die Gesamtstromaufnahme des Arduino-Projektes. Liegt sie unter dem Grenzwert der Abschaltautomatik, muss man die Stromaufnahme künstlich erhöhen. Das muss allerdings nicht durch einen kontinuierlichen Stromfluss passieren. Das würde zu viel Strom verbrauchen. Es genügen Stromimpulse in Intervallen von ein paar Sekunden. Der Stromimpuls sollte so hoch sein, dass er zusammen mit der Stromaufnahme des Arduino-Projektes den Grenzwert der Abschaltautomatik übersteigt.

Schaltung zur Erzeugung einer Grundlast

Um eine solche Grundlast zu erzeugen, benutzt man einen elektrischen Widerstand Rv, der den Strom verbrät. Ihn schließt man über eine Kollektor-Emitter-Strecke eines NPN-Transistors an die 5 Volt Stromversorgung der Powerbank an. Als Transistor T1 reicht ein einfacher BC547C aus, der knapp 20 Cent kostet. Über einen 1 kΩ Widerstand Rt steuert man die Basis des Transistors über einen digitalen Ausgang des Arduinos an. So lässt sich in einem definierten Intervall die Grundlast für einige Millisekunden erhöhen und die Powerbank schaltet nicht ab.

Automatische Abschaltung von Powerbanks als Arduino-Stromversorgung bei geringer Grundlast verhindern Schaltplan Grundlast für Arduino

Der Widerstand Rv errechnet sich aus dem benötigten Strom und der anliegenden Spannung:

Rv = U / I

Im Beispiel soll ein Strom von 40 mA erzeugt werden:

Rv = 5 Volt / 0,04 A = 125 Ω

Der Widerstand muss 125 Ohm groß sein. Aber Vorsicht: Die üblicherweise verwendeten Metallschichtwiederstände vertragen nur eine Leistung von 0,25 Watt. Im Beispiel beträgt die Leistung 0,2 Watt

P = U x I

P = 5 Volt x 0,04 A = 0,2 Watt

Übersteigt die tatsächliche Leistung den Leistungswert des Widerstandes, dann muss man einen leistungsfähigeren Widerstand benutzen oder zwei Widerstände parallel schalten.

Bei der Parallelschaltung errechnet sich der Widerstandswert dann aus:

Rv = (R1 x R2) / (R1 + R2)

Code-Schnipsel für den Arduino Sketch

Im folgenden Code wird die Grundlast in Abständen von vier Sekunden für eine Sekunde erzeugt. In dem Beispiel erfolgt die Ansteuerung des Transistors über den Pin 10 eines Arduinos.

#define powerpin = 10;
unsigned long previousmillispower = 0;
unsigned long powerintervalmax = 4000;

void setup()
{
  pinMode(powerpin,OUTPUT);
}

void loop() 
{
  if ((millis() - previousmillispower) > powerintervalmax) 
    {
      previousmillispower = millis();
      digitalWrite(powerpin,HIGH);
      delay(1000);
      digitalWrite(powerpin,LOW);
    }
}

Fazit

Mit einer Erhöhung der Grundlast eines Arduino-Projektes verhindert man, dass eine Powerbank abschaltet. Die dafür notwendigen elektrischen Bauteile sind überschaubar, die Kosten gering. Außerdem benötigen die Bauteile nur wenig Platz. Über einen Sketch bestimmt man das Intervall und die Dauer der Grundlast, sodass die Schaltung insgesamt stromsparend arbeitet.

9 Kommentare

  1. Hallo könnten man um einen Tutorial Viedeo darüber bekommen. Weil ich mich für diese Thema sehr interssiere, aber ich weis nicht genau wie ich da bauen soll.

  2. Hi,
    vielen Dank! Die Info hat sehr geholfen.
    Bei mir musste ich 38 Ohm verwenden also ca 131mA.
    Da sonst die Powerbank ausgeschalten hat.

    Grüße Fred

  3. Hallo,
    unsinniger Weise läuft dein Sketch immer wieder in das Low-Signal, auch wenn der Pin garnicht gesetzt ist. Schön finde ich das nicht!
    Aber egal! Das Prinzip ist super!

  4. Ich möchte den Betriebszyklus meiner Powerbank nur verlängern, so daß eine automatische Abschaltung nur verzögert wird. Dazu habe ich mal einen Sketch entworfen und poste den hier mit rein. Die zu verwendene Schaltung ist die von hier, nur ich nutze Pin 4 beim Arduino Nano.

    Viele Grüße Uwe

    [code]

    // Send pulses to set powerbank be alive for a while.
    // Then stop the alive pulses to automatic powerbank shut down, save energy.

    void setup() {
    Serial.begin(9600);
    pinMode(4, OUTPUT); //alive pulse in these sketch uses digital pin 4
    }

    // Declare global variables:
    byte power_on = 1;
    byte pulse = 0;
    unsigned long base_clock_alive_pulse;
    unsigned long high_time_alive_pulse;
    unsigned long shutdown_timer;

    void loop() {

    unsigned long base_cycle = 20000; // 20 sec
    unsigned long high_time = 200; // 200 ms
    unsigned long stop_pulsing = 300000; //5 min

    if ((millis() – base_clock_alive_pulse > base_cycle) && (power_on == 1)) {
    base_clock_alive_pulse = millis();
    pulse = 1;
    digitalWrite(4, HIGH);
    Serial.println(„Alive pulse is set to High“);
    high_time_alive_pulse = millis();
    }

    if ((millis() – high_time_alive_pulse > high_time) && (pulse == 1)) {
    high_time_alive_pulse = millis();
    pulse = 0;
    digitalWrite(4, LOW);
    Serial.println(„Alive pulse is set to Low“);
    }

    if ((millis() – shutdown_timer > stop_pulsing) && (power_on == 1)) {
    Serial.println(„Alive pulse is stopped, but sketch is alive up to powerbank shut down.“);
    power_on = 0; // Set marker to 0 for stop alive puls
    }
    }
    [/code]

  5. Schade, dass dieser Sketch für Anfänger nicht brauchbar ist.

    Beim überprüfen gibt er mir immer eine Fehlermeldung an. (expected primary-expression before ‚=‘ token)

    Sicherlich habe ich etwas nicht berücksichtigt (Kabel wackeln oder Sitzposition verändern z.B) was zu diesem, für jedem gewieften Arduino Anwender eine Selbstverständlichgkeit dieses zu erkennen, Fehler führt.

    Aber als Anwender der sich in diese Materie versucht einzuarbeiten (Lerarning by doing) ist es doch sehr frustrierend, wenn es schon an so etwas, vermutlich einfachen, scheitert.

    Gruß

    Jürgen

    1. Ich habe seinerzeit in dem Programm die Variablen lesbarer gemacht, weis nun nicht, ob ich die letzte Anpassung nochmal getestet habe. Meine aber ja.
      Im Grunde läuft das Programm aber und das stabil.
      Lass mich ein freies Wort loswerden…
      Sorry, wenn du die Fehlerstelle nicht isolieren kannst, dann solltest du dir überlegen,
      ob du damit wirklich rumbasteln willst. Einen Sketch kopieren ist doch vielleicht etwas zu mager.
      Ganz ohne Einarbeitung wirst du immer wieder auf Ecken und Kanten stoßen.
      Ich hab nun schon eine Weile nicht mehr mit dem Arduino gebastelt…

      Geh bei und kommentiere die Zeilen Serial. aus und schau was passiert, ob die Fehlermeldung verschwindet. Wenn es das nicht ist, Stück für Stück die Zeilen mit Auskommentieren unschädlich machen, dann kommst du auf die fehlerhafte Zeile. Die kann ich mir dann gezielt amschauen…
      Viel Erfolg und ein schönes Wochenende Uwe

    2. Der Fehler liegt in der ersten Zeile #define powerpin = 10;
      a)Am Ende der Zeile #define powerpin = 10 darf kein Semikolon gesetzt werden.
      b) Das Gleichheitszeichen muss auch entfernt werden.
      Richtig ist also #define powerpin 10. Dann läufts auch.

  6. Sehr sehr sehr geil!
    Hab das noch aktivierbar / deaktivierbar über nen Dip-Schalter gemacht. Die freien Dip-Schalter nutze ich, um verschiedne Vorwiderstände schalte zu können – je nach Powerbank, wo er dran hängt.

  7. gut wenn man sich erinnert… „da war mal was war“
    so konnte ich einer powerbank gerade das lästige abschalten abgewöhnen 🙂 alle 10 sekunden ein 750ms impuls reicht …
    danke!
    nh.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert