Съдържание:

Сензор за известие на пералнята: 6 стъпки (със снимки)
Сензор за известие на пералнята: 6 стъпки (със снимки)

Видео: Сензор за известие на пералнята: 6 стъпки (със снимки)

Видео: Сензор за известие на пералнята: 6 стъпки (със снимки)
Видео: Как да си изберем сушилня за дрехи 2024, Юли
Anonim
Image
Image
Прототип
Прототип

Този сензор за пералня е разположен върху моята пералня и използва акселерометър за откриване на вибрации от машината. Когато усети, че цикълът на измиване е приключил, той ми изпраща известие на телефона ми. Изградих това, защото самата машина вече не издава звуков сигнал, когато приключи и ми беше омръзнало да забравя да извадя прането.

Кодът може да бъде намерен тук:

Пълен списък с части:

  • WEMOS LOLIN32
  • Половин размер платка (за прототипиране)
  • ABS Project Box с матрична дъска 59x88x30mm
  • Sparkfun LIS3DH - Акселерометър с тройна ос
  • 1x ZVP3306A P-канал MOSFET, 160 mA, 60 V, 3-пинов E-Line
  • 1x BC549B TO92 30V NPN транзистор
  • 5mm LED Blue 68 mcd
  • 1x 100k 0.125W CF резистор
  • 1x 330k 0.125W CF резистор
  • 2x 10k 0.250W CF резистор
  • 1x 100 0.250W CF резистор
  • 2-пинов женски JST PH-Style кабел (14 см)
  • 4x M1219-8 Неодимов магнит за диск 6x4mm

Стъпка 1: Прототип

Прототип
Прототип

Устройството използва микроконтролер ESP32. В този случай използвам дъската за разработка на Lolin32 от Wemos, която можете да закупите на AliExpress за около $ 7. Акселерометърът е Sparkfun LIS3DH - важно е акселерометърът да е цифров, а не аналогов, както ще видите по -късно. Батерията взех от стар комплект Bluetooth високоговорители.

ESP32 се свързва с акселерометъра чрез I2C. Първата версия на кода просто анкетира трите оси на ускорение (x, y и z) за измерената стойност на ускорението на всеки 20 ms. Поставяйки прототипа на макета върху пералнята, аз създадох горната графика, която показва пикове на ускорение през различните фази на цикъла на пране. Пиковете, при които абсолютното ускорение е по -голямо от 125 mg (125 хилядни от нормалната гравитация), са показани в оранжево. Искаме да открием тези периоди и да ги използваме, за да определим състоянието на пералната машина.

Как да определим дали машината е включена или изключена?

Една от целите на изграждането на това устройство беше, че то ще бъде изцяло пасивно. Т.е. не трябва да се натискат никакви бутони; просто щеше да свърши работа. Също така трябва да е с много ниска мощност, тъй като в моя случай не беше възможно да се удължат захранващите кабели до пералнята.

За щастие акселерометърът LIS3DH има функция, при която може да предизвика прекъсване, когато ускорението надвиши даден праг (имайте предвид, че това изисква използването на вградения високочестотен филтър на акселерометъра-вижте кода на Github за подробности) и ESP32 може да бъде събуден излиза от режима на дълбок сън чрез прекъсване. Можем да използваме тази комбинация от функции, за да създадем режим на сън с много ниска мощност, който се задейства от движение.

Псевдо кодът ще изглежда така:

# Устройството се събужда

notification_threshold = 240 брояч = 10 акселерометър.set_threshold (96) # 96mg докато брояч> 0: ако акселерометър.above_threshold (): брояч ++ else: брояч- ако брояч> известие_ праг: # последен цикъл на центрофугиране открит спящ (1 секунда) акселерометър.set_threshold_interrupt () esp32.set_wakeup_trigger_on_interrupt () esp32.deep_sleep ()

Тук можете да видите, че използваме брояч, за да открием колко секунди ускорение сме открили през текущия период на събуждане. Ако броячът падне до нула, тогава можем да поставим устройството отново в режим на заспиване. Ако броячът достигне 240 (прагът на уведомяване), това означава, че сме открили 4 минути вибрация. Можем да променим стойностите на тези прагове, за да сме сигурни, че устройството правилно открива последния цикъл на центрофугиране. След като бъде открита достатъчна вибрация, можем просто да спим още 5 минути (в моя случай това е колко време отнема, докато измиването действително приключи), преди да изпратим известие.

Стъпка 2: Изпращане на известие чрез Blynk

Изпращане на известие чрез Blynk
Изпращане на известие чрез Blynk

Blynk е услуга, създадена да позволява взаимодействие с IoT устройства с приложение на вашия телефон. В този случай използвам API за push известия, който се задейства от обикновен HTTP POST към Blynk API.

Стъпка 3: Измерване на консумацията на енергия и оценка на живота на батерията

Измерване на консумацията на енергия и оценка на живота на батерията
Измерване на консумацията на енергия и оценка на живота на батерията

Чипът ESP32 се рекламира като с много ниска консумация на енергия, когато е в дълбок сън (до 5uA). За съжаление, схемите на многото различни платки за разработка осигуряват много различни характеристики на консумация на енергия - не всички платки за разработчици на ESP32 са създадени равни. Например, когато за първи път започнах този проект, използвах Sparkfun ESP32 Thing, който ще консумира около 1mA енергия в режим на дълбок сън (дори след деактивиране на светодиода за захранване). Оттогава използвам Lolin32 (не версията Lite), на който измервах ток от 144.5uA, докато бях в режим на дълбок сън. За да направя това измерване, просто свързах последователно мултицет с батерията и устройството. Това със сигурност е по -лесно да се направи, докато прототипирате с макет. Измерих и текущата употреба, когато устройството е будно:

  • Дълбок сън: 144.5uA
  • Събуждане: 45mA
  • Wi -Fi активиран: 150mA

Ако приемем, че използвам машината два пъти седмично, изчислих следните срокове за времето, което сензорът прекарва във всяко състояние:

  • Дълбок сън: 604090 секунди (~ 1 седмица)
  • Събуждане: 720 секунди (12 минути)
  • Wifi активиран: 10 секунди

От тези цифри можем да преценим колко дълго ще издържи батерията. Използвах този удобен калкулатор, за да получа средна консумация на енергия от 0,2 mA. Прогнозният живот на батерията е 201 дни или около 6 месеца! В действителност открих, че устройството ще спре да работи след около 2 месеца, така че може да има някои грешки в измерванията или капацитета на батерията.

Стъпка 4: Измерване на нивото на батерията

Измерване на нивото на батерията
Измерване на нивото на батерията
Измерване на нивото на батерията
Измерване на нивото на батерията

Мислех, че би било хубаво, ако устройството може да ми каже кога батерията се изтощава, за да знам кога да го заредя. За да измерим това, трябва да измерим напрежението на батерията. Батерията има диапазон на напрежение 4.3V - 2.2V (минималното работно напрежение на ESP32). За съжаление обхватът на напрежението на ADC щифтовете на ESP32 е 0-3.3V. Това означава, че трябва да намалим напрежението на батерията от максимума му от 4,3 до 3,3, за да избегнем претоварване на ADC. Това е възможно да се направи с делител на напрежение. Просто свържете два резистора с подходящи стойности от батерията към земята и измерете напрежението в средата.

За съжаление, обикновена разделителна верига на напрежението ще изтощи енергия от батерията, дори когато напрежението не се измерва. Можете да смекчите това, като използвате резистори с висока стойност, но лошата страна е, че ADC може да не може да изтегли достатъчно ток, за да направи точно измерване. Реших да използвам резистори със стойности 100kΩ и 330kΩ, които ще спаднат от 4.3V до 3.3V според тази формула на делителя на напрежение. Като се има предвид общото съпротивление от 430 kΩ, бихме очаквали текущо равенство от 11,6uA (използвайки закона на Ом). Като се има предвид, че текущото ни използване на дълбок сън е 144uA, това е разумно значително увеличение.

Тъй като искаме само веднъж да измерим напрежението на батерията, точно преди да изпратим известие, има смисъл да изключим веригата на делителя на напрежението през времето, когато не измерваме нищо. За щастие можем да направим това с няколко транзистора, свързани към един от GPIO щифтовете. Използвах схемата, дадена в този отговор на stackexchange. Можете да ме видите да тествам веригата с Arduino и макет на горната снимка (имайте предвид, че има грешка във веригата, което е причината да измервам по -високо напрежение от очакваното).

С горепосочената верига използвам следния псевдо код, за да получа процентна стойност на батерията:

процент на батерията ():

# активиране на веригата за напрежение на батерията gpio_set_level (BATTERY_EN_PIN, HIGH) # Нивото на батерията се връща като цяло число между 0 и 4095 разделителят използва 100k/330k ома резистори # 4.3V -> 3.223, 2.4 -> 1.842 очаквани_max = 4.3*330/(100+330) очаквани_min = 2.4*330/(100+330) ниво на батерията = (adc_voltage -очаквано_min)/(очаквано_max -очакван_мин) връщане на ниво на батерията * 100.0

Стъпка 5: Направете го по -красив

Направете го по -красив
Направете го по -красив
Направете го по -красив
Направете го по -красив
Да го направим по -красив
Да го направим по -красив

Въпреки че версията на макета работи добре, исках да я сложа в пакет, който да бъде по -изчистен и по -надежден (без проводници, които могат да се разхлабят или да се късат). Успях да намеря перфектната кутия за проектиране за моите нужди, която беше с правилния размер, включваше щифт, щифтове за монтаж и винтове, за да сглобя всичко. Освен това беше много евтин на по -малко от 2 паунда. След като получих кутията, всичко, което трябваше да направя, е да запоя компонентите върху щифта.

Може би най -сложната част от това е поставянето на всички компоненти на веригата за напрежение на батерията върху малкото пространство до Lolin32. За щастие с малко пробождане и подходящи връзки, направени с спойка, веригата се вписва добре. Също така, тъй като Wemos Lolin32 няма щифт, който да изложи положителния извод на батерията, трябваше да запоя проводник от конектора на батерията към щифта.

Добавих и светодиод, който мига, когато устройството е открило движение.

Стъпка 6: Довършителни щрихи

Image
Image
Довършителни щрихи
Довършителни щрихи
Довършителни щрихи
Довършителни щрихи

Супер залепих 4 неодимови магнита 6 6 мм х 4 мм към основата на кутията, което й позволява да се придържа здраво към металната горна част на пералнята.

Проектната кутия вече се предлага с малък отвор за осигуряване на достъп за кабели. За щастие успях да позиционирам платката ESP32 близо до този отвор, за да дам достъп до микро USB конектора. След увеличаване на отвора с занаятчийски нож, кабелът приляга перфектно, за да позволи лесно зареждане на батерията.

Ако се интересувате от някоя от детайлите на този проект, моля не се колебайте да оставите коментар. Ако искате да видите кода, моля, проверете го в Github:

github.com/alexspurling/washingmachine

Препоръчано: