Turinys:

Skalbimo mašinos pranešimo jutiklis: 6 žingsniai (su nuotraukomis)
Skalbimo mašinos pranešimo jutiklis: 6 žingsniai (su nuotraukomis)

Video: Skalbimo mašinos pranešimo jutiklis: 6 žingsniai (su nuotraukomis)

Video: Skalbimo mašinos pranešimo jutiklis: 6 žingsniai (su nuotraukomis)
Video: ⚡ Купить или забить? 🤔 Ищем достоинства и показываем недостатки в Opel Insignia. 2024, Liepa
Anonim
Image
Image
Prototipas
Prototipas

Šis skalbimo mašinos jutiklis yra ant mano skalbimo mašinos ir naudoja akselerometrą, kad aptiktų mašinos vibraciją. Pajutęs, kad skalbimo ciklas baigtas, jis siunčia man pranešimą į mano telefoną. Aš tai sukūriau, nes pati mašina nebepypsi, kai ji baigiama, ir aš pavargau pamiršti išimti skalbinius.

Kodą rasite čia:

Visas dalių sąrašas:

  • WEMOS LOLIN32
  • Pusės dydžio duonos lenta (prototipų kūrimui)
  • ABS projekto dėžutė su matricos lenta 59x88x30mm
  • „Sparkfun LIS3DH“- trijų ašių pagreičio matuoklis
  • 1x ZVP3306A P-kanalų MOSFET, 160 mA, 60 V, 3 kontaktų E-linija
  • 1x BC549B TO92 30V NPN tranzistorius
  • 5 mm LED mėlyna 68 mcd
  • 1x 100k 0,125 W CF rezistorius
  • 1x 330k 0,125 W CF rezistorius
  • 2x 10k 0,250W CF rezistorius
  • 1x 100 0.250W CF rezistorius
  • 2 kontaktų moteriškas JST PH tipo kabelis (14 cm)
  • 4x M1219-8 neodimio disko magnetas 6x4mm

1 žingsnis: prototipas

Prototipas
Prototipas

Prietaisas naudoja ESP32 mikrovaldiklį. Šiuo atveju aš naudoju „Wemos“„Lolin32“kūrimo lentą, kurią galite nusipirkti „AliExpress“už maždaug 7 USD. Akselerometras yra „Sparkfun LIS3DH“- svarbu, kad akselerometras būtų skaitmeninis, o ne analoginis, kaip pamatysite vėliau. Bateriją paėmiau iš seno „Bluetooth“garsiakalbių komplekto.

ESP32 jungiasi prie akselerometro per I2C. Pirmoji kodo versija tiesiog apklausė tris pagreičio ašis (x, y ir z) pagal išmatuotą pagreičio vertę kas 20 ms. Padėjęs duonos lentos prototipą ant skalbimo mašinos, aš sukūriau aukščiau pateiktą grafiką, kuriame pavaizduotos pagreičio smailės įvairiais skalbimo ciklo etapais. Tos smailės, kurių absoliutus pagreitis buvo didesnis nei 125 mg (125 tūkst. Norime aptikti šiuos laikotarpius ir naudoti juos skalbimo mašinos būsenai nustatyti.

Kaip nustatyti, ar mašina įjungta, ar išjungta?

Vienas iš šio įrenginio kūrimo tikslų buvo, kad jis būtų visiškai pasyvus. T.y. nereikia spausti jokių mygtukų; tai tik veiktų. Tai taip pat turėtų būti labai mažos galios, nes mano atveju tikrai nebuvo įmanoma išplėsti maitinimo kabelių prie skalbimo mašinos.

Laimei, LIS3DH pagreičio matuoklis turi funkciją, kuri gali sukelti pertraukimą, kai pagreitis viršija nurodytą slenkstį (atkreipkite dėmesį, tam reikia naudoti akselerometro įmontuotą aukšto dažnio filtrą-išsamiau žr. „Github“kodą), o ESP32 galima pažadinti išjungti iš gilaus miego režimo per pertrauką. Mes galime naudoti šį funkcijų derinį, kad sukurtume labai mažos galios miego režimą, kurį sukelia judesys.

Pseudo kodas atrodytų maždaug taip:

# Įrenginys atsibunda

message_threshold = 240 skaitiklis = 10 akselerometras.set_threshold (96) # 96mg, o skaitiklis> 0: jei akselerometras.above_threshold (): skaitiklis ++ dar vienas: skaitiklis- jei skaitiklis> pranešimo_slenkstis: # paskutinis gręžimo ciklas aptiko miego režimą (1 sekundė) akselerometras.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Čia galite pamatyti, kad mes naudojame skaitiklį, kad nustatytume, kiek pagreičio sekundžių aptikome per dabartinį pažadinimo laikotarpį. Jei skaitiklis nukris iki nulio, galime vėl įjungti prietaisą. Jei skaitiklis pasiekia 240 (pranešimo slenkstį), tai reiškia, kad aptikome 4 minučių vibraciją. Mes galime pataisyti šių slenksčių reikšmes, kad įsitikintume, jog įrenginys teisingai aptinka galutinį gręžimo ciklą. Nustačius pakankamą vibraciją, prieš išsiunčiant pranešimą galime tiesiog pamiegoti dar 5 minutes (mano atveju tai yra kiek laiko užtrunka, kol skalbimas iš tikrųjų baigiamas).

2 veiksmas: pranešimo siuntimas per „Blynk“

Pranešimo siuntimas per „Blynk“
Pranešimo siuntimas per „Blynk“

„Blynk“yra paslauga, skirta leisti sąveikauti su daiktų interneto įrenginiais naudojant programą jūsų telefone. Šiuo atveju aš naudoju tiesioginio pranešimo API, kurią suaktyvina paprastas HTTP POST į „Blynk“API.

3 žingsnis: energijos suvartojimo matavimas ir baterijos veikimo laiko įvertinimas

Energijos suvartojimo matavimas ir akumuliatoriaus veikimo laiko įvertinimas
Energijos suvartojimo matavimas ir akumuliatoriaus veikimo laiko įvertinimas

ESP32 mikroschema reklamuojama kaip labai maža energijos sąnaudos esant giliam miegui (iki 5uA). Deja, daugelio skirtingų kūrimo plokščių grandinės suteikia labai skirtingas energijos suvartojimo charakteristikas - ne visos ESP32 dev plokštės yra vienodos. Pavyzdžiui, kai pirmą kartą pradėjau šį projektą, naudojau „Sparkfun ESP32 Thing“, kuris gilaus miego režimu sunaudotų apie 1 mA energijos (net išjungus maitinimo šviesos diodą). Nuo to laiko aš naudoju „Lolin32“(ne „Lite“versiją), pagal kurią giliojo miego režimu išmatavau 144,5uA srovę. Norėdami atlikti šį matavimą, tiesiog prijungiau multimetrą nuosekliai su akumuliatoriumi ir įrenginiu. Tai tikrai lengviau padaryti prototipuojant naudojant duonos lentą. Taip pat išmatavau dabartinį naudojimą, kai įrenginys yra budrus:

  • Gilus miegas: 144,5 uA
  • Pabudimas: 45 mA
  • „Wi -Fi“įgalinta: 150 mA

Darant prielaidą, kad mašiną naudoju du kartus per savaitę, aš įvertinau šiuos laiką, kurį jutiklis praleidžia kiekvienoje būsenoje:

  • Gilus miegas: 604090 sekundžių (~ 1 savaitė)
  • Pabudimas: 720 sekundžių (12 minučių)
  • „Wi -Fi“įgalintas: 10 sekundžių

Remdamiesi šiais skaičiais galime įvertinti, kiek laiko tarnaus akumuliatorius. Aš naudoju šį patogų skaičiuotuvą, kad gaučiau vidutinį energijos suvartojimą 0,2 mA. Numatomas baterijos veikimo laikas yra 201 diena arba maždaug 6 mėnesiai! Tiesą sakant, aš pastebėjau, kad prietaisas nustos veikti maždaug po 2 mėnesių, todėl gali būti matavimo klaidų ar akumuliatoriaus talpos.

4 žingsnis: akumuliatoriaus įkrovos lygio matavimas

Baterijos lygio matavimas
Baterijos lygio matavimas
Baterijos lygio matavimas
Baterijos lygio matavimas

Pagalvojau, kad būtų malonu, jei prietaisas man pasakytų, kada išsikrauna akumuliatorius, todėl žinau, kada jį įkrauti. Norėdami tai išmatuoti, turime išmatuoti akumuliatoriaus įtampą. Baterijos įtampos diapazonas yra 4,3–2,2 V (minimali ESP32 darbinė įtampa). Deja, ESP32 ADC kaiščių įtampos diapazonas yra 0–3,3 V. Tai reiškia, kad turime sumažinti akumuliatoriaus įtampą nuo maksimalios 4,3 iki 3,3, kad išvengtume ADC perkrovimo. Tai galima padaryti naudojant įtampos skirstytuvą. Tiesiog prijunkite du rezistorius su atitinkamomis vertėmis nuo akumuliatoriaus iki žemės ir išmatuokite įtampą viduryje.

Deja, paprasta įtampos skirstytuvo grandinė išeis iš akumuliatoriaus energijos net tada, kai įtampa nėra matuojama. Tai galite sušvelninti naudodami didelės vertės rezistorius, tačiau neigiama pusė yra ta, kad ADC gali nepajėgti pritraukti pakankamai srovės, kad būtų galima tiksliai išmatuoti. Aš nusprendžiau naudoti rezistorius, kurių vertės yra 100kΩ ir 330kΩ, kurie pagal šią įtampos skirstytuvo formulę sumažės nuo 4,3 V iki 3,3 V. Atsižvelgiant į bendrą 430 kΩ varžą, mes tikimės, kad srovė bus 11,6uA (naudojant Ohmo dėsnį). Atsižvelgiant į tai, kad mūsų gilaus miego srovė yra 144uA, tai yra pakankamai didelis padidėjimas.

Kadangi akumuliatoriaus įtampą norime išmatuoti tik vieną kartą prieš išsiunčiant pranešimą, prasminga išjungti įtampos skirstytuvo grandinę tuo metu, kai nieko nematuojame. Laimei, tai galime padaryti su keliais tranzistoriais, prijungtais prie vieno iš GPIO kaiščių. Aš naudoju grandinę, pateiktą šiame stackexchange atsakyme. Galite pamatyti, kaip aš bandau grandinę su „Arduino“ir duonos lenta aukščiau esančioje nuotraukoje (atkreipkite dėmesį, kad grandinėje yra klaida, dėl kurios matuoju didesnę įtampą, nei tikėtasi).

Turėdamas aukščiau pateiktą grandinę, naudoju šį pseudo kodą, kad gaučiau akumuliatoriaus procentinę vertę:

baterijos_procentas ():

# įjungti akumuliatoriaus įtampos grandinę gpio_set_level (BATTERY_EN_PIN, HIGH) # Akumuliatoriaus įkrovos lygis grąžinamas kaip sveikasis skaičius nuo 0 iki 4095 skirstytuvas naudoja 100k/330k omų rezistorius -laukta_min) grąžinti baterijos lygį * 100.0

5 žingsnis: padarykite jį gražesnį

Kad būtų gražiau
Kad būtų gražiau
Kad būtų gražiau
Kad būtų gražiau
Kad būtų gražiau
Kad būtų gražiau

Nors duonos lentos versija veikia gerai, norėjau ją sudėti į pakuotę, kuri būtų tvarkingesnė ir patikimesnė (be laidų, kurie gali atsilaisvinti ar sutrumpėti). Man pavyko rasti mano poreikiams tinkamiausią projekto dėžutę, kuri buvo tinkamo dydžio, įskaitant kaištinę plokštę, tvirtinimo laikiklius ir varžtus, kad visa tai sujungtų. Be to, jis buvo mirtinai pigus už mažiau nei 2 svarus. Gavęs dėžutę, man beliko lituoti komponentus ant kaiščio plokštės.

Galbūt sudėtingiausia buvo sumontuoti visus akumuliatoriaus įtampos grandinės komponentus į nedidelę erdvę šalia „Lolin32“. Laimei, šiek tiek pokštelėjus ir atitinkamai sujungus su litavimu, grandinė puikiai dera. Be to, kadangi „Wemos Lolin32“neturi kaiščio, kad būtų parodytas teigiamas akumuliatoriaus gnybtas, turėjau lituoti laidą nuo akumuliatoriaus jungties iki kaiščio plokštės.

Taip pat pridėjau šviesos diodą, kuris mirksi, kai prietaisas aptinka judesį.

6 žingsnis: Apdailos darbai

Image
Image
Apdailos darbai
Apdailos darbai
Apdailos darbai
Apdailos darbai

Aš labai priklijavau 4 6 mm x 4 mm neodimio magnetus prie dėžutės pagrindo, todėl jie gali tvirtai prilipti prie metalinės skalbyklės viršaus.

Projekto dėžutėje jau yra maža skylė, skirta kabeliams pasiekti. Laimei, galėjau pastatyti ESP32 plokštę arti šios skylės, kad galėčiau pasiekti mikro USB jungtį. Padidinus skylę amatų peiliu, kabelis puikiai tinka, kad būtų galima lengvai įkrauti akumuliatorių.

Jei jus domina bet kuri šio projekto informacija, nedvejodami palikite komentarą. Jei norite pamatyti kodą, patikrinkite jį „Github“:

github.com/alexspurling/washingmachine

Rekomenduojamas: