Სარჩევი:

საყინულე სიგნალიზაციის სარელეო: 5 ნაბიჯი
საყინულე სიგნალიზაციის სარელეო: 5 ნაბიჯი

ვიდეო: საყინულე სიგნალიზაციის სარელეო: 5 ნაბიჯი

ვიდეო: საყინულე სიგნალიზაციის სარელეო: 5 ნაბიჯი
ვიდეო: ეკჰარტ ტოლე - "აწმყოს ძალა" - აუდიო წიგნი - Audible Read Along 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, აქვს ჩაშენებული LED- ები და მომხმარებლის ღილაკი. Pi HAT არის გაფართოების ბარათები, რომლებიც უშუალოდ ჯდება Raspberry Pi– ზე და აკეთებს ძალიან მარტივ შეკრების პროცედურას. ნებისმიერი Pi ვერსია იქნება უფრო მეტი ვიდრე შეუძლია სამუშაოს და მიკროფონი არჩეული შეიძლება შეიცვალოს, თუმცა მე გამოვიყენე ჩამონტაჟებული LED- ები ამ აღნაგობაში.

ადვილი შესამოწმებელია თუ არა რადიო ან ტელევიზია თქვენთვის. უფრო სავარაუდოა, რომ ის აღწერილი იქნება როგორც "ჩართული DLNA" ან მსგავსი. ეს იყენებს uPNP კომუნიკაციისთვის. Windows კომპიუტერზე შეარჩიეთ mp3 ფაილი და "ტრანსლირება მოწყობილობაზე". თუ თქვენი მოწყობილობა გამოჩნდება და შეგიძლიათ ფაილის დაკვრა, მაშინ კარგია წასვლა.

მე პროგრამული უზრუნველყოფა გავყავი 2 პითონის სკრიპტად, checkFreezer.py, რათა შევამოწმო, გააქტიურებულია თუ არა საყინულე სიგნალი და დააყენე alarmAprm.py მაღვიძარა. ეს სკრიპტები შეიძლება ცალკე შემუშავდეს და შემოწმდეს და ადვილად ადაპტირდეს ან შეიცვალოს სხვადასხვა მიკროფონების სიგნალიზაციის ამაღლების მეთოდები.

მარაგები

  • პროგრამული უზრუნველყოფა -https://github.com/wapringle/freezer-alarm
  • ჟოლო PI Zero W
  • ნახა ReSpeaker 2-Mics Pi HAT
  • uPNP ჩართული რადიო

ნაბიჯი 1: დეტექტორის დიზაინი

როდესაც საყინულე კარი ღია რჩება და ტემპერატურა იმატებს, საყინულე იძლევა სიგნალს "beep beep beep" სიგნალს. უმეტესწილად ელექტრონული სიგნალების მსგავსად, ეს არის ერთი სიხშირე. იდეა არის აუდიო შეყვანის ნიმუშის აღება, სწრაფი ფურიეს ტრანსფორმაციის (FFT) შესრულება, რომელიც გარდაქმნის დროზე დაფუძნებულ სიგნალს სიხშირეზე, სხვაგვარად რომ ვთქვათ ის ანადგურებს სიგნალს სიგნალში სხვადასხვა სიხშირის გამოსახვის მიზნით. იხილეთ ჟოლოს Pi ინსტრუქციის ინსტრუქტორი RGB LED ზოლით ჩვენ შეგვიძლია ვეძიოთ პიკს ზუზერის სიხშირეზე და განგაში გამოიწვიოს, როდესაც ზუზერი გარკვეული დროის განმავლობაში აქტიურია.

ამ დეტექტორს აქვს 2 მოთხოვნა

  • მან უნდა აღმოაჩინოს ზარი, თუნდაც გარემოს ხმაურის არსებობისას (ცრუ ნეგატივის აღმოფხვრა)
  • ის არ უნდა იყოს გამოწვეული გარემოს ხმაურით (ცრუ პოზიტივის აღმოფხვრა)

მე გადავწყვიტე, რომ კომუნალურ ოთახში ჰუვერის გაშვება კარგი გამოცდა იქნებოდა. მან არ უნდა გამოიწვიოს სიგნალიზაცია და მაღვიძარა უნდა გააქტიურდეს, როდესაც საყინულე ზუზერი გათიშავს და ჰუვერი მუშაობს.

ნაბიჯი 2: დეტექტორის კონფიგურაცია

დეტექტორის კონფიგურაცია
დეტექტორის კონფიგურაცია
დეტექტორის კონფიგურაცია
დეტექტორის კონფიგურაცია
დეტექტორის კონფიგურაცია
დეტექტორის კონფიგურაცია

ტელეფონით ავიღე აუდიო ნიმუშები, როგორც საყინულე ზუზერის WAV ფაილები, ხმაურიანი ფონით და ჰუვერის მუშაობით. მე შევარჩიე კოდი FFT– ს შესასრულებლად პოსტიდან კითხვის აუდიო ნაკადი FFT– სთვის (როდესაც ეჭვი გეპარებათ) და გამოვიყენე სკრიპტი fourierTest.py ბუზერის ნედლი და ფურიე ტრანსფორმირებული ნიმუშების შესაქმნელად მშვიდი, ხმაურიანი და ძალიან ხმაურიანი ფონზე. 645 სიხშირის დონის ვარდნა გამოხატულია პირველ ნაკვეთში და კვლავ მნიშვნელოვანია ხმაურიანი ფონით.

ნაბიჯი 3: დეტექტორის აგება

დეტექტორის აწყობა

Ძალიან მარტივი. Pi W მოყვება ჩაშენებული Wifi და HAT ჩართულია დიექტურად GPIO ქინძისთავებში Pi- ზე. პროგრამული უზრუნველყოფის კონფიგურაცია მოითხოვს ნაბიჯებს

  • დააინსტალირეთ raspbian დისტრო Raspberry Pi– ზე. არსებობს უამრავი სახელმძღვანელო ამის შესახებ, რომელთაც შეუძლიათ ეს უკეთესად აგიხსნან, ვიდრე მე შემიძლია.
  • დააყენეთ Wifi (ზემოთ ზემოთ)
  • მას სჭირდება ალსა პაკეტის დაყენება

$ sudo apt-get დააინსტალირეთ libasound-dev

$ pip დააინსტალირეთ pyalsaaudio

  • შეაერთეთ ქუდი ჟოლოს PI– სთან
  • მიჰყევით ინსტრუქციას ნახულ ვებგვერდზე, რომ დააინსტალიროთ დრაივერები HAT– ისთვის.
  • გაუშვით ხილული დიაგნოსტიკა, რომ შეამოწმოთ HAT მუშაობს და სწორად არის კონფიგურირებული.

დეტექტორის პროგრამა კითხულობს მონაცემთა ბლოკს, როგორც მიკროფონის ნიმუშს, აკეთებს FFT- ს და წყვეტს აღმოაჩინა თუ არა მას ზუმერი ნიმუშში. მე შევეცადე რაც შეიძლება დიდხანს გამეკეთებინა აუდიო ნიმუშის სიჩქარის შემცირება 16 კჰც -მდე და ყველაზე დიდი ბუფერის გამოყენებით, რომელსაც მკითხველი მიიღებდა. მე შეშფოთებული ვიყავი, რომ FFT გაანგარიშებამ შეიძლება გამოიწვიოს ჩარჩოების ამოღება, მაგრამ ეს არ მოხდა.

ტელეფონზე წინასწარ ჩაწერილი ნიმუშების წყალობით დეტექტორის აგება ბევრად უფრო ადვილი გახდა, რადგან შემეძლო სკამზე სრულად შემექმნა საყინულეში ადგილზე შესამოწმებლად.

დეტექტორის სწავლება

დეტექტორი გაწვრთნილი იყო თითოეული ნიმუშის სკანირებით, როდესაც დეტექტორზე დაუკრა ზუზერის WAV ჩანაწერი. პროგრამა აჩვენებს პოზიციას FFT სპექტრში უმაღლესი სიმძლავრის დონით (პიკის სიხშირე), ამ პიკის სიხშირის დონესთან ერთად. მარტივი საკითხი იყო ზუზერის სიხშირის პოვნა და ენერგიის დონე, რომელსაც ასხივებდა.

არსებობს ორი გზა იმის დასადგენად, იყო თუ არა სიგნალი:-

  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 რადიოს
  • გამოკითხეთ რადიო, სანამ არსებული მდგომარეობა არ შეჩერდება
  • მიიღეთ რადიო "PLAY" uri
  • გაიმეორეთ ბოლო 2 ნაბიჯი მანამ, სანამ ამჟამინდელი მდგომარეობა არ არის "მედია არ არის", რაც ნიშნავს რომ სიგნალი აღიარებულია რადიოს გამორთვით
  • საბოლოოდ დახურეთ ვებ სერვერი და გამოდით.

ეს არის სცენარი raiseAlarm.py

ნაბიჯი 5: ამის გაკეთება საკუთარ თავს

აკეთებს ამას საკუთარ თავს
აკეთებს ამას საკუთარ თავს

მოდელი "დეტექტორი" და "მაღვიძარა" არ არის მხოლოდ საყინულეებისთვის, ის შეიძლება სასარგებლო იყოს ყველგან, სადაც საჭიროა ავტომატური სიგნალიზაციის გადაცემა სხვა საშუალებით. თუ ეს საინტერესო იქნება, თავისუფლად გაისეირნეთ.

PI Zero W- ის დაყენება, მიკროფონის ჩათვლით

  • შეაგროვეთ ტექნიკა, როგორც მე –3 ნაბიჯში
  • ჩამოტვირთეთ საყინულე-განგაშის სკრიპტები ამ ინსტრუქციიდან, ან git საცავიდან, რომელიც შეიცავს რამდენიმე ბონუს ჩანაწერს

$ git კლონი

თქვენ ასევე უნდა დააინსტალიროთ პროგრამული უზრუნველყოფა, რათა გამოიყენოთ ბორტზე APA102 LED- ები. მე ჩავრთე apa102.py ასლი git სამუშაო დირექტორიაში

ავარჯიშეთ თქვენი დეტექტორი

CheckFreezer.py სკრიპტს დავამატე ტრენინგის ვარიანტი. ეს მუშაობს დამოუკიდებლად და ბეჭდავს დიაგნოსტიკას ბრძანების ხაზზე, მაგრამ ჯერ თქვენ უნდა ჩაწეროთ სიგნალიზაციის რამდენიმე ნიმუში წყნარ გარემოში, როგორც WAV ფაილები და იგივე გააკეთოთ ხმაურიან სიტუაციებში. ტრენინგის დასასრულებლად თქვენ ჯერ უნდა იპოვოთ FFT სიხშირე ყველაზე მაღალი დონით ("პიკის სიხშირე") და შემდეგ ბარიერი დონე ამ სიხშირისთვის ტრიგერის დასადგენად. ამისათვის გაუშვით სკრიპტის checkFreezer სასწავლო რეჟიმში, ‘-t’ ვარიანტით და დაუკარით სიგნალიზაციის ჩანაწერი.

$ python checkFreezer.py -t

ეს აწარმოებს სკრიპტს ტრენინგის რეჟიმში. ის იბეჭდება "მზადაა", როდესაც დანახული ქუდი ინიციალიზებულია და LED შუქდება მწვანე, შემდეგ კი ხაზი მისცემს ყოველ უმნიშვნელო ხმაურს, რომელსაც ისმენს, მაგ.

$ python checkFreezer.py -t

მზად ხართ პიკური სიხშირე 55 გამოიწვიოს დონე 1 გამოიწვია? ყალბი პიკური სიხშირე 645 გამოიწვია დონე 484 გამოიწვია? ყალბი პიკური სიხშირე 645 გამოიწვია დონე 380 გამოიწვია? ყალბი

პიკური სიხშირე არის, ამ შემთხვევაში 645 და ეს ხდება გამომწვევი სიხშირე. ახლა რომ მიიღოთ ტრიგერის დონე, გაიმეორეთ checkFreezer და დააყენეთ ტრიგერი

$ python checkFreezer.py -t -ტრიგერი = 645

მზად ხართ პიკური სიხშირე 645 გამოიწვიოს დონე 1273 გამოიწვია? ყალბი პიკური სიხშირე 645 გამოიწვია დონე 653 გამოიწვია? ყალბი პიკური სიხშირე 645 გამოიწვია დონე 641 გამოიწვია? ყალბი პიკური სიხშირე 645 გამოიწვია დონე 616 გამოიწვია? ყალბი

დაბოლოს, ჩვენ გვჭირდება ტრიგერის ზღურბლი, რომელიც იხსნება როდესაც სიგნალი გამოჩნდება, მაგრამ იგნორირებას უკეთებს ხმაურს, მაგ

$ python checkFreezer.py -t --trigger = 645 -ბარიერი = 500

მზად ხართ პიკური სიხშირე 645 გამოიწვიოს დონე 581 გამოიწვია? ჭეშმარიტი პიკური სიხშირე 645 გამოიწვია დონე 798 გამოიწვია? ჭეშმარიტი პიკური სიხშირე 645 გამოიწვევს დონის 521 გამოიწვია? მართალია

შეამოწმეთ ეს რამოდენიმე ხმაურიანი ნიმუშის წინააღმდეგ და თქვენ უნდა შეძლოთ განსაზღვროთ ბარიერის მნიშვნელობა, რომელიც განასხვავებს მბზინავ ხმასა და გარემოს ხმაურს. თქვენ ასევე უნდა ნახოთ LED, როდესაც ის წითლდება, როდესაც სიგნალის დაკვრა ხდება რამდენიმე წამის განმავლობაში. თუ ის სწრაფად/ნელა მოდის სკრიპტში არსებული პარამეტრების შესწორებაზე

რადიოსთან დაკავშირება

საკუთარი კონფიგურაციის სკრიპტების კონფიგურაციისთვის, თქვენ უნდა იპოვოთ IP მისამართი და პორტის ნომერი, რომელსაც თქვენი მოწყობილობა იყენებს UPnP სერვისებისთვის. რადიოს კონფიგურაციამ უნდა უზრუნველყოს ეს. ნაგულისხმევი პორტის ნომერია 8080 და გასაკვირი იქნება, თუ ის განსხვავებული იქნება.

მე მიაწოდა ნაგულისხმევი განგაშის შეტყობინება, freezer.mp3. მოგერიდებათ შეცვალოთ საკუთარი შეტყობინებით.

შეცვალეთ სკრიპტი შესაბამისი IP მისამართებით და გაუშვით სკრიპტი.

$ პითონი raiseAlarm.py

თუ ყველაფერი კარგადაა, ხმამაღალი და გამაღიზიანებელი განგაშის შეტყობინება გამოვა თქვენი რადიოდან, სანამ რადიო არ გამორთულია და გააუქმებს მაღვიძარას.

სანამ სკრიპტი მუშაობს, ის მუშაობს მინი ვებ სერვერზე, რომელიც ემსახურება განგაშის mp3 რადიოს, შესაძლოა უსაფრთხოების საკითხს, მაგრამ ის აქტიურია მხოლოდ მაღვიძარაზე დაკვრის დროს.

პირდაპირ ეთერში

ამოიღეთ '-t' სასწავლო დროშა და გაუშვით checkFreezer საკუთარი მნიშვნელობებით, მაგ

$ python checkFreezer.py --trigger = 645 -ბარიერი = 200

გადატვირთვის დასაწყებად, დაამატეთ /etc/rc.local, cd/home/pi/freezer-alarm

(python checkFreezer.py --trigger = 645 --threshold = 200> /tmp /freezer 2> /tmp /freezererror &) და გასვლა 0

მწვანე LED ანათებს და თქვენ მზად ხართ მოქმედებისთვის. ითამაშეთ თქვენი სიგნალის სიგნალის ჩანაწერი და რამდენიმე წამის შემდეგ LED გახდება წითელი და განგაშის შეტყობინება გაისმის თქვენს რადიოში.

ბოლოს და ბოლოს

განათავსეთ PI საყინულესთან ახლოს, გზის გარეთ და კვების ბლოკთან ახლოს. ჩართეთ და მწვანე LED უნდა აინთოს. შეამოწმეთ სიგნალიზაცია კარების ღია დატოვებით. შუქი უნდა აწითლდეს და განგაშის შეტყობინება უკრავს რადიოში.

წარმატებები !! თქვენ ეს გააკეთეთ. გაუმასპინძლდით ყინულით ყინულით ხანგრძლივი სასმელით, მაგრამ არ დაგავიწყდეთ საყინულის კარის დახურვა!

გირჩევთ: