Mundarija:

Arduino bilan I2C InfraRed masofadan boshqarish: 8 qadam (rasmlar bilan)
Arduino bilan I2C InfraRed masofadan boshqarish: 8 qadam (rasmlar bilan)

Video: Arduino bilan I2C InfraRed masofadan boshqarish: 8 qadam (rasmlar bilan)

Video: Arduino bilan I2C InfraRed masofadan boshqarish: 8 qadam (rasmlar bilan)
Video: How to use Arduino as TV Remote Controller with Infrared 2024, Iyul
Anonim
Arduino bilan I2C InfraRed masofadan boshqarish pulti
Arduino bilan I2C InfraRed masofadan boshqarish pulti
Arduino bilan I2C InfraRed masofadan boshqarish pulti
Arduino bilan I2C InfraRed masofadan boshqarish pulti

PreambleThis Instructable interfeys uchun I2C yordamida universal masofadan boshqarish pultini qanday yaratish haqida batafsil ma'lumot beradi.

I2C qul qurilmasidan foydalanganingiz qanday g'alati?

Ha, I2C qul qurilmasi.

Buning sababi shundaki, IR paketlarining aniq vaqti juda talabchan va bir vaqtning o'zida boshqa vazifalarni bajarayotgan bo'lsa, oddiy Arduino bilan kurashadi. Iloji boricha maxsus protsessorlarga vaqtni intensiv bajarishni tayinlash orqali hisoblash yukini taqsimlash yaxshiroqdir (buni apparatda bajarish yaxshiroq). I2C - bu IClar o'rtasida yaxshi hujjatlashtirilgan va mustahkam aloqa usuli ekan, men buni interfeys sifatida tanladim.

Kirish

Yuqorida aytib o'tilganidek, ushbu yo'riqnomada Arduino -dagi IRremote kutubxonasi yordamida televizor, DVD pleer va yo'ldosh kabi maishiy texnikani qanday boshqarish kerakligi tasvirlangan.

U Arduino -ni prototipli sinov zanjiri (yuqoridagi 2 -rasm) bilan I2C qul masofadan boshqarish moduliga (yuqoridagi 1 -rasm) aylantiruvchi dizayn namunasi bilan yakunlanadi va dizaynni kerakli minimal komponentlarga qanday qisqartirish kerakligini batafsil ko'rib chiqadi. boshqa dizaynga o'rnatilgan. Mening holatimda men bu o'rnatilgan qurilmani ESP8266-12E atrofida joylashgan IoT Universal masofadan boshqarish moslamasida ishlataman.

Menga qanday qismlar kerak?

1 -bosqichda (IQ transmitteri) tasvirlangan sxemani yaratish uchun sizga quyidagi qismlar kerak bo'ladi;

  • 2 ta 10K qarshilik
  • 1 ta 390R qarshilik
  • 1 ta 33R qarshilik
  • 1 ta 3K8 qarshilik
  • 1 o'chirilgan qizil LED
  • 1 ta IR Led TSAL6400
  • BC337 tranzistoridan 1 marta
  • 1 off 220uF kondansatör
  • 1 ta Arduino Uno

4 -bosqichda (IQ qabul qilgich) tasvirlangan sxemani qurish uchun sizga quyidagi qismlar kerak bo'ladi;

  • 1 ta 10K qarshilik
  • 1 ta TSOP38328
  • 1 off 220uF kondansatör
  • 1 ta Arduino Uno

5 -bosqichda tasvirlangan sxemani (qul sinov davri) qurish uchun sizga quyidagi qismlar kerak bo'ladi;

  • 4 ta 10K qarshilik
  • 2 o'chirilgan 390R qarshilik
  • 1 ta 33R qarshilik
  • 1 ta 3K8 qarshilik
  • 2 o'chirilgan qizil LED
  • 1 ta IR Led TSAL6400
  • BC337 tranzistoridan 1 marta
  • 1 off 220uF kondansatör
  • SPST tugmalaridan 2 ta chegirma
  • 2 ta Arduino Unos

6 -qadamda tasvirlangan sxemani qurish uchun (Shrunk dizayni) sizga quyidagi qismlar kerak bo'ladi;

  • 3 ta 10K rezistorlar
  • 1 ta 270R qarshilik
  • 1 ta 15R qarshilik
  • 4 ta 1K rezistorlar
  • 1 o'chirilgan qizil LED
  • 1 ta LED Led TSAL6400 yoki TSAL5300
  • BC337 tranzistoridan 1 marta
  • Elektrolitik @ 6,3v kuchlanishli 220uF kondansatkichi
  • 1 off 1000uF kondansatör elektrolitik @ 6.3v
  • 0,1uF quvvatli 2 ta yopiq kondansatör
  • 2 ta yopiq 22 pF kondansatör
  • 1 ta 16 MGts chastotali Xtal
  • 1 ta ATMega328P-PU

Eslatma: ATMega328P ni dasturlash uchun sizga FTDI qurilmasi ham kerak bo'ladi

Menga qanday ko'nikmalar kerak?

  • Elektronikani minimal tushunish,
  • Arduino va uning IDE haqidagi bilimlari,
  • Bir oz sabr,
  • I2C haqida ba'zi tushunchalar foydali bo'ladi (ba'zi umumiy I2C/simli kutubxona tafsilotlari uchun qarang).

Mavzular qamrab olingan

  • O'chirish davri haqida qisqacha ma'lumot,
  • Dasturiy ta'minot haqida qisqacha ma'lumot,
  • I2C paketining tarkibi,
  • Masofadan boshqarish kodlarini olish (ui32Data),
  • I2C Slave qurilmangizni qanday tekshirish mumkin.
  • Dizayningizni qisqartirish,
  • Xulosa,
  • Ishlatilgan adabiyotlar.

Voz kechish

Har doimgidek, siz ushbu ko'rsatmalarni o'zingizning xavfingiz ostida ishlatasiz va ular qo'llab -quvvatlanmaydi.

1 -qadam: O'chirish davri haqida qisqacha ma'lumot

O'chirish davri haqida qisqacha ma'lumot
O'chirish davri haqida qisqacha ma'lumot

O'chirishning maqsadi - IR masofadan boshqarish kodlarini uzatish. Uning dizayni juda sodda va oldinga siljiydi.

Q1 tranzistorli BC337 NPN mantiq orqali Arduino PWM O/P D3 dan R5 rezistorigacha yoqilganda, oqim Led 1 va 2 orqali o'tadi, faqat R3 va R4 balast rezistorlari bilan chegaralanadi. Q1 IQ diodidan o'tadigan tokni (agar Maks = 100mA) Arduino O/P imkoniyatiga qaraganda ~ 40mA @ +5v kuchlanishni ko'paytirish uchun ishlatiladi.

C1 220uF elektrolitik kondansatkichi 1 va 2 -chi LEDlar tomonidan quvvat manbai tushishining oldini oluvchi stabilizatsiyani ta'minlaydi.

R1 va R2 rezistorlari I2C tortishishidir.

2 -qadam: Dasturiy ta'minot haqida qisqacha ma'lumot

Dasturiy ta'minot haqida qisqacha ma'lumot
Dasturiy ta'minot haqida qisqacha ma'lumot
Dasturiy ta'minot haqida qisqacha ma'lumot
Dasturiy ta'minot haqida qisqacha ma'lumot
Dasturiy ta'minot haqida qisqacha ma'lumot
Dasturiy ta'minot haqida qisqacha ma'lumot

Muqaddima

Ushbu manba kodini muvaffaqiyatli kompilyatsiya qilish uchun sizga quyidagi qo'shimcha kutubxona kerak bo'ladi;

IRremote.h

  • Muallif: z3t0
  • Maqsad: Arduino uchun infraqizil masofali kutubxona: bir nechta protokolli infraqizil signallarni yuborish va qabul qilish
  • Manba:

Kodni ko'rib chiqish

Yuqoridagi 1-rasmda ko'rsatilgandek, kod ishga tushirilgandan so'ng mikrokontrollerning kirish-chiqish konfiguratsiyasini amalga oshiradi, so'ngra "bFreshDataFlag" ichki dasturiy ta'minot bayrog'i holatini so'roq qiladi. Bu bayroq o'rnatilganda, nazoratchi "band" chizig'ini tasdiqlaydi (D4 ma'lumot pinini past yuboradi) va "eBUSY" holatiga o'tadi, ketma -ket o'qish tugmachalarini uDataArray tugmachasida bosib, IR modulyatsiyalangan ma'lumotni IR LEDga yuboradi. uzatish ketma -ketligi.

Ma'lumotlar uDataArray da to'liq yuborilgandan so'ng, "eIDLE" holati tiklanadi va "Band emas" chizig'i tasdiqlanmaydi (D4 yuqori pinli ma'lumot yuboriladi). Qurilma endi uzatish ketma -ketligini bildiruvchi tugmachalarni bosishga ko'proq tayyor.

IQ tugmachalarini bosish ma'lumotlarini qabul qilish

Ma'lumot I2C orqali InfraRed masofadan boshqarish pultiga yuborilganda, u uzilishni keltirib chiqaradi va receptEvent () funktsiyasi chaqiruvi asinxron tarzda ishga tushadi.

Qabul qilingan I2C ma'lumotlari ishga tushirilgandan so'ng "uDataArray " buferiga ketma -ket yoziladi.

Ma'lumotni qabul qilish paytida, agar ketma -ketlikning oxiri master tomonidan signal berilsa (bFreshData! = 0x00), "bFreshDataFlag" o'rnatiladi, bu esa uzatish ketma -ketligining boshlanishini bildiradi.

2… 3 -rasmlar odatda paketlar ketma -ketligiga misol keltiradi.

Eslatma: To'liq manba kodi bu erda mavjud

3 -qadam: I2C paketli kontent

I2C paket tarkibi
I2C paket tarkibi

I2C orqali qulga yuborilgan boshqaruv paketining formati 1 -rasmda har bir maydonning ma'nosi quyida keltirilgan.

Boshqaruv paketi maydonlarining ma'nosi

bayt bEncoding;

  • IR masofadan boshqarishni kodlash,

    • RC6 (Osmon) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

Ikkilamchi infraqizil ma'lumotlar oqimining o'n oltilik ko'rinishi 4 Ma'lumot baytlari (imzosiz uzun), LSByte… MSByte

bayt bNumberOfBitsInTheData;

Ma'lumotlardagi bitlar soni (maksimal 32 ta). Diapazon = 1… 32

bayt bPulseTrainRepeats;

Bu pulsli poezd qancha takrorlanadi. Diapazon = 1… 255. Odatda 2-4 marta takrorlanadi. Siz buni yoqish/o'chirish buyruqlari uchun uzaytirishni xohlashingiz mumkin, chunki qabul qilish moslamasini yoqish signalini qabul qilish uchun ba'zida bir nechta qo'shimcha pulsli poezd takrorlanishi kerak bo'ladi

bayt bDelayBetweenPulseTrainRepeats;

Bu pulsli poezdning takrorlanishi orasidagi kechikish. Diapazon = 1… 255 mS. Odatda 22mS … 124mS

bayt bButtonTekrarlar;

Xuddi shu tugmani qayta bosishni taqlid qiladi (lekin o'zgartirilgan kodni Apple pulti kabi qo'llab -quvvatlamaydi, tugma kodini takrorlaydi). Diapazon = 1… 256. Standart = 1

uint16_t ui16DelayBetweenButtonRepeats;

Tugmalar takrorlanishi orasidagi kechikish (imzosiz int). Hammasi bo'lib 2 bayt LSByte… MSByte. Diapazon = 1… 65535 mS. Standart = 0mS

bayt bFreshData;

  • Yangi ma'lumotlar. Nolga teng bo'lmagan qiymat. Oxirgi yozilgan, IR TX ketma -ketligini ishga tushiradi. 0x00… 0xFF oralig'i

    • Ko'proq nazorat paketlari keladi = 0
    • Bu oxirgi nazorat paketi = Nol bo'lmagan qiymat 1, 2,… 255

"_Packed_" kompilyator direktivasidan foydalanishga e'tibor bering. Bu ishlatilgan maqsadli tizimdan qat'i nazar (Uno, Due, ESP8266 va boshqalar) xotirada ma'lumot bayt uchun paketli bayt bo'lishini ta'minlash. Bu shuni anglatadiki, registerAllocationType va dataArrayType o'rtasidagi birlashma faqat TX/RX dasturini soddalashtirib, boshqaruv paketidan ketma -ket ketma -ket baytlarga kerak.

4 -qadam: Masofadan boshqarish kodlarini olish (ui32Data)

Masofadan boshqarish kodlarini olish (ui32Data)
Masofadan boshqarish kodlarini olish (ui32Data)
Masofadan boshqarish kodlarini olish (ui32Data)
Masofadan boshqarish kodlarini olish (ui32Data)
Masofadan boshqarish kodlarini olish (ui32Data)
Masofadan boshqarish kodlarini olish (ui32Data)
Masofadan boshqarish kodlarini olish (ui32Data)
Masofadan boshqarish kodlarini olish (ui32Data)

Masofadan boshqarish pultining tegishli kodini olishning uchta usuli bor;

  1. Osiloskop yordamida bitlarni sanash orqali,
  2. Veb -saytga qarang,
  3. Uni dasturiy ta'minotdagi ma'lumotlar oqimidan to'g'ridan -to'g'ri dekodlash.

Maydon bilan bitlarni sanash orqali

Bu samarali usul emas, chunki bu ko'p vaqt talab etadi va bir nechta urinishlarni talab qilishi mumkin, ammo bu juda aniq bo'lishi mumkin. Bundan tashqari, 2 va 3 -usullar yordamida olingan kodlarni vizual tasdiqlashda, shuningdek, masofadan boshqarish pultining o'ziga xos xususiyatlarini aniqlashda ham foydalidir. Masalan, Apple IR masofadan boshqarish pultidagi tugmani bosib turganda. Masofadan boshqarish pulti dastlab buyruqlar ketma -ketligini chiqaradi, so'ngra takrorlangan 0xF siqilgan ketma -ketlikda bajariladi.

Veb -saytga qarang

Linux infraqizil masofadan boshqarish pultidagi masofadan boshqarish kodi ma'lumotlar bazasi yaxshi manba.

Salbiy tomoni shundaki, sizga mos keladigan kodni topmaguningizcha bir nechta kodni sinab ko'rishingiz kerak bo'ladi. Kodlarni ekvivalentli olti burchakli shaklga aylantirish uchun siz ba'zi tasvirlarni talqin qilishingiz kerak bo'lishi mumkin.

Ma'lumot oqimidan to'g'ridan -to'g'ri dekodlash

Yuqoridagi 1 -rasmdagi sxemani "IRrecvDumpV2.ino" IRremote kutubxonasi misoli bilan birgalikda to'g'ridan -to'g'ri masofadan boshqarish pultidan uzatish mumkin. 2 -rasmda Arduino IDE terminal oynasida yoqish/o'chirish tugmachasini bosish uchun kodlangan Samsung televizorining pulti ko'rsatilgan.

Birlashtirilgan qabul qiluvchi/uzatuvchi

Yuqoridagi 3 va 4 -rasmlarda prototipni osonlashtirishga imkon beradigan IQ buyrug'ini qabul qilish va uzatish imkonini beradigan yechim tasvirlangan.

IR masofadan boshqarish tugmachalarini bosishni dekodlash uchun siz Arduino -ni IRremote kutubxonasi bilan birga kelgan "IRrecvDumpV2.ino" misoli bilan o'chirishingiz kerak bo'ladi.

Agar IQ buyruqlari bo'lsa, u uzatish uchun ham yaxshi ishlaydi. Qurilmaning ishlayotganini ko'rsatuvchi sifatida qizil chiroq kiritilgan.

5 -qadam: I2C qul qurilmasini qanday tekshirish mumkin

I2C qul qurilmasini qanday tekshirish mumkin
I2C qul qurilmasini qanday tekshirish mumkin
I2C qul qurilmasini qanday tekshirish mumkin
I2C qul qurilmasini qanday tekshirish mumkin

Bu erda manba kodini va 1 -rasmda ko'rsatilgan sxemadan foydalanib, "Master" Arduino -ni "IR_Remote_Sim_Test.ino" va "Qul" Arduino -ni "IR_Remote_Sim.ino" bilan dasturlang.

Agar sizda Sony Bravia TV, Sky HD qutisi va Sony BT SoundBar bo'lsa, 1 -tugmani bosing va televizoringiz BBC1 -ga o'tadi (101 -kanal). 2 -tugmani bosing, shunda ovoz paneli o'chadi. Qayta bosing va ovozi o'chadi.

IQni uzatish ketma -ketligini bajarish paytida LED3 yonib turadi, bu bandning bandligini ko'rsatadi va LED1 IQ uzatish jarayonida yonib -o'chadi.

Albatta, agar sizda yuqoridagi kabi o'yin-kulgi tizimi o'rnatilmagan bo'lsa, siz qulni "IRrecvDumpV2.ino" bilan qayta dasturlashingiz, qiziqtirgan masofaviy buyruqlaringizni dekodlashingiz va keyin ularni "IR_Remote_Sim_Test.ino" ga dasturlashingiz mumkin. berilgan ssenariy.

2 -rasmda Master va Slave o'rtasidagi tizim darajasidagi sinov dasturlarining umumiy ko'rinishi ko'rsatilgan.

6 -qadam: Dizayningizni qisqartirish

Dizayningizni qisqartirish
Dizayningizni qisqartirish

OK, shuning uchun siz ikkita Arduino -ga tayanib, uy qurilmalarini boshqargan bo'lsangiz, bu sizning Arduino aktsiyangizdan unumli foydalanish emas. Shunday qilib, agar siz yuqoridagi rasmda ko'rsatilgan sxemani tuzsangiz va ATMega328P ni "IR_Remote_Sim.ino" bilan dasturlash uchun bu erdagi ko'rsatmalarga amal qilsangiz, siz butun tizimni minimal komponentlarga kamaytira olasiz. Bu sizning dizayningizni boshqa tizimga joylashtirish imkonini beradi.

7 -qadam: Xulosa

Xulosa
Xulosa
Xulosa
Xulosa

Yechim barqaror va yaxshi ishlaydi, u bir necha hafta davomida boshqa tizimga hech qanday muammosiz joylashtirilgan.

Men Arduino Uno R3 ni tanladim, chunki men etarli RAMga ega bo'lgan qurilmani xohladim, shunda men tugma buferini o'rtacha chuqurlikka ega bo'ldim. Men bufer o'lchamiga 20 ta paketni joylashtirdim (MAX_SEQUENCES).

Men ishlab chiqargan Hybrid TX/RX qalqoni Sony va Sky masofadan boshqarish pultlarini dekodlashda ham juda qulay bo'ldi. Vaqti -vaqti bilan o'z raqamli doiramdan foydalanib tan olishim kerak bo'lsa -da, dasturiy ta'minot dekodlangan IQ buyrug'i IR qabul qilingan IR (TSOP38328) bilan bir xilligini tekshirish uchun.

Men boshqacha yo'l tutgan yagona narsa, yuqorida ko'rsatilgan 2 -rasmda ko'rsatilgandek, IQ uchun doimiy oqim haydovchi sxemasidan foydalanish bo'lar edi.

Shuni ta'kidlash kerakki, barcha IQ uzatgichlari 38 kGts bilan modulyatsiya qilinmagan, TSOP38328 38 kGts uchun optimallashtirilgan.

8 -qadam: Ishlatilgan adabiyotlar

IRRemote.h

  • Muallif: z3t0
  • Maqsad: Arduino uchun infraqizil masofali kutubxona: bir nechta protokolli infraqizil signallarni yuborish va qabul qilish
  • Manba:

IR masofaviy kutubxona

  • z3t0.github.io/Arduino-IRremote/
  • https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

IQ (infraqizil) qabul qilgich sensori - TSOP38238 (ekvivalent)

https://cdn-shop.adafruit.com/datasheets/tsop382.pdf

Ma'lumotlar strukturasini so'z chegaralariga to'ldirishining oldini olish uchun

  • https://github.com/esp8266/Arduino/issues/1825
  • https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
  • https://stackoverflow.com/questions/11770451/what-is-the-meaning-of-attribute-packed-aligned4

IQ masofali tafsilotlarning yaxshi manbai

https://www.sbprojects.com/knowledge/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReference
  • https://www.arduino.cc/en/Reference/WireSend

IR masofaviy ma'lumotlar bazasi

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

BC337 ma'lumotlar jadvali

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

1N4148 ma'lumotlar jadvali

https://www.vishay.com/docs/81857/1n4148.pdf

ATMega328P-PU ma'lumotlar jadvali

Tavsiya: