Preavviso automatico di spegnimento

ciao a tutti.
c'è la possibilità di sapere quando sta per mancare l'alimentazione di arduino?

in uno sketch dovrei salvare dei valori in EEPROM, però per non "bruciare" subito la eeprom vorrei limitare le scritture solo al momento dello spegnimento di arduino. e vorrei che arduino salvasse in automatico i valori quando si accorge che sta per essere spento...

so che sarebbe più semplice mettere un bottone da premere prima di spegnere, ma per vari motivi non è una soluzione praticabile.

lasciando perdere maghi e sfere di cristallo, si può prevedere?

in molte apparecchiature elettroniche vedo che quando vengono spente alcuni led rimangono accesi ancora qualche secondo... presumo che qualche condensatore rimanga carico e che scaricandosi alimenti il led... o qualcos'altro di simile...
è possibile sfruttare lo stesso meccanismo? ovviamente in maniera controllata.

grazie in anticipo

Alimentatore, diodo in serie, condensatore di alta capacità, lettura del segnale a monte del diodo ...

Quando l'alimentazione va via, a monte del diodo non hai più nulla, mentre a valle, un bel condensatorone (... considera che oggi si parla di condensatori anche da 1F e più) può darti corrente ancora per quel tempo che ti serve a salvare il tutto e fermarti.

Guglielmo

P.S.: Occhio a limitare la velocità di carica di condensatori di quelle dimensioni ...

Ti sei parzialmente risposto: sull'uscita dell'alimentatore dovresti montare un diodo e successivamente un grosso condensatore elettrolitico calcolato sul consumo di Arduino

Dovresti monitorare la tensione sull'alimentatore prima del diodo e del condensatore per verificare quando scende al di sotto di un certo livello per far scattare il salvataggio su EEPROM.

grazie ad entrambi!

detto in parole povere, visto che in elettronica sono un zappa...

  • diodo... va bene il 1N4007 tipo quello che c'è nel kit di arduino?

  • condensatore... cosa intendete con grosso? considerando che tutto il sistema consuma circa 350mA e che in eeprom devo salvare 4 variabili int (ho letto che la scrittura in eeprom è lenta, ma non so quanto...), quanta autonomia potrebbe servirmi? su che valore potrei stare?

  • guglielmo dici "P.S.: Occhio a limitare la velocità di carica di condensatori di quelle dimensioni ..." cosa vuol dire? c'è un modo per limitare la velocità di carica? che rischi ci sono se non limito?

giusto per scrupolo, ricordo che io sto all'elettronica come Messner sta al nuoto sincronizzato...

Quando si applica la tensione su di un condensatore scarico, la corrente iniziale è teoricamente infinita.

Nella realtà il condensatore ha una certa resistenza parassita che limita questa corrente, ma più la capacità del condensatore è alta, più questa corrente è alta.

Con un assorbimento di 350mA devi inserire un condensatore da almeno 1000μF ed il diodo 1N4007 da 1A deve sopportare la corrente iniziale di carica che però non deve superare i 30A per 8.3ms.

Se vuoi essere sicuro, devi inserire dopo il diodo e prima del condensatore un resistore da 1 ohm 1W: supponendo che la tensione dell'alimentatore sia 10V, la massima corrente iniziale sarà 10V / 1ohm = 10A

Considera che il tempo di scrittura di una cella in EEPROM sul ATmega328P è di circa 3,3mSec ... per sicurezza arrotondiamo il tutto a 5 mSec. Tu devi scrivere 4 variabili int, ovvero 8 bytes e quindi ti serve che l'alimentazione resti per almeno 40 mSec ... tra una cosa e l'altra ... diciamo che con 100 mSec vai sul sicuro.

Bisognerebbe fare bene i calcoli della capacità necessaria , ma probabilmente con il valore indicato da cyberhs ci dovresti stare ... ::slight_smile:

Guglielmo

ri-grazie a entrambi!

in casa avrei:

  • condensatore elettrolitico da 220uF... può andar bene?
  • diodo 1N4007 dello starter kit... questi diodi sono tutti da 1A?
  • resistenze... qui sono un po' carente, il valore più vicino che ho disponibile è 220 ohm 1/2W...
    combino qualcosa o devo fare la spesa?
    dimenticavo, l'alimentazione è a 12V.

poi dicevate di controllare la tensione a monte del diodo... come dovrei fare? essendo 12V non posso collegarli direttamente ad un pin di arduino...

Non credo proprio che 220uF siano sufficienti.
Il diodo 1N4007 tollera 1A.
La resistenza deve essere quella che ti ho indicato, cioè 10ohm 1W.
Ti conviene usare l'alimentazione a 9V per non sovraccaricare il regolatore interno di Arduino.

Devi usare un partitore resistivo con rapporto 3:1, ad esempio 2k ed 1k in modo da ridurre la tensione da 12V a 4V oppure da 9V a 3V.

ho sbagliato a scrivere, il condensatore è da 2200uF...

Un condensatore 2200uF va bene.

fratt:
considerando che tutto il sistema consuma circa 350mA

nel caso in cui il semplice condensatore da 2200uf non andassa, se tu mettessi un diodo che carica un condensatore collegato solamente ad Arduino guadagneresti molto tempo prima dello spegnimento. per accorgersi della mancanza di corrente mi permetto di suggerire un fotoaccoppiatore, magari collegato ad un pin interrupt

Boschi, l'idea del fotoaccoppiatore è buona, ma non credo lo abbia a disposizione.

non ho capito il discorso di boschi riguardo il diodo che carica il condensatore collegato solo ad arduino...

un fotoaccoppiatore ce l'avrei, ma non sono mai riuscito a farlo funzionare... nemmeno copiando spudoratamente lo schema da internet...

non ho capito il discorso di boschi riguardo il diodo che carica il condensatore collegato solo ad arduino...

Il discorso vale se quello che hai collegato ad Arduino è alimentato direttamente dall'alimentatore, non vale se quei 300mA li prelevi da Arduino
Serviva, se vale il discorso appena fatto, ad avere una ulteriore fonte di energia per Arduino

spesso quando leggo una risposta di voi elettronici mi rendo conto che là fuori c'è un mondo intero che da informatico mi rimane decisamente oscuro... :o :o :o ;D

grazie a tutti. mi ritiro per cercare elaborare le info che mi avete dato. vediamo cosa ne esce.