Cuprins:

Senzor de notificare a mașinii de spălat: 6 pași (cu imagini)
Senzor de notificare a mașinii de spălat: 6 pași (cu imagini)

Video: Senzor de notificare a mașinii de spălat: 6 pași (cu imagini)

Video: Senzor de notificare a mașinii de spălat: 6 pași (cu imagini)
Video: Simptomele unui senzor de temperatură motor DEFECT! 2024, Iulie
Anonim
Image
Image
Prototip
Prototip

Acest senzor de mașină de spălat se află deasupra mașinii de spălat și folosește un accelerometru pentru a detecta vibrațiile de la mașină. Când simte că ciclul de spălare sa încheiat, îmi trimite o notificare pe telefon. Am construit acest lucru, deoarece mașina în sine nu mai emite semnale sonore când este terminată și m-am săturat să uit să scot rufele.

Codul poate fi găsit aici:

Lista completă a pieselor:

  • WEMOS LOLIN32
  • Panou de dimensiuni jumătate (pentru prototipare)
  • Caseta de proiectare ABS cu placa Matrix 59x88x30mm
  • Sparkfun LIS3DH - Accelerometru triplu axă Breakout
  • 1x MOSFET ZVP3306A cu canal P, 160 mA, 60 V, 3-Pin E-Line
  • 1x tranzistor NPN BC549B TO92 30V
  • 5mm LED Albastru 68 mcd
  • 1x Rezistor CF 100k 0.125W
  • 1x rezistor CF de 330k 0,125W
  • 2x rezistor CF 10k 0.250W
  • 1x 100 0.250W rezistor CF
  • Cablu feminin cu 2 pini stil JST PH (14cm)
  • 4x M1219-8 Magnet cu disc neodim 6x4mm

Pasul 1: Prototip

Prototip
Prototip

Dispozitivul utilizează un microcontroler ESP32. În acest caz, folosesc placa de dezvoltare Lolin32 de către Wemos, pe care o puteți cumpăra de pe AliExpress la aproximativ 7 USD. Accelerometrul este Sparkfun LIS3DH - este important că accelerometrul este mai degrabă digital decât analog, așa cum veți vedea mai târziu. Bateria pe care am luat-o de la un set vechi de boxe bluetooth.

ESP32 se conectează la accelerometru prin I2C. Prima versiune a codului a sondat pur și simplu cele trei axe de accelerație (x, y și z) pentru valoarea măsurată a accelerației la fiecare 20 ms. Plasând prototipul plăcii pe mașina de spălat și am produs graficul de mai sus, care arată vârfurile de accelerație în timpul diferitelor faze ale ciclului de spălare. Acele vârfuri în care accelerația absolută a fost mai mare de 125 mg (125 miimi de greutate normală) sunt prezentate în portocaliu. Vrem să detectăm aceste perioade și să le folosim pentru a determina starea mașinii de spălat.

Cum se determină dacă aparatul este pornit sau oprit?

Unul dintre obiectivele construirii acestui dispozitiv era ca acesta să fie în întregime pasiv. Adică nu ar trebui să fie apăsate butoane; ar merge doar. De asemenea, ar trebui să aibă o putere foarte mică, deoarece nu a fost posibilă extinderea cablurilor de alimentare la mașina de spălat în cazul meu.

Din fericire, accelerometrul LIS3DH are o caracteristică în care poate declanșa o întrerupere atunci când accelerația depășește un prag dat (rețineți, acest lucru necesită utilizarea filtrului de trecere înaltă încorporat al accelerometrului - consultați codul de pe Github pentru detalii) și ESP32 poate fi trezit din modul de somn profund printr-o întrerupere. Putem folosi această combinație de caracteristici pentru a crea un mod de repaus cu putere foarte mică, care este declanșat de mișcare.

Pseudo codul ar arăta cam așa:

# Dispozitivul se trezește

notification_threshold = 240 counter = 10 accelerometer.set_threshold (96) # 96mg while counter> 0: if accelerometer.above_threshold (): counter ++ else: counter-- if counter> notification_threshold: # cycle final de centrifugare detectat sleep (1 secundă) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Puteți vedea aici că folosim un contor pentru a detecta câte secunde de accelerație am detectat în perioada de trezire curentă. Dacă contorul scade la zero, atunci putem readuce dispozitivul în repaus. Dacă contorul atinge 240 (pragul de notificare), atunci înseamnă că am detectat 4 minute de vibrații. Putem modifica valorile acestor praguri pentru a ne asigura că dispozitivul detectează corect ciclul de centrifugare final. Odată detectată o vibrație suficientă, putem doar să dormim încă 5 minute (în cazul meu, acesta este cât timp durează până când spălarea se finalizează efectiv) înainte de a trimite o notificare.

Pasul 2: Trimiterea unei notificări prin Blynk

Trimiterea unei notificări prin Blynk
Trimiterea unei notificări prin Blynk

Blynk este un serviciu conceput pentru a permite interacțiunea cu dispozitivele IoT cu o aplicație de pe telefon. În acest caz, folosesc API-ul de notificare push care este declanșat de un simplu HTTP POST către API-ul Blynk.

Pasul 3: Măsurarea consumului de energie și estimarea duratei de viață a bateriei

Măsurarea consumului de energie și estimarea duratei de viață a bateriei
Măsurarea consumului de energie și estimarea duratei de viață a bateriei

Cipul ESP32 este anunțat ca având un consum foarte redus de energie atunci când dormiți profund (până la 5uA). Din păcate, circuitele de pe numeroase plăci de dezvoltare oferă caracteristici de consum de energie foarte diferite - nu toate plăcile ESP32 dev sunt egale. De exemplu, când am început acest proiect, am folosit Sparkfun ESP32 Thing, care ar consuma aproximativ 1mA de energie în modul de repaus profund (chiar și după dezactivarea LED-ului de alimentare). De atunci am folosit Lolin32 (nu versiunea Lite) pe care am măsurat un curent de 144,5uA în timp ce era în modul de somn profund. Pentru a face această măsurare, am conectat pur și simplu un multimetru în serie cu bateria și dispozitivul. Acest lucru este cu siguranță mai ușor de făcut în timp ce faceți prototipuri cu o placă de calcul. De asemenea, am măsurat utilizarea curentă când dispozitivul este treaz:

  • Somn profund: 144,5uA
  • Trezit: 45mA
  • Wifi activat: 150mA

Presupunând că folosesc mașina de două ori pe săptămână, am estimat următoarele temporizări pentru timpul petrecut de senzor în fiecare stare:

  • Somn profund: 604090 secunde (~ 1 săptămână)
  • Trezire: 720 secunde (12 minute)
  • Wifi activat: 10 secunde

Din aceste cifre, putem estima cât va dura bateria. Am folosit acest calculator la îndemână pentru a obține un consum mediu de energie de 0,2 mA. Durata de viață estimată a bateriei este de 201 zile sau aproximativ 6 luni! În realitate, am constatat că dispozitivul nu va mai funcționa după aproximativ 2 luni, astfel încât ar putea exista unele erori în măsurători sau capacitatea bateriei.

Pasul 4: Măsurarea nivelului bateriei

Măsurarea nivelului bateriei
Măsurarea nivelului bateriei
Măsurarea nivelului bateriei
Măsurarea nivelului bateriei

M-am gândit că ar fi frumos dacă dispozitivul îmi poate spune când bateria se descarcă, așa că știu când să o încarc. Pentru a măsura acest lucru, trebuie să măsurăm tensiunea bateriei. Bateria are un domeniu de tensiune de 4,3V - 2,2V (tensiunea minimă de funcționare a ESP32). Din păcate, gama de tensiune a pinilor ADC ai ESP32 este 0-3,3V. Acest lucru înseamnă că trebuie să reducem tensiunea bateriei de la maximul de 4,3 la 3,3 pentru a evita supraîncărcarea ADC. Acest lucru este posibil cu un divizor de tensiune. Pur și simplu conectați două rezistențe cu valorile corespunzătoare de la baterie la masă și măsurați tensiunea din mijloc.

Din păcate, un circuit simplu de divizare a tensiunii va scurge energia din baterie chiar și atunci când tensiunea nu este măsurată. Puteți atenua acest lucru folosind rezistențe de mare valoare, dar partea de jos este că ADC ar putea să nu fie capabil să tragă suficient curent pentru a face o măsurare precisă. Am decis să folosesc rezistențe cu valori de 100kΩ și 330kΩ, care vor scădea de la 4.3V la 3.3V conform formulei de divizare a tensiunii. Având în vedere o rezistență totală de 430kΩ, ne-am aștepta la o remiză curentă de 11,6uA (folosind legea lui Ohm). Având în vedere că utilizarea somnului nostru profund este de 144 uA, este o creștere rezonabilă.

Deoarece vrem să măsurăm tensiunea bateriei doar o singură dată înainte de a trimite o notificare, este logic să oprim circuitul divizorului de tensiune în timpul în care nu măsurăm nimic. Din fericire, putem face acest lucru cu câteva tranzistori conectate la unul dintre pinii GPIO. Am folosit circuitul dat în acest răspuns stackexchange. Mă puteți vedea testând circuitul cu un Arduino și o placă de calcul în fotografia de mai sus (rețineți că există o eroare în circuit, motiv pentru care măsoară o tensiune mai mare decât se aștepta).

Cu circuitul de mai sus în poziție, folosesc următorul pseudo cod pentru a obține o valoare procentuală a bateriei:

procentajul bateriei():

# activați circuitul de tensiune al bateriei gpio_set_level (BATTERY_EN_PIN, HIGH) # Nivelul bateriei este returnat ca întreg între 0 și 4095 adc_value = adc1_get_value (ADC_PIN) # activați circuitul de tensiune al bateriei gpio_set_level (BATTERY_EN_PIN, LOW) divizorul folosește rezistențe 100k / 330k ohm # 4.3V -> 3.223, 2.4 -> 1.842 expected_max = 4.3 * 330 / (100 + 330) expected_min = 2.4 * 330 / (100 + 330) battery_level = (adc_voltage-expected_min) / (expected_max -prevăzut_min) returnează nivelul_baterie * 100.0

Pasul 5: face-o mai frumoasă

Făcându-l mai frumos
Făcându-l mai frumos
Făcându-l mai frumos
Făcându-l mai frumos
Făcându-l mai frumos
Făcându-l mai frumos

În timp ce versiunea de panou funcționează bine, am vrut să o introduc într-un pachet care să fie mai îngrijit și mai fiabil (fără fire care să se desprindă sau să se scurteze). Am reușit să găsesc cutia de proiect perfectă pentru nevoile mele, care să aibă dimensiunea potrivită, incluzând o placă cu știfturi, suporturi de montare și șuruburi pentru a pune totul împreună. De asemenea, a fost foarte ieftin la mai puțin de 2 GBP. După ce am primit cutia, tot ce trebuia să fac era să lipiți componentele pe placa de pin.

Poate că cea mai dificilă parte a acestui lucru a fost montarea tuturor componentelor circuitului de tensiune a bateriei pe spațiul mic de lângă Lolin32. Din fericire, cu un pic jokery pokery și conexiunile adecvate făcute cu lipit, circuitul se potrivește bine. De asemenea, deoarece Wemos Lolin32 nu are un pin pentru a expune terminalul pozitiv al bateriei, a trebuit să lipesc un fir de la conectorul bateriei la placa pin.

Am adăugat și un LED care clipește când dispozitivul a detectat mișcare.

Pasul 6: Atingeri de finisare

Image
Image
Finisaje
Finisaje
Finisaje
Finisaje

Am super-lipit 4 magneți de neodim de 6 mm x 4 mm pe baza cutiei, ceea ce îi permite să se lipească în siguranță de partea superioară metalică a mașinii de spălat.

Cutia de proiect vine deja cu o gaură mică pentru a asigura accesul cablurilor. Din fericire, am reușit să poziționez placa ESP32 aproape de această gaură pentru a da acces la conectorul micro USB. După mărirea găurii cu un cuțit de ambarcațiuni, cablul se potrivește perfect pentru a permite încărcarea ușoară a bateriei.

Dacă sunteți interesat de oricare dintre detaliile acestui proiect, vă rugăm să nu ezitați să lăsați un comentariu. Dacă doriți să vedeți codul, vă rugăm să îl verificați pe Github:

github.com/alexspurling/washingmachine

Recomandat: