Мазмуну:

Arduino RF сенсорунун декодери: 5 кадам
Arduino RF сенсорунун декодери: 5 кадам

Video: Arduino RF сенсорунун декодери: 5 кадам

Video: Arduino RF сенсорунун декодери: 5 кадам
Video: Урок 101. Использование ИК-пульта дистанционного управления для управления телевизором, лампочкой переменного тока с реле, двигателем постоянного тока и серводвигателем. 2024, Июль
Anonim
Arduino RF сенсорунун декодери
Arduino RF сенсорунун декодери

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

Бүгүнкү күнгө чейин тезирээк жана ошол зымсыз ойготкуч жертөлөмдөгү кутуда отурат. Арзан RF кабылдагычын алгандан кийин, мендеги сигнализация сенсорлорунун жана пультторунун ар кандай түрлөрү аркылуу берилген билдирүүлөрдү чече аламбы деп чечтим. Мен алардын бардыгы арзан сигнализация кутучасы менен иштегендиктен, баары бир эле билдирүү форматын башка ID менен колдонушу керек деп ойлодум. Жакында алар билдирүүлөрдүн жалпы түзүлүшүндө гана окшош экенин билдим. Ошентип, долбоор тез эле өтө кызыктуудан өтө кызыктуу болуп өттү.

1 -кадам: Sensor Modules

Сенсор модулдары
Сенсор модулдары
Сенсор модулдары
Сенсор модулдары
Сенсордук модулдар
Сенсордук модулдар
Сенсордук модулдар
Сенсордук модулдар

Жогорудагы сүрөттөрдөн көрүнүп тургандай, өткөргүчтөргө эшик ачык сенсорлору, кыймыл детекторлору, куралдандыруу пульттары жана сигнализация кутучасын программалоо үчүн колдонулган зымсыз клавиатура кирет. Көрүнүп тургандай, бул түзмөктөрдүн экөө тең бирдей синхрондоштурууну же бит узактыгын колдонушпайт. Билдирүүнүн узундугунан башка жалгыз жалпылык - бул биттердин негизги форматы. Ар бир бит белгилүү бир убакытты талап кылат жана нөл менен бирдин айырмасы жогорку/төмөнкү бөлүктөрдүн милдети цикли болуп саналат.

Жогоруда көрсөтүлгөн сулуу толкун формасы мен биринчи алган эмес. 433-МГц жыштык тилкесинде трафик көп болгондуктан, мен бир триггерди иштете турган чөйрөнү койгонго чейин сенсорду активдештиришим керек болчу. Бактыга жараша, сенсорлор активдештирилгенде маалымат билдирүүсүнүн бир нече көчүрмөсүн чыгарышат, ал эми пульт жана баскычтоп баскыч басылганча билдирүүлөрдү чыгара беришет. Колдонуу менен мен шайкештирүүнүн узундугун жана ар бир пункт үчүн маалыматтын узактыгын аныктай алдым. Мурда да айтылгандай, синхрондоштуруу убактысы ар башка жана бит убактысы башкача, бирок баардык билдирүү форматтары төмөнкү деңгээлдеги шайкештештирүүгө ээ, андан кийин 24 маалымат биттери жана бир токтоочу бит бар. Бул мага ар бир түзмөк үчүн ар кандай деталдарды катаал коддоонун кереги жок, программалык камсыздоонун жалпы декодерин курууга жетиштүү болду.

2 -кадам: Аппараттык

Аппараттык
Аппараттык
Аппараттык
Аппараттык

Мен башында PIC микроконтроллерин жана ассемблер тилин колдонуп сенсордун декодерин кургам. Мен жакында Arduino варианттары менен ойноп жүрдүм, ошондуктан аны кайталай аламбы деп ойлодум. Жөнөкөй схема жогоруда көрсөтүлгөн жана менин прототипимдин сүрөтү да бар. Мен болгону Arduino Nano'дон RF кабыл алуу тактасына өтүү үчүн үч жалпы секиргич зымдарды колдонуу элем. Күч жана бирдиктүү маалымат линиясы керектүү нерселердин баары.

Эгерде сиз менин "Нускаманы" "3-in-1 Time and Weather Displayде" окусаңыз, мен жалпы RXB6, 433-MHz кабылдагычты колдоноорумду көрөсүң. Сиз чынында эле арзан ресиверлерди бул долбоорго керектүү кыска аралыкта иштей аласыз, бирок мен супер-гетеродиндик ресиверди колдонууну сунуштайм.

3 -кадам: Программалык камсыздоо

Программа алынган биттерди ASCII дисплейине айлантат. Бул синхрондоштуруунун узундугун жана 1 жана 0 биттердин узундугун чыгарат. Мен мурунтан эле синхрондоштуруунун узундугун жана бит форматтарын билгендиктен, программалык камсыздоону алар үчүн атайын жазсам болмок. Тескерисинче, мен аны синхрондоштуруунун узундугун иретке келтирүү үчүн жана маалыматтын биттерин автоматтык түрдө аныктоо үчүн жаза аламбы деп чечтим. Бул кандайдыр бир убакта башка форматтарды табууга аракет кылгым келсе, өзгөртүүнү жеңилдетиши керек. Белгилей кетчү нерсе, программалык камсыздоо билдирүүнүн биринчи битинин 1 же 0 экенин билбейт. Бул 1 деп ойлойт, бирок эгерде ал нөлгө барабар экенин түшүнсө, бит серия портуна жөнөтүүдөн мурун, аяктаган билдирүү.

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

Үзгүлтүктү иштетүүчү адегенде басып алынган сан баштоо/шайкештештирүү импульсу үчүн жетиштүү экендигин аныктайт. Мендеги ар кандай түзмөктөр 4, 9, 10 жана 14 миллисекунддук синхрондуу импульстарды колдонушат. Мин/максималдуу уруксат берилген синхрондоштуруу аныктамалары программалык камсыздоонун алдында турат жана учурда 3 жана 16 миллисекундга коюлган. Бит убактысы сенсорлордун ортосунда да өзгөрөт, андыктан битти декоддоо алгоритми муну эске алышы керек. Биринчи биттин бит убактысы кийинки биттин убактысы сыяктуу сакталат, ал биринчи биттен олуттуу айырмачылыкка ээ. Кийинки бит убактысын түз салыштыруу мүмкүн эмес, андыктан "жалган фактор" аныктамасы ("Вариация") колдонулат. Битти декоддоо биринчи маалымат бит дайыма логика катары жазылат деп ойлоо менен башталат 1. Бул маани сакталат, андан кийин кийинки биттерди текшерүү үчүн колдонулат. Эгерде кийинки маалыматтар битинин саны сакталган маанинин дисперсиялык терезесинде болсо, анда ал логика катары да жазылат 1. Эгерде ал сакталган маанинин дисперсиялык терезесинен тышкары болсо, анда ал логика 0 катары жазылат. Эгерде логика 0 бит убактысы биринчи битке караганда кыскараак болот, андан кийин программалык камсыздоону көрсөтүү үчүн желек орнотулат, дисплейди көрсөтүүдөн мурун байттарды алмаштыруу керек. Бул алгоритмдин ишке ашпай калган бир гана учуру - бул билдирүүдөгү биттердин баары 0 болгон учурда. Биз бул чектөөнү кабыл алабыз, анткени мындай билдирүүнүн мааниси жок.

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

4 -кадам: Маалыматтарды каттоо

Маалыматтарды каттоо
Маалыматтарды каттоо

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

5 -кадам: Үлгү алуучу программалык камсыздоо

Үлгү алуучу программалык камсыздоо
Үлгү алуучу программалык камсыздоо

Мен сиздин колдонмоңуз үчүн белгилүү бир коддор топтомун алуу үчүн чогултулган маалыматты кантип колдоно алаарыңызды көрсөтүүчү программалык камсыздоонун үлгүсүн киргиздим. Бул мисал менин Etekcity алыскы соода түйүндөрүмдүн бирин тууроо үчүн түзүлгөн. Бир буйрук Нано (D13) ичине орнотулган LEDди күйгүзөт, экинчиси болсо LEDди өчүрөт. Эгерде сизде Arduinoго LED орнотулбаса, анда диаграммада көрсөтүлгөндөй резистор менен LEDди кошуңуз. Чыныгы тиркемеде бул функция электр розеткасынын кубаттуулугун күйгүзүп/өчүрөт (реле же триак аркылуу). Шайкештирүү убактысы, бит убактысы жана күтүлгөн маалымат байттары өзгөртүүнүн оңойлугу үчүн алдын ала аныкталган. Калган колдонмолор үчүн нерселерди күйгүзүү/өчүрүү ж. Жөн гана колдонулган буйрук кодун аныктайт жана LEDди күйгүзүү/өчүрүү логикасын сиздин муктаждыктарыңызга жараша "циклде" алмаштырыңыз.

Сунушталууда: