Satura rādītājs:

Veļas mazgājamās mašīnas paziņojuma sensors: 6 soļi (ar attēliem)
Veļas mazgājamās mašīnas paziņojuma sensors: 6 soļi (ar attēliem)

Video: Veļas mazgājamās mašīnas paziņojuma sensors: 6 soļi (ar attēliem)

Video: Veļas mazgājamās mašīnas paziņojuma sensors: 6 soļi (ar attēliem)
Video: Joka pēc alfabēts / Funny Alphabet 2024, Novembris
Anonim
Image
Image
Prototips
Prototips

Šis veļas mazgājamās mašīnas sensors atrodas virs manas veļas mazgājamās mašīnas un izmanto akselerometru, lai noteiktu mašīnas vibrāciju. Kad tiek konstatēts, ka mazgāšanas cikls ir beidzies, tas man paziņo pa tālruni. Es to uzbūvēju, jo pati mašīna vairs nepīkst, kad tā ir pabeigta, un man bija apnicis aizmirst izņemt veļu.

Kods atrodams šeit:

Pilns detaļu saraksts:

  • WEMOS LOLIN32
  • Pusizmēra maizes dēlis (prototipēšanai)
  • ABS projekta kaste ar matricas dēli 59x88x30mm
  • Sparkfun LIS3DH - trīs asu akselerometra izlaušanās
  • 1x ZVP3306A P-kanālu MOSFET, 160 mA, 60 V, 3 kontaktu E-līnija
  • 1x BC549B TO92 30V NPN tranzistors
  • 5 mm LED zils 68 mcd
  • 1x 100k 0,125W CF rezistors
  • 1x 330k 0,125 W CF rezistors
  • 2x 10k 0,250W CF rezistors
  • 1x 100 0.250W CF rezistors
  • 2 kontaktu sieviešu JST PH stila kabelis (14 cm)
  • 4x M1219-8 neodīma diska magnēts 6x4mm

1. solis: prototips

Prototips
Prototips

Ierīce izmanto ESP32 mikrokontrolleru. Šajā gadījumā es izmantoju Wemos Lolin32 izstrādes paneli, kuru varat iegādāties vietnē AliExpress par aptuveni 7 USD. Akselerometrs ir Sparkfun LIS3DH - ir svarīgi, lai akselerometrs būtu digitāls, nevis analogs, kā redzēsit vēlāk. Akumulatoru, ko paņēmu no veca bluetooth skaļruņu komplekta.

ESP32 savienojas ar akselerometru, izmantojot I2C. Pirmā koda versija vienkārši aptaujāja trīs paātrinājuma asis (x, y un z) par izmērīto paātrinājuma vērtību ik pēc 20 ms. Novietojot maizes dēļa prototipu uz veļas mazgājamās mašīnas, es izveidoju iepriekš redzamo grafiku, kurā parādīti paātrinājuma maksimumi dažādās mazgāšanas cikla fāzēs. Tās virsotnes, kurās absolūtais paātrinājums bija lielāks par 125 mg (125 tūkstošdaļas normālā gravitācijas), ir parādītas oranžā krāsā. Mēs vēlamies noteikt šos periodus un izmantot tos, lai noteiktu veļas mazgājamās mašīnas statusu.

Kā noteikt, vai iekārta ir ieslēgta vai izslēgta?

Viens no šīs ierīces izveides mērķiem bija, lai tā būtu pilnīgi pasīva. T.i. neviena poga nav jānospiež; tas tikai izdotos. Tam vajadzētu būt arī ļoti mazai jaudai, jo manā gadījumā nebija īsti iespējams pagarināt strāvas kabeļus līdz veļas mašīnai.

Par laimi akselerometram LIS3DH ir funkcija, kas var izraisīt pārtraukumu, ja paātrinājums pārsniedz noteikto slieksni (ņemiet vērā, ka tam ir nepieciešams izmantot akselerometra iebūvēto augstfrekvences filtru-sīkāku informāciju skatiet vietnē Github), un ESP32 var pamodināt augšup no dziļā miega režīma, izmantojot pārtraukumu. Mēs varam izmantot šo funkciju kombināciju, lai izveidotu ļoti mazjaudas miega režīmu, ko aktivizē kustība.

Pseido kods izskatītos apmēram šādi:

# Ierīce pamostas

message_threshold = 240 counter = 10 akselerometrs.set_threshold (96) # 96mg, kamēr skaitītājs> 0: ja akselerometrs.above_threshold (): skaitītājs ++ cits: skaitītājs- ja skaitītājs> paziņojuma_ slieksnis: # galīgais centrifūgas cikls konstatēja miega režīmu (1 sekunde) akselerometrs.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Šeit jūs varat redzēt, ka mēs izmantojam skaitītāju, lai noteiktu, cik sekundes paātrinājuma esam konstatējuši pašreizējā modināšanas periodā. Ja skaitītājs nokrīt līdz nullei, mēs varam ierīci atkal iemidzināt. Ja skaitītājs sasniedz 240 (paziņojuma slieksnis), tas nozīmē, ka esam konstatējuši 4 minūšu vibrāciju. Mēs varam pielāgot šo sliekšņu vērtības, lai pārliecinātos, ka ierīce pareizi nosaka pēdējo centrifūgas ciklu. Kad ir konstatēta pietiekama vibrācija, mēs varam vienkārši gulēt vēl 5 minūtes (manā gadījumā tas ir tik ilgs laiks, līdz mazgāšana faktiski tiek pabeigta) pirms paziņojuma nosūtīšanas.

2. darbība. Paziņojuma sūtīšana, izmantojot Blynk

Paziņojuma sūtīšana, izmantojot Blynk
Paziņojuma sūtīšana, izmantojot Blynk

Blynk ir pakalpojums, kas paredzēts mijiedarbībai ar IoT ierīcēm, izmantojot tālruņa lietotni. Šajā gadījumā es izmantoju push paziņojumu API, kuru aktivizē vienkāršs HTTP POST uz Blynk API.

3. darbība. Enerģijas patēriņa mērīšana un akumulatora darbības laika novērtēšana

Enerģijas patēriņa mērīšana un akumulatora darbības laika novērtēšana
Enerģijas patēriņa mērīšana un akumulatora darbības laika novērtēšana

Tiek reklamēts, ka ESP32 mikroshēmai ir ļoti zems enerģijas patēriņš dziļā miegā (pat 5uA). Diemžēl daudzu dažādu izstrādes plates shēmas nodrošina ļoti atšķirīgus enerģijas patēriņa raksturlielumus - ne visas ESP32 izstrādātāju plates ir vienādas. Piemēram, kad es pirmo reizi uzsāku šo projektu, es izmantoju Sparkfun ESP32 lietu, kas dziļā miega režīmā patērētu aptuveni 1mA enerģijas (pat pēc barošanas gaismas diodes izslēgšanas). Kopš tā laika es izmantoju Lolin32 (nevis Lite versiju), ar kuru dziļā miega režīmā izmērīju strāvu 144,5uA. Lai veiktu šo mērījumu, es vienkārši savienoju multimetru virknē ar akumulatoru un ierīci. To noteikti ir vieglāk izdarīt, veidojot prototipus ar maizes dēli. Es arī izmērīju pašreizējo lietojumu, kad ierīce ir nomodā:

  • Dziļš miegs: 144,5uA
  • Pamodos: 45 mA
  • Wifi iespējots: 150 mA

Pieņemot, ka es izmantoju iekārtu divas reizes nedēļā, es novērtēju šādus laika periodus sensora pavadītajam laikam katrā stāvoklī:

  • Dziļš miegs: 604090 sekundes (~ 1 nedēļa)
  • Pamodos: 720 sekundes (12 minūtes)
  • Wifi iespējots: 10 sekundes

No šiem skaitļiem mēs varam noteikt, cik ilgi akumulators kalpos. Es izmantoju šo ērto kalkulatoru, lai iegūtu vidējo enerģijas patēriņu 0,2 mA. Paredzamais akumulatora darbības laiks ir 201 diena vai aptuveni 6 mēneši! Patiesībā es atklāju, ka ierīce pārstās darboties pēc aptuveni 2 mēnešiem, tāpēc var rasties kļūdas mērījumos vai akumulatora ietilpībā.

4. solis: akumulatora uzlādes līmeņa mērīšana

Akumulatora līmeņa mērīšana
Akumulatora līmeņa mērīšana
Akumulatora līmeņa mērīšana
Akumulatora līmeņa mērīšana

Es domāju, ka būtu jauki, ja ierīce varētu man pateikt, kad akumulators ir izlādējies, lai es zinātu, kad to uzlādēt. Lai to izmērītu, ir jāizmēra akumulatora spriegums. Akumulatora sprieguma diapazons ir 4,3 V - 2,2 V (ESP32 minimālais darba spriegums). Diemžēl ESP32 ADC tapu sprieguma diapazons ir 0-3,3 V. Tas nozīmē, ka mums ir jāsamazina akumulatora spriegums no maksimālā 4,3 līdz 3,3, lai izvairītos no ADC pārslodzes. To var izdarīt ar sprieguma dalītāju. Vienkārši savienojiet divus rezistorus ar atbilstošām vērtībām no akumulatora uz zemi un izmēriet spriegumu vidū.

Diemžēl vienkārša sprieguma dalītāja ķēde izlādēs enerģiju no akumulatora pat tad, ja spriegums netiek mērīts. To var mazināt, izmantojot augstas vērtības rezistorus, bet negatīvā puse ir tāda, ka ADC, iespējams, nevarēs iegūt pietiekami daudz strāvas, lai veiktu precīzu mērījumu. Es nolēmu izmantot rezistorus ar vērtībām 100kΩ un 330kΩ, kas saskaņā ar šo sprieguma dalītāja formulu samazināsies no 4.3V līdz 3.3V. Ņemot vērā kopējo pretestību 430 kΩ, mēs sagaidām, ka pašreizējais spriegums ir 11,6uA (izmantojot Oma likumu). Ņemot vērā mūsu dziļā miega pašreizējo izmantošanu, ir 144uA, tas ir samērā ievērojams pieaugums.

Tā kā mēs vēlamies izmērīt akumulatora spriegumu tikai vienu reizi tieši pirms paziņojuma nosūtīšanas, ir jēga izslēgt sprieguma dalītāja ķēdi laikā, kad mēs neko nemērām. Par laimi, mēs to varam izdarīt ar pāris tranzistoriem, kas savienoti ar vienu no GPIO tapām. Es izmantoju ķēdi, kas dota šajā apmaiņas atbildē. Jūs varat redzēt, kā es testēju ķēdi ar Arduino un maizes dēli iepriekš redzamajā fotoattēlā (ņemiet vērā, ka ķēdē ir kļūda, kas ir iemesls, kāpēc es mēra augstāku spriegumu, nekā gaidīts).

Izmantojot iepriekš minēto shēmu, es izmantoju šādu pseidokodu, lai iegūtu akumulatora procentuālo vērtību:

Battery_percentage ():

# iespējot akumulatora sprieguma ķēdi gpio_set_level (BATTERY_EN_PIN, HIGH) # Akumulatora uzlādes līmenis tiek atgriezts kā vesels skaitlis no 0 līdz 4095 dalītājs izmanto 100k/330k omu rezistorus # 4.3V -> 3.223, 2.4 -> 1.842 paredzamais_max = 4.3*330/(100+330) paredzamais_min = 2.4*330/(100+330) akumulatora līmenis = (adc_voltage -paredzamais_min)/(paredzamais_maks. -gaidīts_min) atgriezt akumulatora līmeni * 100.0

5. solis: padariet to skaistāku

Padarot to skaistāku
Padarot to skaistāku
Padarot to skaistāku
Padarot to skaistāku
Padarot to skaistāku
Padarot to skaistāku

Lai gan maizes dēļa versija darbojas labi, es gribēju to ievietot iepakojumā, kas būtu kārtīgāks un uzticamāks (bez vadiem, kas var atrauties vai saīsināties). Man izdevās atrast savām vajadzībām perfektu projektu kastīti, kas bija pareizā izmēra, ieskaitot tapu dēli, stiprinājumus un skrūves, lai to visu saliktu kopā. Turklāt tas bija lēti par mazāk nekā 2 sterliņu mārciņām. Pēc kastes saņemšanas man atlika tikai lodēt komponentus uz tapas plāksnes.

Varbūt vissarežģītākā daļa bija visu akumulatora sprieguma ķēdes komponentu uzstādīšana nelielā telpā blakus Lolin32. Par laimi, ar nelielu džekeru pokeru un atbilstošiem savienojumiem, kas izveidoti ar lodmetālu, ķēde lieliski iekļaujas. Turklāt, tā kā Wemos Lolin32 nav tapas, lai atklātu akumulatora pozitīvo spaili, man nācās lodēt vadu no akumulatora savienotāja līdz tapas plāksnei.

Es pievienoju arī LED, kas mirgo, kad ierīce ir noteikusi kustību.

6. darbība: apdares darbi

Image
Image
Apdares darbi
Apdares darbi
Apdares darbi
Apdares darbi

Kārbas pamatnei superlīmēju 4 6 mm x 4 mm neodīma magnētus, kas ļauj droši pielīmēt veļas mazgājamās mašīnas metāla virsmu.

Projekta kastē jau ir neliels caurums, lai nodrošinātu piekļuvi kabeļiem. Par laimi, es varēju novietot ESP32 plati tuvu šim caurumam, lai varētu piekļūt mikro USB savienotājam. Pēc atveres palielināšanas ar amatniecības nazi kabelis lieliski iederas, lai varētu viegli uzlādēt akumulatoru.

Ja jūs interesē kāda no šī projekta detaļām, lūdzu, atstājiet komentāru. Ja vēlaties redzēt kodu, lūdzu, pārbaudiet to vietnē Github:

github.com/alexspurling/washingmachine

Ieteicams: