Diminuire consumo Arduino

Come forse avrete capito dagli altri topic che ho aperto, è da qualche giorno che sto usando l'mp3 shield e la touch shield della sparkfun per creare un lettore mp3, insieme all'arduino Fio e al Fio V3.

Il problema è che non ho ancora deciso quale Fio utilizzare definitivamente. La differenza di consumi tra Arduino Fio e Fio V3 è notevole (forse a causa del diverso microcontrollore?). Esattamente con lo stesso programma caricato e lo stesso hardware, il Fio (dotato di atmega328p 8mHz) consuma 27mAh e il Fio V3 (atmega32u4 8mHz) consuma 40mAh :astonished: .

Mi chiedevo se c'era una libreria o delle funzioni per ridurre i consumi al minimo, pur mantenendo il funzionameto della scheda.
Secondo voi il consumo eccessivo è proprio dovito alla differenza del microcontrollore?

Il 32u4 è più recente, potrebbe anche essere, d'altra parte se tutto il resto è identico non può essere certo il circuito stampato a consumare di più :sweat_smile:
Studiati la libreria "sleep.h", spegnendo le parti del micro che non ti servono puoi arrivare a consumi di pochi mA.

#include <avr/power.h>
#include <avr/sleep.h>

La libreria Enerlib (Arduino Playground - Enerlib) va anche bene?

Quale delle funzioni elencate nel link mi permette di far spegnere le parti inutilizzate di arduino, pur facendolo funzionare?

Vectorel, il consumo del microcontrollore è una cosa, il consumo della scheda su cui è montato è un altro paio di maniche.Voglio dire, hai visto quant'è il consumo di tutto il resto? Cioè dello shield touch e dello shield Mp3? E' inutile mettere il chip in sleep se poi il resto del circuito resta acceso a consumare corrente.

ma il consumo dell'atmega32u4 è effettivamente maggiore dell'atmega328p? o è più o meno lo stesso?

Sono simili. La più grossa differenza risiede nel fatto che l'Atmega32U4 integra un convertitore USB/serial per cui non necessita di un convertitore esterno per dialogare col computer. Inoltre il suo firmware può essere programmato per apparire ad un computer come una periferica HID.
Entrambi hanno 32 kB di Flash per i programmi. C'è qualche differenza sui pin e le funzioni di essi ma siamo lì.

Ma lui ha rilevato la differenza di consumi tra due schede che sostiene essre identiche, eccetto il micro; io non le ho guardate, ma se ha ragione la differenza può essere solo sul micro. Concordo sul fatto che se gli shield consumano, p.es. 2-300mA è inutile tentare di recuperare 20mA, ma quanto consumano gli shield?

vectorel:
ma il consumo dell'atmega32u4 è effettivamente maggiore dell'atmega328p? o è più o meno lo stesso?

Più o meno è lo stesso a parità di condizioni d'uso, però può oscillare da pochi mA fino a diverse decine di mA a seconda di quello che sta facendo il micro e del clock, poi tocca aggiungere la corrente prelevata dai vari gpio dai carichi esterni, questi valori sono riferiti al micro in condizioni di lavoro standard, utilizzando i vari livelli di sleep e/o lo spegnimento delle periferiche non utilizzate è possibile ridurre il consumo del micro, in condizioni di idle, fino a pochi uA.

Grazie per le risposte. Appena ho un attimo di tempo vedo di provare con qualche libreria e vi faccio sapere.

Posso dire con cercezza che è l'atmega32u4 che consuma di più. Ho fatto un test con Arduino Fio, Fio V3 e Arduino Micro, caricando un programma vuoto (quindi facendo accendere solo il led di alimentazione).

Ecco i consumi

Fio V3 (atmega32u4) ---> 20mAh
Arduino Micro (atmega32u4) ---> 22mAh

Arduino Fio (atmega328p) ---> 5mAh :astonished:

è chiaro, quindi, che si tratta del microcontrollore.

Provando ad usare la enerlib, mettendo l'arduino in idle mode, il consumo non cambia... Non vi sembra strano? Anche se effettivamente gli unici pin che non uso sono i 6 analogici.

Se vuoi un vero risparmio enerfetico l'idle non basta. Ti serve una modalità più aggressiva (tipo power-down) e poi devi spengere materialmente le periferiche non in uso (lo sleep gli toglie solo il clock ma esse continuano a consumare corrente, sono in stand-by, non spente).

vectorel:
Arduino Fio (atmega328p) ---> 5mAh :astonished:

Attenzione che questa versione della Fio lavora a 8 MHz, comporta un assorbimento minore, inoltre l'ATmega 328p non ha l'interfaccia USB hardware, qualche mA lo prende quando è attiva anche se in attesa di comunicare.

Avendo costruito un lettore mp3, il mio problema è quello di ridurre al minimo i consumi dell'Arduino Fio o del Fio V3 quando è collegato alla batteria, continuando a riprodurre musica.
Poi se quando lo collego al computer consuma di più non mi interessa, perchè in quel momento la batteria si ricarica.

Non so se mentre viene riprodotta la musica (quindi con scheda funzionante e accesa) c'è un modo per risparmiare un po' di energia.

in questo caso, utilizzando le lib dette prima è stato messo in idle in quanto occorreva mantenere attiva l' USART ma puoi usare SLEEP_MODE_PWR_SAVE per risparmiare ulteriormente

Saluti

Francesco

void sleepNow(){
  digitalWrite(13,LOW);
  
   set_sleep_mode(SLEEP_MODE_IDLE);   // sleep mode is set here
   
/* enables the sleep bit in the mcucr register 
   so sleep is possible. just a safety pin
*/
   sleep_enable();          
   power_adc_disable();
   power_spi_disable();
   power_timer0_disable();
   power_timer1_disable();
   power_timer2_disable();
   power_twi_disable();
  
  
  sleep_mode();            // here the device is actually put to sleep!!
 
                             // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
  sleep_disable();         // first thing after waking from sleep:
                            // disable sleep...

  power_all_enable();
  
    
  
   
}//fine funzione SLEEP

Grazie mille Francesco. Il tuo codice funziona con l'atmega32u4, anche se quando provo a caricare il mio programma non si nota alcuna differenza di consumo.

Dove Posso trovare maggiori informazioni riguardo quel codice?

io in modalità idle risparmio circa 7ma e ti ripeto che tu puoi rispiarmare di piu' con l'altra modalità...chiedi a larry page :P(non ricordo dove l'ho preso)

chiaramente devi richiamare la funzione al posto giusto...non so bene quale sia il tuo proj...potresti ad esempio, per provarne il risparmio energetico, richiamarla nel setup in modo tale da verificare subito il risparmio...

pndtkd:
potresti ad esempio, per provarne il risparmio energetico, richiamarla nel setup in modo tale da verificare subito il risparmio...

è proprio quello che ho fatto. Grazie, farò altre prove appena ho tempo.