Мазмұны:

Arduino RF датчиктерінің декодері: 5 қадам
Arduino RF датчиктерінің декодері: 5 қадам

Бейне: Arduino RF датчиктерінің декодері: 5 қадам

Бейне: Arduino RF датчиктерінің декодері: 5 қадам
Бейне: ПЕРЕДАТЧИК с ПРИЕМНИКОМ на 433 Мгц / Как работают и что могут / 2024, Қараша
Anonim
Arduino RF сенсорлық декодері
Arduino RF сенсорлық декодері

Менің бұрынғы үйімде есік сенсорлары, қозғалыс сенсоры және басқару панелі бар алдын ала орнатылған қауіпсіздік жүйесі бар. Барлығы шкафтағы үлкен электроника қорабына бекітілген және дабыл болған кезде стационарлық телефонды автоматты түрде сөндіру үшін нұсқаулар бар. Мен онымен ойнауға тырысқанда, есік датчиктерінің біреуі толық орнатылмағанын, ал екіншісі дұрыс емес туралауға байланысты үзілісті екенін білдім. Күзет компаниясының визит карточкасында айтылған кәсіби қондырғы үшін. Сол кездегі менің шешімім - бірнеше интернет -қауіпсіздік камерасы мен арзан сымсыз қауіпсіздік дабылы.

Бүгінге дейін және сымсыз дабыл менің жертөлемдегі қорапта орналасқан. Арзан радиожабылдағыш қабылдағышты сатып алғаннан кейін, менде бар дабыл датчиктері мен қашықтан басқару пульті арқылы жіберілетін хабарламаларды шешуге болатынын білуге шешім қабылдадым. Мен олардың барлығы арзан дабыл қорабымен жұмыс істегендіктен, олардың бәрі бірдей хабарлама форматын басқа идентификатормен қолдануы керек деп ойладым. Мен көп ұзамай олар хабарламалардың жалпы құрылымында ғана ұқсас екенін білдім. Сондықтан жоба тез арада өте маңыздыдан өте қызықтыға айналды.

1 -қадам: сенсорлық модульдер

Сенсорлық модульдер
Сенсорлық модульдер
Сенсорлық модульдер
Сенсорлық модульдер
Сенсорлық модульдер
Сенсорлық модульдер
Сенсорлық модульдер
Сенсорлық модульдер

Жоғарыдағы суреттерде көріп тұрғаныңыздай, таратқыштарда есіктің ашық сенсорлары, қозғалыс детекторлары, қаруландыру пульті және дабыл қорабын бағдарламалау үшін қолданылатын сымсыз пернетақта бар. Белгілі болғандай, бұл екі құрылғыда да синхрондау ұзақтығы немесе бит ұзақтығы бірдей емес. Хабардың ұзындығынан басқа жалғыз ортақтық - бұл биттердің негізгі форматы. Әр бит белгілі бір уақыт кезеңін алады, нөл мен бір арасындағы айырмашылық жоғары/төмен бөліктердің жұмыс циклі болып табылады.

Жоғарыда көрсетілген әдемі толқын формасы мен бірінші рет алған емес. 433 МГц жиілік диапазонында трафик көп болғандықтан, мен бір триггерді қолдану ауқымын орнатпас бұрын сенсорды іске қосуды көздеуім керек болды. Бақытымызға орай, сенсорлар іске қосылған кезде деректер хабарламасының бірнеше көшірмесін шығарады, ал қашықтан басқару құралдары мен пернетақта перне басылғанша хабарларды шығаруды жалғастырады. Ауқымды қолдану арқылы мен әр элемент үшін синхрондау ұзындығын және деректер битінің ұзақтығын анықтай алдым. Жоғарыда айтылғандай, синхрондау уақыттары әр түрлі, ал бит уақыттары әр түрлі, бірақ хабарлама форматтарының барлығында төмен деңгейлі синхрондау бар, содан кейін 24 бит биті және бір нүктелік бит бар. Бұл маған әр құрылғының әр түрлі бөлшектерін қатаң кодтаусыз бағдарламалық қамтамасыз етуде жалпы декодерді құру үшін жеткілікті болды.

2 -қадам: Жабдық

Аппараттық құрал
Аппараттық құрал
Аппараттық құрал
Аппараттық құрал

Мен бастапқыда PIC микроконтроллері мен құрастыру тілінің көмегімен сенсорлық декодер құрдым. Мен жақында Arduino нұсқаларымен ойнадым, сондықтан оны қайталауға болатынын көремін деп ойладым. Қарапайым схема жоғарыда көрсетілген, сонымен қатар менің прототипімнің суреті бар. Мен тек Arduino Nano -дан РФ қабылдағыш тақтасына өту үшін үш қарапайым қосқыш сымды қолдандым. Қуат пен бір ғана деректер желісі қажет.

Егер сіз менің нұсқаулығымды «Уақыт пен ауа-райының дисплейінде 3-і 1-де» оқысаңыз, мен жалпы RXB6, 433-МГц қабылдағышты қолданатынымды көресіз. Сіз шынымен де арзан қабылдағыштарды осы жобаға қажетті қысқа мерзімде жұмыс істей аласыз, бірақ мен супер-гетеродинді қабылдағышты қолдануды ұсынамын.

3 -қадам: Бағдарламалық қамтамасыз ету

Бағдарламалық қамтамасыз ету алынған биттерді ASCII -дің көрінетін таңбаларына түрлендіреді. Ол синхрондау ұзындығының мәнін және 1 және 0 биттердің ұзындығын шығарады. Мен синхрондау ұзындығы мен бит форматтарын білетіндіктен, мен оларға арнайы бағдарламалық қамтамасыз етуді жаза алар едім. Оның орнына, мен синхрондау ұзындығын сұрыптау және деректердің биттерін автоматты түрде анықтау үшін жаза алатынымды білуді шештім. Бұл басқа форматтарды бір уақытта анықтауға тырысқым келсе, өзгертуді жеңілдетуі керек. Бағдарламалық жасақтама хабарламаның бірінші биті 1 немесе 0 екенін білмейтінін ескеру маңызды. Ол оны 1 деп есептейді, бірақ егер ол нөлге тең болуы керек екенін анықтаса, ол кері айналады. бит сериялы портқа жібермес бұрын аяқталған хабарды көрсетеді.

Синхрондау импульсінің уақыты мен деректер биттері үзіліс өңдегішін іске қосу үшін INT0 сыртқы үзіліс енгізуінің көмегімен анықталады. INT0 көтерілуге, құлауға немесе екі жиекке немесе тұрақты төмен деңгейге әсер етуі мүмкін. Бағдарламалық қамтамасыз ету екі шетінде де үзіледі және импульстің төмен болу уақытын өлшейді. Бұл жағдайды жеңілдетеді, себебі хабарды бастау/синхрондау-бұл төменгі деңгейдегі импульс және биттерді олардың төмен деңгейлі уақытына байланысты анықтауға болады.

Үзіліс өңдегіші алдымен түсірілген санның бастау/синхрондау импульсі болу үшін жеткілікті ұзақтығын анықтайды. Мендегі әр түрлі құрылғылар 4, 9, 10 және 14 миллисекундтық синхрондау импульстарын қолданады. Минималды/максималды рұқсат етілген синхрондау мәндерінің анықтамалары бағдарламалық қамтамасыз етудің алдында орналасқан және қазіргі уақытта 3 және 16 миллисекундқа орнатылған. Бит уақыты сенсорлар арасында да өзгереді, сондықтан биттерді декодтау алгоритмі мұны ескеруі керек. Бірінші разрядтың бит уақыты бірінші битке қарағанда айтарлықтай айырмашылығы бар келесі бит уақыты сияқты сақталады. Кейінгі разрядтарды тікелей салыстыру мүмкін емес, сондықтан «жалған фактор» анықтамасы («вариация») қолданылады. Битті декодтау бірінші деректер биті әрқашан логика ретінде жазылады деп есептеуден басталады. Бұл мән сақталады, содан кейін келесі биттерді тексеру үшін қолданылады. Егер келесі деректер битінің саны сақталған мәннің дисперсия терезесінде болса, онда ол логика 1 ретінде де жазылады. Егер ол сақталған мәннің дисперсия терезесінен тыс болса, онда ол 0 логикасы ретінде жазылады. бит уақыты бірінші разрядқа қарағанда қысқарады, содан кейін бағдарламалық жасақтамаға байттар көрсетілмес бұрын оларды аудару керектігін айтатын жалауша орнатылады. Бұл алгоритм сәтсіз болатын жалғыз жағдай - бұл хабарламадағы биттердің барлығы 0 -ге тең болуы. Біз бұл шектеулерді қабылдай аламыз, өйткені мұндай хабарлама мағынасыз.

Мені қызықтыратын сенсорлардың хабарлама ұзындығы 24 бит, бірақ бағдарламалық жасақтама бұл ұзындықпен шектелмейді. Жеті байтқа дейін буфер бар (тағы басқаларын қосуға болады) және хабардың минималды және максималды ұзындығын байтпен анықтайды. Бағдарламалық қамтамасыз ету биттерді жинауға, оларды байтқа түрлендіруге, уақытша сақтауға, содан кейін оларды ASCII форматында сериялық порт арқылы шығаруға арналған. Хабардың шығуын іске қосатын оқиға - бұл жаңа іске қосу/синхрондау импульсын алу.

4 -қадам: мәліметтерді тіркеу

Деректерді тіркеу
Деректерді тіркеу

Бағдарламалық қамтамасыз ету Arduino сериялық (TX) шығысы арқылы ASCII символы ретінде түрлендірілген деректерді шығаруға арналған. Мен PIC нұсқасын жасаған кезде мәліметтерді көрсету үшін дербес компьютердегі терминалдық бағдарламаға кіруім керек болды. Arduino IDE -дің бір артықшылығы - оның кірістірілген сериялық монитор функциясы. Мен сериялық порт жылдамдығын 115.2k -ге қойдым, содан кейін сериялық монитор терезесін дәл сол жылдамдыққа қойдым. Мұндағы скриншот менде бар сенсорлардың шығысы бар әдеттегі дисплейді көрсетеді. Көріп отырғаныңыздай, деректер кейде мінсіз емес, бірақ әр сенсордың нақты мәні қандай болатынын оңай анықтауға болады.

5 -қадам: Қабылдағыш үлгісі

Үлгіні қабылдайтын бағдарламалық қамтамасыз ету
Үлгіні қабылдайтын бағдарламалық қамтамасыз ету

Мен сіздің бағдарламаңызға кодтардың белгілі бір жиынтығын алу үшін жиналған ақпаратты қалай пайдалануға болатынын көрсететін бағдарламалық қамтамасыз етудің листингін енгіздім. Бұл мысал менің Etekcity қашықтағы розеткаларымның біреуіне еліктеуге арналған. Бір пәрмен наноға (D13) орнатылған жарық диодты қосады, ал екінші пәрмен жарық диодты өшіреді. Егер сізде Arduino -да светодиод жоқ болса, диаграммада көрсетілгендей резистор мен жарықдиодты қосыңыз. Нақты қолданбада бұл функция электр розеткасының қуатын қосады/өшіреді (реле немесе триак көмегімен). Синхрондау уақыты, бит уақыттары және күтілетін деректер байттары өзгертулерді жеңілдету үшін алдын ала анықталған. Қалған деректер желілерінің кез келгенін белгілі бір қосымшаның заттарын қосу/өшіру үшін пайдалануға болады. Қолданылатын пәрмен кодын анықтаңыз және сіздің қажеттіліктеріңізге сәйкес «циклдегі» жарықдиодты қосу/өшіру логикасын ауыстырыңыз.

Ұсынылған: