Мазмуну:

Arduino менен I2C InfraRed Remote Control: 8 кадам (Сүрөттөр менен)
Arduino менен I2C InfraRed Remote Control: 8 кадам (Сүрөттөр менен)

Video: Arduino менен I2C InfraRed Remote Control: 8 кадам (Сүрөттөр менен)

Video: Arduino менен I2C InfraRed Remote Control: 8 кадам (Сүрөттөр менен)
Video: How to use Arduino as TV Remote Controller with Infrared 2024, Июль
Anonim
Arduino менен I2C InfraRed алыстан башкаруу
Arduino менен I2C InfraRed алыстан башкаруу
Arduino менен I2C InfraRed алыстан башкаруу
Arduino менен I2C InfraRed алыстан башкаруу

PreambleThis Instructable интерфейс үчүн I2Cди колдонуп универсалдуу алыстан башкарууну кантип түзүү керектиги жөнүндө маалымат берет.

I2C кулдук аппаратын колдонуп, кандай кызык дейсиз?

Ооба, I2C кул түзмөгү.

Себеби, IR пакеттеринин так убактысы абдан талап кылынат жана кадимки Arduino бир эле учурда башка көптөгөн милдеттерди аткарып жаткан болсо, алар менен күрөшөт. Мүмкүн болушунча атайын процессорлорго интенсивдүү иш -чараларды дайындоо менен эсептөө жүгүн бөлүштүрүү жакшыраак (муну дагы аппараттык түрдө жасаңыз). I2C ICлердин ортосунда жакшы документтештирилген жана күчтүү байланыш ыкмасы экенин эске алып, мен муну интерфейс катары тандап алдым.

Киришүү

Жогоруда айтылгандай, бул көрсөтмө Arduinoдогу IRremote китепканасын колдонуу менен телевизор, DVD ойнотуучу жана спутник сыяктуу тиричилик техникаларын кантип башкарууну сүрөттөйт.

Ал Arduino'ду I2C кулунун алыстан башкаруу модулуна айлантуунун дизайны менен жыйынтыкталат (жогоруда 1 -сүрөт), прототиптик сыноо схемасы менен (жогорудагы 2 -сүрөт) жана дизайныңызды минималдуу керектүү компоненттерге чейин кантип кыскартуу керектигине чейин уланат. башка дизайнга орнотулган. Менин учурда, мен бул камтылган түзмөктү ESP8266-12E тегерегинде негизделген IoT Universal алыстан башкаруу түзмөгүндө колдоном.

Мага кандай бөлүктөр керек?

1 -кадамда сүрөттөлгөн схеманы куруу үчүн (IR өткөргүч) сизге төмөнкү бөлүктөр керек болот;

  • 2 өчүрүү 10K каршылыгы
  • 1 өчүрүү 390R каршылыгы
  • 1 өчүрүү 33R каршылыгы
  • 1 өчүрүү 3K8 каршылыгы
  • 1 өчүк кызыл LED
  • 1 өчүрүү IR Led TSAL6400
  • 1 өчүрүү транзистор BC337
  • 1 өчүрүү 220uF конденсатор
  • 1 өчүрүү Arduino Uno

4 -кадамда сүрөттөлгөн схеманы куруу үчүн (IR алуучу) сизге төмөнкү бөлүктөр керек болот;

  • 1 өчүрүү 10K каршылыгы
  • 1 өчүрүү TSOP38328
  • 1 өчүрүү 220uF конденсатор
  • 1 өчүрүү Arduino Uno

5 -кадамда сүрөттөлгөн схеманы куруу үчүн (Slave test circuit) сизге төмөнкү бөлүктөр керек болот;

  • 4 өчүрүү 10K каршылыгы
  • 2 өчүрүү 390R каршылыгы
  • 1 өчүрүү 33R каршылыгы
  • 1 өчүрүү 3K8 каршылыгы
  • 2 өчүк кызыл LED
  • 1 өчүрүү IR Led TSAL6400
  • 1 өчүрүү транзистор BC337
  • 1 өчүрүү 220uF конденсатор
  • 2 өчүрүү SPST баскычтары
  • 2 өчүрүү Arduino Unos

6 -кадамда сүрөттөлгөн схеманы куруу үчүн (Shrunk design) сизге төмөнкү бөлүктөр керек болот;

  • 3 өчүрүү 10K каршылыгы
  • 1 өчүрүү 270R каршылыгы
  • 1 өчүрүү 15R каршылыгы
  • 4 өчүрүү 1K каршылыгы
  • 1 өчүк кызыл LED
  • 1 өчүрүү IR Led TSAL6400 же TSAL5300
  • 1 өчүрүү транзистор BC337
  • 1 өчүрүү 220uF конденсатор электролит @ 6.3v
  • 1 өчүрүү 1000uF конденсатор электролит @ 6.3v
  • 2 өчүрүү 0.1uF конденсаторлор
  • 2 өчүрүү 22pF конденсаторлор
  • 1 өчүрүү 16MHz Xtal
  • 1 өчүрүү ATMega328P-PU

Эскертүү: ATMega328P программасы үчүн сизге FTDI түзмөгү да керек болот

Мага кандай көндүмдөр керек?

  • Электрониканы минималдуу түшүнүү,
  • Arduino жана анын IDE билими,
  • Бир аз сабыр,
  • I2C жөнүндө кээ бир түшүнүктөр пайдалуу болмок (кээ бир жалпы I2C/Wire китепканасынын чоо -жайын караңыз).

Темалар камтылган

  • Районго кыскача сереп,
  • Программалык камсыздоонун кыскача баяндамасы,
  • I2C пакетинин мазмуну,
  • Алыстан башкаруу коддорун алуу (ui32Data),
  • I2C Slave түзмөгүңүздү кантип сыноо керек,
  • Дизайныңызды кичирейтип,
  • Жыйынтык,
  • Колдонулган шилтемелер.

Disclaimer

Адаттагыдай эле, сиз бул көрсөтмөлөрдү өзүңүздүн тобокелге салып колдоносуз жана алар колдоого алынбайт.

1 -кадам: Районго кыскача сереп

Райондун кыскача баяндамасы
Райондун кыскача баяндамасы

Райондун максаты IR алыстан башкаруу коддорун берүү. Анын дизайны абдан түз жана абдан жөнөкөй.

Транзистор Q1 BC337 NPN логика аркылуу Arduino PWM O/P D3 резистор R5ке күйгүзүлгөндө, ток Leds 1 жана 2. аркылуу өтөт, тиешелүүлүгүнө жараша R3 жана R4 балласт резисторлору менен чектелген. Q1 IR диодунан (IF Max = 100mA) өтүүчү токту күчөтүү үчүн колдонулат, бул Arduino O/P жөндөмдүү ~ 40mA @ +5v менен камсыз болгондон ашык.

Конденсатор C1 a 220uF Электролиттик Ледс 1 жана 2 тарткан кубаттуулук менен темир жол түшүүсүнүн алдын алуу үчүн кээ бир стабилдештирүүнү камсыз кылат.

R1 жана R2 резисторлору I2C тартуулары.

2 -кадам: Программаны кыскача карап чыгуу

Программаны кыскача карап чыгуу
Программаны кыскача карап чыгуу
Программаны кыскача карап чыгуу
Программаны кыскача карап чыгуу
Программаны кыскача карап чыгуу
Программаны кыскача карап чыгуу

Преамбула

Бул булак кодун ийгиликтүү түзүү үчүн сизге төмөнкү кошумча китепкана керек болот;

IRremote.h

  • By: z3t0
  • Максаты: Arduino үчүн Infrared алыскы китепкана: бир нече протоколдор менен инфракызыл сигналдарды жөнөтүү жана алуу
  • Кимден:

Code Overview

Жогорудагы 1-сүрөттө көрсөтүлгөндөй, кодду ишке киргизүүдө микро-контроллерди киргизет/киргизет, андан кийин 'bFreshDataFlag' ички программалык желегинин статусун сурайт. Бул желек орнотулганда, контролер анын "Бош эмес" линиясын ырастайт (D4 маалымат пини төмөн) жана "eBUSY" абалына өтөт, uDataArray баскычтарындагы баскычтарды ырааттуу окуу баскычын басып, IR модуляцияланган маалыматты IR LEDине жөнөтөт. берүү ырааттуулугу.

UDataArray ичинде сакталган маалыматтар толугу менен жөнөтүлгөндөн кийин, 'eIDLE' абалы калыбына келтирилет жана 'Бош эмес' линиясынын де-ырасталышы (D4 бийик пин пин жөнөтүү). Түзмөк азыр берүү баскычынын баскычын басууну кабыл алууга даяр.

IR баскычын басуу маалыматын кабыл алуу

Маалыматтар I2C аркылуу InfraRed алыстан башкаруучуга жөнөтүлгөндө, ал үзгүлтүккө учурайт жана receptEvent () функциясынын чалуусу асинхрондук түрдө иштей баштайт.

Кабыл алынган I2C маалыматтары буферге ырааттуу түрдө 'uDataArray ' жазылат.

Маалыматтарды кабыл алуу учурунда, эгер ырааттуулуктун аягы кожоюн тарабынан белги берилсе (bFreshData! = 0x00), 'bFreshDataFlag' коюлат, ошону менен берүү тизмегинин башталышын билдирет.

2… 3 сүрөттөр кадимки пакеттердин ырааттуулугуна мисал келтирет.

Эскертүү: Толук булак коду бул жерде

3 -кадам: I2C пакетинин мазмуну

I2C пакетинин мазмуну
I2C пакетинин мазмуну

I2C аркылуу кулга жөнөтүлгөн башкаруу пакетинин форматы 1 -сүрөттө ар бир талаанын мааниси төмөндө берилген

Башкаруу пакет талааларынын мааниси

байт bEncoding;

  • IR алыстан башкаруу коддоо,

    • RC6 (Асман) = 0,
    • SONY = 1,
    • SAMSUNG = 2,
    • NEC = 3,
    • LG = 4

uint32_t ui32Data;

Экилик IR маалымат агымынын он алтылык көрсөткүчү 4 Маалымат байты (колу узун), LSByte… MSByte

байт bNumberOfBitsInTheData;

Берилиштердеги бит саны (Max 32). Диапазон = 1… 32

байт bPulseTrainRepeats;

Бул импульстук поезд канча жолу кайталанат. Диапазон = 1… 255. Адатта 2… 4 кайталанат. Сиз муну Күйгүзүү/Өчүрүү командалары үчүн узарткыңыз келиши мүмкүн, анткени кабыл алуучу түзмөк кээде сигналды күйгүзүү үчүн бир нече кошумча импульстук поездди кайталоону талап кылат

байт bDelayBetweenPulseTrainRepeats;

Бул импульстук поездди кайталоонун ортосундагы кечигүү. Диапазон = 1… 255mS. Адатта 22mS… 124mS

байт bButtonRepeats;

Ошол эле баскычты кайталап басууну окшоштурат (бирок Apple пульту сыяктуу өзгөртүлгөн кодду колдобойт, ал жөн гана баскычтын кодун кайталайт). Диапазон = 1… 256. Демейки = 1

uint16_t ui16DelayBetweenButtonRepeats;

Баскычты кайталоо ортосундагы кечигүү (unsigned int). Жалпысынан 2 байт LSByte… MSByte. Диапазон = 1… 65535mS. Демейки = 0mS

байт bFreshData;

  • Жаңы маалыматтар. Нөл эмес мааниси. Акыркы жазылган, IR TX ырааттуулугун иштетет. 0x00… 0xFF диапазону

    • Дагы башкаруу пакеттери келет = 0
    • Бул акыркы көзөмөл пакети = Zero эмес 1, 2,… 255

"_Packed_" компиляторунун директивасынын колдонулушуна көңүл буруңуз. Бул колдонулган максаттуу тутумга карабастан (Uno, Due, ESP8266 ж. Бул registerAllocationType менен dataArrayType ортосундагы биримдик TX/RX программасын жөнөкөй кылып, башкаруу пакетинен байт менен гана ырааттуу түрдө чыгышы керек дегенди билдирет.

4 -кадам: Алыстан башкаруу коддорун алуу (ui32Data)

Алыстан башкаруу коддорун алуу (ui32Data)
Алыстан башкаруу коддорун алуу (ui32Data)
Алыстан башкаруу коддорун алуу (ui32Data)
Алыстан башкаруу коддорун алуу (ui32Data)
Алыстан башкаруу коддорун алуу (ui32Data)
Алыстан башкаруу коддорун алуу (ui32Data)
Алыстан башкаруу коддорун алуу (ui32Data)
Алыстан башкаруу коддорун алуу (ui32Data)

Тиешелүү алыстан башкаруу ачкычынын кодун алууга үч жол бар;

  1. Осциллограф менен битти саноо аркылуу,
  2. Аны бир сайттан караңыз,
  3. Аны программалык камсыздоодогу маалымат агымынан түздөн -түз чечмелеңиз.

Колдонмо менен бир аз саноо аркылуу

Бул эффективдүү ыкма эмес, анткени ал бир топ убакытты талап кылат жана бир нече аракетти талап кылат, бирок бул абдан так болушу мүмкүн. Бул 2 жана 3 ыкмаларын колдонуу менен алынган коддорду визуалдык жактан текшерүүдө, ошондой эле алыстан башкаруунун өзгөчөлүктөрүн аныктоодо пайдалуу. Мисалы, Apple IR пультундагы баскычты басып турганда. Алыстан башкаруучу адегенде буйруктун ырааттуулугун чыгарат, андан кийин кайталанган 0xF кысылган ырааттуулугу менен…

Аны бир сайттан карап көрүңүз

Linux Infrared Remote Control веб -сайтындагы алыстан башкаруу кодунун маалымат базасы жакшы булак.

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

Аны маалымат агымынан түздөн -түз чечмелеңиз

Жогорудагы 1 -сүрөттөгү схеманы IRremote китепкана мисалы 'IRrecvDumpV2.ino' менен бирге колдонуп, маалымат агымын алыстан башкарууга болот. Сүрөт 2 Arduino IDE терминалынын терезесинде күйгүзүү/өчүрүү баскычын басуу үчүн декоддолгон Samsung TV пультун көрсөтөт.

Бириккен алуучу/өткөргүч

Жогорудагы 3 жана 4 -сүрөттөрдө протоколдорду оңой иштетүү үчүн IR буйругун кабыл алууга да, берүүгө да мүмкүн болгон чечим чагылдырылган.

IR алыстан башкаруу баскычын басууну чечүү үчүн, Arduino'ду IRremote китепканасы менен келген 'IRrecvDumpV2.ino' мисалы менен жаркыратышыңыз керек болот.

Ошондой эле IR буйрутмалары болсо, берүү үчүн бирдей жакшы иштейт. Кызыл LED түзмөктүн иштөөдө экенин көрсөтүүчү көрсөткүч катары киргизилген.

5 -кадам: I2C Slave түзмөгүңүздү кантип сыноо керек

I2C Slave түзмөгүңүздү кантип сыноо керек
I2C Slave түзмөгүңүздү кантип сыноо керек
I2C Slave түзмөгүңүздү кантип сыноо керек
I2C Slave түзмөгүңүздү кантип сыноо керек

Булак кодун жана 1 -сүрөттө жогоруда көрсөтүлгөн схеманы колдонуп, 'Master' Arduino программасын 'IR_Remote_Sim_Test.ino' жана 'Кул' Arduino менен 'IR_Remote_Sim.ino' программасы.

Сизде Sony Bravia TV, Sky HD кутусу жана Sony BT SoundBar бар деп ойлосоңуз, 1 -баскычты басыңыз, ошондо телевизоруңуз BBC1ге (101 -канал) өтөт. 2 -баскычты басыңыз жана үн тилкесиңиздин үнү басылат. Кайра басыңыз жана үнү басылат.

IR берүү ырааттуулугун аткарууда LED3 кулдун бош эмес экендигин жана LED1дин IR берүү процесси менен катар жылтылдап тургандыгын көрсөтөт.

Албетте, эгерде сизде жогоруда көрсөтүлгөндөй көңүл ачуучу система жок болсо, сиз кулду "IRrecvDumpV2.ino" менен кайра программалап, алыстан кызыккан командаларыңызды чечип, анан аларды "IR_Remote_Sim_Test.ino" программасына киргизе аласыз. берилген сценарий.

2 -сүрөт Мастер менен Кулдун ортосундагы системалык деңгээлдеги тестирлөө программасын карап көрөт.

6 -кадам: Дизайныңызды кичирейтүү

Дизайныңызды кичирейтүү
Дизайныңызды кичирейтүү

Макул, сиз үйдөгү түзмөктөрүңүздү көзөмөлдөө үчүн эки Arduinoго таянып, бул көрсөтмөнү аткардыңыз деп ойлосоңуз, Arduino запастарыңызды эң натыйжалуу колдонуу эмес. Демек, эгер сиз жогорудагы сүрөттө көрсөтүлгөн схеманы куруп, ATMega328Pти 'IR_Remote_Sim.ino' менен программалоо үчүн бул жердеги көрсөтмөлөрдү аткарсаңыз, анда бүт системаны минималдуу компоненттерге чейин азайта аласыз. Бул сиздин долбоорду башка системага киргизүүгө мүмкүндүк берет.

7 -кадам: Жыйынтык

Жыйынтык
Жыйынтык
Жыйынтык
Жыйынтык

Чечим туруктуу жана жакшы иштейт, ал бир нече жумадан бери башка системага эч кандай көйгөйсүз киргизилген.

Мен Arduino Uno R3тү тандадым, анткени мен оперативдүү RAMга ээ болгон аппаратты каалагандай тереңдиктеги баскыч буферине ээ болчумун. Мен 20 пакеттин (MAX_SEQUENCES) буфер өлчөмүн чечтим.

Мен жасаган Hybrid TX/RX калканы Sony жана Sky алыстан башкаруу пультун чечмелөөдө да абдан ыңгайлуу болду. Мен мезгил -мезгили менен санариптик чөйрөмдү колдонуп моюнга алышым керек болсо да, IR буйругун чечүү IR программасынан келип чыккан менен бирдей болгонун текшерүү үчүн (TSOP38328).

Мен башкача кыла турган жалгыз нерсе, 2 -сүрөттө жогоруда көрсөтүлгөндөй, IR үчүн туруктуу токтун диск схемасын колдонуу болмок.

Дагы бир белгилей кетүүчү жагдай, бардык IR өткөргүчтөр 38 кГц менен модуляцияланган эмес, TSOP38328 38 кГц үчүн оптималдаштырылган.

8 -кадам: Колдонулган шилтемелер

IRRemote.h

  • By: z3t0
  • Максаты: Arduino үчүн Infrared алыскы китепкана: бир нече протоколдор менен инфракызыл сигналдарды жөнөтүү жана алуу
  • Кимден:

IR Remote китепканасы

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

IR (Infrared) Receiver Sensor - TSOP38238 (эквиваленти)

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

Берилиштердин структурасын сөз чектерине толтуруудан качуу үчүн

  • 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

IR алыскы чоо -жайынын жакшы булагы

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

I2C

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

IR Remotes маалымат базасы

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

BC337 маалымат жадыбалы

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

1N4148 маалымат жадыбалы

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

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