Съдържание:
- Стъпка 1: Сензорни модули
- Стъпка 2: Хардуер
- Стъпка 3: Софтуер
- Стъпка 4: Регистриране на данни
- Стъпка 5: Примерен софтуер за приемник
Видео: Декодер на RF сензора на Arduino: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Предишната ми къща идваше с предварително инсталирана система за сигурност, която имаше сензори за врати, сензор за движение и контролен панел. Всичко беше здраво свързано към голяма кутия за електроника в килер и имаше инструкции за свързване на стационарен телефон за автоматично набиране в случай на аларма. Когато се опитах да си поиграя с него, открих, че един от сензорите на вратите е непълно инсталиран, а друг е прекъснат поради неправилно подравняване. Толкова за професионалната инсталация, рекламирана във визитната картичка на охранителната компания. Моето решение по това време беше да купя няколко камери за интернет сигурност и евтина безжична аларма за сигурност.
Бързо напред към днешния ден и тази безжична аларма седи в кутия в мазето ми. След като закупих евтин RF приемник, реших да видя дали мога да декодирам съобщенията, предавани от различните алармени сензори и дистанционни управления, които имам. Реших, че тъй като всички те работят с евтината алармена кутия, всички те трябва да използват един и същ формат на съобщение само с различен идентификатор. Скоро разбрах, че те си приличат само в общата структура на съобщенията. Така че проектът бързо премина от тривиален към много интересен.
Стъпка 1: Сензорни модули
Както можете да видите на снимките по -горе, предавателите включват сензори за отваряне на врати, детектори за движение, дистанционно задействане и безжична клавиатура, използвана за програмиране на алармената кутия. Оказа се, че нито едно от тези устройства не използва еднаква дължина на синхронизация или продължителност на бита. Единственото общо, различно от дължината на съобщението, е основният формат на битовете. Всеки бит заема фиксиран период от време, като разликата между нула и единица е работният цикъл на високите/ниските части.
Красивата форма на вълната, показана по -горе, НЕ е това, което за първи път получих. Тъй като има толкова голям трафик в честотната лента 433-MHz, трябваше да се уверя, че съм активирал сензора точно преди да настроя обхвата за еднократно задействане. За щастие сензорите издават няколко копия на съобщението с данни, когато се активират, а дистанционното управление и клавиатурата продължават да извеждат съобщения, докато е натиснат клавиш. С помощта на обхвата успях да определя дължината на синхронизиране и продължителността на битовете данни за всеки елемент. Както бе споменато по-рано, времената за синхронизиране са различни и времената на битове са различни, но всички формати на съобщенията имат синхронизация на ниско ниво, последвана от 24 бита данни и един стоп бит. Това беше достатъчно, за да мога да създам общ декодер в софтуер, без да се налага да кодирам твърдо всички различни детайли за всяко устройство.
Стъпка 2: Хардуер
Първоначално създадох сензорен декодер, използвайки микроконтролер PIC и език за сглобяване. Наскоро играх с варианти на Arduino, така че реших да видя дали мога да го повторя. Простата схема е показана по -горе и има и снимка на моя прототип. Всичко, което направих, беше да използвам три общи джъмперни проводника, за да премина от Arduino Nano към платката за RF приемник. Захранването и една линия за данни са всичко, което е необходимо.
Ако прочетете моя Instructable на „3-в-1 време и прогноза за времето“, ще видите, че използвам общ приемник 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: Регистриране на данни
Софтуерът е настроен да извежда преобразуваните данни като ASCII знаци чрез серийния (TX) изход на Arduino. Когато направих PIC версията, трябваше да се свържа с терминална програма на компютъра, за да покажа данните. Едно от предимствата на Arduino IDE е, че има вградена функция за сериен монитор. Зададох скоростта на серийния порт на 115.2k и след това настройте прозореца на Serial Monitor на същата скорост. Снимката тук показва типичен дисплей с изходи от различни сензори, които имам. Както можете да видите, данните понякога не са перфектни, но лесно можете да определите каква трябва да бъде реалната стойност на всеки сензор.
Стъпка 5: Примерен софтуер за приемник
Включих примерен списък със софтуер, който показва как можете да използвате събраната информация, за да получите определен набор от кодове за вашето приложение. Този пример е настроен да подражава на един от моите отдалечени контакти на Etekcity. Едната команда включва светодиода, вграден в Nano (D13), а другата команда изключва светодиода. Ако нямате вграден светодиод във вашия Arduino, добавете резистора и светодиода, както е показано на диаграмата. В реално приложение тази функция ще включва/изключва захранването за електрически контакт (използвайки реле или триак). Времената за синхронизиране, времената на битовете и очакваните байтове за данни са предварително дефинирани за по -лесна промяна. Можете да използвате някой от останалите редове за данни, за да включите/изключите нещата и т.н. за вашето конкретно приложение. Просто добавете приложимите дефиниции на командния код и сменете логиката за включване/изключване на светодиода в „цикъл“, за да отговаря на вашите нужди.
Препоръчано:
КАЛИБРИРАНЕ НА СЕНЗОРА НА ARDUINO: 7 стъпки
ARDUINO PH SENSOR CALIBRATION: В този урок ще калибрираме сензора за pH EZO на Atlas Scientific, използвайки Arduino Uno.ТЕОРИЯ НА КАЛИБРОВКА Най -важната част от калибрирането е наблюдението на показанията по време на процеса на калибриране. Най -лесно е да калибрирате устройството в
КАЛИБРИРАНЕ НА СЕНЗОРА НА ARDUINO ORP: 3 стъпки
ARDUINO ORP SENSOR CALIBRATION: В този урок ще калибрираме EZO ORP (потенциал за намаляване на окисляването) на Atlas Scientific, използвайки Arduino Uno.ТЕОРИЯ НА КАЛИБРОВКА Най-важната част от калибрирането е наблюдението на показанията по време на процеса на калибриране. Лесно е
Калибриране на сензора за кислород на ARDUINO: 4 стъпки
КАЛИБРИРАНЕ НА СЕНЗОР НА КИСЛОРОД НА ARDUINO: В този урок ще калибрираме EZO сензора за разтворен кислород (D.O) на Atlas Scientific, използвайки Arduino Uno.ТЕОРИЯ НА КАЛИБРОВКА Най -важната част от калибрирането е наблюдението на показанията по време на процеса на калибриране. Най -лесно е да се калибрира
КАЛИБРИРАНЕ НА СЕНЗОРА НА СЕНЗОРА НА ARDUINO: 9 стъпки
КАЛИБРИРАНЕ НА СЕНЗОРА НА СЕНЗОРА НА ARDUINO: В този урок ще калибрираме EZO сензора за соленост/проводимост K1.0 на Atlas Scientific, използвайки Arduino Uno.ТЕОРИЯ НА КАЛИБРОВКА Най -важната част от калибрирането е наблюдението на показанията по време на процеса на калибриране. Най -лесно е да
CO2 метър, използване на сензора SCD30 с Arduino Mega: 5 стъпки
Измервател на CO2, използване на сензора SCD30 с Arduino Mega: Параметърът за концентрация на CO2, нивото на хумедада и температурата, или SCD30 изисква интерактивна връзка с медията на околната среда. la calibración ya no sea válida