Sommario:

Sensore di notifica della lavatrice: 6 passaggi (con immagini)
Sensore di notifica della lavatrice: 6 passaggi (con immagini)

Video: Sensore di notifica della lavatrice: 6 passaggi (con immagini)

Video: Sensore di notifica della lavatrice: 6 passaggi (con immagini)
Video: COME INSERIRE E RICEVERE NOTIFICHE CON LO SMARTPHONE DAL PROPRIO IMPIANTO D'ALLARME 2024, Luglio
Anonim
Image
Image
Prototipo
Prototipo

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

Prototipo
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

Invio di una notifica tramite Blynk
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

Misurazione del consumo energetico e stima della durata della batteria
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

Misurazione del livello della batteria
Misurazione del livello della batteria
Misurazione del livello della batteria
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

Rendendolo più carino
Rendendolo più carino
Rendendolo più carino
Rendendolo più carino
Rendendolo più carino
Rendendolo 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

Image
Image
Finiture
Finiture
Finiture
Finiture

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: