Redesign Tonuino für eine maximale Standby-Zeit

Hallo zusammen,

Da ich aktuell „Corona-Urlaub“ habe und somit etwas mehr Freizeit als erwartet, habe ich mir bzw. für meine beiden Töchter auch einen Tonuino nachgebaut. Leider ist mir dann aufgefallen, dass die Powerbank (10Ah) zu schnell leer geht. Ich habe dann mal ein paar unterschiedliche Dinge ausprobiert.

Normaler Stromverbrauch im Betrieb: 60-70mA
Stromverbrauch im Standby: 30mA
Sollte der Tonuino also garnicht verwendet werden, ist er nach ca. 13 Tagen leer, in der Regel war es eine starke Woche.

Ich habe dann zum einen mir den Code angeschaut und dann die einzelnen Komponenten. Dabei ist mir aufgefallen dass der DFplayer nicht richtig einschläft, bzw. im Sleep-Mode nur 2mA weniger benötigt. Also wusste ich, dass ich hier etwas verbessern kann. Außerdem gibt es bei der verwendeten Library des DFplayer keine Wake-Funktion. Da ich die Powerbank komplett in der Box verbaut habe und nicht durch einen extra Schalter trennen wollte, hab ich mir darüber auch ein paar Gedanken gemacht.

Ich verwende einen Arduino Nano. Bei diesem ist gibt es 2 Interrupt Pins um den Deep-Sleep-Mode Hardware-seitig zu unterbrechen. Leider sind Pin 2 und 3 schon belegt. Also musste ich hier etwas am Schaltplan ändern. Um den DFPlayer auch stromsparender zu bekommen, habe ich die Masse (GND) über einen Transistor gesteuert. Dieser wird nun von Pin 8 angesteuert. Somit kann der DFplayer komplett ausgeschaltet werden. Leider kann ich das RFID-Shield nicht auch über die Selbe weise deaktivieren, weil es irgendeine Verbindung zu den Bussen gibt und somit GND unterbrechen nicht das Shield komplett deaktiviert. Außerdem gibt es sehr unschöne Störgeräusche beim DFplayer.

Zusammengefasst ist nun bei mir:
DFplayer RX - Pin 6
DFplayer TX - Pin 5
Schalter zum Deaktivieren des Deep-Sleep - Pin 2
Transistor für DFplayer GND - Pin 8

Wenn nun alles schläft, dann komme ich auf 8mA. Da ich eine Powerbank habe, die sich nicht deaktivert bei <25mA, komme ich nun so auf ca. 50 Tage Standby-Zeit.

Ich musste natürlich auch ein paar Zeilen im Quellcode anpassen. Da muss ich aber noch einmal genau schauen, was ich alles umgebaut habe.

Fazit:
Ich habe nun eine 3x so lange Standby-Zeit und kann mit dieser Lösung über einen Knopf den Tonuino wieder anschalten. Theoretisch wäre es auch möglich über diesen Taster den Deep-Sleep manuell zu aktivieren.

Anbei habe ich einen Schaltplan angehängt wie es nun bei mir aufgebaut ist.

Bei Fragen und Anregungen stehe ich gerne zur Verfügung.

Gruß und schöne Ostern
Felix

5 Like

Super Sache. Das wird dem ein oder anderen sicher helfen. Alternativ hättest du auch einen Kippschalter zum Unterbrechen der Stromversorgung einbauen können oder? Ist natürlich fraglich, ob die lieben Kinder dann auch immer die Box brav ausgeschaltet hätten :wink:

Ich habe die Powerbank direkt über den USB Anschluss des Nano verbunden. Somit hätte ich ein USB Kabel auftrennen müssen und die Leitungen sind auch schön dünn. So ist es natürlich eine Alternative.

Hier noch die Änderungen am Code die ich durchgeführt habe:

Zeile 8 hinzugefügt:

#define INT_PIN 2

Dann Zeile 26 die Pins für RX und TX geändert:

SoftwareSerial mySoftwareSerial(5, 6); // RX, TX

Zeile 642 hinzugefügt:

#define externalPin 8

Dann eine Funktion hinzugefügt für den Interrupt:

void INT_PINisr(void) {
  detachInterrupt(0);
}

Die Funktion checkStandbyAtMillis() sieht nun so aus:

void checkStandbyAtMillis() {
  if (sleepAtMillis != 0 && millis() > sleepAtMillis) {
    Serial.println(F("=== power off!"));
    // enter sleep state
    digitalWrite(shutdownPin, HIGH);
    delay(500);

    // http://discourse.voss.earth/t/intenso-s10000-powerbank-automatische-abschaltung-software-only/805
    // powerdown to 27mA (powerbank switches off after 30-60s)
    mfrc522.PCD_AntennaOff();
    mfrc522.PCD_SoftPowerDown();
    mp3.sleep();

    //Verbindung für externe Shields deaktivieren
    digitalWrite(externalPin, LOW);



    attachInterrupt(0, INT_PINisr,LOW);
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
   //cli();  // Disable interrupts*
    sleep_mode();
   sleep_disable();
    //Verbindung für externe Shields aktivieren
    digitalWrite(externalPin, HIGH);
    mfrc522.PCD_SoftPowerUp();
    mfrc522.PCD_AntennaOn();
    mp3.reset();
    mp3.setVolume(volume);
    
    setstandbyTimer(); 
  }
}

Die die Setup-Funktion müssen folgende Sachen eingefügt werden:
Zeile 739:

//externe Shields anschalten
digitalWrite(externalPin, HIGH);

Zeile 763:

//Transistor-Pin für externe Shields
pinMode(externalPin, OUTPUT);

Zeile 816:

pinMode(INT_PIN, INPUT);
digitalWrite (INT_PIN, HIGH);

Das sollte es schon gewesen sein.
Wenn gewünscht, kann ich auch den ganzen Sketch zur Verfügung stellen.

Gruß
Felix

1 Like

Den RFID Leser kennst du auch per Software schlafen schicken, der Verbrauch liegt dann bei wenigen uA.

Wie das geht steht im Datenblatt. (Ich weiß es leider gerade nicht mehr ausgeführt und Datenblatt an Handy lesen ist nicht so einfach)

Ja, korrekt!

Auszug aus dem Datenblatt von AZ-Delivery.

Danke,
Ich schau es mir morgen nochmal an.
Gruß

Hallo zusammen,

Ich habe es mir nun mit dem Hard-Power-Down angeschaut. Leider scheint es so zu sein, dass der NRSTPD-Pin nicht so einfach ran kommt. Auf Seite 7 sieht man den verwendeten Chip und es ist auch beschrieben, dass der NRSTPD Pin hart auf High gelegt ist. Also ist das nicht so einfach mal umgebaut. Und Software-mäßig lässt sich der RC522 leider nicht weiter herunter fahren.

Oder habe ich etwas falsch verstanden?

Gruß

Ich hatte behauptet, dass der nRST Pins der „Normale“ Reset Pin ist.
Wenn du den dauerhaft auf High setzt, ist der Chip im Power Down.

Und auch Software seitig gibt es ein Power Down Flag, dass aber nicht so viel Energie spart wie der Pins.

Cool Ef_von_Iks. Ich habe ein kleine Variation gebastelt, damit ich mit der Play-Taste die Tonuino wieder aufwachen kann und dazu keine extra Taste brauche. Dazu habe ich einfach der Play-Taste von A0 nach D5 umgestellt. Weil ich ein Arduino Nano Every benutze kann ich auch von D5 interrumpieren und noch immer Thorstens Platine verwenden. Mit der klassische Nano sollte es aber auch ueber D2 oder D3 gehen.

Der code (auf basis von der alternative firmware) findet man hier:

Ich werde demnaechst der Ausschaltung der MP3Player mit der Transistor ausprobieren.

Das wäre super, würde das gerne direkt vergleichen.

Ich habe das mit der hard power down mal ausprobiert und in mein git repo eingebaut. Das hat sich aber nicht gelohnt. Es funktioniert, aber spart soweit ich sehen kann kein Strom im Vergleich zu der ‚normale‘ soft power down. Laut Datasheet (https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf) sollte es auch nicht wirklich, auch in Soft power down sollte der Stromverbrauch nur 10 uA sein.