Domotica Arduino collegamento a batteria
From Aino Wiki
Contents
Introduzione
L'alimentazione di un Arduino si può fare mediante il pin VIN (Volt IN), questo pin è collegato ad un regolatore di tensione interno che ha anche la funzione di proteggere il dispositivo.
Si posson usare batterie LiPo da 3.7 V sul pin VIN oppure direttamente a 3.3V per risparmiare energia altrimenti anche power bank tramite il connettore USB.
Per alcuni Arduino, la procedura per usare direttamente il pin 3.3 (è il numero 2, dopo il D13) richiede di tagliare il collegamento del jumper sotto il dispositivo, così si scollega il convertitore step-down dalla scheda che non si accenderà più quando collegata alla porta USB o quando alimentata tramite il pin VIN.
NOTE
- Link interno sulle batterie
- Dopo aver calcolato una ipotetica durata media di una batteria (mA della batteria / mA di consumo medio) in realtà la durata sarà comunque inferiore perché la scarica non è costante ed ad un certo punto ci sarà un crollo delle prestazioni (studiare anche il grafico di scarica della particolare tipologia di batteria scelta).
- Il regolatore di tensione interno, se utilizzato, consumerà corrente (almeno una decina di mA). Infatti, per risparmiare conviene bypassare il pin VIN e fornire direttamente corrente al pin 5V o 3V.
- Anche il chip per la comunicazione USB consuma costantemente corrente.
USB
Wikipedia
Prese esistenti:
Femmina USB A:
- CCV / 5V: Questo pin fornisce alimentazione a +5 V alle periferiche collegate. La corrente tipica fornita da questo pin è di 500 mA.
- D-: Il pin del segnale dati negativo (D-) interagisce con il segnale dati positivo D+. Svolge un ruolo fondamentale nel trasferimento dei dati da un'unità flash USB a un computer. Sia i pin D- che D+ operano con un approccio a coppia differenziale per ridurre le interferenze elettromagnetiche durante il trasferimento dei dati.
- D+: Insieme al Pin (D-), la linea del segnale dati positivo (D+) consente il trasferimento bidirezionale dei dati tra l'host e i dispositivi.
- GND / terra: connessione di terra.
Nano ESP32
Per alimentarlo a batteria ci sono tre possibilità possibilità, eccone due:
- Usando il pin VIN con batteria da 5V, 9V o 12V (anche pacchi LiPo/LiFePO4), ovviamente usando il pin GND per il polo negativo. Questo pin accetta il positivo di tensioni che posson andare da 5 a 12V, perché interviene il regolatore integrato che abbassa e stabilizza l'uscita a 3.3V per il microcontrollore. Video qui. Tutoria di Paolo Aliverti Tecniche di Power Saving
- Usando il pin 3.3V (pin nr 2) con batteria a singola cella Li-ion o LiPo (3.7V nominali, 3V-4.2V) a cui si collega il positivo della batteria mentre il negativo sempre sul pin GND. In questo caso è fondamentale usare un modulo caricabatterie\protezione (basato su chip TP4056 o specificatamente per ESP32 il 18650).
Sul pin VIN dell'Arduino Nano ESP32, puoi collegare fino a circa 2A, da manuale il range di tensione accettato dal suo convertitore\regolatore MP2322GQH è 5-18V.
Se si usa un alimentatore esterno (7-12V) questa corrente passa attraverso il MP2322GQH ed il diodo che potrebbero scaldarsi.
Il pin VBUS fornisce 5 V ogni volta che viene alimentato tramite USB, se alimentato da VIN sarà disabilitato!
Ottimizzazioni
L'Arduino Nano ESP32 ha consumi molto variabili: in deep sleep scende a circa 7 μA (microampere), in light sleep a circa 240 μA, ma in piena attività con Wi-Fi/Bluetooth attivo può raggiungere diverse centinaia di milliampere (mA), specialmente durante i picchi di trasmissione, con un consumo medio che dipende dal carico di lavoro, ma può essere di decine o centinaia di mA, molto meno del Nano classico e molto più efficiente per progetti IoT.
Per sketch con ottimizzazioni\sleep mode è necessario includere librerie che comunque sono di default installate al primo collegamento all'Arduino IDE e da PlatformIO (nel caso si usi VS Code con plugin). Sostanzialmente è necessario installare "Nano ESP32 board package" che è parte di GitHub - Arduino ESP32 Core.
WiFi e Bluetooth
Segue come disabilitare\abilitare WiFi e Bluetooth; notare che quando si imposta il Deep-sleep o il Light-sleep comunque sia le periferiche wireless saranno spente ma occorre comunque anticipare ciò con una disabilitazione.
NOTE
- nella libreria standard (disponibile includendo
<WiFi.h>) per il WiFi dell'ESP32 non c'è una specifica funzione che direttamente verifichi se l'antenna sia abilitata o disabilitata. Tipicamente è una configurazione hardware (un jumper) o è preimpostata come low-level. - per abilitare\disabilitare il WiFi e\o il Bluetooth lo si fa dalla funzione
setup(). L'antenna del chip ESP32-S3 è off di default fino ad esplicita abilitazione dal codice.
Disabilitare il WiFi:
#include "WiFi.h" void setup() { Serial.begin(115200); delay(1000); Serial.println("Starting..."); printWiFiStatus(); // Check the initial status // Turn off WiFi WiFi.mode(WIFI_OFF); WiFi.disconnect(true); Serial.println("WiFi is disabled."); } void loop() { // Your main code here }
La funzione WiFi.status() verifica lo stato del servizio con codifica in base al seguente enumerativo:
typedef enum { WL_NO_SHIELD = 255, // for compatibility with WiFi Shield library WL_IDLE_STATUS = 0, WL_NO_SSID_AVAIL = 1, WL_SCAN_COMPLETED = 2, WL_CONNECTED = 3, WL_CONNECT_FAILED = 4, WL_CONNECTION_LOST = 5, WL_DISCONNECTED = 6 } wl_status_t;
Disabilitare il Bluetooth:
#include "WiFi.h" #include "bt.h" // Note: This library might require specific installation or handling depending on your Arduino IDE version void setup() { Serial.begin(115200); delay(1000); Serial.println("Starting..."); // Turn off Bluetooth btStop(); // Disables the Bluetooth radio Serial.println("Bluetooth is disabled."); // Turn off WiFi (as shown above) WiFi.mode(WIFI_OFF); WiFi.disconnect(true); Serial.println("WiFi is disabled."); } void loop() { // Your main code here }
Per verificare il nome del dispositivo bluetooth e capire se è abilitato o meno, bisogna verificare quale libreria usare, posson essere:
- BluetoothSerial per cui il nome del dispositivo bluetooth può esser definito nella funzione SerialBT.begin().
- ArduinoBLE per applicazioni "Bluetooth Low Energy" (BLE), il nome del dispositivo può esser impostato usando BLE.setLocalName()
Il nome non è un hardware default fisso ma una configurazione software.
etc?
Gli include necessari:
#include "esp_bt_main.h" //Per il bluetooth| Istruzione | Descrizione | Esempio |
|---|---|---|
nimble_port_stop()
|
row 1, cell 2 | |
nimble_port_deinit()
|
row 2, cell 2 | |
esp_bluedroid_disable()
|
row 2, cell 2 | |
esp_bluedroid_deinit()
|
row 2, cell 2 | |
esp_bt_controller_disable()
|
row 2, cell 2 | |
esp_bt_controller_deinit()
|
row 2, cell 2 | |
esp_wifi_stop()
|
row 2, cell 2 |
Sleep
Si posson usare le modalità deep sleep e light sleep integrate nell'ESP32 a queste si aggiungono delle ulteriori sottotipologie di sleep. Le funzioni native dell'ESP32 (ESP-IDF) sono più efficienti si installano dall'IDE di Arduino: Gestore Schede \ esp32 by Espressif Systems. Doc ufficiale Espressif ESP32-S3
Mie sperimentazioni
VUSB (out) non sempre fornisce 5V
Usando una batteria al piombo da 12V/1.3Ah che fornisce esattamente una tensione di 11.2V ho alimentato l'ESP32 usando il pin VIN per il positivo e GND per la terra, la tensione in uscita sul pin 12 VUSB (out) è di ~2.27V (...mi sarei aspettato di avere ~5V), il regolatore interno sembra fare uno strano lavoro.
Invece, alimentando l'ESP32 da USB, la tensione ai pin VUSB e GND è di ~5.01V.
Nano 33 IoT
Secondo la sua scheda tecnica può esser alimentato esternamente oltre che dalla USB anche attraverso il pin VIN che accetta tensioni da -0.3V (irrealistico) a 21V. Internamente usa un convertitore MPM3610 (DC-DC) regola la tensione di ingresso fino a 21V con un'efficienza minima del 65% e superiore all'85% a 12V.
. Provato con batteria LiPo 3S a 11.1V e 1500mA.
Tenere presente che il pin di uscita +5V detto anche VUSB (numero 12) non erogherà di default 5V ma 3.3V a meno di non cortocircuitare un ponticello mediante saldatura (descritto nella pagina dedicata ad Arduino).
Tecniche per risparmio energetico
Video di Paolo Aliverti qui
Usando particolari librerie si posson disattivare alcuni moduli interni del microcontrollore e ridurre al minimo i consumi di corrente ma nel caso l'attività progrqammata sul microcontrollore non sia costante si può intervenire sui tempi "morti" per impostare una modalità di sleep.
Le librerie per lo sleep sono sleep.h e power.h che consentono quali parti disattivare. Ci sono cinque modalità di risparmio energetico in ordine di profondità:
- SLEEP_MODE_IDLE
- SLEEP_MODE_ADC
- SLEEP_MODE_PWR_SAVE
- SLEEP_MODE_STANDBY
- SLEEP_MODE_PWR_DOWN
Note
Anche dopo aver spento la corrente verso un dispositivo Arduino, la tensione NON CALA SUBITO a 0V ma scende gradualmente, velocemente ai primi istanti e molto lentamente dopo qualche secondo.
(Mappa e Link)
Arduino indice | Integrazioni tipiche | Arduino Progetti
Batterie | Domotica | Dizionario Elettronica | Elettronica | Elettronica Appunti
Parole chiave:
