Ciao ragazzi,
sto cercando di costruire un sensore porta/finestra con le seguenti caratteristiche:
Attiny84
nRF24L01+
Reed Switch
Batteria 3.7V 1200mAh
La "particolarità" di questo sensore è che deve funzionare a batteria, quindi sto cercando di ottimizzare il sistema per ridurre drasticamente i consumi per evitare di cambiare batteria ogni giorno.
Attualmente il sistema parte, inizializza tutto e va in sleep. Il tutto viene "svegliato" da un interrupt scatenato da un Reed Sensor.
Ho notato con il multimetro che effettivamente il sensore consuma in sleep 0.02 mAh. Quindi con una capacità di 1200 mAh della batteria dovrei fare circa (se rimanesse sempre in sleep) 60.000 ore, diviso 24, 2500 gg. Considerato che ad ogni invio c'è un picco di circa 1-2 secondi di 10 mAh, le tempistiche si riducono ma direi che va più che bene. Se riesco a fare anche 10-12 mesi con una batteria, sono a cavallo.
(Spero di aver fatto i calcoli correttamente).
Problema:
il consumo è di 0.02 mAh quando il reed sensor è aperto (Quindi magnete lontano dal sensore). Quando invece il reed sensor è chiuso (magnete vicino) il consumo balza per 1-2 secondi a 10 mAh per l'invio e poi rimane sui 4 mAh fisso. Presumo perché essendo chiuso il circuito, passa della corrente e viene consumata dal reed.
Mi potreste spiegare come mai succede questo ed eventualmente come risolvere il problema?
Purtroppo capisco poco di elettronica ma sto cercando di imparare. Di mestiere faccio il programmatore ma sto in fissa per l'elettronica.
Dimenticavo ...il ricevitore (centralina) è composto da un Raspberry PI 2 con il modulo nRF24L01+ che riceve i dati tramite nodejs e li inserisce su un database MySQL. I dati arrivano correttamente.
Buongiorno,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto.
Ciao Guliemo,
ero convinto di averlo già scritto ma forse nel forum Inglese. Perdonami.
Ho scritto la mia presentazione seguendo un pò le linee guida del forum (spero di averlo fatto bene)
il consumo è di 0.02 mAh quando il reed sensor è aperto
Causa probabile errore, per come l'hai scritto il consumo è di 20mA, forse intendevi 0,002.
Ad ogni modo a questi livelli tutto può incidere sull'assorbimento, anche un led.
Sicuramente il contatto reed è connesso ad una resistenza di pullup o pulldown e se di valore basso può provocare un maggior consumo.
lelebum:
Causa probabile errore, per come l'hai scritto il consumo è di 20mA, forse intendevi 0,002.
Ad ogni modo a questi livelli tutto può incidere sull'assorbimento, anche un led.
Sicuramente il contatto reed è connesso ad una resistenza di pullup o pulldown e se di valore basso può provocare un maggior consumo.
Io ho messo il multimetro su 20 mA e il display segna 0,02. Dove ho sbagliato?
Domani provo a cambiare la resistenza e metterne una con valore piu' alto!
lelebum:
Scusa l'errore è mio.
Tu hai scritto 0.02 mA quindi equivalente a 20uA.
Ora c'è solo da trovare chi ti aumenta i consumi.
Figurati... nessun problema.
Allora ho fatto dei test. Prima avevo messo una resistenza di pullup da 1k omh. Se metto una resistenza di 100k omh invece il consumo si riduce da 4 mAh a 0.15 mAh! Direi che così iniziamo a ragionare.
La cosa che ho notato è che se tolgo la resistenza di pullup il consumo si riduce a 0.11 mAh e il sistema funziona lo stesso! Com'è possibile questa cosa?
Se avete bisogno di ulteriori informazioni riguardanti il mio progetto (codice, schema etc etc) ditemelo che cerco di riportare tutto.
Ne approfitto del post per chiedervi un'altra cosa: come faccio a calcolare la batteria residua? Online ho trovato questo metodo:
long readVcc()
{
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA, ADSC))
;
result = ADCL;
result |= ADCH << 8;
result = 1126400L / result; // Back-calculate AVcc in mV
return result;
}
Il problema è che ritorna sempre lo stesso valore. Avete qualche idea?
La cosa che ho notato è che se tolgo la resistenza di pullup il consumo si riduce a 0.11 mAh e il sistema funziona lo stesso! Com'è possibile questa cosa?
E' solo una casualità, oppure nella definizione del pin accoppiato al reed hai usato la forma "pinMode(ledReed, INPUT_PULLUP);" che aggiunge all'ingresso altri 20kOhm.
In ogni caso se vuoi che la cosa sia affidabile ti raccomando non togliere la resistenza da 100k, e vista l'alta impedenza che ottieni dalla stessa sul pin consiglio di connettere in parallelo un piccolo condensatore ceramico da 10kpf. Male non fa e non consuma!
In merito alla funzione che hai postato, confesso di avere seri problemi nell'interpretare la sintassi e pertanto non vorrei confonderti le idee.
Nell'occasione, volevo chiederti se potevi postare le soli sezioni del tuo listato dove sono definite le modalità per mandare in sleep e risvegliare la CPU.