Indholdsfortegnelse:

Vaskemaskine Notifikationssensor: 6 trin (med billeder)
Vaskemaskine Notifikationssensor: 6 trin (med billeder)

Video: Vaskemaskine Notifikationssensor: 6 trin (med billeder)

Video: Vaskemaskine Notifikationssensor: 6 trin (med billeder)
Video: Стиральная машина рвет вещи (диагностика и ремонт) 2024, Juli
Anonim
Image
Image
Prototype
Prototype

Denne vaskemaskinesensor sidder oven på min vaskemaskine og bruger et accelerometer til at registrere vibrationer fra maskinen. Når det mærker, at vaskecyklussen er færdig, sender den mig en besked på min telefon. Jeg byggede dette, fordi selve maskinen ikke længere bipper, når den er færdig, og jeg var træt af at glemme at tage vasketøjet ud.

Koden findes her:

Komplet deleliste:

  • WEMOS LOLIN32
  • Brødbræt i halv størrelse (til prototyper)
  • ABS projektboks med matrix bord 59x88x30mm
  • Sparkfun LIS3DH - Triple Axis Accelerometer Breakout
  • 1x ZVP3306A P-kanal MOSFET, 160 mA, 60 V, 3-benet E-line
  • 1x BC549B TO92 30V NPN -transistor
  • 5mm LED Blå 68 mcd
  • 1x 100k 0.125W CF modstand
  • 1x 330k 0.125W CF modstand
  • 2x 10k 0.250W CF modstand
  • 1x 100 0,250W CF modstand
  • 2-benet kvindelig JST PH-stilkabel (14cm)
  • 4x M1219-8 Neodymskivemagnet 6x4mm

Trin 1: Prototype

Prototype
Prototype

Enheden bruger en ESP32 -mikrokontroller. I dette tilfælde bruger jeg Lolin32 udviklingsplade fra Wemos, som du kan købe på AliExpress for omkring $ 7. Accelerometeret er Sparkfun LIS3DH - det er vigtigt, at accelerometeret er digitalt frem for analogt, som du vil se senere. Batteriet tog jeg fra et gammelt sæt bluetooth -højttalere.

ESP32 opretter forbindelse til accelerometeret via I2C. Den første version af koden undersøgte ganske enkelt de tre accelerationsakser (x, y og z) for den målte accelerationsværdi hver 20. ms. Placering af brødbrætets prototype på vaskemaskinen, og jeg producerede ovenstående graf, der viser accelerationstoppe i forskellige faser af vaskecyklussen. De toppe, hvor den absolutte acceleration var større end 125 mg (125 tusindedele af normal tyngdekraft) er vist med orange. Vi vil opdage disse perioder og bruge dem til at bestemme vaskemaskinens status.

Hvordan afgøres det, om maskinen er tændt eller slukket?

Et af målene med at bygge denne enhed var, at den ville være helt passiv. Dvs. der skal ikke trykkes på nogen knapper; det ville bare fungere. Det burde også have meget lav effekt, da det ikke rigtig var muligt at forlænge strømkabler til vaskemaskinen i mit tilfælde.

Heldigvis har LIS3DH accelerometer en funktion, hvor det kan udløse en afbrydelse, når accelerationen overstiger en given tærskel (bemærk, dette kræver brug af accelerometerets indbyggede højpasfilter-se koden på Github for detaljer) og ESP32 kan vækkes op fra sin dybe dvaletilstand via en afbrydelse. Vi kan bruge denne kombination af funktioner til at oprette en meget lav strømtilstand, der udløses af bevægelse.

Pseudokoden ville se sådan ud:

# Enhed vågner

meddelelses_grænse = 240 tæller = 10 accelerometer.set_tærskel (96) # 96mg mens tæller> 0: hvis accelerometer.over_grænse (): tæller ++ andet: tæller-- hvis tæller> meddelelses_grænse: # sidste centrifugeringscyklus registreret søvn (1 sekund) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Du kan her se, at vi bruger en tæller til at registrere, hvor mange sekunders acceleration vi har registreret i den aktuelle opvågningsperiode. Hvis tælleren falder til nul, kan vi sætte enheden i dvale igen. Hvis tælleren når 240 (underretningstærsklen), betyder det, at vi har registreret 4 minutters vibration. Vi kan justere værdierne for disse tærskler for at sikre, at enheden korrekt registrerer den sidste centrifugeringscyklus. Når tilstrækkelig vibration er registreret, kan vi simpelthen sove i yderligere 5 minutter (i mit tilfælde er det, hvor lang tid det tager, før vasken rent faktisk er færdig), før vi sender en meddelelse.

Trin 2: Afsendelse af en meddelelse via Blynk

Afsendelse af en meddelelse via Blynk
Afsendelse af en meddelelse via Blynk

Blynk er en service designet til at tillade interaktion med IoT -enheder med en app på din telefon. I dette tilfælde bruger jeg push -meddelelses -API'en, der udløses af en simpel HTTP POST til Blynk API.

Trin 3: Måling af strømforbrug og estimering af batterilevetid

Måling af strømforbrug og estimering af batterilevetid
Måling af strømforbrug og estimering af batterilevetid

ESP32 -chippen annonceres for at have et meget lavt strømforbrug, når den er i dyb søvn (så lav som 5uA). Desværre giver kredsløbet på de mange forskellige udviklingsplader meget forskellige strømforbrugskarakteristika - ikke alle ESP32 dev -kort er skabt ens. Da jeg f.eks. Startede dette projekt, brugte jeg f.eks. Sparkfun ESP32 Thing, som ville forbruge omkring 1 mA strøm i dyb dvaletilstand (selv efter deaktivering af strøm -LED). Siden da har jeg brugt Lolin32 (ikke Lite -versionen), hvor jeg målte en strøm på 144,5uA, mens jeg var i dyb dvaletilstand. For at foretage denne måling har jeg simpelthen koblet et multimeter i serie med batteriet og enheden. Dette er bestemt lettere at gøre, mens du prototyper med et brødbræt. Jeg målte også den aktuelle brug, når enheden er vågen:

  • Dyb søvn: 144,5uA
  • Vågnet: 45mA
  • Wifi aktiveret: 150mA

Forudsat at jeg bruger maskinen to gange om ugen, estimerede jeg følgende tidspunkter for den tid, sensoren bruger i hver tilstand:

  • Dyb søvn: 604090 sekunder (~ 1 uge)
  • Vågn op: 720 sekunder (12 minutter)
  • Wifi aktiveret: 10 sekunder

Ud fra disse tal kan vi estimere, hvor længe batteriet holder. Jeg brugte denne praktiske lommeregner til at få et gennemsnitligt strømforbrug på 0,2mA. Estimeret batterilevetid er 201 dage eller cirka 6 måneder! I virkeligheden har jeg fundet ud af, at enheden holder op med at fungere efter cirka 2 måneder, så der kan være nogle fejl i målinger eller batteriets kapacitet.

Trin 4: Måling af batteriniveau

Måling af batteriniveau
Måling af batteriniveau
Måling af batteriniveau
Måling af batteriniveau

Jeg tænkte, at det ville være rart, hvis enheden kunne fortælle mig, hvornår batteriet er ved at være lavt, så jeg ved, hvornår jeg skal oplade det. For at måle dette skal vi måle batteriets spænding. Batteriet har et spændingsområde på 4,3V - 2,2V (minimumspændingen for ESP32). Desværre er spændingsområdet for ADC-benene i ESP32 0-3.3V. Det betyder, at vi skal reducere batteriets spænding fra maksimum 4,3 til 3,3 for at undgå overbelastning af ADC. Dette er muligt med en spændingsdeler. Bare led to modstande med de passende værdier fra batteriet til jord og mål spændingen i midten.

Desværre vil et simpelt spændingsdelerkredsløb dræne strøm fra batteriet, selv når spændingen ikke måles. Du kan afbøde dette ved at bruge modstande med høj værdi, men den negative side er, at ADC muligvis ikke er i stand til at trække nok strøm til at foretage en nøjagtig måling. Jeg besluttede at bruge modstande med værdier på 100kΩ og 330kΩ, som vil falde 4,3V til 3,3V i henhold til denne spændingsdelerformel. I betragtning af en total modstand på 430kΩ, ville vi forvente en strømstrækning på 11,6uA (ved hjælp af Ohms lov). I betragtning af vores nuværende dyb søvnforbrug er 144uA, er det en rimelig betydelig stigning.

Da vi kun vil måle batterispændingen en gang lige før vi sender en meddelelse, er det fornuftigt at slukke for spændingsdelerkredsløbet i den tid, hvor vi ikke måler noget. Heldigvis kan vi gøre dette med et par transistorer forbundet til en af GPIO -benene. Jeg brugte kredsløbet i dette stackexchange -svar. Du kan se mig teste kredsløbet med en Arduino og et brødbræt på billedet ovenfor (bemærk der er en fejl i kredsløbet, hvilket er grunden til at jeg måler en højere spænding end forventet).

Med ovenstående kredsløb på plads, bruger jeg følgende pseudokode til at opnå en batteriprocentværdi:

batteri_procent ():

# aktiver batterispændingskredsløb gpio_set_level (BATTERY_EN_PIN, HIGH) # Batteriniveau returneres som et helt tal mellem 0 og 4095 adc_value = adc1_get_value (ADC_PIN) # aktiver batterispændingskredsløb gpio_set_level (BATTERY_EN_PIN, LOW) float adc_95 divider bruger 100k/330k ohm modstande # 4.3V -> 3.223, 2.4 -> 1.842 forventet_max = 4,3*330/(100+330) forventet_min = 2,4*330/(100+330) batteri_niveau = (adc_spænding -forventet_min)/(forventet_maks. -forventet_min) returnere batteriniveau * 100,0

Trin 5: Gør det smukkere

Gør det smukkere
Gør det smukkere
Gør det smukkere
Gør det smukkere
Gør det smukkere
Gør det smukkere

Selvom brødbrætversionen fungerer fint, ville jeg lægge den i en pakke, der ville være pænere og mere pålidelig (ingen ledninger, der kan løsne eller kortslutte). Det lykkedes mig at finde den perfekte projektboks til mine behov, som var den rigtige størrelse, inkluderet et stiftbræt, monteringsgreb og skruer for at sætte det hele sammen. Det var også dødt billigt til under 2 £. Efter at have modtaget æsken var alt, hvad jeg skulle gøre, at lodde komponenterne på stiften.

Den måske vanskeligste del af dette var at montere alle batterispændingskredsløbskomponenterne på det lille rum ved siden af Lolin32. Heldigvis med en smule jiggery pokery og de passende forbindelser, der er foretaget med lodning, passer kredsløbet pænt ind. Da Wemos Lolin32 ikke har en pin til at afsløre den positive batteriterminal, var jeg også nødt til at lodde en ledning fra batteristikket til stiftkortet.

Jeg tilføjede også en LED, der blinker, når enheden har registreret bevægelse.

Trin 6: Efterbehandling

Image
Image
Efterbehandling
Efterbehandling
Efterbehandling
Efterbehandling

Jeg superlimede 4 6 mm x 4 mm neodymmagneter til bunden af æsken, som gør det muligt at klæbe sikkert til metalpladen i vaskemaskinen.

Projektboksen leveres allerede med et lille hul for at give adgang til kabler. Heldigvis kunne jeg placere ESP32 -kortet tæt på dette hul for at give adgang til mikro -USB -stikket. Efter at have forstørret hullet med en håndværkskniv, passede kablet perfekt, så det er let at oplade batteriet.

Hvis du er interesseret i nogen af detaljerne i dette projekt, er du velkommen til at efterlade en kommentar. Hvis du gerne vil se koden, kan du tjekke den på Github:

github.com/alexspurling/washingmachine

Anbefalede: