Togliere l'alimentazione ad Arduino per poi riaccendere...

Buongiorno a tutti
sto usando la libreria LowPower.h con buoni risultati ma vorrei consumare meno... tipo 0.
Sono in questa situazione : arduino legge i dati dai miei sensori, mi connetto ad internet con GSM shield, spedisco i dati via POST e poi metto in "standby" per 15 minuti (consumo in standby di circa 38 mA con arduino mega e shield gsm) per poi"riaccendere" e ricominciare in loop.

Mi potete dare dei consigli, link per il circuito da fare? Ho un RTC Ds3231 che immagino sia utile per gli allarmi.

Mi potete dare dei consigli, link per il circuito da fare?

Si, togliere la MEGA e farti uno standalone

Brunello:
Si, togliere la MEGA e farti uno standalone

grazie, ma al momento non e' una opzione. Piu' avanti l'idea e' questa prendendo in aggiunta un GSM "piu' semplice" della shield... ma adesso avrei bisogno di provare il prototipo in campo e non ho pezzi e tempo sufficiente per fare quello che dici.

Allora non ho capito bene
Ma non hai detto di aver gia' fatto tutto con la MEGA etc etc e arrivare ad un consumo in standby di 38mA ?

Quando mandi a riposo la MCU. il resto della scheda, per quanto poco, continua a consumare ... quindi, o ti fai un circuito esterno che ogni "tot" minuti accende Arduino dandogli l'alimentazione con un mosfet, e che possiede un pin per poterlo "spegnere" resettando il tempo, oppure la vedo molto difficile ...

Il circuito esterno ovviamente sarebbe del tutto indipendente da Arduino, andrebbe realizzato in modo da consumare il meno possibile (che in ogni caso NON potra' essere zero, ma potrebbe andarci vicino usando un timer CMOS), e dovrebbe essere un semplice timer resettabile ... quando inserisci l'alimentazione oppure dai il comando di reset, deve iniziare il ciclo di temporizzazione, al termine attiva un mosfet di potenza che alimenta tutto il resto (non solo arduino), ... ovviamente, in quel caso, il tuo sketch deve prevedere l'esecuzione di tutte le tue funzioni in automatico all'accensione, ed una volta che tutto e' stato eseguito, portare alto un pin per dare il reset al timer ... come circuito in se mi sembra semplice da disegnare ...

Brunello:
Allora non ho capito bene
Ma non hai detto di aver gia' fatto tutto con la MEGA etc etc e arrivare ad un consumo in standby di 38mA ?

Si ... dici bene. Ma vorrei spegnere e consumare 0 :slight_smile: (0 almeno dal punto di vista Arduino).

Con la tua configurazione hardware non puoi arrivare a 0, quei 38 mA sono il consumo residuo della Mega2560 e della shield, anche se metti in deep sleep il micro di Arduino, assorbimento meno di 0.1 uA, c'è tutto il resto che consuma corrente, a partire dal micro che fa da convertitore usb-uart.

Etemenanki:
Quando mandi a riposo la MCU. il resto della scheda, per quanto poco, continua a consumare ... quindi, o ti fai un circuito esterno che ogni "tot" minuti accende Arduino dandogli l'alimentazione con un mosfet, e che possiede un pin per poterlo "spegnere" resettando il tempo, oppure la vedo molto difficile ...

Il circuito esterno ovviamente sarebbe del tutto indipendente da Arduino, andrebbe realizzato in modo da consumare il meno possibile (che in ogni caso NON potra' essere zero, ma potrebbe andarci vicino usando un timer CMOS), e dovrebbe essere un semplice timer resettabile ... quando inserisci l'alimentazione oppure dai il comando di reset, deve iniziare il ciclo di temporizzazione, al termine attiva un mosfet di potenza che alimenta tutto il resto (non solo arduino), ... ovviamente, in quel caso, il tuo sketch deve prevedere l'esecuzione di tutte le tue funzioni in automatico all'accensione, ed una volta che tutto e' stato eseguito, portare alto un pin per dare il reset al timer ... come circuito in se mi sembra semplice da disegnare ...

Grazie della risposta esauriente !!!!

Ti ho allegato un possibile circuito, modificato da una delle mie vecchie applicazioni ... l'integrato e' un LMC555, versione CMOS del NE555, che consuma di suo solo 100uA, quindi non si puo usare un normale 555 se si vuole mantenere il consumo basso ...

Il funzionamento e' abbastanza semplice ... in condizione di riposo, l'uscita del 555 e' bassa e mantiene in conduzione il mosfet, alimentando il circuito ... quando mandi alto il PIN di arduino, questo fornisce un'impulso al transistor, che manda basso il pin trigger del 555, quindi l'uscita va alta ed il mosfet si spegne finche' il tempo impostato come ritardo e' trascorso, poi riaccende il tutto, e cosi via ... quindi funziona in pratica come un timer inverso, normalmente e' acceso, e sei tu tramite il pin di trigger a spegnerlo per il tempo che vuoi ...

Un paio di note ... il condensatore C3 puo essere aumentato fino a 470u per allungare il tempo, se serve, ma e' meglio non superare tale valore, (la R da 100 ohm in serie serve per evitare che scaricandosi brutalmente all'interno del 555 durante l'inizio del ciclo finisca per rovinarlo, non influisce sul tempo) ... le resistenze invece, quella da 4M7 con in serie il trimmer da 22M, e' meglio non aumentarle piu di cosi ... su ritardi di parecchi minuti inoltre la temporizzazione non e' precisa, perche' soffre della deriva termica del condensatore, anche usandone uno di ottima qualita', e dei vari componenti, quindi potrebbe sbagliare anche di alcuni secondi fra un ciclo e l'altro, ma per la tua applicazione non credo sia molto importante ...

Poi il circuito che c'e' sulla base del transistor potrebbe non servire nel tuo caso (D1, D2 e C6) ... io avevo dovuto metterli perche' il circuito che ci alimentavo io non dava uno stato logico 0 ben definito in assenza di alimentazione, ma cambiava lentamente a causa della circuiteria interna, quindi a volte manteneva chiuso il transistor, con quei componenti invece al transistor arrivava un'impulso solo quando l'uscita andava secca da 0 ad 1 ... se Arduino non si comporta male, potrebbero anche non servire, bastando la sola resistenza da 1K (quella da 100K fra base e massa serve sempre), ma se non hai problemi di spazio ti consiglierei di lasciarli, tanto male non gli fanno :wink:

Quanto al mosfet, io avevo usato un TPS1110 solo perche' l'avevo in casa al momento, va bene un qualsiasi mosfet di potenza a canale P con RdsON piu bassa possibile ... il TPS1110 ad esempio ha 0.065 ohm che per un P-MOS non e' proprio male (nel mio caso con 700mA di carico mi causava una caduta di tensione di soli 0.05V, che a me andava piu che bene), ed anche se e' SMD, e' un case "umano" con cui si riesce a lavorare bene ...

Ovviamente se vuoi usarlo, devi provarlo con il resto della tua circuiteria per vedere se e' adatto, dato che la mia applicazione era differente e non c'entrava con arduino, ma non credo possa dare troppe difficolta' ... fra l'altro nel mio caso, dove c'era anche un'altra parte di circuito che a te non servirebbe, consumava circa 1mA, probabilmente cosi consumerebbe anche di meno, che mi sembra meglio dei 38mA di cui parlavi, se funziona come ti serve ... :wink:

Io invece quando ebbi una necessita' tipo la tua, ricordo che usai il DS3231, sfruttandone la possibilita di gestire un interrupt da allarme, anche senza alimentazione esterna, ma solo con la batteria di mantenimento.
Scelsi questa strada perchè la mia installazione prevedeva tempistiche diverse ( ogni mezzora dalle 8 alle 20, ogni ora dalle 20 alle 24 e a riposo nel resto delle ore ) , cosa non fattibile senza usare un RTC
E ho tirato quindi fuori il seguente circuito, ma solo perchè non avevo il tempo di farmi uno standalone, quindi montaggio su millefori e via.... ( è divertente saldare un SOT23 su millefori )

Un grazie grazie mille a Brunello e Etemenanki !!!!! :slight_smile: