Агуулгын хүснэгт:

Arduino RF мэдрэгч декодер: 5 алхам
Arduino RF мэдрэгч декодер: 5 алхам

Видео: Arduino RF мэдрэгч декодер: 5 алхам

Видео: Arduino RF мэдрэгч декодер: 5 алхам
Видео: Оптический датчик в работе) 2024, Долдугаар сарын
Anonim
Arduino RF мэдрэгч декодер
Arduino RF мэдрэгч декодер

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

Өнөөдрийг хурдан урагшлуулаарай, утасгүй дохиолол миний хонгилд байгаа хайрцагт сууж байна. Хямд RF хүлээн авагч худалдаж авсны дараа би өөр өөр дохиоллын мэдрэгч, алсын удирдлагаар дамжуулж буй мессежийг тайлах боломжтой эсэхийг харахаар шийдлээ. Тэд бүгд хямд дохиоллын хайрцагтай ажилладаг байсан тул бүгд өөр өөр ID -тай ижил зурвасын форматыг ашиглах ёстой гэж би ойлгосон. Удалгүй тэд зөвхөн зурвасын ерөнхий бүтэцтэй төстэй болохыг олж мэдэв. Тиймээс энэ төсөл маш энгийнээс маш сонирхолтой болж хувирав.

Алхам 1: Мэдрэгчийн модулиуд

Мэдрэгчийн модуль
Мэдрэгчийн модуль
Мэдрэгчийн модуль
Мэдрэгчийн модуль
Мэдрэгчийн модуль
Мэдрэгчийн модуль
Мэдрэгчийн модуль
Мэдрэгчийн модуль

Дээрх зургуудаас харахад дамжуулагч нь хаалганы нээлттэй мэдрэгч, хөдөлгөөн мэдрэгч, зэвсэглэх алсын удирдлага, дохиоллын хайрцгийг програмчлахад ашигладаг утасгүй товчлуур юм. Эндээс харахад эдгээр төхөөрөмжүүдийн аль нь ч ижил синхрончлолын урт эсвэл битийн үргэлжлэх хугацааг ашигладаггүй. Мессежийн уртаас бусад цорын ганц нийтлэг зүйл бол битийн үндсэн формат юм. Бит бүр тодорхой хугацааны хугацаатай байдаг бөгөөд тэг ба нэгийн хоорондох зөрүү нь өндөр/бага хэсгүүдийн ажлын мөчлөг юм.

Дээр үзүүлсэн хөөрхөн долгионы хэлбэр нь миний анх хүлээж авсан зүйл биш юм. 433 МГц давтамжийн зурваст маш их ачаалал байдаг тул би ганцхан гох хийх хүрээг тохируулахынхаа өмнө мэдрэгчийг идэвхжүүлэх ёстой байсан. Аз болоход мэдрэгчид идэвхжсэн үед мэдээллийн мессежийн хэд хэдэн хуулбарыг гаргадаг бөгөөд товчлуур дарагдсан л бол алсын удирдлага болон товчлуурууд мессежээ үргэлжлүүлэн гаргадаг. Хамрах хүрээг ашиглан би синхрончлолын урт, зүйл бүрийн битийн үргэлжлэх хугацааг тодорхойлох боломжтой болсон. Өмнө дурьдсанчлан синхрончлолын хугацаа өөр, битийн хугацаа өөр боловч мессежийн форматууд нь бүгд доод түвшний синхрончлол, дараа нь 24 өгөгдлийн бит, нэг цэгийн бит юм. Энэ нь төхөөрөмж бүрийн нарийн ширийн зүйлийг хатуу кодлохгүйгээр програм хангамжийн ерөнхий декодер бүтээхэд надад хангалттай байсан.

Алхам 2: Техник хангамж

Техник хангамж
Техник хангамж
Техник хангамж
Техник хангамж

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

Хэрэв та "Зааварчилгаа" -г "Цагийн болон цаг агаарын үзүүлэлтийг 3-т 1" дээр уншвал би нийтлэг RXB6, 433-MHz хүлээн авагч ашигладаг болохыг харах болно. Та үнэхээр хямд хүлээн авагчдыг энэ төсөлд шаардлагатай богино хугацаанд ажиллуулах боломжтой байж магадгүй ч би супер-гетеродин хүлээн авагч ашиглахыг зөвлөж байна.

Алхам 3: Програм хангамж

Програм хангамж нь хүлээн авсан битүүдийг харуулах ASCII тэмдэгт болгон хөрвүүлдэг. Энэ нь синхрончлолын урт, 1 ба 0 битийн уртыг гаргадаг. Би синхрончлолын урт, битийн форматыг аль хэдийн мэддэг байсан болохоор програм хангамжийг тусгайлан зориулж бичих боломжтой байсан. Үүний оронд би үүнийг синхрончлолын уртыг ангилах, өгөгдлийн битүүдийг автоматаар тодорхойлохын тулд бичих боломжтой эсэхийг харахаар шийдлээ. Хэрэв би бусад форматыг хэзээ нэгэн цагт илрүүлэхийг хүсч байвал энэ нь өөрчлөхөд хялбар болгоно. Програм хангамж нь мессежийн эхний бит нь 1 эсвэл 0 гэдгийг мэдэхгүй гэдгийг анхаарах нь чухал юм. Энэ нь 1 гэж бодож байгаа боловч хэрэв тэг байх ёстой гэж үзвэл энэ нь урвуу болно. Цуваа порт руу илгээхээс өмнө дууссан мессежийг бит бичнэ үү.

Синхрончлолын импульсийн цаг ба өгөгдлийн битийг INT0 гадаад тасалдлын оролтыг ашиглан тасалдал зохицуулагчийг ажиллуулах замаар тодорхойлно. INT0 нь дээшлэх, унах, эсвэл хоёуланг нь хоёуланг нь эсвэл тогтвортой доод түвшинг өдөөж болно. Програм хангамж нь хоёр ирмэг дээр тасалдсан бөгөөд импульс бага байх хугацааг хэмждэг. Зурвас эхлүүлэх/синхрончлох нь бага түвшний импульс бөгөөд бага түвшний цаг хугацаандаа үндэслэн битүүдийг тодорхойлох боломжтой байдаг тул энэ нь бүх зүйлийг хялбарчилж өгдөг.

Тасалдлын зохицуулагч эхлээд авсан тоо нь эхлэх/синхрончлох импульс болох хангалттай урт эсэхийг тодорхойлдог. Надад байгаа янз бүрийн төхөөрөмжүүд 4, 9, 10, 14 миллисекундын синхрон импульс ашигладаг. Min/max зөвшөөрөгдсөн синхрончлолын утгыг тодорхойлох мэдэгдэл нь програм хангамжийн урд талд байгаа бөгөөд одоогоор 3 ба 16 миллисекундээр тохируулагдсан байна. Битийн хугацаа нь мэдрэгчээс хамаарч өөр өөр байдаг тул битийг тайлах алгоритм нь үүнийг анхаарч үзэх хэрэгтэй. Эхний битийн битийн хугацаа нь эхний битээс мэдэгдэхүйц ялгаатай дараагийн битийн цаг шиг хадгалагдана. Дараагийн битийн цагийг шууд харьцуулах боломжгүй тул "хуурамч хүчин зүйл" ("Өөрчлөлт") тодорхойлох аргыг ашигладаг. Битийн декодчилол нь эхний өгөгдлийн битийг логик болгон бүртгэдэг гэж үздэг. Энэ утгыг хадгалаад дараачийн битүүдийг туршихад ашигладаг. Хэрэв дараагийн өгөгдлийн битийн тоолол нь хадгалагдсан утгын дисперсийн цонхонд байгаа бол үүнийг логик гэж мөн бичнэ 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 -ийг асаах/унтраах логикийг таны хэрэгцээнд нийцүүлэн "давталт" -аар солино уу.

Зөвлөмж болгож буй: