Sommario:
- Passaggio 1: prototipo
- Passaggio 2: invio di una notifica tramite Blynk
- Passaggio 3: misurazione del consumo energetico e stima della durata della batteria
- Passaggio 4: misurazione del livello della batteria
- Passaggio 5: renderlo più carino
- Passaggio 6: ritocchi finali
Video: Sensore di notifica della lavatrice: 6 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
Questo sensore della lavatrice si trova sopra la mia lavatrice e utilizza un accelerometro per rilevare le vibrazioni della macchina. Quando rileva che il ciclo di lavaggio è terminato, mi invia una notifica sul mio telefono. L'ho costruito perché la macchina stessa non emette più un segnale acustico quando ha finito ed ero stanco di dimenticare di estrarre il bucato.
Il codice può essere trovato qui:
Elenco completo delle parti:
- WEMOS LOLIN32
- Breadboard mezza misura (per prototipazione)
- Scatola progetto ABS con scheda matrice 59x88x30mm
- Sparkfun LIS3DH - Breakout dell'accelerometro a triplo asse
- 1x MOSFET a canale P ZVP3306A, 160 mA, 60 V, E-Line a 3 pin
- 1x transistor BC549B TO92 30V NPN
- LED blu da 5 mm 68 mcd
- 1x resistenza CF da 100k 0,125W
- 1x resistenza CF da 330 k 0,125 W
- Resistore CF 2x 10k 0.250W
- 1x 100 resistenza CF da 0,250 W
- Cavo JST femmina a 2 pin stile PH (14 cm)
- 4x M1219-8 disco magnetico al neodimio 6x4mm
Passaggio 1: prototipo
Il dispositivo utilizza un microcontrollore ESP32. In questo caso sto usando la scheda di sviluppo Lolin32 di Wemos che puoi acquistare su AliExpress per circa $ 7. L'accelerometro è lo Sparkfun LIS3DH - è importante che l'accelerometro sia digitale piuttosto che analogico come vedrai più avanti. La batteria l'ho presa da un vecchio set di altoparlanti bluetooth.
L'ESP32 si collega all'accelerometro tramite I2C. La prima versione del codice interrogava semplicemente i tre assi di accelerazione (x, yez) per il valore di accelerazione misurato ogni 20 ms. Posizionando il prototipo di breadboard sulla lavatrice ho prodotto il grafico sopra che mostra i picchi di accelerazione durante le varie fasi del ciclo di lavaggio. I picchi in cui l'accelerazione assoluta era maggiore di 125 mg (125 millesimi di gravità normale) sono mostrati in arancione. Vogliamo rilevare questi periodi e usarli per determinare lo stato della lavatrice.
Come determinare se la macchina è accesa o spenta?
Uno degli obiettivi della costruzione di questo dispositivo era che sarebbe stato completamente passivo. Cioè. non dovrebbe essere necessario premere alcun pulsante; funzionerebbe e basta. Dovrebbe anche essere una potenza molto bassa in quanto non era davvero possibile estendere i cavi di alimentazione alla lavatrice nel mio caso.
Fortunatamente l'accelerometro LIS3DH ha una funzione in cui può attivare un'interruzione quando l'accelerazione supera una determinata soglia (nota, questo richiede l'uso del filtro passa-alto integrato dell'accelerometro - vedere il codice su Github per i dettagli) e l'ESP32 può essere riattivato dalla sua modalità di sospensione profonda tramite un'interruzione. Possiamo usare questa combinazione di funzioni per creare una modalità di sospensione a bassissima potenza che viene attivata dal movimento.
Lo pseudo codice sarebbe simile a questo:
# Riattivazione del dispositivo
Notification_threshold = 240 counter = 10 accelerometer.set_threshold(96) #96mg while counter > 0: if accelerometer.above_threshold(): counter++ else: counter-- if counter > Notification_threshold: # ciclo di rotazione finale rilevato sleep(1 secondo) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt() esp32.deep_sleep()
Puoi vedere qui che utilizziamo un contatore per rilevare quanti secondi di accelerazione abbiamo rilevato durante il periodo di attivazione corrente. Se il contatore scende a zero, possiamo riattivare il dispositivo. Se il contatore raggiunge 240 (la soglia di notifica) significa che abbiamo rilevato 4 minuti di vibrazione. Possiamo modificare i valori di queste soglie per assicurarci che il dispositivo rilevi correttamente la centrifuga finale. Una volta rilevata una vibrazione sufficiente, possiamo semplicemente dormire per altri 5 minuti (nel mio caso questo è il tempo necessario prima che il lavaggio sia effettivamente completato) prima di inviare una notifica.
Passaggio 2: invio di una notifica tramite Blynk
Blynk è un servizio progettato per consentire l'interazione con i dispositivi IoT con un'app sul telefono. In questo caso, sto utilizzando l'API di notifica push che viene attivata da un semplice HTTP POST all'API Blynk.
Passaggio 3: misurazione del consumo energetico e stima della durata della batteria
Il chip ESP32 è pubblicizzato come avente un consumo energetico molto basso quando è in modalità di sospensione profonda (a partire da 5uA). Sfortunatamente, i circuiti sulle diverse schede di sviluppo forniscono caratteristiche di consumo energetico molto diverse: non tutte le schede di sviluppo ESP32 sono uguali. Ad esempio, quando ho iniziato questo progetto, ho usato Sparkfun ESP32 Thing che consumava circa 1 mA di energia in modalità di sospensione profonda (anche dopo aver disabilitato il LED di alimentazione). Da allora uso il Lolin32 (non la versione Lite) su cui ho misurato una corrente di 144.5uA mentre ero in modalità di sospensione profonda. Per eseguire questa misurazione, ho semplicemente collegato un multimetro in serie con la batteria e il dispositivo. Questo è sicuramente più facile da fare durante la prototipazione con una breadboard. Ho anche misurato l'utilizzo corrente quando il dispositivo è attivo:
- Sonno profondo: 144.5uA
- Sveglia: 45 mA
- Wi-Fi abilitato: 150 mA
Supponendo di utilizzare la macchina due volte a settimana, ho stimato i seguenti tempi per il tempo che il sensore trascorre in ogni stato:
- Sonno profondo: 604090 secondi (~1 settimana)
- Sveglio: 720 secondi (12 minuti)
- Wifi abilitato: 10 secondi
Da queste cifre, possiamo stimare quanto durerà la batteria. Ho usato questa pratica calcolatrice per ottenere un consumo energetico medio di 0,2 mA. La durata stimata della batteria è di 201 giorni o circa 6 mesi! In realtà ho riscontrato che il dispositivo smetterà di funzionare dopo circa 2 mesi quindi potrebbero esserci degli errori nelle misurazioni o nella capacità della batteria.
Passaggio 4: misurazione del livello della batteria
Ho pensato che sarebbe stato bello se il dispositivo potesse dirmi quando la batteria si sta scaricando, così so quando caricarlo. Per misurare questo abbiamo bisogno di misurare la tensione della batteria. La batteria ha un intervallo di tensione di 4,3 V - 2,2 V (la tensione operativa minima dell'ESP32). Sfortunatamente, l'intervallo di tensione dei pin ADC dell'ESP32 è 0-3,3 V. Ciò significa che dobbiamo ridurre la tensione della batteria dal suo massimo di 4,3 a 3,3 per evitare di sovraccaricare l'ADC. Questo è possibile con un partitore di tensione. Basta collegare due resistori con i valori appropriati dalla batteria a terra e misurare la tensione nel mezzo.
Sfortunatamente, un semplice circuito divisore di tensione consumerà energia dalla batteria anche quando la tensione non viene misurata. È possibile mitigare questo problema utilizzando resistori di alto valore, ma il lato negativo è che l'ADC potrebbe non essere in grado di assorbire abbastanza corrente per effettuare una misurazione accurata. Ho deciso di utilizzare resistori con valori di 100kΩ e 330kΩ che scenderanno da 4,3 V a 3,3 V secondo la formula di questo partitore di tensione. Data una resistenza totale di 430kΩ, ci aspetteremmo un assorbimento di corrente di 11,6uA (usando la legge di Ohm). Dato che il nostro consumo di corrente di sonno profondo è di 144uA, si tratta di un aumento ragionevolmente significativo.
Poiché vogliamo misurare la tensione della batteria solo una volta prima di inviare una notifica, ha senso disattivare il circuito divisore di tensione durante il periodo in cui non stiamo misurando nulla. Fortunatamente, possiamo farlo con un paio di transistor collegati a uno dei pin GPIO. Ho usato il circuito fornito in questa risposta stackexchange. Puoi vedermi testare il circuito con un Arduino e una breadboard nella foto sopra (nota che c'è un errore nel circuito che è il motivo per cui sto misurando una tensione più alta del previsto).
Con il circuito sopra in atto, utilizzo il seguente pseudo codice per ottenere un valore percentuale della batteria:
batteria_percentuale():
# abilita il circuito di tensione della batteria gpio_set_level(BATTERY_EN_PIN, HIGH) # Il livello della batteria viene restituito come un numero intero compreso tra 0 e 4095 adc_value = adc1_get_value(ADC_PIN) # abilita il circuito di tensione della batteria gpio_set_level(BATTERY_EN_PIN, LOW) float adc_voltage = adc_value * 3.3 / 4095 il divisore utilizza resistori da 100 k / 330 k ohm # 4,3 V -> 3,223, 2,4 -> 1,842 massimo_previsto = 4,3*330/(100+330) min_previsto = 2,4*330/(100+330) livello_batteria = (min_tensione_attesa_adc)/(max_previsto -expected_min) restituisce livello_batteria * 100.0
Passaggio 5: renderlo più carino
Mentre la versione breadboard funziona bene, volevo inserirla in un pacchetto che fosse più ordinato e affidabile (nessun filo che possa allentarsi o andare in cortocircuito). Sono riuscito a trovare la scatola del progetto perfetta per le mie esigenze che era della giusta dimensione, inclusa una bacheca, supporti di montaggio e viti per mettere tutto insieme. Inoltre, costava poco meno di 2 sterline. Dopo aver ricevuto la scatola, tutto quello che dovevo fare era saldare i componenti sulla scheda pin.
Forse la parte più difficile è stata montare tutti i componenti del circuito di tensione della batteria nel piccolo spazio accanto al Lolin32. Fortunatamente con un po' di jiggery pokery e le connessioni appropriate fatte con la saldatura, il circuito si adatta perfettamente. Inoltre, poiché il Wemos Lolin32 non ha un pin per esporre il terminale positivo della batteria, ho dovuto saldare un filo dal connettore della batteria alla scheda pin.
Ho anche aggiunto un LED che lampeggia quando il dispositivo ha rilevato un movimento.
Passaggio 6: ritocchi finali
Ho incollato alla base della scatola 4 magneti al neodimio da 6 mm x 4 mm che gli consentono di aderire saldamente alla parte superiore metallica della lavatrice.
La scatola del progetto è già dotata di un piccolo foro per consentire l'accesso ai cavi. Fortunatamente, sono stato in grado di posizionare la scheda ESP32 vicino a questo foro per consentire l'accesso al connettore micro USB. Dopo aver allargato il foro con un taglierino, il cavo si adatta perfettamente per consentire una facile ricarica della batteria.
Se sei interessato ai dettagli di questo progetto, non esitare a lasciare un commento. Se desideri vedere il codice, controllalo su Github:
github.com/alexspurling/washingmachine
Consigliato:
Monitoraggio della lavatrice/asciugatrice con ESP8266 e sensore di accelerazione: 6 passaggi
Monitoraggio della lavatrice / asciugatrice con ESP8266 e sensore di accelerazione: la lavatrice / asciugatrice si trova nel seminterrato e, di norma, ci metti un mucchio di vestiti e poi ti occupi di un altro lavoro in casa. Trascuri i vestiti che sono stati lasciati fradici e assorbenti nel seminterrato della tua macchina
Hackerare un pulsante della porta della Jubilee Line della metropolitana di Londra: 12 passaggi (con immagini)
Hacking di un pulsante della porta della Jubilee Line della metropolitana di Londra: Il negozio del London Transport Museum vende pulsanti della porta dismessi della Jubilee Line (sono disponibili sia a sinistra che a destra). Se stai pensando di realizzare un progetto che necessita di un pulsante e di una spia di qualche tipo, saresti
Com'è stato facile riparare l'elettronica della mia lavatrice: 5 passaggi (con immagini)
Quanto è stato facile riparare l'elettronica della mia lavatrice: perché? Perché sono un produttore mi piace riparare le mie cose, il che a volte è un problema perché rimangono inattive mentre trovo un po' di tempo per capire la strategia di pulizia il problema. Riparare qualcosa di solito è semplice e divertente, ma trovare il ca
Avviso lavatrice Arduino - Notifica push al telefono con Blynk: 5 passaggi (con immagini)
Avviso lavatrice Arduino - Invia notifica al telefono con Blynk: la nostra lavatrice è in garage e non possiamo sentire i segnali acustici per indicare che il lavaggio è completo. Volevo trovare un modo per essere avvisato, ovunque ci trovassimo in casa, quando il ciclo era finito. Ho armeggiato con Arduino, ESP8266 WiFi
Notifiche della lavatrice con MESH: 4 passaggi (con immagini)
Notifiche della lavatrice con MESH: Oops! Ho dimenticato i vestiti in lavatrice… Ti dimentichi sempre di ritirare i vestiti dopo che sono stati lavati? Questa ricetta aggiornerà la tua lavatrice per ricevere notifiche tramite Gmail o IFTTT una volta che i tuoi vestiti sono pronti per essere fotografati