Sisukord:

Pesumasina märguandur: 6 sammu (piltidega)
Pesumasina märguandur: 6 sammu (piltidega)

Video: Pesumasina märguandur: 6 sammu (piltidega)

Video: Pesumasina märguandur: 6 sammu (piltidega)
Video: Монтаж канализации своими руками. Ошибки и решения. #24 2024, November
Anonim
Image
Image
Prototüüp
Prototüüp

See pesumasina andur asub minu pesumasina peal ja kasutab kiirendusmõõturit masina vibratsiooni tuvastamiseks. Kui ta tunneb, et pesutsükkel on lõppenud, saadab see mulle telefoni märguande. Ehitasin selle sellepärast, et masin ise ei piiksu enam, kui see on valmis ja olin väsinud pesu välja unustamisest.

Koodi leiate siit:

Täielik osade loend:

  • WEMOS LOLIN32
  • Poole suurusega leivaplaat (prototüüpimiseks)
  • ABS projektikarp koos maatriksplaadiga 59x88x30mm
  • Sparkfun LIS3DH - Kolmeteljeline kiirendusmõõtur
  • 1x ZVP3306A P-kanaliga MOSFET, 160 mA, 60 V, 3-pin E-Line
  • 1x BC549B TO92 30V NPN transistor
  • 5 mm LED sinine 68 mcd
  • 1x 100k 0,125W CF takisti
  • 1x 330k 0,125 W CF takisti
  • 2x 10k 0,250W CF takisti
  • 1x 100 0,250W CF takisti
  • 2-kontaktiline naissoost JST PH-kaabel (14 cm)
  • 4x M1219-8 neodüümkettmagnet 6x4mm

Samm: prototüüp

Prototüüp
Prototüüp

Seade kasutab ESP32 mikrokontrollerit. Sel juhul kasutan Wemose arendusplaati Lolin32, mida saate AliExpressist osta umbes 7 dollari eest. Kiirendusmõõtur on Sparkfun LIS3DH - oluline on, et kiirendusmõõtur oleks pigem digitaalne kui analoog, nagu hiljem näete. Aku võtsin vanast bluetooth kõlarite komplektist.

ESP32 ühendub kiirendusmõõturiga I2C kaudu. Koodi esimene versioon küsitles kolme kiirendustelge (x, y ja z) mõõdetud kiirendusväärtuse kohta iga 20 ms tagant. Pannes leivalaua prototüübi pesumasinasse ja koostasin ülaltoodud graafiku, mis näitab kiirenduspiike pesutsükli erinevates faasides. Need piigid, mille absoluutne kiirendus oli suurem kui 125 mg (125 tuhandikku normaalgravitatsioonist), on näidatud oranžina. Tahame need perioodid tuvastada ja nende abil määrata pesumasina oleku.

Kuidas teha kindlaks, kas masin on sisse või välja lülitatud?

Selle seadme ehitamise üks eesmärke oli see, et see oleks täiesti passiivne. S.t. ühtegi nuppu ei pea vajutama; see lihtsalt töötaks. See peaks olema ka väga väikese võimsusega, kuna minu puhul ei olnud tõesti võimalik toitekaableid pesumasinale pikendada.

Õnneks on LIS3DH kiirendusmõõturil funktsioon, mis võib käivitada katkestuse, kui kiirendus ületab etteantud läve (pange tähele, selleks on vaja kasutada kiirendusmõõturi sisseehitatud kõrgpääsfiltrit-vt üksikasju Githubi koodist) ja ESP32 saab äratada katkestuse kaudu sügava unerežiimist üles. Selle funktsioonide kombinatsiooni abil saame luua väga väikese energiatarbega unerežiimi, mille käivitab liikumine.

Pseudokood näeks välja umbes selline:

# Seade ärkab

teate_lävi = 240 loendur = 10 kiirendusmõõtur.set_lävi (96) # 96mg samas kui loendur> 0: kui kiirendusmõõtur.above_threshold (): loendur ++ muu: loendur- kui loendur> teate_lävi: # lõplik tsentrifuugimistsükkel tuvastas unerežiimi (1 sekund) kiirendusmõõtur.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Siin näete, et kasutame loendurit, et tuvastada, mitu sekundit kiirendust oleme praeguse äratusperioodi jooksul tuvastanud. Kui loendur langeb nulli, saame seadme uuesti magama panna. Kui loendur jõuab 240 -ni (teavituslävi), tähendab see, et oleme tuvastanud 4 -minutilise vibratsiooni. Saame nende künniste väärtusi muuta, veendumaks, et seade tuvastab lõpliku tsentrifuugimistsükli õigesti. Kui piisav vibratsioon on tuvastatud, võime enne teatise saatmist lihtsalt veel 5 minutit magada (minu puhul on see nii kaua aega, kuni pesemine tegelikult lõpeb).

Samm: märguande saatmine Blynk'i kaudu

Teate saatmine Blynk'i kaudu
Teate saatmine Blynk'i kaudu

Blynk on teenus, mis on loodud selleks, et võimaldada suhtlemist IoT -seadmetega teie telefoni rakendusega. Sel juhul kasutan tõukemärguannete API -d, mille käivitab lihtne HTTP POST Blynk API -le.

3. samm: energiatarbimise mõõtmine ja aku eluea hindamine

Energiatarbimise mõõtmine ja aku eluea hindamine
Energiatarbimise mõõtmine ja aku eluea hindamine

ESP32 kiipi reklaamitakse, et see tarbib sügavas unes väga madalat energiatarbimist (kuni 5 uA). Kahjuks pakuvad paljude erinevate arendusplaatide vooluahelad väga erinevaid energiatarbimisomadusi - mitte kõik ESP32 arendusplaadid pole võrdsed. Näiteks selle projekti esmakordsel käivitamisel kasutasin Sparkfun ESP32 Thing'i, mis tarbiks sügavas unerežiimis (isegi pärast toite LED -i väljalülitamist) umbes 1mA energiat. Sellest ajast alates olen kasutanud Lolin32 (mitte Lite versiooni), millel mõõtsin sügava unerežiimi ajal voolu 144,5uA. Selle mõõtmise tegemiseks ühendasin lihtsalt multimeetri aku ja seadmega järjestikku. Seda on kindlasti lihtsam teha leivalauaga prototüüpimise ajal. Mõõtsin ka praegust kasutamist, kui seade on ärkvel:

  • Sügav uni: 144,5 uA
  • Ärkamine: 45 mA
  • Wifi lubatud: 150 mA

Eeldades, et kasutan masinat kaks korda nädalas, hindasin anduri igas riigis veedetud aja jaoks järgmisi ajastusi:

  • Sügav uni: 604090 sekundit (~ 1 nädal)
  • Ärkvel: 720 sekundit (12 minutit)
  • Wifi lubatud: 10 sekundit

Nende arvude põhjal saame hinnata, kui kaua aku kestab. Kasutasin seda käepärast kalkulaatorit, et saada keskmine energiatarve 0,2 mA. Aku eeldatav eluiga on 201 päeva või umbes 6 kuud! Tegelikult leidsin, et seade lakkab töötamast umbes 2 kuu pärast, nii et mõõtmistes või aku mahutavuses võib esineda mõningaid vigu.

4. samm: aku taseme mõõtmine

Aku taseme mõõtmine
Aku taseme mõõtmine
Aku taseme mõõtmine
Aku taseme mõõtmine

Mõtlesin, et oleks tore, kui seade saaks mulle teada, kui aku hakkab tühjaks saama, nii et ma tean, millal seda laadida. Selle mõõtmiseks peame mõõtma aku pinget. Aku pingevahemik on 4,3 V - 2,2 V (ESP32 minimaalne tööpinge). Kahjuks on ESP32 ADC-tihvtide pingevahemik 0–3,3 V. See tähendab, et peame vähendama aku pinget maksimaalselt 4,3 -lt 3,3 -le, et vältida ADC ülekoormamist. Seda on võimalik teha pingejaguriga. Ühendage lihtsalt kaks vastavate väärtustega takistit akust maandusse ja mõõtke pinge keskel.

Kahjuks tühjendab lihtne pingejaotusahel patarei toite isegi siis, kui pinget ei mõõdeta. Saate seda leevendada kõrge väärtusega takistite abil, kuid negatiivne külg on see, et ADC ei pruugi täpse mõõtmise tegemiseks piisavalt voolu võtta. Otsustasin kasutada takistite väärtusi 100kΩ ja 330kΩ, mis langevad vastavalt selle pingejaguri valemile 4,3 V kuni 3,3 V. Arvestades kogutakistust 430kΩ, ootaksime voolu 11,6uA (kasutades Ohmi seadust). Arvestades meie sügava une praegust kasutamist 144uA, on see mõistlikult märkimisväärne tõus.

Kuna me tahame aku pinget mõõta vaid üks kord vahetult enne teate saatmist, on mõttekas lülitada pingejaotusahel välja ajal, mil me midagi ei mõõda. Õnneks saame seda teha mõne transistoriga, mis on ühendatud ühe GPIO kontaktiga. Kasutasin selles stackexchange vastuses toodud vooluringi. Näete mind ülaltoodud fotol vooluringi katsetamas Arduino ja leivalauaga (pange tähele, et vooluringis on viga, mis on põhjus, miks ma mõõdan oodatust suuremat pinget).

Kui ülaltoodud skeem on paigas, kasutan aku protsendi väärtuse saamiseks järgmist pseudokoodi:

aku_protsent ():

# lubada aku pingeahel gpio_set_level (BATTERY_EN_PIN, HIGH) # Aku tase tagastatakse täisarvuna vahemikus 0 kuni 4095 jagaja kasutab 100k/330k oomi takistit # 4.3V -> 3.223, 2.4 -> 1.842 oodatav_max = 4.3*330/(100+330) oodatav_min = 2.4*330/(100+330) aku_tase = (adc_voltage -oodatud_min)/(oodatav_max -ootus_min) tagastada aku_taset * 100.0

Samm: muutke see ilusamaks

Ilusamaks muutmine
Ilusamaks muutmine
Ilusamaks muutmine
Ilusamaks muutmine
Ilusamaks muutmine
Ilusamaks muutmine

Kuigi leivaplaadi versioon töötab hästi, tahtsin selle panna pakendisse, mis oleks korralikum ja usaldusväärsem (ilma juhtmeteta, mis võivad lahti tulla või lühikeseks jääda). Mul õnnestus leida oma vajadustele ideaalne projektikarp, mis oli õige suurusega, sisaldas tihvtplaati, kinnitusaluseid ja kruvisid, et see kõik kokku panna. Lisaks oli see surnud odav, alla 2 naela. Pärast karbi kättesaamist ei jäänud mul muud üle, kui joota komponendid tihvtplaadile.

Selle kõige keerulisem osa oli võib -olla kõigi aku pingeahela komponentide paigaldamine väikesele ruumile Lolin32 kõrval. Õnneks natuke jiggery pokkeriga ja sobivate jootetiga tehtud ühendustega sobib vooluring kenasti sisse. Samuti, kuna Wemos Lolin32 -l pole nööpnõela, mis paljastaks aku positiivse klemmi, pidin ma jootma juhtme aku pistikust pistikuplaadile.

Lisasin ka LED, mis vilgub, kui seade on liikumist tuvastanud.

6. samm: viimistlus

Image
Image
Viimistlus
Viimistlus
Viimistlus
Viimistlus

Ülimalt liimisin karbi alusele 4 6 mm x 4 mm neodüümmagnetit, mis võimaldab sellel kindlalt kleepuda pesumasina metallpinna külge.

Projektikarbis on juba väike auk, mis tagab kaablitele juurdepääsu. Õnneks suutsin paigutada ESP32 plaadi selle augu lähedale, et anda juurdepääs mikro -USB -pistikule. Pärast ava suurendamist käsitöönoaga sobis kaabel ideaalselt, et oleks lihtne akut laadida.

Kui olete huvitatud selle projekti mis tahes üksikasjadest, jätke julgelt kommentaar. Kui soovite koodi näha, vaadake seda Githubis:

github.com/alexspurling/washingmachine

Soovitan: