Quali sono (o come utilizzo) le opzioni di risparmio energetico di Arduino per prolungare la durata della batteria?


40

Per i progetti alimentati a energia solare ea batteria, è necessario ridurre il consumo di energia.

So un po 'di come usare un timer e interrompere per mettere in pausa il microcontrollore quando non sta facendo nulla.

Ho anche letto che è possibile disabilitare alcune periferiche per risparmiare ulteriormente energia.

Ecco una pagina che spiega questi: tecniche di risparmio energetico

La mia domanda:

  • Quali altre tecniche ci sono per risparmiare energia?
  • Esistono librerie che semplificano l'utilizzo di queste funzionalità AVR?

Risposte:


33

Nota: volevo sottolineare che, anche se la mia risposta è stata accettata, il lettore (tu) dovrebbe davvero leggere prima la risposta di Anindo se vuoi davvero risparmiare energia con qualsiasi scheda Arduino. Una volta indirizzati quegli elementi nel tuo progetto, dovresti leggere la mia risposta e preoccuparti di come impostare l'MCU in modalità a basso consumo.

Detto questo, ci sono diverse tecniche per far risparmiare energia ad un Arduino. Ne elencherò alcuni e poi ti indicherò una pagina che li spiega in modo più dettagliato.

  1. Mentre il controller non sta facendo nulla di importante (tra una lettura di un sensore e la successiva, ad esempio), puoi impostare il controller in una delle modalità di sospensione di seguito, con il comando set_sleep_mode (SLEEP_MODE_PWR_DOWN). Accanto a ciascuna modalità è presente il consumo energetico approssimativo di ciascuna modalità.

    • SLEEP_MODE_IDLE: 15 mA
    • SLEEP_MODE_ADC: 6,5 mA
    • SLEEP_MODE_PWR_SAVE: 1,62 mA
    • SLEEP_MODE_EXT_STANDBY: 1,62 mA
    • SLEEP_MODE_STANDBY: 0,84 mA
    • SLEEP_MODE_PWR_DOWN: 0,36 mA
  2. Disabilita il rilevamento brown-out (il circuito che spegne il controller quando viene rilevata una bassa tensione).

  3. Disattiva ADC (conversione da analogico a digitale)

  4. Usa l'orologio interno

Quindi, quando si mette il controller in modalità di sospensione, è necessario utilizzare uno o più meccanismi di seguito per riattivare il controller e fare qualcosa con esso:

  • Svegliati con un segnale

  • Svegliati con un timer

Questo è un riassunto che ho fatto da -

Tale articolo si applica principalmente ad ATmega328P, ma la tecnica si applica anche ad altri controller compatibili con Arduino. Come ha detto bene TheDoctor, dovrai controllare il datashet per assicurarti che il tuo controller supporti una di queste tecniche e come farlo in modo più preciso.


2
Grazie per aver fatto riferimento alla mia pagina www.gammon.com.au/power . L'impiego di tutte le tecniche sopra menzionate dovrebbe consentire di consumare circa 100 nA (0,1 µA). Altre tecniche che possono avere un grande impatto sono di funzionare a una frequenza più bassa e una tensione più bassa. Inoltre, ciò che ha detto Anindo Ghosh sul non utilizzo dei regolatori di tensione. Ho realizzato un sensore di temperatura e umidità - alimentato a batteria che impiega molte di queste tecniche, che sta ancora andando forte, dopo un paio d'anni con le batterie.
Nick Gammon

@NickGammon - Ad essere sincero, penso che il tuo eccellente articolo meritasse un riferimento migliore, quindi ho modificato la mia risposta in tal senso. Grazie per l'ottimo articolo - molto chiaro e completo! E benvenuto su Arduino.SE. È bello averti qui.
Ricardo,

24

Realisticamente, il più grande idroelettrico su una scheda Arduino è il regolatore di tensione lineare su di essa.

  1. Finché il microcontrollore sulla scheda, i LED o qualsiasi altra periferica assorbono corrente, il regolatore lineare spreca potenza pari a difference between supply and board voltagex current drawn.

    Quindi, una prima soluzione sarebbe quella di scollegare il LED dell'indicatore di alimentazione sulla scheda e di non utilizzare nessuno degli altri LED il più lontano possibile. In secondo luogo, fornire alla scheda una tensione quanto più bassa possibile, sufficiente per alimentare il regolatore di bordo.

  2. Sui progetti originali, i regolatori di tensione utilizzati non vantano una bassa corrente di riposo. Ciò significa che, anche se non viene assorbita energia all'interno della scheda, il regolatore stesso spreca un bel po 'di energia per tutto il tempo in cui è acceso.

    Una soluzione semplice è quella di sostituire il regolatore di bordo con un LDO (regolatore lineare a basso drop-out) valutato per una corrente di riposo estremamente bassa. Ricerche parametriche su vari siti di fornitori produrranno probabili sostituti.

  3. Anche con i passaggi precedenti, la scheda Arduino non fornisce un meccanismo per impostare il LDO in modalità a basso consumo, se il LDO scelto lo supporta. I progetti ad alta efficienza energetica in genere utilizzano un pin "sleep mode" sui regolatori di tensione per risparmiare un bel po 'di energia - non un'opzione qui.

Anche con tutte le possibili modalità di risparmio energetico e trucchi applicati a livello di microcontrollore, Arduino semplicemente non è progettato per essere un dispositivo a bassissima potenza pronto all'uso. Dopo aver sperimentato diverse applicazioni non banali, ho scoperto che il meglio realisticamente ottenibile è dal 10% al 30% di risparmio energetico a seconda dell'applicazione, poiché il regolatore di tensione e i LED consumeranno comunque il resto.


2
fornire alla scheda una tensione quanto più bassa possibile, sufficiente per alimentare il regolatore di bordo o fornire 5 V tramite un cavo USB compromesso.
Anonimo Penguin,

13

È possibile leggere il foglio dati di 200 pagine e quindi pasticciare con alcuni spostamenti e registri di bit confusi, ma raccomando questa libreria: http://playground.arduino.cc/Code/Enerlib

Inoltre, se si utilizza uno o uno con un chip da USB a seriale, è possibile disabilitarlo o rimuoverlo.


3
Si consiglia di leggere la scheda tecnica non importa quello che stai facendo.
Connor Wolf,

9

Una volta che il tuo progetto funziona e devi implementarlo in un ambiente di "produzione", puoi scegliere di sostituire Arduino con un meta ATMega328 nudo o uno qualsiasi dei chip della famiglia ATTiny. Questo eliminerà tutti i mangiatori di potere sulla scheda Arduino che non ti servono. Ho trovato:

  • Scheda Arduino con batteria a blocco 9V - 56 mA
  • ATTiny85 nudo su 8 MHz senza modalità di sospensione, ecc. - 10 mA
  • ATTiny85 nudo su 8 MHz in modalità sospensione - 0,03 mA

Qualche informazione in più

Programma un ATtiny con Arduino

File ATTiny per Arduino IDE

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.