Мазмұны:

Теледидардың әмбебап пульті - Ардиуино, инфрақызыл: 5 қадам
Теледидардың әмбебап пульті - Ардиуино, инфрақызыл: 5 қадам

Бейне: Теледидардың әмбебап пульті - Ардиуино, инфрақызыл: 5 қадам

Бейне: Теледидардың әмбебап пульті - Ардиуино, инфрақызыл: 5 қадам
Бейне: Вебинар №1. Ella Atkins про создание умных технологий в вашей жизни. Beyond Robotics 2024, Шілде
Anonim
Теледидардың әмбебап пульті - Ардиуино, инфрақызыл
Теледидардың әмбебап пульті - Ардиуино, инфрақызыл

Сәлеметсіз бе! Бұл нұсқаулықта мен сізге инфрақызыл қашықтан басқару пультін қолданатын көптеген заттармен жұмыс істейтін, сонымен қатар басқа қашықтан басқару пультімен жіберілетін инфрақызыл сигналды «тыңдайтын» және шешетін жеке әмбебап пультті қалай құруға және бағдарламалауға болатынын көрсетемін.

Мені осы қашықтан басқару пультін салуға не түрткі болғаны туралы біраз ақпарат - мен, сіздің көпшілігіңіздей, қашықтан басқару пультін үнемі жоғалтып аламын, және бұл апат көңілімді қалдырады, сондықтан мен оны шешуге мүмкіндік беремін! Мен бұл қашықтан басқару құралын жасадым және оны кереуеттің кереуетіне ұқыпты түрде енгіздім (мен де ағаш өңдеймін) - егер мен кереуеттің жақтауының бір бөлігі болсам, пультті жоғалтып алмаймын!

Жабдықтар

Сізге қажет нәрселер: -Arduino UNO немесе Nano - жүгіріс басқа тақталарға байланысты өзгеруі мүмкін

-дәнекерлемейтін тақта (немесе егер сіз оны тұрақты еткіңіз келсе, дәнекерленген тақтайша)

-Түрлі түсті және ұзындықтағы сымдар

- Уақытша басу түймелері (5) (сіз басқа түймелерді қосуға болады, бірақ аналогтық түйреуіштерден басқасының барлығы пайдаланылатындықтан, цифрлық түйреуіштерді пайдалану қажет болады - сіз тартқыш резисторларды дұрыс қолданғаныңызға көз жеткізуіңіз керек. немесе резисторларды түсіріп, түймелерді шығарыңыз)

-10К Ом резисторы (5) (егер сізге қосымша түймелер қажет болса, сізге көбірек қажет)

-470 Ом резисторы (2)

-инфрақызыл жарық диоды

-Қызыл жарық диоды

-Инфрақызыл сенсор (мен VS1838B бөлшек нөмірін қолдандым, сіз басқасын қолдана аласыз, тек шығуды тексеріңіз)

(Қосымша) Дәнекерлеуіш, Дәнекер, Пісіру ағыны.

1 -қадам: схеманы құру:

Циклды құру
Циклды құру

1). Мен әрқашан компоненттерімді орналастырудан бастауды ұнатамын, себебі бұл әрқашан тақтадағы орналасуды басқарады.

-түймелерді басыңыз

-LEDS: қызыл жарықдиодты және инфрақызыл светодиод қос сыммен қосылады, сондықтан сіз IR жарықдиодты не істеп жатқанын көре аласыз.

-Сенсор

2). Резисторлар

- Біз басу түймелеріне бекітілген 10K бес резисторды «төмен түсіру» резисторы деп атайды. Резисторларды төмен түсіріңіз, егер түйме басылмаса, тиісті Arduino түйрегіші 0 вольтты алады (немесе оған жақын). Резисторларды түсіру (немесе тарту) туралы қосымша ақпарат алу үшін мына жерде терең нұсқаулық берілген:

www.electronics-tutorials.ws/logic/pull-up…

Бұл резисторлар мүлдем қажет болмауы мүмкін, бірақ егер сіз «елес» итермесін алсаңыз, бұл сыйымдылықты байланыстыру мен резисторларды түсіріп алудың алдын алады.

3). Тізбек сымдар

4). 5В және жерге қосылған сымдар

Анықтама үшін берілген суретті пайдаланыңыз! оны сіздің қажеттіліктеріңізге өзгертуге қорықпаңыз!

2 -қадам: код:

#const const RECV_PIN = 7; // IR сенсоры оқу түйреуіші int Button1 = A4; // Ең алыс сол жақ int түймесі2 = A3; // сол жақтан 2 -ші int Button3 = A2; // Middle int батырмасы4 = A1; // 2 -ші оңға қарай int Button5 = A0; // Ең оңға қарай int LED = 3; // IR LED & Red LED int val = 0; // Мәнді өзгерту IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results нәтижелері;

void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pinMode (жарық диоды, OUTPUT); Serial.begin (9600); irrecv.enableIRIn (); irrecv.blink13 (true);} void loop () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // сыйымдылық мәселелерін болдырмау үшін сандық оқудың орнына аналогты оқуды қолдану. сонымен қатар батырмаларды шығаруға көмектеседі. // 900 -де аналогты оқудың болуы мәндерде шамалы қозғалуға мүмкіндік береді, демек түйреуішке толық 5В қолданылмаса да, инфра сигнал жіберіледі. // бірақ 900 сыйымдылықтың кешігуіне байланысты қате оқылмайтындай жоғары (100);} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // «i <3» мәнін өзгерту сигналдың бірден қайталану санын өзгертеді. сондықтан «i <2» сигналды екі рет қайталайды. // егер сіздің теледидар жауап бермесе, сізге осы нөмірмен ойнау қажет болуы мүмкін, әдетте 1 немесе 3 жұмыс істейді, егер олар жауап бермесе, тақ сандарды қолданып көріңіз. // сізге сигналдың кешігу уақытының мәндерімен ойнау қажет болуы мүмкін, мысалы, менің теледидарым 10 жұмыс істейді, бірақ 30 емес. {irsend.sendSony (0xa90, 12); // Sony TV қуат коды, менің теледидарым үшін кодты 3x3 жіберу қажет, сондықтан 3 импульс, үш бөлек уақыт кешігуі (10); // «intra signal delay» for (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // «12» - разряд нөмірі, әр түрлі протоколдар әр түрлі разряд нөмірлерін шақырады. NEC - 32, Sony - 12, қалғандарын кешіктіруге болады (10); for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i 900) {for (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // Sony TV қуатының дыбыс деңгейін төмендету кідірісі (100);}}} кешіктіру (100);} if (қайталанбайтын код (& нәтижелер)) // кодтың төмендегі бөлігі инфрақызыл сигналдарды әр түрлі қашықтан басқару пультінен түсіндіруге мүмкіндік береді. {Serial.println (results.value, HEX); // ол «NEC, Sony, Etc..» процедурасын және «c90, a90, FF02FD» теледидар кодын жасайды, сізге TV Code қосқышының алдыңғы жағына 0x қосу керек (results.decode_type) {case DENON: Serial.println («DENON»); үзіліс; жағдай NEC: Serial.println («NEC»); үзіліс; жағдай PANASONIC: Serial.println («PANASONIC»); үзіліс; жағдай SONY: Serial.println («SONY»); үзіліс; жағдай RC5: Serial.println («RC5»); үзіліс; жағдай JVC: Serial.println («JVC»); үзіліс; жағдай SANYO: Serial.println («SANYO»); үзіліс; MITSUBISHI жағдайы: Serial.println («MITSUBISHI»); үзіліс; жағдай SAMSUNG: Serial.println («SAMSUNG»); үзіліс; LG корпусы: Serial.println («LG»); үзіліс; жағдай RC6: Serial.println («RC6»); үзіліс; case DISH: Serial.println («DISH»); үзіліс; жағдай SHARP: Serial.println («SHARP»); үзіліс; case WHYNTER: Serial.println («WHYNTER»); үзіліс; жағдай AIWA_RC_T501: Serial.println («AIWA_RC_T501»); үзіліс; әдепкі: жағдай БЕЛГІСІЗ: Serial.println («БЕЛГІСІЗ»); үзіліс;} irrecv. resume ();}}

3 -қадам: Тереңдіктегі код: IR сигналдарын жіберу

Мен код жолдарына олардың жол нөмірі бойынша сілтеме жасаймын - әрі қарай жүру үшін мына сілтемені қолданыңыз:

pastebin.com/AQr0fBLg

Біріншіден, біз z3t0 бойынша IR қашықтағы кітапханасын қосуымыз керек.

Міне кітапханаға сілтеме:

github.com/z3t0/Arduino-IRremote

Егер сізге кітапхананы қалай дұрыс жүктеу және оны IDE -ге орнату туралы нұсқаулық қажет болса:

www.arduino.cc/kz/guide/libraries

1 -жолға кітапхана кіреді.

Әрі қарай, біз бірнеше айнымалыларды жариялауымыз керек, 2-12 жолдар мұны жасайды.

Біз өзгермейтін айнымалыларды анықтау үшін «cost int» қолданамыз, тек осы санатқа жатпайды.

Біз өзгеретін айнымалыларды анықтау үшін «int» қолданамыз.

Біз жарықдиодты түйреуіш үшін модуляциясы бар импульсті түйреуішті (PWM) пайдалануымыз керек - оның қасында «~» бар кез келген түйреу жеткілікті болады, менің кодымда - біз цифрлық 3 -пинді қолданамыз.

Әрі қарай, біз кейбір параметрлерді орнатуымыз керек - бұл код Arduino қосылғанда немесе қалпына келтірілгенде бір рет жұмыс істейді.

Назар аударыңыз, біз кірістер мен шығыстарды анықтаймыз (15-20), сериялық мониторды (21) іске қосамыз, инфрақызыл сенсорды қосамыз (22) және сенсорға сигнал келген кезде Arduino-ға борттық жарықдиодты жыпылықтауын айтамыз (23).

Әрі қарай, біз өз циклімізді құрамыз - бұл код қайталанатын болады, жоғарыдан төменге дейін бірнеше рет секундына.

25 -жолда біз if операторын қолданамыз, бұл Arduino -ға «нақты критерийлерді іздеңіз, егер бұл критерийлер орындалса, дәл осы нәрсені жасаңыз» дейді. Бұл жағдайда критерийлер analogRead (Button1)> 900 немесе басқаша айтқанда - «Arduino, біз бұрын A4 түйреуіш ретінде анықтаған түймені 1 қараңыз, егер алынған аналогтық сигнал 900 -ден үлкен болса, келесі нұсқауларға өтіңіз., егер жоқ болса, жалғастырыңыз ». Бұл жерде орау үшін біраз нәрсе бар, сондықтан енуге рұқсат етіңіз: Arduino аналогтық сигналы 5В -қа тең немесе одан төмен, 5В 1023 -ке тең және 0В 0 -ге тең. Кез келген берілген кернеуді 0 -ден 5В -қа дейін анықтауға болады. санды және математиканы қолдана отырып, біз бұл санды немесе керісінше кернеуді анықтай аламыз. 1024 -ті (біз 0 -ді бірлікке қосамыз) 5 -ке бөлеміз, бұл бізге 204.8 береді. Мысалы, біз кернеуге аудару үшін 900 санын қолданамыз, біз 900 -ді 204,8 -ге бөлеміз, бұл бізге ~ 4,4 В береді. Біз Arduino -ға ~ 4,4 вольттан жоғары кернеуді іздеуді айтамыз, егер олай болса, келесі нұсқаулықты орындаңыз.

Келесі нұсқаулар туралы айтатын болсақ (25 -жол), біз irsend.sendNEC (0xFF02FD, 32) көреміз. Бұл «Arduino, NEC протоколына сәйкес келетін модульденген импульсті жіберіңіз, атап айтқанда FF02FD сигналы және оның 32 биттік екеніне көз жеткізіңіз» дейді. Бұл біздің IR светодиодты басқа құрылғылар түсінетін етіп жыпылықтайды. Мұны Морзе коды сияқты елестетіңіз, бірақ көрінбейтін жарықпен! Бұл жерде әр түрлі протоколдар бар, олардың әрқайсысында жүздеген, тіпті мыңдаған жеке сигналдары бар, және олардың әрқайсысының белгілі бір бит саны бар - біздің құрылғы бұл сигналдардың көп мөлшерін тани алады, бірақ біз кейінірек енеміз!

28 -жолда бізде бірінші кешігу бар - бұл кездейсоқ қайталанатын сигналдардың алдын алу үшін осында, түйме басылғаннан кейін және ИҚ сигналы жіберілгеннен кейін, саусағымызды түймеден алу үшін 100 миллисекунд бар. Бұл көп уақыт емес сияқты, бірақ іс жүзінде бұл жақсы жұмыс істейтін сияқты. кешіктіру функциясы Arduino -ға «X миллисекунд үшін ештеңе жасамауды» айтады және анықтама үшін олар секундына 1000 миллисекундты құрайды.

29 -жолдағы келесі түйменің 5 -ші түймешігіне көшу (бастапқыда менде бұл қашықтан басқару пультінде 4 түйме бар еді, бесіншісін қостым, сондықтан біз істен шығып кеттік). Бұл, 1 -ші батырмамен бірдей, бірақ бірнеше негізгі айырмашылықтармен. Сіз көретін бірінші айырмашылық for операторы - бұл басқа цикл - басқа үлкен циклдегі цикл, loopception. Нақтырақ айтқанда, бізде «for (int i = 0; i <3; i ++)» бар, оны «Arduino, 0 -ден бастауға рұқсат етіңіз, келесі нұсқауларды 3 -ке жеткенше қайталаңыз» деп оқыңыз. For функциясы пайдаланылады, себебі көптеген құрылғылар қайталанатын сигналды іздеуге арналған, ал біздің жағдайда бұл жерде 3 рет. Егер құрылғы басқа қайталау кестесін қажет етсе, 3 санын басқа нөмірге өзгертуге болады. 5 түймешігінің тағы бір маңызды айырмашылығы - ол 3 рет немесе 3 рет қайталанады. Басқаша айтқанда, біз сигналды 3 рет жібереміз, 10 миллисекунд күтеміз, қайтадан 3 рет жібереміз, тағы 10 миллисекунд күтеміз, содан кейін қайтадан 3 рет жібереміз. Байланыстың бұл түрі құрылғыны қосу және өшіру үшін кең таралған және бұл сіздің теледидарыңыз немесе құрылғыңыз талап ететін нәрсе болуы мүмкін - мұның кілті сіз қалаған нәтижеге жеткенше барлық айнымалылармен ойнау. Қысқа кідіріс мәнін өзгертіңіз, қайталанатын мәнді өзгертіңіз, 3 партияның орнына 6 топтаманы жіберіңіз, т.б. Құрылғылар кездейсоқ сигнал ережелерімен бағдарламаланған, теледидардың пультінің дыбыс жолағыңызбен бірдей сигнал жібергенін елестетіңіз; теледидардағы арнаны ауыстырған сайын дыбыс жолағы өшеді, сондықтан сигналдың әр түрлі ережелері бар.

Келесі үш түйме жоғарыда сипатталған принциптермен, кем дегенде ішінара бағдарламаланған - сондықтан біз 55 -ші жолға дейін өтуге болады.

4 -қадам: Тереңдіктегі код: IR сигналдарын қабылдау

Тереңдіктегі код: IR сигналдарын қабылдау
Тереңдіктегі код: IR сигналдарын қабылдау

55 -жолда біз басқа қашықтан басқару құралдары жіберетін инфрақызыл сигналдарды түсіндіру үшін Arduino бағдарламалауды бастаймыз - бұл сіздің қашықтан басқару пульті қолданатын протоколдар мен сигналдарды анықтау үшін қажет. 55 -жолдағы кодтың бірінші жолы - егер (irrecv.decode (& нәтижелері) мұны «Arduino, IR кодын іздеңіз, егер сіз оны тапсаңыз, шын мәнін қайтарыңыз, егер ештеңе табылмаса, жалған мәнді қайтарыңыз. Дұрыс болғанда жазыңыз» ақпаратты «нәтижеге» айналдырады.

56 -шы жолға көшкенде бізде Serial.println (results.value, HEX) бар, онда «Ardunio, нәтижелерді сериялық мониторда HEX форматында басып шығарыңыз» делінген. Он алтылық дегенді білдіретін он алтылық - бұл екілік жолды (тек 0 мен 1 -ді) қысқартуға болатын нәрсе, оны теруді сәл жеңілдетуге болады. Мысалы, 101010010000 - «a90», менің теледидарымды өшіру және қосу үшін қолданылатын код, ал 111111110000001011111101 - бұл RGB жолағымды басқаратын 0xFF02FD. Сіз жоғарыдағы диаграмманы екілік жүйені он алтылыққа немесе керісінше түрлендіру үшін пайдалана аласыз немесе келесі сілтемені пайдалана аласыз:

www.rapidtables.com/convert/number/hex-to-…

57 -ші жолға дейін бізде коммутатор деп аталатын жаңа функция бар.

Негізінде, коммутатор қорабы берілген айнымалының (жағдайдың) нәтижелері бойынша әр түрлі нұсқауларды көрсетуге мүмкіндік береді. үзіліс switch операторынан шығады және әр оператордың соңында қолданылады.

Біз мұнда коммутатор корпусын әр түрлі қашықтан басқару пультінен Arduino сезетін хаттамаларға негізделген сериялық мониторда басып шығару жолын өзгерту үшін қолданамыз.

5 -қадам: Қорытынды

Егер сізде сұрақ туындаса - маған осы жерден хабарласыңыз! Сізге қолымнан келгенше көмектесуге тырысқаныма қуаныштымын.

Сіз өзіңіздің өміріңізді жақсарту үшін қолдануға болатын нәрсені білдіңіз деп үміттенемін!

-RB

Ұсынылған: