Rilevatore di presenza basato su pressione

Per un progetto di ricerca che sto conducendo, ho bisogno di realizzare uno strumento che registri la frequenza di utilizzo di un materassino da parte di un cane.

Avevo pensato di dotare il materassino di un arduino con collegato un sensore di pressione. Non mi serve rilevare esattamente il peso, ma semplicemente se ci sia qualcuno sopra al materassino o meno. Arduino dovrebbe rilevare e registrare in un log ogni qual volta il sensore rileva la presenza dell'animale, per un periodo di 3 settimane.

Le problematiche che devo affrontare in questo momento sono:

  1. c'è qualche modo in cui il sistema possa durare 3 settimane alimentato a batteria?

  2. quale sensore di pressione mi consigliereste?

  3. quale arduino mi consigliereste, considerando che l'ottimizzazione della batteria è il requisito principale, e, secondariamente, che più sottile è, meglio è (deve stare sotto al materassino e vorrei evitare l'effetto 'principessa sul pisello')?

Grazie per l'aiuto!

Riflettevo: mi pare di capire che il modo migliore per risparmiare energia sia quello di mandare Arduino in modalità 'sleep' quando possibile. Allora mi chiedevo se potessi usare il sensore di pressione per mandare Arduino in sleep mode o risvegliarlo.

In sostanza: Arduino dorme --> il cane sale sul materassino attivando il sensore --> arduino si sveglia e registra l'evento in un log e torna subito a dormire finché niente cambia --> il cane scende dal materassino portando il sensore sotto soglia --> arduino si sveglia, registra l'evento nel log e torna a dormire fino al successivo evento.

Potrebbe essere una soluzione per aumentare la durata della batteria?

Grazie
Paolo

Non so consigliarti un sensore di pressione ma per il tuo scopo un arduino nano è più che sufficiente ed è molto molto piccolo.
Per quando riguarda le batterie tutto dipende dal consumo del sensore, se non consuma (Es. due lamine metalliche che si toccano solo quando c'è il cane) e lo colleghi ad un ingresso con interrupt e setti che l'interrupt scatti quando qualcosa cambia (CHANGE) tra un evento e l'altro puoi mandare Arduino in sleep mode profondo e a quel punto consuma anche meno di 1mA. Chiaro che quando il cane è sul tappeto una leggera corrente scorrerà aumentando il consumo del dispositivo, ma per stimare i tempi di scarica della batteria occorre prima sapere sensore e correnti in gioco.
Bisogna capire se il tempo di permanenza del cane è superiore o inferiore al tempo di assenza e anche in base a questo si decide la tipologia di sensore da consigliarti

Domanda stupida, ma quanti 'azionamenti' ti aspetti?
Voglio dire un numero dell'ordine di 20 al giorno per 20 giorni, ovvero 400?
Più?
Meno?

Vediamo un po' se questa cosa ha le gambe:
Sensore: un pressostato differenziale fumi caldaia, lo recuperi come rottame
(Questa cosa non è mia, la ho letta da qualche parte)
circuito di debounce
Invece che un Arduino metti un contatore cmos un 12 bit conta fino ad alcune migliaia
Se ti serve di più ne metti 2 in cascata
Due IC cmos senza carico alle uscite assorbono meno di 50 microampere a oltre 30 gradi, al freddo forse meno di 10
Capisci bene che una pila dura un fracco
Poi, al termine del periodo togli l'apparecchio, colleghi un alimentatore 'assieme' alla pila
Per non perdere i conteggi, attacchi con un connettore 12 o 24 led sulle uscite
Leggi in binario e converti in decimale

Nessun Arduino usato, ma Guglielmo non si arrabbierà perché lo 'spirito' di usarlo c'era...
Karma grazie

Standardoil:
Nessun Arduino usato, ma Guglielmo non si arrabbierà perché lo 'spirito' di usarlo c'era...

:grin: :grin: :grin:

Guglielmo

Non è che per caso è importante anche rilevare data e ora delle rilevazioni?
Giusto per capire se ci va sopra per periodi prolungati invece di andarci sopra solo per saltare un po'?
Dovrebbe essere un debounce ben tarato per non segnare a raffica durante i movimenti o i salti.
Presumo che la base del tappetino, quella che poggia sul sensore, sia rigida, per intercettare il peso dell'animale anche se non si mette esattamente con la zampa sopra il sensore...

Standardoil:
Vediamo un po' se questa cosa ha le gambe:

Grazie per il suggerimento - purtroppo non ho competenze e/o conoscenze sufficienti per capire. Ma dai commenti successivi mi sembra che questo sistema non possa registrare la tempistica degli eventi e questo è un problema

fabpolli:
Non so consigliarti un sensore di pressione ma per il tuo scopo un arduino nano è più che sufficiente ed è molto molto piccolo.
Per quando riguarda le batterie tutto dipende dal consumo del sensore, se non consuma (Es. due lamine metalliche che si toccano solo quando c'è il cane) e lo colleghi ad un ingresso con interrupt e setti che l'interrupt scatti quando qualcosa cambia (CHANGE) tra un evento e l'altro puoi mandare Arduino in sleep mode profondo e a quel punto consuma anche meno di 1mA. Chiaro che quando il cane è sul tappeto una leggera corrente scorrerà aumentando il consumo del dispositivo, ma per stimare i tempi di scarica della batteria occorre prima sapere sensore e correnti in gioco.
Bisogna capire se il tempo di permanenza del cane è superiore o inferiore al tempo di assenza e anche in base a questo si decide la tipologia di sensore da consigliarti

Grazie, in effetti il nano sembra fare al caso mio. Devo poter registrare la data e l'ora degli eventi, sia di 'attivazione' (cane sale sul materassino), sia di 'disattivazione' (cane scende dal materassino), in modo che alla fine io sappia non solo quante volte il cane ci è salito, ma quanto a lungo ci è rimasto. Si tratta di un materassino che funge da 'cuccia' per cui è probabile (auspicabile) che il cane lo usi a lungo, sicuramente tutta la notte e si spera anche qualche ora durante il giorno.
Questa pagina dà dei valori di corrente consumata per quando il sensore è attivo, che si aggirano sui 0.40-0.50 mA con l'applicazione di 10 Kg (mi pare di capire che i sensori di questo tipo siano tutti più o meno simili).

A questo credo vada aggiunta la corrente consumata da un lettore SD card (per salvare le letture del sensore, giusto?) che ho letto consuma circa 0.20 mA quando non in uso.

Inoltre andrebbe aggiunto anche un Real Time Clock per ricavare data e ora, ma non ho capito se questo modulo consuma corrente...

Diciamo che indicativamente il consumo quando il cane è sul materassino potrebbe essere di 1 mA e quando non sul tappetino di circa 0.50 mA. Ipotizzando un uso medio di 12 ore giornaliere, potremmo stimare una media di 0.75 mA, se non sto dimenticando niente. In questo caso quanto che durata si potrebbe ottenere al massimo?

Grazie mille davvero.

....... se non sto dimenticando niente.

Si, stai dimenticando il consumo di Arduino.
Che si aggira sui 35-40 mA e se vuoi metterlo in Sleep. con quel FSR non puoi. visto che devi comunque tenere abilitato l' ADC

cicciosalsiccia:
Diciamo che indicativamente il consumo quando il cane è sul materassino potrebbe essere di 1 mA e quando non sul tappetino di circa 0.50 mA. Ipotizzando un uso medio di 12 ore giornaliere, potremmo stimare una media di 0.75 mA, se non sto dimenticando niente.

Ma tu quale durata desideri? Ovviamente dipende dall'assorbimento totale nel tempo e dalla capacità della batteria.

Partiamo dal consumo medio superiore di Arduino, 50 mA, giusto per fare due calcoli "spannometrici" prendendo solo la periferica che consuma di più (ma poi teoricamente ci sono i picchi di assorbimento, ad esempio quando scrivi o leggi dallaSD), iniziamo dicendo che se parli di totale di corrente in un arco di tempo devi parlare di mAh (la somma -o meglio integrale- della corrente per il tempo).

Se vuoi fare un calcolo approssimativo, anche se parliamo di 50 mA per 12 ore, dato che non credo che tu spenga Arduino nelle altre 12 ore, dovresti contare comunque 24 ore.

Quindi 50 mA per 24 ore fa un totale di 1200 mAh al giorno.

Per cui se metti una batteria da 3600mAh teoricamente ti dura (circa) 3 giorni, e con una da 10000 mAh 7-8 giorni. Poi devi ricaricarla o sostituirla.

Ma sono calcoli "spannometrici", dovresti fare dei test con un prototipo reale, ed un uso reale (es. la SD richiede di picco pure 150-200 mA), ed in base a questo dimensionare la batteria o cercare di consumare meno (ma non credo ci sia molto margine per questo aspetto).

La butto li perchè non ho ancora mai fatto prove di questo tipo anche se mi serviranno in futuro, per cui ti uso come cavia :wink:

A te interessa capire quando e quanto, il cane, si ferma sulla cuccia, non se ci passa sopra per caso e per pochi istanti.
O meglio, questo comportamento, nella tua analisi, può essere trascurabile? Assumo di si.

La soluzione che propongo è di tenere a nanna Arduino e risvegliarlo ogni tot secondi, fargli fare la rilevazione e poi di nuovo a nanna.
Se ti salvi lo stato su una flash e registri solo i cambiamenti, potresti cavartela.

Diciamo che fai una rilevazione al minuto.
Inizi, rilevi l'assenza come condizione iniziale, la salvi su SD e su flash e poi metti in sleep schedulando il risveglio dopo un minuto.
Al risveglio riverifichi la presenza. Se negativa non fai nulla e riattivi lo sleep. Se positiva registri la cosa su SD e flash e poi sleep.
Al risveglio riverifichi, se la lettura differisce dall'ultimo valore rilevato sulla flash registri la variazione altrimenti non fai nulla.

Alla fine dovresti avere la registrazione di tutti i cambi di stato con un'errore medio di mezzo minuto sull'istante preciso.

Assumiamo che ogni rilevazione duri un secondo e consumi 500mA (ho sparato cifre sicuramente sovradimensionate).
In un giorno fai 1440 rilevazioni per 1440 secondi complessivi di consumo, quindi l'equivalente di 24 minuti continui di consumo a 500mAh quindi "consumi" l'equivalente di circa 200mAh. Considerando una batteria da 3600mAh, dovrebbe durarti 18 giorni.

Se non ci sono macroscopici errori nel mio ragionamento, la cosa potrebbe funzionare.
Tempo di attività di 1s e consumo di 500mA, sono valori quasi sicuramente ben sovrastimati, che dovrebbero darti un buon margine.

maubarzi:
La butto li perchè non ho ancora mai fatto prove di questo tipo anche se mi serviranno in futuro, per cui ti uso come cavia :wink:

A te interessa capire quando e quanto, il cane, si ferma sulla cuccia, non se ci passa sopra per caso e per pochi istanti.
O meglio, questo comportamento, nella tua analisi, può essere trascurabile? Assumo di si.

La soluzione che propongo è di tenere a nanna Arduino e risvegliarlo ogni tot secondi, fargli fare la rilevazione e poi di nuovo a nanna.
Se ti salvi lo stato su una flash e registri solo i cambiamenti, potresti cavartela.

Diciamo che fai una rilevazione al minuto.
Inizi, rilevi l'assenza come condizione iniziale, la salvi su SD e su flash e poi metti in sleep schedulando il risveglio dopo un minuto.
Al risveglio riverifichi la presenza. Se negativa non fai nulla e riattivi lo sleep. Se positiva registri la cosa su SD e flash e poi sleep.
Al risveglio riverifichi, se la lettura differisce dall'ultimo valore rilevato sulla flash registri la variazione altrimenti non fai nulla.

Alla fine dovresti avere la registrazione di tutti i cambi di stato con un'errore medio di mezzo minuto sull'istante preciso.

Assumiamo che ogni rilevazione duri un secondo e consumi 500mA (ho sparato cifre sicuramente sovradimensionate).
In un giorno fai 1440 rilevazioni per 1440 secondi complessivi di consumo, quindi l'equivalente di 24 minuti continui di consumo a 500mAh quindi "consumi" l'equivalente di circa 200mAh. Considerando una batteria da 3600mAh, dovrebbe durarti 18 giorni.

Se non ci sono macroscopici errori nel mio ragionamento, la cosa potrebbe funzionare.
Tempo di attività di 1s e consumo di 500mA, sono valori quasi sicuramente ben sovrastimati, che dovrebbero darti un buon margine.

Grande!! grazie questo è esattamente il tipo di suggerimento che speravo di trovare qui :slight_smile:
Ne approfitto allora per farti un altro paio di domande:

  1. il salvataggio dei dati va fatto per forza su una scheda esterna o c'è qualche modo di salvare questi dati 'internamente' a arduino?
  2. per svegliare arduino e registrare ora e data del cambiamento ho necessità comunque di un RTC?

Grazie
Paolo

Io ancora non ho mai affrontato questi problemi per cui la mia è solo un'idea, tutta da esplorare e approfondire.

Per la domanda 1, dipende dalla mole di dati. Hai la eeprom ma è limitata, memorizzando data, ora ed evento, diciamo 4 byte per data e ora e 1 per l'evento, hai 5 byte per log.
Se non ricordo male, sull'ATmega 328P ne hai 1024, sono circa 200 eventi.
Ho considerato 4 byte per data e ora perchè è il minimo se ti salvi l'informazione come long considerando i secondi da un dato istante. Se salvi la stringa formattata sono 19 caratteri circa, quindi 19 byte, oppure ti salvi ogni pezzo delle informazioni su un byte distinto, es anno, mese, giorno, ore, minuti e secondo e sarebbero 6, magari salti anno e mese di poca rilevanza e torni a 4.
Un po' pochini mi sa.

Per la domanda 2, dovresti poter usare i timer interni, ma mi sa che l'intervallo non è lunghissimo.
Prova a vedere cose tipo questa
Io non ci ho ancora sbattuto il naso per cui non ho info fresche.
Ma se non usi l'RTC la rilevazione dell'ora come la faresti?