Съдържание:
- Стъпка 1: Кратък преглед на веригата
- Стъпка 2: Кратък преглед на софтуера
- Стъпка 3: Съдържание на пакети I2C
- Стъпка 4: Придобиване на кодове за дистанционно управление (ui32Data)
- Стъпка 5: Как да тествате вашето I2C подчинено устройство
- Стъпка 6: Свиване на вашия дизайн
- Стъпка 7: Заключение
- Стъпка 8: Използвани справки
Видео: Инфрачервено дистанционно управление I2C с Arduino: 8 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
PreambleThis Instructable описва как да създадете универсално дистанционно управление, използвайки I2C за интерфейса.
Колко странно казвате, че използвате I2C подчинено устройство?
Да, I2C подчинено устройство.
Това е така, защото точното време на IR пакетите е доста взискателно и с това типичен Arduino ще се бори, ако вече изпълнява много други задачи едновременно. По -добре е да се разпределя изчислителното натоварване, като се присвояват интензивни времеви дейности на специализирани процесори, когато е възможно (по -добре го направете в хардуер). Като се има предвид, че I2C е добре документиран и стабилен комуникационен метод между интегралните схеми, аз избрах това като интерфейс.
Въведение
Както бе споменато по -горе, тази инструкция описва как да управлявате домакински уреди като телевизор, DVD плейър и сателит и др., Като използвате библиотеката IRremote на Arduino.
Той завършва с пример за проектиране, превръщащ Arduino в I2C подчинен модул за дистанционно управление (снимка 1 по -горе) с прототипна тестова верига (снимка 2 по -горе) и продължава с подробности как да свиете дизайна до необходимите минимални компоненти, за да може да бъде вграден в друг дизайн. В моя случай използвам това вградено устройство в универсално устройство за дистанционно управление на IoT, базирано на ESP8266-12E.
Какви части са ми необходими?
За да изградите схемата, изобразена в Стъпка 1 (IR предавател), ще ви трябват следните части;
- 2 от 10K резистора
- 1 от 390R резистор
- 1 от 33R резистор
- 1 от 3K8 резистор
- 1 изключен Червен светодиод
- 1 изключен IR Led TSAL6400
- 1 изключен транзистор BC337
- 1 от 220uF кондензатор
- 1 от Arduino Uno
За да изградите схемата, изобразена в Стъпка 4 (IR приемник), ще ви трябват следните части;
- 1 от 10K резистор
- 1 от TSOP38328
- 1 от 220uF кондензатор
- 1 от Arduino Uno
За да изградите схемата, изобразена в Стъпка 5 (Изпитателна верига на подчинен), ще ви трябват следните части;
- 4 изключени 10K резистора
- 2 от 390R резистор
- 1 от 33R резистор
- 1 от 3K8 резистор
- 2 изключен Червен светодиод
- 1 изключен IR Led TSAL6400
- 1 изключен транзистор BC337
- 1 от 220uF кондензатор
- 2 изключени бутони SPST
- 2 от Arduino Unos
За да изградите схемата, изобразена в Стъпка 6 (Сгъстен дизайн), ще ви трябват следните части;
- 3 от 10K резистора
- 1 от 270R резистор
- 1 от 15R резистор
- 4 изключени 1K резистора
- 1 изключен Червен светодиод
- 1 изключен IR Led TSAL6400 или TSAL5300
- 1 изключен транзистор BC337
- 1 изключен електролитичен кондензатор 220uF @ 6.3v
- 1 off 1000uF кондензатор електролитен @ 6.3v
- 2 от 0,1uF кондензатори
- 2 изключени 22pF кондензатора
- 1 от 16MHz Xtal
- 1 от ATMega328P-PU
Забележка: Ще ви е необходимо и FTDI устройство за програмиране на ATMega328P
Какви умения са ми необходими?
- Минимално разбиране на електрониката,
- Познаване на Arduino и неговата IDE,
- Малко търпение,
- Някои познания за I2C биха били полезни (вижте тук за някои общи подробности за I2C/Wire Library).
Обхванати теми
- Кратък преглед на веригата,
- Кратък преглед на софтуера,
- Съдържание на пакети I2C,
- Придобиване на кодове за дистанционно управление (ui32Data),
- Как да тествате вашето I2C Slave устройство,
- Свивайки вашия дизайн,
- Заключение,
- Използвани препратки.
Опровержение
Както винаги, вие използвате тези инструкции на свой собствен риск и те не се подкрепят.
Стъпка 1: Кратък преглед на веригата
Целта на веригата е да предава IR кодове за дистанционно управление. Дизайнът му е доста прав и доста прост.
Когато транзистор Q1 е включен BC337 NPN чрез логически от Arduino PWM O/P D3 към резистор R5, токът преминава през Led 1 и 2. Ограничен само от баластни резистори R3 и R4 съответно. Q1 се използва за увеличаване на тока, преминаващ през инфрачервения диод (IF Max = 100mA) до този над този, който Arduino O/P е способен да захранва ~ 40mA @ +5v.
Кондензаторът C1 a 220uF Electrolytic осигурява известна стабилизация, предотвратявайки падането на захранващата шина от мощността, поемана от светодиоди 1 и 2.
Резисторите R1 и R2 са I2C издърпвания.
Стъпка 2: Кратък преглед на софтуера
Преамбюл
За успешно компилиране на този изходен код ще ви е необходима следната допълнителна библиотека;
IRremote.h
- От: z3t0
- Предназначение: Инфрачервена отдалечена библиотека за Arduino: изпращане и приемане на инфрачервени сигнали с множество протоколи
- От:
Преглед на кода
Както е показано на снимка 1 по-горе, при стартиране кодът конфигурира входа/изхода на микроконтролера, след което проучва състоянието на вътрешния софтуерен флаг „bFreshDataFlag“. Когато този флаг е зададен, контролерът потвърждава, че е „Зает“(изпраща нисък пин на данни D4 ниско) и се премества в състояние „eBUSY“, като последователно чете бутоните, натиснати командите, държани в uDataArray и изпращайки IC модулирани данни към IR LED в a последователност на предаване.
След като данните, съхранявани в uDataArray , бъдат напълно изпратени, състоянието „eIDLE“се възобновява и линията „Зает“се отменя (изпращането на пин за данни D4 високо). Устройството вече е готово да получи повече натискания на бутони, отбелязващи края на предаването.
Получаване на данни за натискане на IR бутон
Когато данните се изпращат към дистанционното управление InfraRed чрез I2C, то задейства прекъсване и извикването на функцията receiveEvent () се задейства асинхронно.
След задействане получените I2C данни се записват последователно в буфера „uDataArray ”.
По време на приемането на данни, ако краят на последователността е сигнализиран от главния (bFreshData! = 0x00), се задава 'bFreshDataFlag', като по този начин се сигнализира началото на предаването.
Снимки 2… 3 дават пример за типична последователност от пакети.
Забележка: Пълният изходен код е достъпен тук
Стъпка 3: Съдържание на пакети I2C
Форматът на контролния пакет, изпратен на подчиненото устройство по I2C, е даден по -горе на снимка 1, значението на всяко поле е дадено по -долу
Значение на полетата на контролния пакет
байт bEncoding;
-
Кодиране на IR дистанционно управление,
- RC6 (небе) = 0,
- SONY = 1,
- SAMSUNG = 2,
- NEC = 3,
- LG = 4
uint32_t ui32Data;
Шестнадесетичното представяне на двоичния IR поток от данни 4 байта данни (без знаци дълги), LSByte … MSByte
байт bNumberOfBitsInTheData;
Брой битове в данните (максимум 32). Обхват = 1… 32
байт bPulseTrainRepeats;
Колко повторения на този импулсен влак. Обхват = 1… 255. Обикновено 2… 4 повторения. Може да искате да разширите това за команди за включване/изключване, тъй като приемното устройство понякога изисква няколко допълнителни импулсни повторения, за да получи сигнал за включване
байт bDelayBetweenPulseTrainRepeats;
Забавяне между повторенията на този импулсен влак. Обхват = 1… 255 mS. Обикновено 22mS… 124mS
байт bButtonRepeats;
Симулира многократно натискане на същия бутон (но не поддържа модифицирания код като дистанционно на Apple, просто повтаря кода на бутона). Диапазон = 1… 256. По подразбиране = 1
uint16_t ui16DelayBetweenButtonRepeats;
Забавяне между повторения на бутони (без знак int). 2 байта общо LSByte … MSByte. Обхват = 1… 65535mS. По подразбиране = 0 ms
байт bFreshData;
-
Свежи данни. Стойност, различна от нула. Записано последно, задейства IR TX последователността. Обхват 0x00… 0xFF
- Предстоят още контролни пакети = 0
- Това е окончателният контролен пакет = Ненулева стойност 1, 2,… 255
Обърнете внимание на използването на директивата за компилатор „_packed_“. Това е, за да се гарантира, че данните са пакет байт за байт в паметта, независимо от използваната целева система (Uno, Due, ESP8266 и т.н.). Това означава, че обединението между registerAllocationType и dataArrayType се нуждае само от последователен часовник/такт в байтове от контролен пакет, което прави софтуера TX/RX опростен.
Стъпка 4: Придобиване на кодове за дистанционно управление (ui32Data)
Има три начина, по които можете да получите съответния код на ключ за дистанционно управление;
- Чрез броене на битове с осцилоскоп,
- Потърсете го на уебсайт,
- Декодирайте го директно от потока от данни в софтуера.
Чрез преброяване на битове с обхват
Това не е ефективен метод, тъй като отнема доста време и потенциално изисква повече от един опит, но може да бъде много точен. Той е полезен и при визуално валидиране на кодове, получени по методи 2 и 3, също и при определяне на всякакви особености на дистанционното управление. Например, когато задържите бутон на дистанционно управление на Apple IR. Дистанционното първоначално ще издаде командна последователност, след което следва тази с многократно компресирана последователност от 0xF….
Потърсете го на уебсайт
Базата данни с кодове за дистанционно управление на уебсайта за инфрачервено дистанционно управление на Linux е добър източник.
Недостатъкът обаче е, че може да се наложи да опитате няколко кода, докато не намерите този, който работи за вас. Може също да се наложи да интерпретирате някои от представянията на кодовете, за да ги преобразувате в еквивалентната им шестнадесетична форма.
Декодирайте го директно от потока от данни
Използвайки схемата на снимка 1 по -горе, заедно с примера на библиотеката IRremote „IRrecvDumpV2.ino“, е възможно да се декодира потокът от данни директно от дистанционното. Снимка 2 показва декодирано дистанционно управление на телевизора на Samsung за натискане на бутон за включване/изключване в прозореца на терминала на Arduino IDE.
Комбиниран приемник/предавател
Снимки 3 и 4 по -горе изобразяват решение, което позволява едновременно приемане и предаване на IR команда, за да позволи лесно прототипиране.
За декодиране на натискане на бутони за дистанционно управление ще трябва да мигате Arduino с примера „IRrecvDumpV2.ino“, който се доставя с библиотеката IRremote.
Той също така работи еднакво добре за предаване, ако IR командва. Червен светодиод е включен като визуална индикация, че устройството е в действие.
Стъпка 5: Как да тествате вашето I2C подчинено устройство
Използвайки изходния код тук и схемата, описана по -горе на снимка 1, програмирайте „Master“Arduino с „IR_Remote_Sim_Test.ino“и „Slave“Arduino с „IR_Remote_Sim.ino“.
Ако приемем, че имате телевизор Sony Bravia, Sky HD кутия и Sony BT SoundBar, натиснете бутон 1 и вашият телевизор ще премине към BBC1 (канал 101). Натиснете бутон 2 и вашата звукова лента ще заглуши. Натиснете отново и звукът ще се изключи.
По време на изпълнение на последователността на IR предаване LED3 ще светне, показвайки, че подчиненият е зает и LED1 ще трепне в съответствие с процеса на IR предаване.
Разбира се, ако нямате настроена същата система за забавление, както по-горе, можете да препрограмирате подчинения с „IRrecvDumpV2.ino“, да декодирате вашите отдалечени команди, които представляват интерес, след което да ги програмирате в „IR_Remote_Sim_Test.ino“за вашия даден сценарий.
Снимка 2 показва общ преглед на софтуерния тест за системно ниво между Master и Slave.
Стъпка 6: Свиване на вашия дизайн
Добре, така че ако приемете, че сте следвали тази инструкция, разчитането на два Arduinos за контрол на домашните ви устройства не е най -ефективното използване на вашия Arduino запас. Следователно, ако изградите схемата, показана на снимката по -горе и следвате инструкциите тук, за да програмирате ATMega328P с 'IR_Remote_Sim.ino', ще можете да намалите цялата система до минималните компоненти. Това ще ви позволи да вградите вашия дизайн в друга система.
Стъпка 7: Заключение
Решението е стабилно и работи добре, вградено е в друга система от доста седмици без никакви проблеми.
Избрах Arduino Uno R3, тъй като исках устройство с достатъчно RAM, така че да имам буфер с бутони с разумна дълбочина. Аз се задоволих с размер на буфера от 20 пакета (MAX_SEQUENCES).
Хибридният TX/RX щит, който направих, също беше много полезен при декодиране на дистанционното управление на Sony и Sky. Въпреки че трябва да призная, че използвам цифровия си обхват от време на време, за да проверя софтуерната декодирана IR команда, беше същата като тази, получена от получената IR (TSOP38328).
Единственото нещо, което бих направил по различен начин, би било да използвам верига за задвижване с постоянен ток за инфрачервения светодиод, както е показано по -горе на снимка 2.
Още един момент, който трябва да се отбележи, е, че не всички IR предаватели са модулирани с 38KHz, TSOP38328 е оптимизиран за 38KHz.
Стъпка 8: Използвани справки
IRRemote.h
- От: z3t0
- Предназначение: Инфрачервена отдалечена библиотека за Arduino: изпращане и приемане на инфрачервени сигнали с множество протоколи
- От:
IR дистанционна библиотека
- z3t0.github.io/Arduino-IRremote/
- https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
IR (инфрачервен) сензор на приемника - 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
Добър източник на инфрачервени дистанционни данни
https://www.sbprojects.com/knowledge/ir/index.php
I2C
- https://playground.arduino.cc/Main/WireLibraryDetailedReference
- https://www.arduino.cc/en/Reference/WireSend
IR отдалечена база данни
- 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
Препоръчано:
МР3 плейър с инфрачервено управление: 6 стъпки (със снимки)
MP3 плейър с инфрачервен контрол: Изградете MP3 плейър с инфрачервен дистанционен контролер за около $ 10 (usd). Той има обичайните функции: възпроизвеждане, пауза, възпроизвеждане на следваща или предишна, пускане на една песен или всички песни. Той също така има варианти на еквалайзера и контрол на силата на звука. Всички контролируеми чрез r
Инфрачервено дистанционно управление с Amazon Echo: 11 стъпки (със снимки)
Инфрачервено дистанционно управление с управление на Amazon Echo: Системата Amazon Echo може да контролира много аспекти на интелигентния дом, но интелигентният контакт може само да се изключва и включва. Много устройства не се включват незабавно чрез просто включване и изискват допълнителни стъпки, като натискане на бутони на дистанционно управление или
8 Релейно управление с NodeMCU и IR приемник, използващ WiFi и IR дистанционно управление и приложение за Android: 5 стъпки (със снимки)
8 Релейно управление с NodeMCU и IR приемник, използващ WiFi и IR дистанционно и приложение за Android: Управление на 8 релейни превключвателя с помощта на nodemcu и IR приемник през wifi и дистанционно и приложение за android. Дистанционното работи независимо от wifi връзката. ТУК
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC играчка: 4 стъпки
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC Toy: 如何 将 通用 遥控 套件 转换 为 玩具 中 使用 的 四 遥控 器。 遥控 套件 非常 便宜。 采用 62 62 2262 和 2272 芯片 433 模块 构建。方法 非常 简单。 只需 一些 瓦楞纸 板 , 然后 按照 视频 教程 这个 电子 项目 并 为 服务。 玩具 车船 提供 远程 无线 控制
Дистанционно дистанционно управление: 11 стъпки (със снимки)
Дистанционно дистанционно управление: Имам новородено бебе и той не смята, че трябва да спи толкова дълго, колкото съпругата ми и аз може да му пожелаем. Едно нещо, което го прави щастлив в креватчето му, е мобилният телефон, който виси над него. Така че, когато се събуди, ако ни трябват още около 25 минути