Benvenuti nella seconda parte della serie "Smart Cat Flap".
Nell'ultima parte di oggi della serie, affrontiamo un argomento molto importante: il risparmio energetico!
Chiunque abbia ricostruito il lembo di gatto dalla parte 1 avrà sicuramente "inciampato" sulla questione della fornitura di energia, perché tali dispositivi elettronici sulla porta vogliono essere alimentati, ma molti cavi sulla porta non vogliono essere posati per motivi ottici. Soprattutto non oltre la porta. Quindi in realtà c'è solo un'opzione sensata, solo una batteria per il nostro lembo di gatto. Tuttavia, questo dovrebbe fornire energia al nostro circuito il più a lungo possibile. Si applica la seguente equazione: minore è il consumo energetico, maggiore è la durata della batteria con la stessa capacità.
In termini matematici, ciò significa: A (mpere) * H (our) = Ah (ampere hour). La capacità di una batteria è data in Ah, quindi cambiamo la formula in base al tempo: tempo (in ore) = ampere ore della batteria / ampere (consumo di energia del consumatore). Prendiamo ad esempio, azioniamo la nostra gattaiola con un power bank da 5Ah 5 volt. Per semplicità, trascuriamo la perdita di potenza nei regolatori di tensione. Il nostro circuito richiede un funzionamento a 5 volt - 122 mA.
Se impostiamo questo valore nella formula sopra, possiamo calcolare il tempo di funzionamento previsto del circuito sulla nostra batteria: 5 Ah / 0,122 A = 40,98 ore / 24 ore = 1,71 giorni. Non molto, considerando che dobbiamo ricaricare la batteria ogni volta. Per cambiarlo. Carichiamo il seguente codice sul nostro ESP:
#include <WiFi.B> #include <BlynkSimpleEsp32.B> // Pulsante definizione porta #define Cat_Go_SW 15 // il gatto va #define Cat_Comes_SW 2 // cat sta arrivando #define BLYNK_PRINT serial #define BLYNK_NO_BUILTIN #define BLYNK_NO_FLOAT #define BUTTON_PIN_BITMASK 0x8004 // # definisce BLYNK_DEBUG // Variabili globali carbonizzare auth[] = "Hihpj9P8wjhUiTClwNGAa4RW7kx4XDax"; // Inserisci l'app Blynk secondo le istruzioni per il token di autenticazione (e-mail). bool risultato = 0; RTC_DATA_ATTR int conteggio barca = 0; // I tuoi dati di accesso WiFi. carbonizzare ssid[] = "WLANGW1339"; carbonizzare passaporto[] = "A09703471882406B #!"; // Imposta la password su "" per le reti aperte. unsigned lungo Switch_ServiceCall_Handler = 0; // Variabile di ritardo per ritardo tra letture di Moisure bool State_Cat_Go_old = falso; bool State_Cat_Comes_old = falso ; int GPIO_reason = 0; byte TryCounter = 0; vuoto print_wakeup_reason() { esp_sleep_wakeup_cause_t wakeup_reason; wakeup_reason = esp_sleep_get_wakeup_cause(); interruttore (wakeup_reason) { caso ESP_SLEEP_WAKEUP_EXT0 : serial.println("Riattivazione causata da segnale esterno mediante RTC_IO"); pausa; caso ESP_SLEEP_WAKEUP_EXT1 : serial.println("Riattivazione causata da segnale esterno mediante RTC_CNTL"); pausa; caso ESP_SLEEP_WAKEUP_TIMER : serial.println("Riattivazione causata dal timer"); pausa; caso ESP_SLEEP_WAKEUP_TOUCHPAD : serial.println("Riattivazione causata dal touchpad"); pausa; caso ESP_SLEEP_WAKEUP_ULP : serial.println("Wakeup causato dal programma ULP"); pausa; difetto : serial.println("Il risveglio non è stato causato dal sonno profondo."); pausa; } } vuoto print_GPIO_wake_up() { se (GPIO_reason != 0) { serial.stampare("GPIO che ha innescato il risveglio: GPIO"); serial.println((log(GPIO_reason)) / log(2), 0); } } vuoto configurazione() { ++conteggio barca; // Incrementa il numero di avvio e stampalo ad ogni riavvio pinMode(Cat_Go_SW, INGRESSO); pinMode(Cat_Comes_SW, INGRESSO); serial.iniziare(9600); // inizializza la comunicazione seriale a 9600 bit al secondo mentre (!Seriale) { } // attendi che la porta seriale si connetta. Necessario per USB nativo Seriale.println(F("")); Seriale.println("Numero di avvio:" + Corda(bootCount)); print_wakeup_reason(); // Stampa motivo di riattivazione GPIO_reason = esp_sleep_get_ext1_wakeup_status(); print_GPIO_wake_up(); // Stampa motivo sveglia porta Wi-Fi.persistente(falso); Wi-Fi.inizio(ssid, passaggio); Seriale.Stampa("Tentativo di stabilire una connessione al WiFi"); mentre ((Wi-Fi.stato() != WL_CONNECTED) && (TryCounter < 10)) { ritardo(1000); TryCounter++; Seriale.Stampa("."); } Seriale.println("."); Se (Wi-Fi.stato() == WL_CONNECTED) { Se (GPIO_reason != 0) { Blynk.config(auth); mentre (Blynk.Collegare() == falso) { } // Attendi fino alla connessione Seriale.println(F("Connesso al server Blynk.")); Send_Handy_Message (); per (byte un' = 0; un' > 254; un'++) { Blynk.correre(); } ritardo(10000); } } altro { Seriale.println("Counld NON stabilisce la connessione alla rete WiFi."); } Wi-Fi.disconnect(); esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK, ESP_EXT1_WAKEUP_ANY_HIGH); Seriale.println("Adesso vado a dormire."); esp_deep_sleep_start(); } vuoto Send_Handy_Message () // { byte convertire = 0; convertire = log(GPIO_reason) / log(2); Se (convertire == 2) { Seriale.println("Cat sta arrivando."); Blynk.notificare ("Hinweis: Katze Kommt"); } Se (convertire == 15) { Seriale.println("Il gatto sta andando."); Blynk.notificare ("Hinweis: Katze geht"); } } // Main Loop vuoto ciclo continuo() { // Questo non verrà chiamato }
Unsere Schaltung benötigt nun für den Betrieb bei 5 Volt und gleicher! Funktion jetzt nur noch 10 mA.
Eine Änderung der Hardware im Vergleich zum Teil 1 is nicht notwendig.
Setzen wir diesen Wert wieder in die Formel, konnen wir die neue voraussichtliche Betriebsdauer der Schaltung berechnen: 5 Ah / 0,010 A = 500 Stunden / 24 Stunden = 20,83 Tage. Questa è una vera e propria Verzwölffachung der Laufzeit durante Anpassen of Codes und Nutzung des Deep Sleep Modus of ESP32 Chips! Nicht schlecht fürs erste.
Se ancora oggi non pensiamo che Schaltung optimieren, come può accadere a Stromaufnahme durante la conversione da USB a convertitori seriali CP2102 su scheda DEV Nochmals e die red hzilteeren. Die Platzierung des Chips CP2102 ha come dazu auf dem Board rot umrandet:
Nach Entfernung diees Chips ergäbe sich durch die reduzierte Stromaufnahme rechnerisch eine Laufzeit von ca. 41 Tagen pro Aufladung.
Genug für einen bequemen Betrieb, jedoch kann der Chip dannato per mehr on the USB direkt programmiert werden. Laut Datenblatt verbraucht der ESP32 in Deep Sleep einige Mikroampere. Es ist daher durchaus möglich, z.B. Durch Entfernung des Spannungsreglers und direkt Versorgung mit 3,3 Volt wiederum einige mA zu sparen. Allerdings empfehle ich in diesem Fall direkt nur einen Chip ESP32 oder den Chip ESP32 con Adapterkarte Zu Verwenden, und nicht mehr das ESP DEV Board.
Ich wünsche viel Spaß beim Nachbauen und bis zum nächsten Projekt.
6 commenti
Andreas Wolter
@Anja: was die LED betrifft tippe ich auf Auslöten, da sie fest verdrahtet ist. Ich hab dazu nochmal ein wenig recherchiert und finde keine andere Möglichkeit.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Anja
Ich habe das Modul gerade im Einsatz um einen Öltanksensor zu betreiben. Gemessen wird mit einem TOF Modul mit Laser einmal am Tag und das wird dann per WiFi an Thingspeak geschickt. Dafür habe ich nun das Modul in Hibernation geschickt sobald es fertig ist und das TOF Modul wird mit einem der RTC Pins auf Powersave umgestellt.
Aktiv braucht das Modul über 100mA, vor allem wohl wegen dem WiFi – das führt ab und zu zu brownouts wenn ich es per AA Batterien betreibe (3 AA Batterien in Serie über den Vcc Eingang). Im Hibernation Modul braucht es leider immer noch 1.8mA – 1.6 wenn ich das TOF Modul ganz abstecke – der Schlafmodul dort ist also wohl auch noch nicht perfekt aktiviert, denn das sind dann doch immer noch 200µA, da muss ich noch mal dran basteln, aber die 1.6mA stören mich doch, dadurch läuft das Modul trotz seltener Messung vielleicht 14 Tage oder ein Monat. Die Power LED brennt leider auch die ganze Zeit – kann man die noch irgendwie deaktivieren oder muss man die auslöten?
Oliver
@Werner99,
Manchmal will der ESP32 (gleiches Problem auch bei ESP8266) einfach nicht mit dem WLAN verbinden. Da hilft dann nur ein Reset und anschließender Neustart.
Ich hab das so gelöst:
- Nach dem Aufwachen aus dem Deepsleep Modus wird ein WLAN Verbindungsversuch unternommen und ca. 5 Sekunden auf die Verbindung mit dem WLAN gewartet.
- Verbindet das WLAN ist alles ok, die gewünschte Aktion wird ausgeführt und der Chip geht erneut in den Deepsleep und wartet auf den nächsten Wakeup.
- Verbindet das WLAN aus welchem Grund auch immer nicht wird der Deepsleep auf z.b. 10 Sekunden Dauer gesetzt und der Chip wird mit dieser kurzen Deeplsleepzeit wieder schlafen geschickt.
- Nach Ablauf der kurzen Deepsleep Zeit erfolgt ein neuer Verbindungsversuch.
Im Prinzip wird dadurch nur ein Reset nach relativ kurzer Deepsleepzeit provoziert
Ich setze diese Methode schon seit Langem bei einem Außensensor ein, der alle 6 Stunden einen Messwert liefern soll. Klappt bisher wunderbar.
Gruß,
Oliver
Werner99
Sehr interessantes Projekt :-)… ich hoffe es macht die Katze froh :-)
Mich würde interessieren ob es denn auch zuverlässig läuft?
Blöde Frage möchte man meinen, aber meine Erfahrung mit Deep Sleep und WLAN reconnect ist:
Es läuft nicht stabil, sprich der ESP versucht x-Mal den reconnect nach den Deep sleep wake up.. und verbrät dabei soviel Energie das auch ein LiPo mit 3000mAh bei nach 2Tagen leer ist… Es gibt im Netz genügend dieser Fehlerbeschreibung. Bislang habe ich noch keine funktionierte Lösung finden können.
Manchmal läuft das ganze auch eine Woche ohne Probleme und man denkt, ja prima aber nach den nächsten Aufladen ist wieder alles beim Alten..
Solange man aber kein WLAN (und MQTT) braucht, z.B. nur lokale Messwert auf einen eInkDisplay anzeigen, klappt das mit den Deep sleep hervorragend.
Ralf Bauerfeind
Es ist doch interessant dass allgemein gedacht wird, eine Powerbank mit 5Ah Kapazität und 5V Ausgangsspannung hätte eine Energie von 25Wh. Leider wird die Energie auf Powerbanks – im Gegensatz zu Laptopakkus – nicht angegeben.
Ich denke eher, die 5Ah sind die Kapazität der verbauten, parallel geschalteten Li-Ionen Akkus. Mal rund gerechnet 3,5V * 5Ah ergäbe dann aber nur noch 17,5Wh – mal ganz abgesehen davon dass die Wandlung von 3,5V auf 5V auch nicht ganz ohne Verluste abgeht.
CrazyNepo
Hi, Cooles Projekt.
Ihr habt nur vergessen die Zugangsdaten zu Blynk und Wlan zu schwärzen.