Turinys:

Šaldiklio aliarmo relė: 5 žingsniai
Šaldiklio aliarmo relė: 5 žingsniai

Video: Šaldiklio aliarmo relė: 5 žingsniai

Video: Šaldiklio aliarmo relė: 5 žingsniai
Video: Sorrento, Italy Walking Tour - 4K60fps with Captions *NEW* 2024, Liepa
Anonim
Šaldiklio aliarmo relė
Šaldiklio aliarmo relė

Mūsų šaldiklis yra buitinėje patalpoje, kuri yra izoliuota nuo mūsų gyvenamosios patalpos. Kartais šaldiklio durelės tinkamai neužsidaro ir aliarmas išsijungia. Problema ta, kad mes to negirdime, jei esame savo gyvenamojoje erdvėje. Kaip gauti pranešimą, kad šaldiklio durys atidarytos? Tai dažna problema, mūsų namuose yra prietaisų, kurie su mumis kalba, bet kas atsitinka, jei dėl kokių nors priežasčių jų negirdime. Pradėjau tai kaip šiek tiek smagu, bet tai gali būti naudinga rimtesnėje programoje.

Šią problemą sudaro dvi dalys, mums reikia metodo, kaip aptikti aliarmą, ir metodo, kaip perduoti šį faktą mūsų gyvenamajai erdvei. Aš nusprendžiau naudoti „Raspberry Pi“, kad klausytųsi, kaip įsijungia aliuminio aliarmas, ir tada nusiųsti garsinį aliarmo pranešimą į mano namų radiją, kuriame įjungtas uPNP. „Universal Plug and Play“(„UpnP“) yra standartas, leidžiantis atrasti ir sąveikauti su paslaugomis, kurias siūlo įvairūs tinklo įrenginiai, įskaitant daugialypės terpės serverius ir grotuvus, nors nemanau, kad kuriant standartą buvo numatyti šaldikliai. Įspėjamasis pranešimas buvo garsus ir erzinantis ir kartojasi be galo, kol radijas bus išjungtas.

Aš nusprendžiau aptikti signalą naudodamas „Raspberry Pi Zero W“ir „Seeed ReSpeaker 2-Mics Pi HAT“. „Raspberry PI Zero“yra nebrangi „Raspberry Pi“versija, o „W“parinktis turi integruotą „WiFi“, o „Seeed Pi HAT“parduodama mažiau nei 10 USD, turi įmontuotus šviesos diodus ir vartotojo mygtuką. „Pi HAT“yra pratęsimo kortelės, prijungiamos tiesiai prie „Raspberry Pi“, todėl labai paprasta surinkti. Bet kuri „Pi“versija būtų daugiau nei tinkama darbui, o pasirinktą mikrofoną galima pakeisti, nors aš naudoju įmontuotus šviesos diodus.

Nesunku patikrinti, ar radijas ar televizorius jums tinka. Labiau tikėtina, kad jis bus apibūdintas kaip „DLNA įjungtas“ar panašus. Bendravimui naudojamas uPNP. „Windows“kompiuteryje pasirinkite mp3 failą ir „Perduoti į įrenginį“. Jei jūsų įrenginys rodomas ir galite paleisti failą, galite pradėti.

Aš padalinau programinę įrangą į 2 „Python“scenarijus, checkFreezer.py, norėdamas patikrinti, ar buvo suaktyvintas įspėjimas apie šaldiklį, ir „liftAlarm.py“, kad padidintumėte aliarmą. Šie scenarijai gali būti sukurti ir išbandyti atskirai ir gali būti lengvai pritaikyti arba pakeisti skirtingais mikrofonų aliarmo kėlimo metodais.

Prekės

  • Programinė įranga -https://github.com/wapringle/freezer-alarm
  • Aviečių PI Zero W
  • Mačiau „ReSpeaker 2-Mics Pi HAT“
  • uPNP palaikantis radijas

1 žingsnis: projektuokite detektorių

Kai šaldiklio durys paliekamos atidarytos ir temperatūra pakyla, šaldiklis duoda garsinį „pyptelėjimo pyptelėjimo pyptelėjimą“. Kaip ir dauguma elektroninių pyptelėjimų, tai yra vienas dažnis. Idėja yra imti garso įvestį, atlikti greitą Furjė transformaciją (FFT), kuri paverčia laiku pagrįstą signalą į dažnį, kitaip tariant, suskaido signalą, kad būtų rodomi skirtingi signalo dažniai. Žiūrėkite „Instructable Raspberry Pi“spektro analizatorių su RGB šviesos diodų juosta Mes galime ieškoti garsiakalbio dažnio smailės ir suaktyvinti aliarmą, kai garsinis signalas jau kurį laiką yra aktyvus.

Šis detektorius turi 2 reikalavimus

  • Jis turėtų aptikti garsinį signalą, net ir esant aplinkos triukšmui (pašalinti klaidingą neigiamą poveikį)
  • Tai neturėtų sukelti aplinkos triukšmas (pašalinkite klaidingą teigiamą rezultatą)

Nusprendžiau, kad paleisti „Hoover“namų apyvokos kambaryje būtų geras išbandymas. Jis neturėtų suaktyvinti aliarmo, o aliarmas turėtų būti suaktyvintas, kai užsidega šaldiklio garsinis signalas ir veikia „Hoover“.

2 veiksmas: detektoriaus konfigūravimas

Detektoriaus konfigūravimas
Detektoriaus konfigūravimas
Detektoriaus konfigūravimas
Detektoriaus konfigūravimas
Detektoriaus konfigūravimas
Detektoriaus konfigūravimas

Naudodamas savo telefoną, aš paėmiau garso pavyzdžius tik kaip šaldiklio garsinio signalo WAV failus, triukšmingą foną ir veikiant „Hoover“. Aš pritaikiau kodą, kad atlikčiau FFT iš įrašo „Reading Audio Stream for FFT“(kai kyla abejonių, plagarizuokite), ir naudoju scenarijų fourierTest.py, kad nubrėžčiau neapdorotus ir Furjė transformuotus garsinio signalo pavyzdžius ramiame, triukšmingame ir labai triukšmingame fone. 645 dažnio lygio šuolis yra ryškus pirmame brėžinyje ir vis dar yra reikšmingas esant labai triukšmingam fonui.

3 žingsnis: detektoriaus sukūrimas

Detektoriaus surinkimas

Labai paprasta. „Pi W“yra su įmontuotu „Wifi“, o HAT yra diegiškai prijungtas prie „Pi“GPIO kaiščių. Norint sukonfigūruoti programinę įrangą, reikia atlikti šiuos veiksmus

  • Įdiekite raspbian distro į Raspberry Pi. Yra daugybė vadovų, kurie gali tai paaiškinti daug geriau nei aš.
  • Nustatykite „Wifi“(taip pat aukščiau)
  • Tam reikia įdiegti „Alsa“paketą

$ sudo apt-get install libasound-dev

$ pip įdiegti pyalsaaudio

  • Prijunkite skrybėlę prie aviečių PI
  • Vykdykite instrukcijas matomoje svetainėje, kad įdiegtumėte HAT tvarkykles.
  • Vykdykite matomą diagnostiką, kad patikrintumėte, ar HAT veikia ir tinkamai sukonfigūruota.

Detektoriaus programa nuskaito duomenų bloką kaip pavyzdį iš mikrofono, atlieka FFT ir nusprendžia, ar jis aptiko mėginio signalą. Aš bandžiau padaryti bloką kuo ilgesnį, sumažindamas garso imties dažnį iki 16 kHz ir naudodamas didžiausią buferį, kurį skaitytojas priimtų. Buvau susirūpinęs, kad dėl FFT skaičiavimo gali sumažėti kadrai, bet taip neįvyko.

Jei telefone buvo iš anksto įrašyti mėginiai, žymiai palengvino detektoriaus kūrimą, nes galėjau visiškai pastatyti ant stendo prieš bandymą vietoje šaldiklyje.

Detektoriaus mokymas

Detektorius buvo išmokytas nuskaitydamas kiekvieną mėginį, kai detektoriui buvo paleistas garso signalo WAV įrašas. Programa išleidžia poziciją FFT spektre su didžiausiu galios lygiu (piko dažniu) kartu su to piko dažnio lygiu. Surasti garsinio signalo dažnį ir skleidžiamą galios lygį buvo paprasta.

Yra du būdai, kaip nustatyti pyptelėjimą:-

  1. Ar garsinio signalo dažnis buvo didžiausias mėginio dažnis?
  2. ar galios lygis garsinio signalo dažniu viršijo slenkstį?

Bet kuris metodas veikė tyliame mėginyje, tačiau antrasis buvo geresnis su triukšmingu mėginiu, todėl aš jį naudojau.

Kartais mėginys dengdavo pyptelėjimą, kartais būdavo tarp pyptelėjimų, o po kas 3 pyptelėjimų būdavo ilga pauzė prieš kitus pyptelėjimus. Norėdami patikimai nustatyti, kad įvyko pyptelėjimų rinkinys, kiekvienas mėginys turėjo teigiamą balsą, jei buvo aptiktas pyptelėjimas, ir neigiamą balsą, jei ne. Šie balsai buvo apskaičiuoti, kad būtų nustatytas skaičius, kuris susilietų su pyptelėjimu ir lėtai mažėtų. Kai skaičius pasiekia ribą, gali būti suaktyvintas aliarmas. Jei kaip pyptelėjimo mėginys būtų aptiktas atsitiktinis triukšmas, skaičius vėl nukristų iki nulio.

Tada mums reikia svorių už ir prieš balsavimą kartu su slenksčiu. Tai padariau bandydamas ir klaidingai atlikdamas daugybę mėginių. Man nereikėjo nustatyti tikro garso signalo dažnio, aš tiesiog ieškojau išskirtinio dažnio fft spektre.

4 veiksmas: pranešimo siuntimas į radiją

Signalizacija buvo atlikta naudojant atskirą scenarijų. Jos užduotis yra įjungti radiją, jei reikia, įsibrauti į bet kokį radiją ir kartoti aliarmo pranešimą, kol radijas vėl bus išjungtas. Turėjau pakeisti naudojamą „uPnP“protokolą, nes turėjau didelių sunkumų gaunant patikimą informaciją ar pavyzdžius. Pora nuorodų, kurios man pasirodė naudingos

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Tai puiki apžvalga, kaip visa tai dera
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Aš naudoju „Wireshark“, veikiantį „Windows“kompiuteryje, kad išrinkčiau pranešimų seką, kai per savo radiją paleisiu pavyzdinį failą iš savo kompiuterio, ir šiek tiek pasimėgavęs gavau komandų seką, kuri veikė. Tai yra

  • Paleiskite iššokantįjį žiniatinklio serverį, kad jis pateiktų įspėjamąjį pranešimą, kai radijas to prašo
  • Nustatykite garsumo lygį LOUD (įspėjamasis pranešimas turėtų pritraukti visų dėmesį)
  • Perduokite įspėjimo pranešimo uri radijui
  • Klausykite radijo, kol dabartinė būsena bus „STOPPED“
  • Gaukite radiją, kad „PLAY“uri
  • Kartokite paskutinius 2 veiksmus, kol dabartinė būsena bus „NO MEDIA PRESENT“, o tai reiškia, kad aliarmas buvo patvirtintas išjungus radiją
  • Galiausiai uždarykite žiniatinklio serverį ir išeikite.

Tai scenarijus raiseAlarm.py

5 žingsnis: darykite tai patys

Daryk pats
Daryk pats

Modelis „detektorius“ir „kelti aliarmą“skirtas ne tik šaldikliams, bet ir gali būti naudingas bet kur, kur automatinis aliarmas turi būti perduodamas per kitą terpę. Jei tai būtų įdomu, nedvejodami pabandykite.

„PI Zero W“, įskaitant mikrofoną, nustatymas

  • Surinkite aparatūrą, kaip nurodyta 3 veiksme
  • Atsisiųskite aliarmo scenarijus iš šios instrukcijos arba iš „git“saugyklos, kurioje yra keletas papildomų takelių

$ git klonas

Taip pat turite įdiegti programinę įrangą, kad galėtumėte naudoti įmontuotus APA102 šviesos diodus. Į „git“darbo katalogą įtraukiau apa102.py kopiją

Mokykite savo detektorių

Prie „checkFreezer.py“scenarijaus pridėjau mokymo parinktį. Tai veikia atskirai ir komandų eilutėje spausdina diagnostiką, tačiau pirmiausia turite įrašyti kai kuriuos pavojaus signalo pavyzdžius ramioje aplinkoje kaip WAV failus ir tą patį padaryti triukšmingoje. Norėdami baigti mokymą, pirmiausia turite rasti aukščiausio lygio FFT dažnį („piko dažnį“) ir tada slenkstinį šio dažnio lygį, kad nustatytumėte trigerį. Norėdami tai padaryti, paleiskite scenarijų „checkFreezer“treniruočių režimu su „-t“parinktimi ir paleiskite aliarmo įrašą.

$ python checkFreezer.py -t

Tai paleidžia scenarijų mokymo režimu. Jis atspausdinamas „paruoštas“, kai matoma skrybėlė yra inicijuojama ir šviesos diodas užsidega žaliai, tada eilutė kiekvienam nežymiam triukšmui, kurį jis girdi, pvz.

$ python checkFreezer.py -t

Parengtas piko dažnis 55 suaktyvina 1 lygio aktyvavimą? Suveikė klaidingas piko dažnis 645 suveikimo lygis 484? Suaktyvintas klaidingas piko dažnis 645 paleidimo lygis 380? Netiesa

Piko dažnis šiuo atveju yra 645 ir tai tampa trigerio dažniu. Dabar, norėdami gauti trigerio lygį, pakartokite „checkFreezer“, nustatydami trigerį

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

Suaktyvintas maksimalus 645 paleidimo lygis 1273? Suaktyvintas klaidingas piko dažnis 645 suveikimo lygis 653? Suaktyvintas klaidingas piko dažnis 645 paleidimo lygis 641? Suaktyvintas klaidingas piko dažnis 645 paleidimo lygis 616? Netiesa

Galiausiai mums reikia trigerio slenksčio, kuris įsijungia, kai aptinkamas pyptelėjimas, tačiau nekreipia dėmesio į triukšmą, pvz

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

Suaktyvintas maksimalus 645 paleidimo lygis 581? Tikrasis piko dažnis 645 suaktyvina 798 lygį? Tikrasis piko dažnis 645 suaktyvina 521 lygį? Tiesa

Išbandykite tai su keliais triukšmingais pavyzdžiais ir turėtumėte sugebėti nustatyti slenkstinę vertę, kuri išskiria bleperio garsą ir aplinkos triukšmą. Taip pat turėtumėte matyti, kad šviesos diodas dega raudonai, kai kelias sekundes skamba pyptelėjimas. Jei tai įvyksta greitai/lėtai, redaguokite scenarijaus nustatymus

Prisijungimas prie radijo

Norėdami sukonfigūruoti scenarijus savo sąrankai, turite rasti IP adresą ir prievado numerį, kurį jūsų įrenginys naudoja UPnP paslaugoms. Radijo sąranka turėtų tai pateikti. Numatytasis prievado numeris yra 8080 ir būtų netikėta, jei jis būtų kitoks.

Pateikiau numatytąjį aliarmo pranešimą freezer.mp3. Nesivaržykite pakeisti savo žinute.

Redaguokite scenarijų naudodami atitinkamus IP adresus ir paleiskite scenarijų.

$ python raiseAlarm.py

Jei viskas gerai, garsus ir erzinantis pavojaus pranešimas iš jūsų radijo ims sklisti tol, kol radijas nebus išjungtas.

Kol scenarijus veikia, jame veikia mini žiniatinklio serveris, kad radijas galėtų perduoti aliarmą mp3, galbūt saugos problema, tačiau jis aktyvus tik tada, kai skamba aliarmo pranešimas.

Pradėti tiesiogiai

Pašalinkite „-t“mokymo vėliavą ir paleiskite „checkFreezer“naudodami savo vertes, pvz

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

Kad jis prasidėtų iš naujo paleidus, pridėkite prie /etc/rc.local, cd/home/pi/freezer-signalizacija

(python checkFreezer.py --trigger = 645 --threshold = 200> /tmp /freezer 2> /tmp /freezererror &) ir išeiti iš 0

Užsidegs žalias šviesos diodas ir būsite pasiruošę veikti. Paleiskite žadintuvo pyptelėjimo įrašą ir po kelių sekundžių šviesos diodas užsidegs raudona spalva, o jūsų radijuje skambės aliarmo pranešimas.

Pagaliau

Įdėkite PI į vietą, esančią šalia šaldiklio, atokiau nuo kelio ir prie maitinimo šaltinio. Įjunkite ir žalias šviesos diodas turėtų užsidegti. Išbandykite aliarmo įjungimą palikdami duris atidarytas. Šviesa turėtų užsidegti raudonai, o radijuje skambės pavojaus pranešimas.

Sėkmė !! Jūs tai padarėte. Pasilepinkite ilgu gėrimu su ledu iš šaldiklio, tačiau nepamirškite uždaryti šaldiklio durelių!

Rekomenduojamas: