Բովանդակություն:

Սառնարանային ազդանշանային ռելե `5 քայլ
Սառնարանային ազդանշանային ռելե `5 քայլ

Video: Սառնարանային ազդանշանային ռելե `5 քայլ

Video: Սառնարանային ազդանշանային ռելե `5 քայլ
Video: 5. Շրջանաձև երթևեկության խաչմերուկներ 2024, Հուլիսի
Anonim
Սառնարանային ազդանշանային ռելե
Սառնարանային ազդանշանային ռելե

Մեր սառնարանը գտնվում է օգտակար սենյակում, որը մեկուսացված է մեր կենդանի տարածքից: Երբեմն սառնարանի դուռը ճիշտ չի փակվում, և ահազանգը անջատվում է: Խնդիրն այն է, որ մենք չենք կարող դա լսել, եթե մեր կենդանի տարածքում ենք: Ինչպե՞ս ենք հաղորդագրություն ստանում, որ սառնարանի դուռը բաց է: Սա սովորական հարց է, մենք մեր տներում ունենք սարքեր, որոնք խոսում են մեզ հետ, բայց ինչ կլինի, եթե ինչ -ինչ պատճառներով չլսենք դրանք: Ես սա սկսեցի որպես մի փոքր զվարճալի, բայց դա կարող է օգտագործվել ավելի լուրջ ծրագրերում:

Այս խնդրի երկու մաս կա. Մեզ անհրաժեշտ է ահազանգի անջատման հայտնաբերման մեթոդ և այս փաստը մեր կենդանի տարածքին փոխանցելու մեթոդ: Դիզայնը, որի վրա ես հաստատվեցի, այն էր, որ օգտագործեցի 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անկացած Pi տարբերակ ավելի քան ունակ կլինի աշխատանքի համար, և ընտրված խոսափողը կարող է փոխարինվել, չնայած ես այս կառուցվածքում օգտագործել եմ ներկառուցված LED- ները:

Հեշտ է ստուգել, թե արդյոք ռադիոն կամ հեռուստատեսությունը կաշխատի ձեզ համար: Ավելի հավանական է, որ այն նկարագրվի որպես «DLNA միացված» կամ նմանատիպ: Սա օգտագործում է uPNP հաղորդակցվելու համար: Windows համակարգչի վրա ընտրեք mp3 ֆայլ և «Cast to Device»: Եթե ձեր սարքը հայտնվի, և դուք կարող եք ֆայլը նվագարկել, ուրեմն լավ կլինի:

Splitրագրակազմը ես բաժանեցի 2 պիթոնի սցենարի ՝ checkFreezer.py ՝ ստուգելու համար, թե արդյոք սառեցման ազդանշանը գործարկվե՞լ է, և բարձրացնել AlaArm.py- ն ՝ ահազանգը բարձրացնելու համար: Այս սցենարները կարող են մշակվել և փորձարկվել առանձին, և դրանք հեշտությամբ կարող են հարմարեցվել կամ փոխարինվել տարբեր խոսափողերի ահազանգման եղանակներով:

Պարագաներ

  • Softwareրագրակազմ -https://github.com/wapringle/freezer-alarm
  • Ազնվամորի PI Zero W
  • Տեսավ ReSpeaker 2-Mics Pi HAT- ը
  • uPNP միացված ռադիո

Քայլ 1. Դետեկտորի նախագծում

Երբ սառնարանի դուռը բաց է մնում և ջերմաստիճանը բարձրանում է, սառցարանը տալիս է լսելի «ազդանշանային ազդանշան» ազդանշան: Էլեկտրոնային ազդանշանների մեծ մասի նման, սա մեկ հաճախականություն է: Գաղափարն այն է, որ նմուշառվի աուդիո մուտքից, կատարվի Ֆուրիեի արագ փոխակերպում (FFT), որը ժամանակի վրա հիմնված ազդանշանը փոխակերպում է հաճախականության վրա ազդանշանի, այլ կերպ ասած ՝ ազդանշանը քայքայում է ՝ ազդանշանի տարբեր հաճախականությունները ցուցադրելու համար: Դիտեք RGB LED շերտի միջոցով հրահանգավորվող ազնվամորի Pi սպեկտրի անալիզատորը Մենք կարող ենք գագաթնակետ փնտրել ազդանշանային հաճախականությամբ և ազդանշան ազդանշան տալ, երբ ազդանշանը որոշ ժամանակ ակտիվ է:

Այս դետեկտորն ունի 2 պահանջ

  • Այն պետք է հայտնաբերի ազդանշանը, նույնիսկ շրջակա միջավայրի աղմուկի առկայության դեպքում (վերացնել կեղծ բացասականը)
  • Այն չպետք է հարուցվի շրջապատի աղմուկից (վերացրեք կեղծ դրականը)

Ես որոշեցի, որ կոմունալ սենյակում Հուվեր վարելը լավ փորձություն կլինի: Այն չպետք է ազդանշան տա, և ահազանգը պետք է միացվի, երբ սառցարանի բզզոցը անջատվի և Հուվերը գործի:

Քայլ 2: Կարգավորեք դետեկտորը

Կարգավորեք դետեկտորը
Կարգավորեք դետեկտորը
Կարգավորեք դետեկտորը
Կարգավորեք դետեկտորը
Կարգավորեք դետեկտորը
Կարգավորեք դետեկտորը

Հեռախոսով ես վերցրեցի աուդիո նմուշներ ՝ որպես սառցարանի ազդանշանի միայնակ WAV ֆայլեր, աղմկոտ ֆոնով և Հուվըրն աշխատում էր: Ես հարմարեցրեցի կոդը FFT- ի կատարման համար FFT- ի համար Reading Audio Stream- ից (կասկածի դեպքում, պլագարիզացիա) և օգտագործեցի fourierTest.py սցենարը `ձայնային, աղմկոտ և շատ աղմկոտ ֆոնին սղոցող հումքի և Ֆուրիեի կերպարանափոխված նմուշները գծելու համար: 645 հաճախականության մակարդակի բարձրացումն արտահայտվում է առաջին գծապատկերում և դեռևս նշանակալի է շատ աղմկոտ ֆոնով:

Քայլ 3. Դետեկտորի կառուցում

Դետեկտորի հավաքում:

Շատ պարզ. Pi W- ն գալիս է ներկառուցված Wifi- ով, և HAT- ը միաձուլվում է PiI- ի GPIO կապում: Theրագրակազմի կազմաձևումը պահանջում է քայլեր

  • Տեղադրեք raspbian distro Raspberry Pi- ի վրա: Կան բազմաթիվ ուղեցույցներ, որոնք կարող են դա ավելի լավ բացատրել, քան ես կարող եմ:
  • Կարգավորեք Wifi- ն (նույնը ՝ վերևում)
  • Անհրաժեշտ է տեղադրել alsa փաթեթը

$ sudo apt-get տեղադրել libasound-dev

$ pip տեղադրել pyalsaaudio

  • Միացրեք HAT- ը ազնվամորու PI- ին
  • Հետևեք տեսած վեբ կայքի հրահանգներին `HAT- ի վարորդները տեղադրելու համար:
  • Գործարկեք տեսած ախտորոշումը `ստուգելու համար, որ HAT- ը աշխատում է և ճիշտ կազմաձևված:

Դետեկտորային ծրագիրը կարդում է տվյալների բլոկը որպես նմուշ խոսափողից, կատարում է FFT- ն և որոշում, թե արդյոք հայտնաբերել է նմուշի ազդանշանը, թե ոչ: Ես փորձեցի հնարավորինս երկարացնել բլոկը `նվազեցնելով ձայնային նմուշի արագությունը մինչև 16 կՀց և օգտագործելով ամենամեծ բուֆերը, որը ընթերցողը կընդունի: Ես մտահոգված էի, որ FFT հաշվարկը կարող է հանգեցնել շրջանակների անկման, բայց դա տեղի չունեցավ:

Իմ հեռախոսի վրա նախապես գրանցված նմուշներ դետեկտորը կառուցելը շատ ավելի դյուրին դարձրեց, քանի որ ես կարող էի նստարանին ամբողջությամբ կառուցել նախքան սառնարանում տեղում ստուգելը:

Դետեկտորի ուսուցում:

Դետեկտորը պատրաստվել է յուրաքանչյուր նմուշի սկանավորման միջոցով, երբ ազդանշանի ձայնագրիչը դետեկտորի վրա հնչեցվել է WAV ձայնագրությունը: Outputրագիրը թողարկում է դիրքը FFT սպեկտրում `հզորության ամենաբարձր մակարդակով (գագաթնակետային հաճախականություն)` այդ գագաթնակետային հաճախականության մակարդակի հետ միասին: Պարզ հարց էր գտնել զնգոցի հաճախականությունը և դրա թողած հզորության մակարդակը:

Գոյություն ունի ազդանշանի առկայության հայտնաբերման 2 եղանակ.

  1. Արդյո՞ք ազդանշանային հաճախականությունը ընտրանքի գագաթնակետային հաճախականությունն էր:
  2. կամ ուժային մակարդակը ազդանշանային հաճախականությամբ շեմի՞ն էր:

Methodանկացած մեթոդ աշխատում էր հանգիստ նմուշում, բայց երկրորդը ավելի լավ էր աղմկոտ նմուշով, այնպես որ ես դա օգտագործեցի:

Երբեմն նմուշը ծածկում էր բիփը, երբեմն այն հնչում էր ազդանշանների միջև, իսկ յուրաքանչյուր 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

Ռադիոյով համակարգչիցս նմուշի ֆայլ նվագարկելիս ես օգտագործում էի Windows համակարգչի վրա աշխատող Wireshark- ը ՝ հաղորդագրությունների հաջորդականությունը ընտրելու համար, և մի փոքր քաշքշուկից հետո ստացա հրամանի հաջորդականություն, որն աշխատում էր: Սա

  • Գործարկեք թռուցիկ վեբ սերվեր ՝ նախազգուշացման հաղորդագրությունը մատուցելու համար, երբ ռադիոն դա խնդրի
  • Ձայնի մակարդակը սահմանեք LOUD (Նախազգուշացնող հաղորդագրությունը պետք է գրավի բոլորի ուշադրությունը)
  • Ռադիոյին փոխանցեք նախազգուշական հաղորդագրության uri- ը
  • Հարցրեք ռադիոն մինչև ներկա վիճակի «ԿԱՆԳՆԱՎՈՐՎԱ»
  • Ռադիոյին հասցրեք «PLAY» uri- ին
  • Կրկնեք վերջին 2 քայլերը, մինչև ընթացիկ վիճակը լինի «MԼՄ -ները ներկա չեն», ինչը նշանակում է, որ ահազանգը ճանաչվել է ՝ անջատելով ռադիոն
  • Վերջապես փակեք վեբ սերվերը և դուրս եկեք:

Սա scriptAriseAlarm.py- ն է

Քայլ 5: Դա արեք ինքներդ

Դա անում եք ինքներդ
Դա անում եք ինքներդ

«Դետեկտոր» և «ահազանգ» մոդելը միայն սառցարանների համար չէ, այն կարող է օգտակար լինել ցանկացած վայրում, որտեղ ավտոմատ ահազանգը պետք է փոխանցվի մեկ այլ միջոցի միջոցով: Եթե սա կհետաքրքրի, ազատ զգացեք:

PI Zero W- ի կարգավորում, ներառյալ խոսափողը

  • Հավաքեք սարքավորումները, ինչպես 3 -րդ քայլում
  • Ներբեռնեք սառեցման ահազանգի սցենարներ այս հրահանգից կամ git պահոցից, որը ներառում է մի քանի բոնուսային հետքեր

$ git կլոն

Դուք նաև պետք է տեղադրեք ծրագրակազմը ՝ ներկառուցված APA102 LED- ները օգտագործելու համար: Ես apa102.py- ի պատճենը ներառել եմ git աշխատանքային գրացուցակում

Վերապատրաստեք ձեր դետեկտորը

Ես checkFreezer.py սցենարին ավելացրել եմ ուսուցման տարբերակ: Սա ինքնուրույն աշխատում է և տպում ախտորոշումը հրամանի տողում, բայց նախ անհրաժեշտ է տագնապի որոշ նմուշներ ձայնագրել հանգիստ միջավայրում ՝ որպես WAV ֆայլեր, և նույնն անել աղմկոտ պայմաններում: Դասընթացն ավարտելու համար հարկավոր է նախ գտնել ամենաբարձր մակարդակով FFT հաճախականությունը («գագաթնակետային հաճախականությունը»), այնուհետև այդ հաճախականության շեմը `ձգան սահմանելու համար: Դա անելու համար գործարկեք script checkFreezer- ը ուսուցման ռեժիմում ՝ «-t» տարբերակով և նվագարկեք ահազանգի ձայնագրությունը:

$ python checkFreezer.py -t

Սա վարում է սցենարը վերապատրաստման ռեժիմում: Այն տպում է «պատրաստ», երբ սղոցված HAT- ը նախաստորագրվում է, և LED- ն դառնում է կանաչ, այնուհետև տող է լսվում յուրաքանչյուր ոչ մանր աղմուկի համար, օրինակ.

$ 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 -շեմ = 500

Պատրա՞ստ եք պիկ հաճախականությունը 645 ձգան մակարդակը 581 գործարկվել է: Իսկական գագաթնակետային հաճախականությունը 645 ձգան մակարդակ 798 գործարկվե՞լ է: Իսկական գագաթնակետային հաճախականությունը 645 ձգան մակարդակը 521 գործարկվե՞լ է: Ճիշտ

Փորձարկեք սա մի քանի աղմկոտ նմուշների դեմ, և դուք պետք է կարողանաք սահմանել մի շեմային արժեք, որը տարբերակում է աղմկող ձայնի և շրջապատի աղմուկի միջև: Դուք նաև պետք է տեսնեք, որ LED- ը կարմիր է դառնում, երբ մի քանի վայրկյան հնչում է ազդանշանի ձայնագրությունը: Եթե այն արագ/դանդաղ է գալիս, խմբագրեք սցենարի կարգավորումները

Միացում ռադիոյին

Ձեր սեփական կարգավորման սցենարները կազմաձևելու համար դուք պետք է գտնեք IP հասցեն և պորտի համարը, որը ձեր սարքն օգտագործում է UPnP ծառայությունների համար: Ռադիոկայանը պետք է ապահովի դրանք: Լռելյայն նավահանգստի համարը 8080 է, և անակնկալ կլիներ, եթե այն այլ լիներ:

Ես տրամադրել եմ ահազանգի կանխադրված հաղորդագրություն ՝ freezer.mp3: Ազատորեն փոխարինեք ձեր սեփական հաղորդագրությամբ:

Խմբագրեք սցենարը համապատասխան IP հասցեներով և գործարկեք սցենարը:

$ python 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- ը պետք է միանա: Ահազանգի գործարկման փորձարկում ՝ դուռը բաց թողնելով: Լույսը պետք է կարմիր դառնա, և ահազանգի ազդանշանը հնչի ռադիոյով:

Հաջողություն !! Դու դա արել ես Հյուրասիրեք սառցարանից սառույցով երկար ըմպելիք, բայց մի մոռացեք փակել սառնարանի դուռը:

Խորհուրդ ենք տալիս: