Innholdsfortegnelse:

Vaskemaskin varslingssensor: 6 trinn (med bilder)
Vaskemaskin varslingssensor: 6 trinn (med bilder)

Video: Vaskemaskin varslingssensor: 6 trinn (med bilder)

Video: Vaskemaskin varslingssensor: 6 trinn (med bilder)
Video: Ремонт стиральной машины БОШ. Ошибка F 23 стиралки BOSCH. Устранение протечки своими руками. 2024, November
Anonim
Image
Image
Prototype
Prototype

Denne vaskemaskinsensoren sitter på toppen av vaskemaskinen min og bruker et akselerometer for å oppdage vibrasjoner fra maskinen. Når den oppdager at vaskesyklusen er ferdig, sender den meg et varsel på telefonen. Jeg bygde dette fordi selve maskinen ikke lenger piper når den er ferdig, og jeg var lei av å glemme å ta ut tøyet.

Koden finner du her:

Full deleliste:

  • WEMOS LOLIN32
  • Brødbrett i halv størrelse (for prototyping)
  • ABS prosjektboks med matrisetavle 59x88x30mm
  • Sparkfun LIS3DH - Triple Axis Accelerometer Breakout
  • 1x ZVP3306A P-kanal MOSFET, 160 mA, 60 V, 3-pinners E-linje
  • 1x BC549B TO92 30V NPN -transistor
  • 5mm LED blå 68 mcd
  • 1x 100k 0.125W CF -motstand
  • 1x 330k 0.125W CF motstand
  • 2x 10k 0.250W CF motstand
  • 1x 100 0,250W CF -motstand
  • 2-pinners kvinnelig JST PH-stilkabel (14cm)
  • 4x M1219-8 Neodymskivemagnet 6x4mm

Trinn 1: Prototype

Prototype
Prototype

Enheten bruker en ESP32 mikrokontroller. I dette tilfellet bruker jeg Lolin32 utviklingsbord av Wemos som du kan kjøpe på AliExpress for ca $ 7. Akselerometeret er Sparkfun LIS3DH - det er viktig at akselerometeret er digitalt i stedet for analogt som du vil se senere. Batteriet tok jeg fra et gammelt sett med Bluetooth -høyttalere.

ESP32 kobles til akselerometeret via I2C. Den første versjonen av koden spurte ganske enkelt de tre akselerasjonsaksene (x, y og z) for den målte akselerasjonsverdien hver 20. ms. Plasseringen av brødbrettprototypen på vaskemaskinen og jeg produserte grafen ovenfor som viser akselerasjonstoppene i forskjellige faser av vaskesyklusen. Toppene der absolutt akselerasjon var større enn 125 mg (125 tusendeler av normal tyngdekraft) er vist med oransje. Vi ønsker å oppdage disse periodene og bruke dem til å bestemme statusen til vaskemaskinen.

Hvordan finne ut om maskinen er på eller av?

Et av målene med å bygge denne enheten var at den skulle være helt passiv. Dvs. ingen knapper trenger å trykkes; det ville bare fungere. Det bør også være veldig lav effekt, da det egentlig ikke var mulig å forlenge strømkabler til vaskemaskinen i mitt tilfelle.

Heldigvis har LIS3DH-akselerometeret en funksjon der det kan utløse et avbrudd når akselerasjonen overskrider en gitt terskel (merk at dette krever bruk av akselerometerets innebygde høypassfilter-se koden på Github for detaljer) og ESP32 kan vekkes opp fra dyp dvalemodus via et avbrudd. Vi kan bruke denne kombinasjonen av funksjoner til å lage en dvalemodus med svært lite strøm som utløses av bevegelse.

Pseudokoden vil se slik ut:

# Enhet våkne

notification_threshold = 240 counter = 10 accelerometer.set_threshold (96) # 96mg while counter> 0: if accelerometer.above_threshold (): counter ++ else: counter-- if counter> notification_threshold: # final spin cycle detected sleep (1 second) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Du kan se her at vi bruker en teller for å oppdage hvor mange sekunder med akselerasjon vi har oppdaget i løpet av den nåværende våkneperioden. Hvis telleren faller til null, kan vi sette enheten i dvale. Hvis telleren når 240 (varslingsterskelen), betyr det at vi har oppdaget 4 minutters vibrasjon. Vi kan justere verdiene til disse tersklene for å sikre at enheten korrekt oppdager den siste sentrifugeringssyklusen. Når tilstrekkelig vibrasjon er oppdaget, kan vi bare sove i ytterligere 5 minutter (i mitt tilfelle er dette hvor lang tid det tar før vasken faktisk er fullført) før vi sender et varsel.

Trinn 2: Sende en melding via Blynk

Sende en melding via Blynk
Sende en melding via Blynk

Blynk er en tjeneste designet for å tillate interaksjon med IoT -enheter med en app på telefonen. I dette tilfellet bruker jeg push -varslings -API som utløses av en enkel HTTP POST til Blynk API.

Trinn 3: Måling av strømforbruk og estimering av batterilevetid

Måling av strømforbruk og estimering av batterilevetid
Måling av strømforbruk og estimering av batterilevetid

ESP32 -brikken er annonsert for å ha et veldig lavt strømforbruk når den er i dyp søvn (så lav som 5uA). Dessverre gir kretsene på de mange forskjellige utviklingskortene veldig forskjellige strømforbrukskarakteristikker - ikke alle ESP32 dev -kort er skapt like. For eksempel, da jeg først startet dette prosjektet, brukte jeg Sparkfun ESP32 Thing som ville forbruke rundt 1 mA strøm i dyp dvalemodus (selv etter at LED -lampen var deaktivert). Siden da har jeg brukt Lolin32 (ikke Lite -versjonen) som jeg målte en strøm på 144,5uA i dyp dvalemodus. For å gjøre denne målingen, koblet jeg ganske enkelt et multimeter i serie med batteriet og enheten. Dette er absolutt lettere å gjøre mens du prototyper med et brødbrett. Jeg målte også gjeldende bruk når enheten er våken:

  • Dyp søvn: 144,5uA
  • Våken: 45mA
  • WiFi aktivert: 150mA

Forutsatt at jeg bruker maskinen to ganger i uken, estimerte jeg følgende tidspunkt for tiden sensoren bruker i hver tilstand:

  • Dyp søvn: 604090 sekunder (~ 1 uke)
  • Våkn opp: 720 sekunder (12 minutter)
  • Wifi aktivert: 10 sekunder

Fra disse tallene kan vi anslå hvor lenge batteriet kommer til å vare. Jeg brukte denne hendige kalkulatoren for å få et gjennomsnittlig strømforbruk på 0,2mA. Estimert batterilevetid er 201 dager eller omtrent 6 måneder! I virkeligheten har jeg funnet ut at enheten vil slutte å fungere etter omtrent 2 måneder, så det kan være noen feil i målinger eller kapasiteten til batteriet.

Trinn 4: Måling av batterinivå

Måling av batterinivå
Måling av batterinivå
Måling av batterinivå
Måling av batterinivå

Jeg trodde det ville være fint hvis enheten kunne fortelle meg når batteriet er lavt, så jeg vet når jeg skal lade det. For å måle dette må vi måle spenningen til batteriet. Batteriet har et spenningsområde på 4,3V - 2,2V (minimum driftsspenning for ESP32). Dessverre er spenningsområdet til ADC-pinnene på ESP32 0-3.3V. Dette betyr at vi må trappe spenningen til batteriet ned fra maksimum 4,3 til 3,3 for å unngå overbelastning av ADC. Dette er mulig å gjøre med en spenningsdeler. Bare led to motstander med passende verdier fra batteriet til jord og måle spenningen i midten.

Dessverre vil en enkel spenningsdelerkrets tappe strøm fra batteriet selv når spenningen ikke måles. Du kan redusere dette ved å bruke motstander med høy verdi, men den negative siden er at ADC kanskje ikke kan trekke nok strøm til å gjøre en nøyaktig måling. Jeg bestemte meg for å bruke motstander med verdier på 100kΩ og 330kΩ som vil falle 4,3V til 3,3V i henhold til denne spenningsdelerformelen. Gitt en total motstand på 430kΩ, forventer vi en nåværende trekning på 11,6uA (ved bruk av Ohms lov). Gitt at vår nåværende bruk av dyp søvn er 144uA, er det en rimelig betydelig økning.

Siden vi bare vil måle batterispenningen en gang rett før du sender et varsel, er det fornuftig å slå av spenningsdelerkretsen i løpet av tiden vi ikke måler noe. Heldigvis kan vi gjøre dette med et par transistorer koblet til en av GPIO -pinnene. Jeg brukte kretsen gitt i dette stackexchange -svaret. Du kan se meg teste kretsen med en Arduino og et brødbrett på bildet ovenfor (merk at det er en feil i kretsen som er grunnen til at jeg måler en høyere spenning enn forventet).

Med kretsen ovenfor på plass, bruker jeg følgende pseudokode for å få en batteriprosentverdi:

batteri prosent():

# aktiver batterispenningskrets gpio_set_level (BATTERY_EN_PIN, HIGH) # Batterinivå returneres som et heltall mellom 0 og 4095 adc_value = adc1_get_value (ADC_PIN) # aktiver batterispenningskrets gpio_set_level (BATTERY_EN_PIN, LOW) float adc_volt divider bruker 100k/330k ohm motstander # 4.3V -> 3.223, 2.4 -> 1.842 forventet_maks = 4,3*330/(100+330) forventet_min = 2,4*330/(100+330) batteri_nivå = (adc_spenning -forventet_min)/(forventet_maks. -forventet_min) returbatterinivå * 100,0

Trinn 5: Gjør det penere

Gjør det penere
Gjør det penere
Gjør det penere
Gjør det penere
Gjør det penere
Gjør det penere

Selv om brødbrettversjonen fungerer bra, ønsket jeg å sette den i en pakke som ville være penere og mer pålitelig (ingen ledninger som kan løsne eller kortsluttes). Jeg klarte å finne den perfekte prosjektboksen for mine behov, som var i riktig størrelse, inkludert et tavlebrett, monteringsholder og skruer for å sette alt sammen. Det var også dødt billig på under 2 pund. Etter å ha mottatt esken, var det bare å lodde komponentene på pinnebrettet.

Kanskje den vanskeligste delen av dette var å montere alle batterispenningskretskomponentene på den lille plassen ved siden av Lolin32. Heldigvis med litt jiggery pokery og de riktige tilkoblingene med loddetinn, passer kretsen pent inn. Siden Wemos Lolin32 ikke har en pinne for å avsløre den positive batteriterminalen, måtte jeg lodde en ledning fra batterikontakten til pinnekortet.

Jeg har også lagt til en LED som blinker når enheten har oppdaget bevegelse.

Trinn 6: Etterbehandling

Image
Image
Finpuss
Finpuss
Finpuss
Finpuss

Jeg superlimte 4 6 mm x 4 mm neodymmagneter til bunnen av esken som gjør at den kan feste seg sikkert til metalloverdelen på vaskemaskinen.

Prosjektboksen har allerede et lite hull for å gi tilgang til kabler. Heldigvis var jeg i stand til å plassere ESP32 -kortet nær dette hullet for å gi tilgang til mikro -USB -kontakten. Etter å ha forstørret hullet med en håndverkskniv, passet kabelen perfekt for å muliggjøre enkel lading av batteriet.

Hvis du er interessert i noen av detaljene i dette prosjektet, er du velkommen til å legge igjen en kommentar. Hvis du vil se koden, kan du sjekke den ut på Github:

github.com/alexspurling/washingmachine

Anbefalt: