Съдържание:

Алармено реле за фризер: 5 стъпки
Алармено реле за фризер: 5 стъпки

Видео: Алармено реле за фризер: 5 стъпки

Видео: Алармено реле за фризер: 5 стъпки
Видео: Как использовать термостат W3230, релейный контроллер тепла и холода, переменный ток постоянного тока 12 В/24 В/120/220 В от P1 до P8 2024, Ноември
Anonim
Алармено реле за фризер
Алармено реле за фризер

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

Има 2 части на този проблем, ние се нуждаем от метод за откриване на алармата е излязъл и метод за предаване на този факт в нашето жизнено пространство. Дизайнът, на който се спрях, беше да използвам Raspberry Pi, за да изслушам алармата за фризера, а след това да изпратя звуково алармено съобщение до домашното ми радио, което е активирано от uPNP. Universal Plug and Play (UpnP) е стандарт за откриване и взаимодействие с услуги, предлагани от различни устройства в мрежа, включително медийни сървъри и плейъри, въпреки че не мисля, че фризерите са били предвидени при разработването на стандарта. Предупредителното съобщение е направено силно и дразнещо и се повтаря безкрайно, докато радиото не бъде изключено.

Избрах да открия алармата с Raspberry Pi Zero W и Seeed ReSpeaker 2-Mics Pi HAT Raspberry PI Zero е евтина версия на Raspberry Pi и опцията W има вграден WiFi, докато Seeed Pi HAT се продава за по-малко от $ 10, има вградени светодиоди и потребителски бутон. Pi HAT са разширителни карти, които се включват директно към Raspberry Pi, което прави много проста процедура за сглобяване. Всяка версия на Pi би била повече от способна за работа и избраният микрофон може да бъде заменен, въпреки че използвах вградените светодиоди в тази компилация.

Лесно е да проверите дали радио или телевизор ще ви свърши работа. По -вероятно ще бъде описан като „DLNA активиран“или подобен. Това използва uPNP за комуникация. На компютър с Windows изберете mp3 файл и „Cast to Device“. Ако вашето устройство се появи и можете да възпроизведете файла, тогава можете да започнете.

Разделих софтуера на 2 скрипта на python, checkFreezer.py, за да проверя дали е задействано предупреждение за фризер, и raiseAlarm.py за повишаване на алармата. Тези скриптове могат да бъдат разработени и тествани отделно и лесно могат да бъдат адаптирани или заменени с различни методи за повишаване на алармата на микрофони.

Консумативи

  • Софтуер -https://github.com/wapringle/freezer-alarm
  • Малина PI Zero W
  • Вижте ReSpeaker 2-Mics Pi HAT
  • радио с активиран uPNP

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

Когато вратата на фризера остане отворена и температурата се повиши, фризерът подава звукова аларма „бип бийп бип бип“. Както при повечето електронни звукови сигнали, това е единична честота. Идеята е да се вземе проба от аудио входа, да се извърши бърза трансформация на Фурие (FFT), която преобразува сигнала, базиран на времето, в честотно базиран, с други думи, разбива сигнал за показване на различните честоти в сигнала. Вижте инструктируемия анализатор на спектър на Raspberry Pi с RGB LED лента Можем да търсим пик на честотата на зумера и да задействаме алармата, когато зумерът е бил активен от известно време.

Този детектор има 2 изисквания

  • Той трябва да открие зумера, дори при наличие на околен шум (премахване на фалшиво отрицателен)
  • Не трябва да се задейства от околния шум (премахване на фалшиво положително)

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

Стъпка 2: Конфигуриране на детектора

Конфигуриране на детектора
Конфигуриране на детектора
Конфигуриране на детектора
Конфигуриране на детектора
Конфигуриране на детектора
Конфигуриране на детектора

С телефона си взех аудио проби като WAV файлове само на зумера на фризера, с шумен фон и с работещ Hoover. Адаптирах кода за извършване на FFT от публикацията Reading Audio Stream for FFT (Когато се съмнявате, плагаризирайте) и използвах скрипта fourierTest.py, за да начертая сурови и преобразувани от Фурие проби от зумера в тих, шумен и много шумен фон. Скокът в нивото на честота 645 е изразен в първия график и все още е значителен с много шумен фон.

Стъпка 3: Конструиране на детектора

Сглобяване на детектора

Много просто. Pi W идва с вграден Wifi и HAT е включен диетично към GPIO щифтовете на Pi. Конфигурирането на софтуера изисква стъпките

  • Инсталирайте raspbian distro на Raspberry Pi. Има много ръководства по този въпрос, които могат да го обяснят много по -добре, отколкото мога.
  • Настройте Wi -Fi (също по -горе)
  • Нуждае се от инсталиран пакет alsa

$ sudo apt-get install libasound-dev

$ pip инсталирайте pyalsaaudio

  • Свържете HAT към малиновия PI
  • Следвайте инструкциите на видяния уебсайт, за да инсталирате драйверите за HAT.
  • Изпълнете видяната диагностика, за да проверите дали HAT работи и е правилно конфигуриран.

Програмата за детектор чете блок от данни като проба от микрофона, прави FFT и решава дали е открила зумера в пробата. Опитах се да направя блока възможно най -дълъг, като намалих честотата на аудио дискретизация до 16kHz и използвах най -големия буфер, който читателят би приел. Бях загрижен, че изчислението на FFT може да доведе до отпадане на рамки, но това не се случи.

Предварително записаните проби на телефона ми направиха изграждането на детектора много по-лесно, тъй като можех да направя пълното изграждане на пейката, преди да тествам на място от фризера.

Обучение на детектора

Детекторът е обучен чрез сканиране на всяка проба, когато WAV записът на зумера се възпроизвежда на детектора. Програмата извежда позицията в FFT спектъра с най -високото ниво на мощност (пиковата честота), заедно с нивото на тази пикова честота. Беше просто да се намери честотата на зумера и нивото на мощност, което излъчва.

Има 2 начина да откриете дали е чут звуков сигнал:-

  1. Честотата на зумера ли беше пиковата честота в пробата?
  2. или нивото на мощност при честотата на зумера беше над прага?

И двата метода работеха в тиха проба, но вторият беше по -добър с шумна проба, затова използвах това.

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

След това имаме нужда от теглата за гласуване „против“и „против“заедно с прага. Това направих с опити и грешки в редица проби. Не трябваше да определям действителната честота на зумера, просто потърсих изключителната честота в спектъра на fft.

Стъпка 4: Изпращане на съобщение до радиото

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

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Това има хубав преглед на това как всичко това съвпада
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

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

  • Стартирайте изскачащ уеб сървър за обслужване на предупредителното съобщение, когато радиото поиска това
  • Задайте нивото на силата на звука на LOUD (предупредителното съобщение трябва да привлече вниманието на всички)
  • Предайте uri на предупредителното съобщение на радиото
  • Анкетирайте радиото, докато текущото състояние е „СТОПИРАНО“
  • Вземете радиото, за да „ИГРАЙТЕ“uri
  • Повторете последните 2 стъпки, докато текущото състояние е "НЯМА МЕДИА", което означава, че алармата е потвърдена чрез изключване на радиото
  • Накрая затворете уеб сървъра и излезте.

Това е скриптът raiseAlarm.py

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

Правете го сами
Правете го сами

Моделът "детектор" и "повишаване на алармата" не е само за фризери, той може да бъде полезен навсякъде, където трябва да се предаде автоматизирана аларма чрез друг носител. Ако това би представлявало интерес, не се колебайте да започнете.

Настройка на PI Zero W, включително микрофона

  • Сглобете хардуера както в стъпка 3
  • Изтеглете скриптове за аларма за фризер от този Instructable или от хранилището на git, което включва няколко бонус песни

$ git клонинг

Също така трябва да инсталирате софтуера, за да използвате вградените светодиоди APA102. Включих копие на apa102.py в работната директория на git

Обучение на детектора

Добавих опция за обучение към скрипта checkFreezer.py. Това го изпълнява самостоятелно и отпечатва диагностика в командния ред, но първо трябва да запишете някои проби от алармата в тиха среда като WAV файлове и да направите същото в шумна. За да завършите обучението, първо трябва да намерите честотата на БПФ с най -високото ниво ("пикова честота") и след това прагово ниво за тази честота, за да зададете задействане. За да направите това, стартирайте скрипта checkFreezer в режим на обучение, с опцията ‘-t’ и пуснете записа на алармата.

$ python checkFreezer.py -t

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

$ python checkFreezer.py -t

Готова пикова честота 55 задейства ниво 1 задействане? Задействана фалшива пикова честота 645 ниво на задействане 484? Задействана фалшива пикова честота 645 ниво на задействане 380? Фалшиво

В този случай пиковата честота е 645 и това става честотата на задействане. Сега, за да получите нивото на задействане, повторете checkFreezer, задавайки спусъка

$ python checkFreezer.py -t --trigger = 645

Готова пикова честота 645 ниво на задействане 1273 задействано? Задействана фалшива пикова честота 645 ниво на задействане 653? Задействана фалшива пикова честота 645 ниво на задействане 641? Задействана фалшива пикова честота 645 ниво на задействане 616? Фалшиво

Накрая се нуждаем от праг на задействане, който се задейства, когато се открие звуков сигнал, но игнорира шума, напр

$ python checkFreezer.py -t --trigger = 645 --threshold = 500

Готова пикова честота 645 задействащо ниво 581 задействано? Истинска пикова честота 645 задейства ниво 798? Истинска пикова честота 645 задейства ниво 521 задействане? Вярно

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

Свързване към радиото

За да конфигурирате скриптовете за вашата собствена настройка, трябва да намерите IP адреса и номера на порта, които вашето устройство използва за UPnP услуги. Радио настройката трябва да осигури това. Номерът на порта по подразбиране е 8080 и би било изненада, ако е различен.

Предоставих алармено съобщение по подразбиране, freezer.mp3. Чувствайте се свободни да замените със собствено съобщение.

Редактирайте скрипта със съответните IP адреси и стартирайте скрипта.

$ python raiseAlarm.py

Ако всичко е наред, силното и дразнещо алармено съобщение ще избухне от вашето радио, докато радиото не бъде изключено, анулиране на алармата.

Докато скриптът работи, той изпълнява мини уеб сървър, който да подава алармен mp3 към радиото, вероятно проблем със сигурността, но той е активен само докато се възпроизвежда съобщението за аларма.

Излизане на живо

Премахнете знака за обучение „-t“и стартирайте checkFreezer със собствените си стойности, напр

$ python checkFreezer.py --trigger = 645 --threshold = 200

За да стартирате при рестартиране, добавете към /etc/rc.local, cd/home/pi/фризер-аларма

(python checkFreezer.py --trigger = 645 --threshold = 200> /tmp /freezer 2> /tmp /freezererror &) & изход 0

Зеленият светодиод ще светне и сте готови за действие. Пуснете записа на алармения си сигнал и след няколко секунди светодиодът ще стане червен и съобщението за аларма ще се възпроизведе на вашето радио.

Най -накрая

Поставете PI на място близо до фризера, отстрани и от захранването. Включете захранването и зеленият светодиод трябва да светне. Тествайте задействане на алармата, като оставите вратата отворена. Светлината трябва да стане червена и аларменото съобщение да се възпроизведе по радиото.

Успех !! Вие сте го направили. Подарете си дълго питие с лед от фризера, но не забравяйте да затворите вратата на фризера!

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