Obsah:

Senzor oznámení pračky: 6 kroků (s obrázky)
Senzor oznámení pračky: 6 kroků (s obrázky)

Video: Senzor oznámení pračky: 6 kroků (s obrázky)

Video: Senzor oznámení pračky: 6 kroků (s obrázky)
Video: Adel ukazala prso 2024, Červenec
Anonim
Image
Image
Prototyp
Prototyp

Tento senzor pračky sedí na mé pračce a pomocí akcelerometru detekuje vibrace ze stroje. Když zjistí, že prací cyklus skončil, odešle mi na telefon oznámení. Postavil jsem to, protože samotný stroj už nepípá, když je hotový, a už mě unavovalo zapomenout vyndat prádlo.

Kód najdete zde:

Kompletní seznam dílů:

  • WEMOS LOLIN32
  • Poloviční velikost Breadboard (pro prototypování)
  • ABS Project Box s maticovou deskou 59x88x30mm
  • Sparkfun LIS3DH - tříosý akcelerometr Breakout
  • 1x ZVP3306A P-kanálový MOSFET, 160 mA, 60 V, 3pinový E-Line
  • 1x BC549B TO92 30V NPN tranzistor
  • 5mm LED modrá 68 mcd
  • 1x 100k 0,125W CF rezistor
  • 1x 330k 0,125W CF rezistor
  • 2x 10k 0,250W CF rezistor
  • 1x 100 0,250W odpor CF
  • 2kolíkový samičí kabel JST ve stylu PH (14 cm)
  • 4x Neodymový kotoučový magnet M1219-8 6x4mm

Krok 1: Prototyp

Prototyp
Prototyp

Zařízení využívá mikrokontrolér ESP32. V tomto případě používám vývojovou desku Lolin32 od Wemos, kterou si můžete koupit na AliExpress za zhruba 7 $. Akcelerometr je Sparkfun LIS3DH - je důležité, že akcelerometr je spíše digitální než analogový, jak uvidíte později. Baterii jsem vzal ze staré sady bluetooth reproduktorů.

ESP32 se připojuje k akcelerometru přes I2C. První verze kódu jednoduše dotazovala tři osy zrychlení (x, y a z) pro naměřenou hodnotu zrychlení každých 20 ms. Umístěním prototypu prkénka na pračku jsem vytvořil výše uvedený graf, který ukazuje vrcholy zrychlení během různých fází pracího cyklu. Píky, kde bylo absolutní zrychlení větší než 125 mg (125 tisícin normální gravitace), jsou zobrazeny oranžově. Chceme tato období detekovat a použít je ke zjištění stavu pračky.

Jak zjistit, zda je stroj zapnutý nebo vypnutý?

Jedním z cílů stavby tohoto zařízení bylo, aby bylo zcela pasivní. Tj. není třeba mačkat žádná tlačítka; prostě by to fungovalo. Také by měl být velmi nízký výkon, protože v mém případě nebylo možné prodloužit napájecí kabely k pračce.

Naštěstí akcelerometr LIS3DH má funkci, kde může spustit přerušení, když zrychlení překročí danou prahovou hodnotu (všimněte si toho, že to vyžaduje použití vestavěného horního filtru akcelerometru-podrobnosti najdete v kódu na Githubu) a ESP32 lze probudit z režimu hlubokého spánku prostřednictvím přerušení. Tuto kombinaci funkcí můžeme použít k vytvoření spánkového režimu s velmi nízkou spotřebou, který je spuštěn pohybem.

Pseudokód by vypadal nějak takto:

# Zařízení se probudilo

notification_threshold = 240 counter = 10 accelerometer.set_threshold (96) # 96mg while counter> 0: if accelerometer.above_threshold (): counter ++ else: counter-- if counter> notification_threshold: # final spin cycle identified sleep (1 second) accelerometer.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Zde můžete vidět, že pomocí čítače zjišťujeme, kolik sekund zrychlení jsme zaznamenali během aktuálního období probuzení. Pokud počítadlo klesne na nulu, můžeme zařízení uvést zpět do režimu spánku. Pokud čítač dosáhne 240 (prahová hodnota upozornění), znamená to, že jsme detekovali 4 minuty vibrací. Hodnoty těchto prahů můžeme vyladit, abychom se ujistili, že zařízení správně detekuje konečný cyklus odstřeďování. Jakmile jsou detekovány dostatečné vibrace, můžeme před zasláním oznámení jednoduše spát dalších 5 minut (v mém případě to trvá, než se praní skutečně dokončí).

Krok 2: Odeslání oznámení přes Blynk

Odeslání oznámení přes Blynk
Odeslání oznámení přes Blynk

Blynk je služba navržená tak, aby umožňovala interakci se zařízeními IoT pomocí aplikace ve vašem telefonu. V tomto případě používám API oznámení push, které je spuštěno jednoduchým HTTP POST na Blynk API.

Krok 3: Měření spotřeby energie a odhad životnosti baterie

Měření spotřeby energie a odhad životnosti baterie
Měření spotřeby energie a odhad životnosti baterie

Čip ESP32 je inzerován s velmi nízkou spotřebou energie v hlubokém spánku (až 5uA). Obvody na mnoha různých vývojových deskách bohužel poskytují velmi odlišné charakteristiky spotřeby energie - ne všechny desky ESP32 pro vývoj jsou vytvořeny stejně. Když jsem například poprvé spustil tento projekt, použil jsem Sparkfun ESP32 Thing, který by v režimu hlubokého spánku spotřeboval přibližně 1 mA energie (i po vypnutí LED diody napájení). Od té doby používám Lolin32 (ne verzi Lite), na které jsem v režimu hlubokého spánku naměřil proud 144,5uA. K provedení tohoto měření jsem jednoduše zapojil multimetr do série s baterií a zařízením. To je určitě snazší při prototypování pomocí prkénka. Také jsem změřil aktuální využití, když je zařízení vzhůru:

  • Hluboký spánek: 144,5uA
  • Probuzení: 45mA
  • Wifi povoleno: 150mA

Za předpokladu, že stroj používám dvakrát týdně, jsem odhadl následující načasování času, který senzor stráví v každém stavu:

  • Hluboký spánek: 604090 sekund (~ 1 týden)
  • Probuzení: 720 sekund (12 minut)
  • Wifi povoleno: 10 sekund

Z těchto čísel můžeme odhadnout, jak dlouho baterie vydrží. Tuto šikovnou kalkulačku jsem použil k získání průměrné spotřeby energie 0,2 mA. Odhadovaná životnost baterie je 201 dní nebo přibližně 6 měsíců! Ve skutečnosti jsem zjistil, že zařízení přestane fungovat asi po 2 měsících, takže mohou být nějaké chyby v měření nebo v kapacitě baterie.

Krok 4: Měření úrovně baterie

Měření úrovně baterie
Měření úrovně baterie
Měření úrovně baterie
Měření úrovně baterie

Říkal jsem si, že by bylo hezké, kdyby mi zařízení dokázalo říci, kdy je baterie téměř vybitá, abych věděl, kdy ji nabít. Abychom to změřili, musíme změřit napětí baterie. Baterie má rozsah napětí 4,3 V - 2,2 V (minimální provozní napětí ESP32). Rozsah napětí na ADC pinech ESP32 je bohužel 0-3,3V. To znamená, že musíme snížit napětí baterie z maxima 4,3 na 3,3, abychom předešli přetížení ADC. To je možné udělat s děličem napětí. Jednoduše zapojte dva odpory s příslušnými hodnotami z baterie na zem a změřte napětí uprostřed.

Jednoduchý obvod děliče napětí bohužel odebírá energii z baterie, i když napětí není měřeno. Můžete to zmírnit použitím vysoce hodnotných rezistorů, ale nevýhodou je, že ADC nemusí být schopen čerpat dostatek proudu k přesnému měření. Rozhodl jsem se použít odpory s hodnotami 100 kΩ a 330 kΩ, které klesnou o 4,3 V až 3,3 V podle vzorce tohoto děliče napětí. Při celkovém odporu 430 kΩ bychom očekávali odběr proudu 11,6 uA (podle Ohmova zákona). Vzhledem k tomu, že naše současné využití hlubokého spánku je 144uA, je to přiměřeně významné zvýšení.

Protože chceme změřit napětí baterie pouze jednou těsně před odesláním oznámení, má smysl vypnout obvod děliče napětí v době, kdy nic neměříme. Naštěstí to můžeme udělat pomocí několika tranzistorů připojených k jednomu z pinů GPIO. Použil jsem obvod uvedený v této odpovědi stackexchange. Na výše uvedené fotografii mě můžete vidět testovat obvod pomocí Arduina a prkénka (všimněte si, že v obvodu je chyba, což je důvod, proč měřím vyšší napětí, než se očekávalo).

Když je výše uvedený obvod na místě, používám k získání procentuální hodnoty baterie následující pseudo kód:

battery_percentage ():

# povolit obvod napětí baterie gpio_set_level (BATTERY_EN_PIN, HIGH) # Úroveň baterie je vrácena jako celé číslo mezi 0 a 4095 adc_value = adc1_get_value (ADC_PIN) # povolit obvod napětí baterie gpio_set_level (BATTERY_EN_PIN, LOW) float adc_voltage = dělič používá odpory 100k/330k ohmů # 4,3 V -> 3,223, 2,4 -> 1,842 očekávané_max = 4,3*330/(100+330) očekávané_min = 2,4*330/(100+330) úroveň_ baterie = (adc_voltage -očekávané_min)/(očekávané_max -očekávaná_min) vrátit úroveň baterie * 100,0

Krok 5: Jak to udělat hezčí

Dělat to hezčí
Dělat to hezčí
Dělat to hezčí
Dělat to hezčí
Dělat to hezčí
Dělat to hezčí

I když verze typu breadboard funguje dobře, chtěl jsem ji vložit do balíčku, který by byl úhlednější a spolehlivější (žádné dráty, které by se mohly uvolnit nebo zkratovat). Podařilo se mi najít perfektní projektovou krabici pro mé potřeby, která měla správnou velikost, včetně kolíkové desky, montážních držáků a šroubů, abych to všechno dala dohromady. Také to bylo levné za méně než 2 libry. Po obdržení krabice mi stačilo připájet součástky na vývodovou desku.

Asi nejsložitější na tom bylo osadit všechny součásti obvodu napětí baterie na malý prostor vedle Lolin32. Naštěstí s trochou jiggery pokery a příslušnými spoji vytvořenými pájkou obvod zapadá úhledně. Protože Wemos Lolin32 nemá kolík pro odkrytí kladného pólu baterie, musel jsem pájet vodič z konektoru baterie na pinovou desku.

Také jsem přidal LED, která bliká, když zařízení detekovalo pohyb.

Krok 6: Dokončení dotyků

Image
Image
Dokončovací doteky
Dokončovací doteky
Dokončovací doteky
Dokončovací doteky

Na základnu krabice jsem super nalepil 4 neodymové magnety 6 mm x 4 mm, což jí umožňuje bezpečně přilepit na kovovou horní část pračky.

Krabice projektu je již dodávána s malým otvorem pro přístup kabelů. Naštěstí se mi podařilo umístit desku ESP32 blízko tohoto otvoru, aby byl umožněn přístup ke konektoru micro USB. Po zvětšení otvoru řemeslným nožem kabel perfektně pasoval a umožňoval snadné nabíjení baterie.

Pokud vás zajímají některé detaily tohoto projektu, neváhejte zanechat komentář. Pokud byste chtěli vidět kód, podívejte se prosím na Github:

github.com/alexspurling/washingmachine

Doporučuje: