Përmbajtje:

Sensori i njoftimit të lavatriçes: 6 hapa (me fotografi)
Sensori i njoftimit të lavatriçes: 6 hapa (me fotografi)

Video: Sensori i njoftimit të lavatriçes: 6 hapa (me fotografi)

Video: Sensori i njoftimit të lavatriçes: 6 hapa (me fotografi)
Video: Friday Live Crochet Chat 349 - March 31, 2023 2024, Korrik
Anonim
Image
Image
Prototip
Prototip

Ky sensor i makinës larëse ulet në majë të lavatriçes sime dhe përdor një akselerometër për të zbuluar dridhjet nga makina. Kur ndjen se cikli i larjes ka përfunduar, më dërgon një njoftim në telefonin tim. Unë e ndërtova këtë sepse vetë makina nuk lëshon më bip kur të ketë mbaruar dhe unë isha lodhur duke harruar të nxjerr rrobat.

Kodi mund të gjendet këtu:

Lista e plotë e pjesëve:

  • WEMOS LOLIN32
  • Breadboard me madhësi gjysmë (për prototipim)
  • Kutia e Projektit ABS me Bord Matrix 59x88x30mm
  • Sparkfun LIS3DH - Shpërthimi i Përshpejtuesit të Boshtit të Tresë
  • 1x ZVP3306A P-channel MOSFET, 160 mA, 60 V, 3-pin E-Line
  • 1x Transistor BC549B TO92 30V NPN
  • 5mm LED Blu 68 mcd
  • 1x 100k 0.125W CF Rezistencë
  • 1x 330k 0.125W CF Rezistencë
  • 2x 10k 0.250W CF Rezistencë
  • 1x 100 Rezistencë CF 0.250W
  • Kabllo Femërore JST PH-Style 2-Pin (14cm)
  • 4x M1219-8 Magnet Disk Neodymium 6x4mm

Hapi 1: Prototipi

Prototip
Prototip

Pajisja përdor një mikrokontrollues ESP32. Në këtë rast unë jam duke përdorur bordin e zhvillimit Lolin32 nga Wemos të cilin mund ta blini në AliExpress për rreth 7 dollarë. Përshpejtuesi është Sparkfun LIS3DH - është e rëndësishme që përshpejtuesi të jetë dixhital sesa analog, siç do ta shihni më vonë. Baterinë e mora nga një grup i vjetër altoparlantësh bluetooth.

ESP32 lidhet me përshpejtuesin nëpërmjet I2C. Versioni i parë i kodit thjesht anketoi tre akset e nxitimit (x, y dhe z) për vlerën e matur të nxitimit çdo 20ms. Vendosja e prototipit të dërrasës së bukës në lavatriçe dhe prodhova grafikun e mësipërm i cili tregon majat e nxitimit gjatë fazave të ndryshme të ciklit të larjes. Ato majat ku nxitimi absolut ishte më i madh se 125mg (125 mijë të gravitetit normal) tregohen me ngjyrë portokalli. Ne duam të zbulojmë këto periudha dhe t'i përdorim ato për të përcaktuar statusin e makinës larëse.

Si të përcaktoni nëse makina është ndezur ose fikur?

Një nga qëllimet e ndërtimit të kësaj pajisjeje ishte se do të ishte plotësisht pasive. Dmth asnjë buton nuk duhet të shtypet; thjesht do të funksiononte. Gjithashtu duhet të jetë me fuqi shumë të ulët pasi nuk ishte vërtet e mundur të zgjasësh kabllot e energjisë në lavatriçe në rastin tim.

Për fat të mirë, përshpejtuesi LIS3DH ka një veçori ku mund të shkaktojë një ndërprerje kur nxitimi tejkalon një prag të caktuar (vini re, kjo kërkon përdorimin e filtrit të integruar të përshpejtuesit me shpejtësi të lartë-shihni kodin në Github për detaje) dhe ESP32 mund të zgjohet nga mënyra e gjumit të thellë përmes një ndërprerjeje. Ne mund ta përdorim këtë kombinim të veçorive për të krijuar një mënyrë gjumi me fuqi shumë të ulët, e cila shkaktohet nga lëvizja.

Pseudo kodi do të duket diçka si kjo:

# Zgjohuni pajisjen

notification_threshold = 240 counter = 10 accelerometer.set_threshold (96) # 96mg ndërsa counter> 0: if accelerometer.above_threshold (): counter ++ else: counter-- if counter> notification_threshold: # cikli i fundit i rrotullimit zbuloi gjumë (1 sekondë) akcelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Ju mund të shihni këtu që ne përdorim një numërues për të zbuluar sa sekonda nxitimi kemi zbuluar gjatë periudhës aktuale të zgjimit. Nëse numëruesi bie në zero atëherë mund ta vendosim pajisjen përsëri në gjumë. Nëse numëruesi arrin 240 (pragu i njoftimit) atëherë kjo do të thotë që ne kemi zbuluar 4 minuta dridhje. Ne mund të ndryshojmë vlerat e këtyre pragjeve për t'u siguruar që pajisja të zbulojë saktë ciklin përfundimtar të rrotullimit. Sapo të zbulohet dridhje e mjaftueshme, ne thjesht mund të flemë për 5 minuta të tjera (në rastin tim kjo është sa kohë duhet derisa larja të përfundojë) para se të dërgoni një njoftim.

Hapi 2: Dërgimi i një Njoftimi përmes Blynk

Dërgimi i një njoftimi përmes Blynk
Dërgimi i një njoftimi përmes Blynk

Blynk është një shërbim i krijuar për të lejuar ndërveprimin me pajisjet IoT me një aplikacion në telefonin tuaj. Në këtë rast, unë jam duke përdorur API të njoftimit push i cili nxitet nga një HTTP POST i thjeshtë në API Blynk.

Hapi 3: Matja e Konsumit të Energjisë dhe Vlerësimi i Jetëgjatësisë së Baterisë

Matja e konsumit të energjisë dhe vlerësimi i jetëgjatësisë së baterisë
Matja e konsumit të energjisë dhe vlerësimi i jetëgjatësisë së baterisë

Çipi ESP32 reklamohet se ka konsum shumë të ulët të energjisë kur jeni në gjumë të thellë (aq i ulët sa 5uA). Fatkeqësisht, qarku në shumë borde të ndryshme zhvillimi siguron karakteristika shumë të ndryshme të konsumit të energjisë - jo të gjitha bordet dev ESP32 janë krijuar të barabartë. Për shembull, kur fillova për herë të parë këtë projekt, kam përdorur Sparkfun ESP32 Thing i cili do të konsumonte rreth 1mA energji në modalitetin e gjumit të thellë (edhe pasi të keni çaktivizuar LED -in e energjisë). Që atëherë unë kam qenë duke përdorur Lolin32 (jo versionin Lite) në të cilin kam matur një rrymë prej 144.5uA ndërsa jam në gjumë të thellë. Për të bërë këtë matje, thjesht lidhja një multimetër në seri me baterinë dhe pajisjen. Kjo sigurisht që është më e lehtë për tu bërë gjatë prototipimit me një dërrasë buke. Unë gjithashtu mata përdorimin aktual kur pajisja është zgjuar:

  • Gjumë i thellë: 144.5uA
  • Zgjohuni: 45mA
  • Wi -Fi i aktivizuar: 150mA

Duke supozuar se e përdor pajisjen dy herë në javë, vlerësova afatet e mëposhtme për kohën që kalon sensori në secilën gjendje:

  • Gjumë i thellë: 604090 sekonda (~ 1 javë)
  • Zgjohuni: 720 sekonda (12 minuta)
  • Wi -Fi i aktivizuar: 10 sekonda

Nga këto shifra, ne mund të vlerësojmë se sa kohë do të zgjasë bateria. Kam përdorur këtë llogaritës të dobishëm për të marrë një konsum mesatar të energjisë prej 0.2mA. Jetëgjatësia e vlerësuar e baterisë është 201 ditë ose rreth 6 muaj! Në realitet kam zbuluar se pajisja do të ndalojë së punuari pas rreth 2 muajsh kështu që mund të ketë disa gabime në matjet ose kapacitetin e baterisë.

Hapi 4: Matja e Nivelit të Baterisë

Matja e Nivelit të Baterisë
Matja e Nivelit të Baterisë
Matja e Nivelit të Baterisë
Matja e Nivelit të Baterisë

Mendova se do të ishte mirë nëse pajisja do të më tregonte kur bateria po mbaron, kështu që unë e di kur ta ngarkoj. Për të matur këtë ne duhet të matim tensionin e baterisë. Bateria ka një gamë të tensionit prej 4.3V - 2.2V (tensioni minimal i funksionimit të ESP32). Fatkeqësisht, diapazoni i tensionit të kunjave ADC të ESP32 është 0-3.3V. Kjo do të thotë, ne duhet të ulim tensionin e baterisë nga maksimumi i tij prej 4.3 në 3.3 për të shmangur mbingarkesën e ADC. Kjo është e mundur të bëhet me një ndarës të tensionit. Thjesht lidhni dy rezistorë me vlerat e duhura nga bateria në tokë dhe matni tensionin në mes.

Fatkeqësisht, një qark i thjeshtë i ndarjes së tensionit do të shkarkojë fuqinë nga bateria edhe kur tensioni nuk po matet. Ju mund ta zbutni këtë duke përdorur rezistorë me vlerë të lartë, por ana e poshtme është se ADC mund të mos jetë në gjendje të tërheqë rrymë të mjaftueshme për të bërë një matje të saktë. Vendosa të përdor rezistenca me vlera 100kΩ dhe 330kΩ të cilat do të bien 4.3V në 3.3V sipas formulës së ndarësit të tensionit. Duke pasur parasysh një rezistencë totale prej 430kΩ, ne do të prisnim një tërheqje aktuale prej 11.6uA (duke përdorur ligjin e Ohmit). Duke pasur parasysh gjumin tonë të thellë përdorimi aktual është 144uA, është një rritje e arsyeshme e konsiderueshme.

Meqenëse ne duam të matim tensionin e baterisë vetëm një herë para se të dërgojmë një njoftim, ka kuptim të fikim qarkun e ndarjes së tensionit gjatë kohës kur nuk matim asgjë. Për fat të mirë, ne mund ta bëjmë këtë me disa transistorë të lidhur me një nga kunjat GPIO. Kam përdorur qarkun e dhënë në këtë përgjigje të shkëmbimit të stakut. Ju mund të më shihni duke testuar qarkun me një Arduino dhe një dërrasë buke në foton e mësipërme (vini re se ka një gabim në qark i cili është arsyeja që unë jam duke matur një tension më të lartë se sa pritej).

Me qarkun e mësipërm në vend, unë përdor pseudokodin e mëposhtëm për të marrë një vlerë të përqindjes së baterisë:

përqindja e baterisë ():

# aktivizoni qarkun e tensionit të baterisë gpio_set_level (BATTERY_EN_PIN, HIGH) # Niveli i baterisë kthehet si një numër i plotë midis 0 dhe 4095 adc_value = adc1_get_value (ADC_PIN) # aktivizoni qarkun e tensionit të baterisë gpio_set_level (BATTERY_EN_PIN, LOW) float adc_voltage = adc_voltage ndarësi përdor rezistenca 100k/330k ohm # 4.3V -> 3.223, 2.4 -> 1.842 expect_max = 4.3*330/(100+330) expect_min = 2.4*330/(100+330) battery_level = (adc_voltage -expect_min)/(expect_max -parashikuar_min) ktheni nivelin e baterisë * 100.0

Hapi 5: Duke e bërë atë më të bukur

Duke e bërë më bukur
Duke e bërë më bukur
Duke e bërë më bukur
Duke e bërë më bukur
Duke e bërë më bukur
Duke e bërë më bukur

Ndërsa versioni i tabelës së bukës funksionon mirë, doja ta fusja në një paketë që do të ishte më e pastër dhe më e besueshme (pa tela që mund të bien ose shkurtohen). Arrita të gjej kutinë e përsosur të projektit për nevojat e mia e cila ishte madhësia e duhur, e përfshirë me një dërrasë me kunja, mbajtëse montimi dhe vida për t'i bashkuar të gjitha. Gjithashtu, ishte i lirë në më pak se 2. Pas marrjes së kutisë, gjithçka që duhej të bëja ishte bashkimi i përbërësve në tabelën e kunjit.

Ndoshta pjesa më e ndërlikuar e kësaj ishte vendosja e të gjithë përbërësve të qarkut të tensionit të baterisë në hapësirën e vogël pranë Lolin32. Për fat të mirë me një pokeri të zhurmshme pak dhe lidhjet e duhura të bëra me saldim qarku përshtatet mirë. Gjithashtu, meqenëse Wemos Lolin32 nuk ka një kunj për të ekspozuar terminalin pozitiv të baterisë, më duhej të lidhja një tel nga lidhësi i baterisë në bordin e kunjave.

Shtova gjithashtu një LED e cila ndizet kur pajisja zbulon lëvizjen.

Hapi 6: Përfundimi i Prekjeve

Image
Image
Prekjet përfundimtare
Prekjet përfundimtare
Prekjet përfundimtare
Prekjet përfundimtare

Unë ngjita super 4 magnete neodymium 6 mm x 4 mm në bazën e kutisë, gjë që e lejon atë të ngjitet mirë në pjesën e sipërme metalike të makinës larëse.

Kutia e projektit tashmë vjen me një vrimë të vogël për të siguruar qasje për kabllot. Për fat të mirë, unë kam qenë në gjendje të pozicionoj bordin ESP32 afër kësaj vrime për të dhënë qasje në lidhësin mikro USB. Pas zgjerimit të vrimës me një thikë artizanale, kablli përshtatet në mënyrë perfekte për të lejuar ngarkimin e lehtë të baterisë.

Nëse jeni të interesuar për ndonjë nga detajet e këtij projekti, ju lutemi mos ngurroni të lini një koment. Nëse dëshironi të shihni kodin, ju lutemi shikoni atë në Github:

github.com/alexspurling/washingmachine

Recommended: