Სარჩევი:

Arduino RF სენსორის დეკოდირება: 5 ნაბიჯი
Arduino RF სენსორის დეკოდირება: 5 ნაბიჯი

ვიდეო: Arduino RF სენსორის დეკოდირება: 5 ნაბიჯი

ვიდეო: Arduino RF სენსორის დეკოდირება: 5 ნაბიჯი
ვიდეო: Простая беспроводная сеть датчиков на Arduino и 433 MHz 2024, ნოემბერი
Anonim
Arduino RF სენსორის დეკოდი
Arduino RF სენსორის დეკოდი

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

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

ნაბიჯი 1: სენსორული მოდულები

სენსორული მოდულები
სენსორული მოდულები
სენსორული მოდულები
სენსორული მოდულები
სენსორული მოდულები
სენსორული მოდულები
სენსორული მოდულები
სენსორული მოდულები

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

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

ნაბიჯი 2: აპარატურა

ტექნიკა
ტექნიკა
ტექნიკა
ტექნიკა

მე თავდაპირველად შევქმენი სენსორული დეკოდიორი PIC მიკროკონტროლერისა და ასამბლეის ენის გამოყენებით. მე არდუინოს ვარიანტებით ვთამაშობ ბოლო დროს, ასე მეგონა ვნახავდი თუ არა მისი გამეორება. მარტივი სქემატური ნაჩვენებია ზემოთ და ასევე არის ჩემი პროტოტიპის სურათი. ერთადერთი რაც მე გავაკეთე იყო სამი საერთო ჯამპერის მავთულის გამოყენება Arduino Nano– დან RF მიმღების დაფაზე გადასასვლელად. ძალა და ერთი მონაცემთა ხაზი არის ყველაფერი რაც საჭიროა.

თუ წაიკითხავთ ჩემს ინსტრუქციას "3-in-1 დროისა და ამინდის ჩვენებაზე" ნახავთ, რომ მე ვიყენებ საერთო RXB6, 433-MHz მიმღებს. თქვენ შეიძლება შეძლოთ მართლაც იაფი მიმღებები იმუშაოთ ამ პროექტისათვის საჭირო მცირე მანძილზე, მაგრამ მე მაინც გირჩევთ გამოიყენოთ სუპერ-ჰეტეროდინული მიმღები.

ნაბიჯი 3: პროგრამული უზრუნველყოფა

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

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

შეფერხების დამმუშავებელი ჯერ განსაზღვრავს, არის თუ არა დაკავებული რაოდენობა საკმარისად გრძელი, რომ იყოს საწყისი/სინქრონიზებული პულსი. სხვადასხვა მოწყობილობები, რომლებიც მე მაქვს სინქრონიზაციის პულსი 4, 9, 10 და 14 მილიწამი. Min/max ნებადართული სინქრონიზაციის მნიშვნელობების განსაზღვრება წინაა პროგრამულ უზრუნველყოფაში და ამჟამად დადგენილია 3 და 16 მილიწამი. ცოტა დრო ასევე განსხვავდება სენსორებს შორის, ამიტომ ბიტების დეკოდირების ალგორითმმა უნდა გაითვალისწინოს ეს. პირველი ბიტის ბიტის დრო ინახება ისევე როგორც მომდევნო ბიტის დრო, რომელსაც აქვს მნიშვნელოვანი განსხვავება პირველი ბიტისგან. მომდევნო ბიტ -დროის პირდაპირი შედარება შეუძლებელია, ამიტომ გამოიყენება "fudge factor" ("ვარიაცია"). ბიტის გაშიფვრა იწყება იმის დაშვებით, რომ პირველი მონაცემთა ბიტი ყოველთვის ჩაწერილია როგორც ლოგიკა 1. ეს მნიშვნელობა ინახება და შემდეგ გამოიყენება შემდგომი ბიტების შესამოწმებლად. თუ შემდგომი მონაცემების ბიტების რაოდენობა შენახული მნიშვნელობის ვარიაციის ფანჯარაშია, ის ასევე ჩაწერილია როგორც ლოგიკა 1. თუ ის შენახული მნიშვნელობის ვარიაციის ფანჯრის მიღმაა, მაშინ ის ჩაწერილია როგორც ლოგიკა 0. თუ ლოგიკა 0 ბიტის დრო უფრო მოკლეა, ვიდრე პირველი ბიტი, შემდეგ დროშა არის მითითებული, რომ უთხრას პროგრამულ უზრუნველყოფას, რომ ჩვენების დაწყებამდე საჭიროა ბაიტების გადაბრუნება. ერთადერთი შემთხვევა, როდესაც ეს ალგორითმი ვერ ხერხდება არის, როდესაც შეტყობინების ბიტები 0 -ია. ჩვენ შეგვიძლია მივიღოთ ეს შეზღუდვა, რადგან ამგვარი შეტყობინება უაზროა.

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

ნაბიჯი 4: მონაცემთა აღრიცხვა

მონაცემთა აღრიცხვა
მონაცემთა აღრიცხვა

პროგრამული უზრუნველყოფა შექმნილია მოაქციოს მონაცემები ASCII სიმბოლოების სახით Arduino– ს სერიული (TX) გამოყვანის საშუალებით. როდესაც გავაკეთე PIC ვერსია, მე მჭირდებოდა კომპიუტერთან დაკავშირება ტერმინალურ პროგრამასთან, მონაცემების ჩვენების მიზნით. Arduino IDE- ს ერთ -ერთი უპირატესობა ის არის, რომ მას აქვს სერიული მონიტორის ფუნქცია ჩაშენებული. მე სერიული პორტის მაჩვენებელი 115.2k- ზე დავაყენე და შემდეგ იმავე მაჩვენებლით სერიული მონიტორის ფანჯარა დავაყენე. აქ გადაღებული ეკრანი აჩვენებს ტიპურ ჩვენებას სხვადასხვა სენსორებიდან, რომლებიც მე მაქვს. როგორც ხედავთ, მონაცემები ზოგჯერ არ არის სრულყოფილი, მაგრამ თქვენ მარტივად შეგიძლიათ განსაზღვროთ რა უნდა იყოს თითოეული სენსორის რეალური მნიშვნელობა.

ნაბიჯი 5: მიმღების პროგრამული უზრუნველყოფის ნიმუში

ნიმუშის მიმღები პროგრამული უზრუნველყოფა
ნიმუშის მიმღები პროგრამული უზრუნველყოფა

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

გირჩევთ: