Mündəricat:

Dondurucu Siqnal Rölesi: 5 addım
Dondurucu Siqnal Rölesi: 5 addım

Video: Dondurucu Siqnal Rölesi: 5 addım

Video: Dondurucu Siqnal Rölesi: 5 addım
Video: Şerit Takip Sistemi Kaza Anı 🚘 Lane Tracking System Accident ⚡️🆘⚠️⛔️ 2024, Iyul
Anonim
Dondurucu Siqnal Rölesi
Dondurucu Siqnal Rölesi

Dondurucumuz yaşayış yerimizdən təcrid olunmuş bir yardım otağında yerləşir. Bəzən dondurucunun qapısı düzgün bağlanmır və siqnalizasiya sönür. Məsələ burasındadır ki, yaşayış yerimizdə olsaq bunu eşidə bilmərik. Dondurucunun qapısının açıq olduğu mesajını necə əldə edə bilərik? Bu ümumi bir məsələdir, evlərimizdə bizimlə danışan cihazlarımız var, amma hər hansı bir səbəbdən eşitməsək nə olar. Bunu bir az əylənmək üçün başladım, amma daha ciddi bir tətbiqdə istifadə edilə bilər.

Bu problemin 2 hissəsi var, həyəcanın söndüyünü aşkar etmək üçün bir üsula və bu həqiqəti yaşayış sahəmizə çatdırmaq üçün bir üsula ehtiyacımız var. Yerləşdirdiyim dizayn, dondurucu siqnalın sönməsini dinləmək üçün Raspberry Pi istifadə etmək və sonra uPNP effektiv olan yerli radiouma səsli bir həyəcan mesajı göndərmək idi. Universal Plug and Play (UpnP), şəbəkə üzərindəki müxtəlif cihazların, o cümlədən media serverləri və oyunçuların təqdim etdiyi xidmətləri kəşf etmək və onlarla ünsiyyət qurmaq üçün bir standartdır, baxmayaraq ki, standart hazırlandıqda dondurucuların nəzərdə tutulduğunu düşünmürəm. Xəbərdarlıq mesajı yüksək və qıcıqlandırıcı idi və radio sönənə qədər sonsuzca təkrarlanır.

Zəngli bir Raspberry Pi Zero W və Seeed ReSpeaker 2-Mics Pi HAT ilə təsbit etməyi seçdim Raspberry PI Zero, Raspberry Pi-nin aşağı qiymətli bir versiyasıdır və W seçimində WiFi quraşdırılıb, Seeed Pi HAT isə daha ucuzdur 10 dollar, quraşdırılmış LED və İstifadəçi Düyməsinə malikdir. Pi HAT, Raspberry Pi -yə birbaşa bağlanan və çox sadə bir montaj proseduru edən genişləndirmə kartlarıdır. İstənilən Pi versiyası iş üçün daha bacarıqlı olardı və bu quruluşda quraşdırılmış LED-lərdən istifadə etsəm də, seçilmiş mikrofon əvəz edilə bilər.

Bir radio və ya TV -nin sizin üçün işləyəcəyini yoxlamaq asandır. Çox güman ki, "DLNA effektiv" və ya oxşar olaraq təsvir ediləcək. Bu ünsiyyət üçün uPNP istifadə edir. Windows PC -də bir mp3 faylı və "Cihaza Yayımla" seçin. Cihazınız görünsə və faylı oxuya bilsəniz, getməyiniz yaxşıdır.

Proqramı 2 python skriptinə böldüm, checkFreezer.py bir dondurucu siqnalı tetiklenip tetiklenmediğini yoxlamaq və alarmı qaldırmaq üçün liftAlarm.py. Bu skriptlər ayrıca inkişaf etdirilə və sınaqdan keçirilə bilər və fərqli mikrofonların həyəcan siqnalı qaldırma üsulları ilə asanlıqla uyğunlaşdırıla və ya əvəz edilə bilər.

Təchizat

  • Proqram təminatı -https://github.com/wapringle/freezer-alarm
  • Moruq PI Zero W
  • ReSpeaker 2-Mics Pi HAT görüldü
  • uPNP effektiv radio

Addım 1: Detektorun dizaynı

Dondurucunun qapısı açıq qaldıqda və temperatur yüksəldikdə, dondurucu səsli "bip bip bip" siqnalı verir. Əksər elektron siqnallarda olduğu kimi, bu tək bir tezlikdir. Fikir, səs girişini nümunə götürmək, zamana əsaslanan siqnalı tezliyə əsaslanan bir siqnala çevirən Fast Fourier Transformu (FFT) həyata keçirmək, başqa sözlə siqnaldakı fərqli tezlikləri göstərmək üçün bir siqnalı qırmaqdır. RGB LED Zolaqlı Təlim Edilə bilən Raspberry Pi Spektr Analizatoruna baxın Zil səsi tezliyində bir pik axtara bilərik və səs siqnalı bir müddət aktiv olduqda həyəcanı işə sala bilərik.

Bu detektorun 2 tələbi var

  • Ətraf səs -küy olsa belə, səs siqnalı aşkarlanmalıdır (yanlış neqativliyi aradan qaldırın)
  • Ətraf səs -küyə səbəb olmamalıdır (yanlış pozitivliyi aradan qaldırın)

Qulluq otağında bir Hoover çalıştırmanın yaxşı bir test olacağına qərar verdim. Zəngli siqnalı işə salmamalı və dondurucu siqnalı sönəndə və Hoover işləyərkən həyəcan siqnalı verilməlidir.

Addım 2: Detektorun konfiqurasiyası

Detektorun konfiqurasiyası
Detektorun konfiqurasiyası
Detektorun konfiqurasiyası
Detektorun konfiqurasiyası
Detektorun konfiqurasiyası
Detektorun konfiqurasiyası

Telefonumla birlikdə, səs -küylü bir fonda və Hoover işləyərkən, yalnız dondurucu buzzerin WAV faylları kimi səs nümunələri götürdüm. Kodu FFT yerinə yetirmək üçün FFT üçün Audio Stream Oxu (Şübhə olduqda plagarise) yazısından uyğunlaşdırdım və səssiz, səs -küylü və çox səs -küylü fonda buzzerin xam və Fourier Transformed nümunələrini qurmaq üçün fourierTest.py skriptindən istifadə etdim. 645 tezliyindəki sıçrayış ilk süjetdə ifadə olunur və çox səs -küylü bir fonda hələ də əhəmiyyətlidir.

Addım 3: Detektorun qurulması

Detektorun yığılması

Çox sadə. Pi W daxili Wifi ilə gəlir və HAT, Pi üzərindəki GPIO pinlərinə birbaşa bağlanır. Proqramı konfiqurasiya etmək üçün addımlar tələb olunur

  • Raspberry Pi üzərində raspbian distro qurun. Bunu bacardığımı daha yaxşı izah edə biləcək bir çox bələdçi var.
  • Wifi qurun (yuxarıdakı kimi)
  • Alsa paketinin quraşdırılması lazımdır

$ sudo apt-get libasound-dev qurun

$ pip pyalsaaudio quraşdırın

  • HAT -ı moruq PI -yə qoşun
  • HAT sürücülərini quraşdırmaq üçün baxılan veb saytdakı Təlimatları izləyin.
  • HAT -ın işlədiyini və düzgün qurulduğunu yoxlamaq üçün görünən diaqnostikanı işə salın.

Detektor proqramı mikrofondan nümunə olaraq bir məlumat blokunu oxuyur, FFT edir və nümunədə səs siqnalı aşkar edib -etmədiyinə qərar verir. Səs nümunəsi sürətini 16 kHz -ə qədər azaldaraq və oxucunun qəbul edəcəyi ən böyük tamponu istifadə edərək bloku mümkün qədər uzun etməyə çalışdım. FFT hesablamasının çərçivələrin düşməsinə səbəb ola biləcəyindən narahat idim, amma bu olmadı.

Telefonda əvvəlcədən yazılmış nümunələrin olması, detektorun qurulmasını çox asanlaşdırdı, çünki dondurucuda yerində yoxlamadan əvvəl dəzgahda tam quruluşu edə bildim.

Detektorun öyrədilməsi

Zəngin WAV qeydinin dedektora çalındığı zaman detektor hər bir nümunəni tarayaraq öyrədildi. Proqram, ən yüksək güc səviyyəsinə (pik tezliyi) malik olan FFT spektrindəki mövqeyi, o zirvə tezliyinin səviyyəsi ilə birlikdə verir. Səs siqnalının tezliyini və yaydığı güc səviyyəsini tapmaq sadə məsələ idi.

Bir səs siqnalı olub olmadığını müəyyən etməyin 2 yolu var:-

  1. Səs siqnalı nümunədəki pik tezliyi idi?
  2. yoxsa səs siqnalının güc səviyyəsi bir eşik üzərində idi?

Hər iki üsul da sakit bir nümunədə işləyirdi, amma ikincisi səs -küylü bir nümunə ilə daha yaxşı idi, buna görə də istifadə etdim.

Bəzən bir nümunə bir bipi əhatə edir, bəzən də biplər arasında olur və hər 3 bipdən sonra növbəti biplərdən əvvəl uzun bir fasilə olur. Bir bip siqnalının meydana gəldiyini etibarlı şəkildə aşkar etmək üçün hər bir nümunədə bir bip aşkarlandığı təqdirdə yuxarı səs, yoxsa isə aşağı səs verilmişdir. Bu səslər, bir bip nümunəsi ilə çıxan və aralar arasında yavaş -yavaş çürüyəcək bir sayım təyin etmək üçün ağırlıqlı idi. Sayma eşik həddinə çatdıqda həyəcan siqnalı verilə bilər. Təsadüfi səs -küy bir bip nümunəsi olaraq təsbit edilsə, say sıfıra dönər.

Daha sonra yuxarı və aşağı səs üçün eşiklə birlikdə çəkilərə ehtiyacımız var. Bunu bir çox nümunə üzərində sınaq və səhvlə etdim. Əsl səs siqnalının tezliyini təyin etməyimə ehtiyac yox idi, yalnız fft spektrində ən yaxşı tezliyi axtardım.

Addım 4: Radioya Mesaj Göndərin

Siqnalın qaldırılması ayrı bir skriptlə edildi. Lazım gələrsə, radionu açmaq, radio çalınan hər şeyi sındırmaq və radio yenidən sönənə qədər həyəcan mesajını təkrar etməkdir. Etibarlı məlumat və ya nümunələr əldə etməkdə böyük çətinlik çəkdiyim üçün istifadə olunan uPnP protokolunu tərsinə mühəndislik etməli oldum. Faydalı gördüyüm bir neçə istinad var idi

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ Bunun hamısının necə bir araya gəldiyinə gözəl bir baxış var
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file.
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

Windows -da işləyən Wireshark -ı kompüterimdən nümunə bir faylı radioda oxuyarkən mesaj ardıcıllığını açmaq üçün istifadə etdim və bir az qarışdıqdan sonra işləyən bir əmr ardıcıllığı aldım. Bu

  • Radio istədikdə xəbərdarlıq mesajı vermək üçün bir pop -up web serveri işə salın
  • Səs səviyyəsini LOUD olaraq təyin edin (xəbərdarlıq mesajı hər kəsin diqqətini çəkməlidir)
  • Xəbərdarlıq mesajının urini radioya ötürün
  • Mövcud vəziyyət "STOPPED" olana qədər radioda sorğu keçirin
  • Uri "PLAY" üçün radio alın
  • Mövcud vəziyyət "NO MEDIA PRESENT" olana qədər son 2 addımı təkrarlayın, bu siqnalın radio söndürülməsi ilə təsdiqləndiyini bildirir.
  • Nəhayət, veb serveri bağlayın və çıxın.

Bu, liftAlarm.py skriptidir

Addım 5: Bunu özünüz edin

Bunu Özünüz etmək
Bunu Özünüz etmək

"Dedektor" və "həyəcan siqnalı qaldırma" modeli yalnız dondurucular üçün deyil, avtomatik siqnalizasiyanın başqa bir vasitədən ötürülməsinin lazım olduğu hər yerdə faydalı ola bilər. Əgər bu maraq doğurursa, bir cəhd etməkdən çekinmeyin.

Mikrofon daxil olmaqla PI Zero W qurmaq

  • Donanımı 3 -cü addımda olduğu kimi yığın
  • Dondurucu siqnalizasiya skriptlərini bu Təlimatdan və ya bir neçə bonus parçasını ehtiva edən git deposundan yükləyin.

$ git klonu

Bortda olan APA102 LED-lərindən istifadə etmək üçün proqramı da quraşdırmalısınız. Apa102.py -nin bir nüsxəsini git iş qovluğuna daxil etdim

Detektorunuzu öyrədin

CheckFreezer.py skriptinə bir təlim seçimi əlavə etdim. Bu, tək başına işləyir və əmr satırına diaqnostika yazdırır, ancaq əvvəlcə həyəcan siqnallarının bəzi nümunələrini sakit bir mühitdə WAV faylları kimi qeyd etməlisiniz və eyni şeyi səs-küylü bir yerdə etməlisiniz. Təlimi başa çatdırmaq üçün əvvəlcə ən yüksək səviyyəli FFT tezliyini ("zirvəli tezlik") və sonra bir tetikleyicinin təyin edilməsi üçün bu tezliyin eşik səviyyəsini tapmalısınız. Bunu etmək üçün '-t' seçimi ilə təlim rejimində checkFreezer skriptini işə salın və həyəcanın qeydini oxuyun.

$ python checkFreezer.py -t

Bu skript təlim rejimində işləyir. Görülən HAT başlandıqda və LED yaşıllaşdıqda "hazır" yazır, sonra eşitdiyi hər bir qeyri-adi səs-küy üçün bir xətt, məsələn.

$ python checkFreezer.py -t

Hazır pik tezliyi 55 tətik səviyyəsi 1 tetiklendi? Yanlış pik tezliyi 645 tətik səviyyəsi 484 tetiklendi? Yanlış pik tezliyi 645 tətik səviyyəsi 380 tetiklendi? Yanlış

Pik tezliyi, bu vəziyyətdə 645 -dir və bu, tetikleyici tezliyə çevrilir. İndi tətik səviyyəsini əldə etmək üçün tətiyi təyin edərək checkFreezer -i yenidən başladın

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

Hazır pik tezliyi 645 tətik səviyyəsi 1273 tetiklendi? Yanlış pik tezliyi 645 tətik səviyyəsi 653 tetiklendi? Yanlış pik tezliyi 645 tətik səviyyəsi 641 tetiklendi? Yanlış pik tezliyi 645 tətik səviyyəsi 616 tetiklendi? Yanlış

Nəhayət, bir səs siqnalı aşkar edildikdə yanan, lakin səs -küyə məhəl qoymayan bir tetikleyici eşikə ehtiyacımız var

$ python checkFreezer.py -t --trigger = 645 -eşik = 500

Hazır pik tezliyi 645 tətik səviyyəsi 581 tetiklendi? Əsl pik tezliyi 645 tətik səviyyəsi 798 tetiklendi? Əsl pik tezliyi 645 tətik səviyyəsi 521 tetiklenirmi? Doğru

Bunu bir neçə səs -küylü nümunəyə qarşı sınayın və yuxuya gedənin səsi ilə ətrafdakı səs -küy arasında fərq qoyan bir eşik dəyəri təyin etməlisiniz. Bir neçə saniyə ərzində səs siqnalı səsləndirildikdə LED -in qırmızıya çevrildiyini də görmək lazımdır. Gəlməkdə tez/yavaş olarsa, skriptdəki parametrləri düzəldin

Radioya qoşulur

Skriptləri öz quruluşunuz üçün konfiqurasiya etmək üçün cihazınızın UPnP xidmətləri üçün istifadə etdiyi IP ünvanını və port nömrəsini tapmalısınız. Radio qurğusu bunları təmin etməlidir. Varsayılan port nömrəsi 8080 -dir və fərqli olsaydı sürpriz olardı.

Varsayılan bir alarm mesajı verdim, freezer.mp3. Öz mesajınızla əvəz etməkdən çekinmeyin.

Ssenarini uyğun IP ünvanları ilə düzəldin və skripti işə salın.

$ python artırmaAlarm.py

Hər şey qaydasındadırsa, radio sönənə qədər yüksək və qıcıqlandırıcı həyəcan siqnalı radiounuzdan çıxacaq və həyəcanı ləğv edəcək.

Ssenari işləyərkən, həyəcan siqnalı radioya, bəlkə də bir təhlükəsizlik probleminə xidmət etmək üçün bir mini veb serveri işə salır, ancaq həyəcan mesajı səslənərkən aktivdir.

Canlı gediş

'-T' təlim bayrağını çıxarın və öz dəyərlərinizlə checkFreezer'i işə salın, məsələn

$ python checkFreezer.py --trigger = 645 -eşik = 200

Yenidən başlamağa başlamaq üçün /etc/rc.local, cd/home/pi/dondurucu siqnalizasiya

(python checkFreezer.py --trigger = 645 -threshold = 200> /tmp /freezer 2> /tmp /freezererror &) və 0 -dan çıxın

Yaşıl LED yanacaq və hərəkətə hazırsınız. Siqnal səsinizin qeydini səsləndirin və bir neçə saniyədən sonra LED qırmızıya çevriləcək və həyəcan mesajı radiounuzda səslənəcək.

Nəhayət

PI -ni dondurucunun yaxınlığında, yoldan kənarda və enerji təchizatı ilə bir yerə yerləşdirin. Güc və yaşıl LED yanmalıdır. Qapını açıq qoyaraq həyəcan siqnalını işə salın. İşıq qırmızıya çevrilməlidir və həyəcan mesajı radioda səslənməlidir.

Uğurlar !! Sən etdin. Dondurucudan buzla uzun bir içki içə bilərsiniz, ancaq dondurucunun qapısını bağlamağı unutmayın!

Tövsiyə: