Բովանդակություն:

Universal TV Remote - Ardiuino, Infrared: 5 Steps
Universal TV Remote - Ardiuino, Infrared: 5 Steps

Video: Universal TV Remote - Ardiuino, Infrared: 5 Steps

Video: Universal TV Remote - Ardiuino, Infrared: 5 Steps
Video: How to make Universal Remote Controller for all Devices 2024, Հուլիսի
Anonim
Universal TV Remote - Ardiuino, Infrared
Universal TV Remote - Ardiuino, Infrared

Բարեւ Ձեզ! Այս խրատելիքում ես ձեզ ցույց կտամ, թե ինչպես կառուցել և ծրագրավորել ձեր ունիվերսալ հեռակառավարիչը, որը կաշխատի ինֆրակարմիր հեռակառավարիչ օգտագործող սարքերի մեծ մասի հետ, ինչպես նաև «կլսի» և կվերծանի տարբեր այլ հեռակառավարիչների կողմից ուղարկված ինֆրակարմիր ազդանշանը:

Մի փոքր նախապատմություն, թե ինչն է ինձ ոգեշնչել այս հեռակառավարման սարքը կառուցելու համար. Ես կառուցել եմ այս հեռավորությունը և խելամտորեն ներկառուցել այն իմ պատվերով կառուցված մահճակալի շրջանակի մեջ (ես նաև փայտագործ եմ) - ես չեմ կարող կորցնել հեռակառավարիչը, եթե դա իմ անկողնու շրջանակի մի մասն է:

Պարագաներ

Ձեզ անհրաժեշտ բաներ. -Ardduino UNO կամ Nano

-Առանց զոդման տախտակ (կամ զոդվող տախտակ, եթե ցանկանում եք այն ավելի մշտական դարձնել)

-Տարբեր գույների և երկարությունների համակցված լարեր

- Մեկ ակնթարթային կոճակներ (5) (կարող եք ավելացնել ավելի շատ կոճակներ, բայց ձեզ հարկավոր է օգտագործել թվային կապում, քանի որ անալոգային կապումներից բացի 1 -ը օգտագործվում են, դուք պետք է ուշադիր նայեք, որպեսզի ճիշտ օգտագործեք ձգվող դիմադրիչներ) կամ ներքև քաշեք ռեզիստորները և հանեք սեղմման կոճակները)

-10K Օմ դիմադրություն (5) (եթե ցանկանում եք ավելի շատ սեղմել կոճակները, ձեզանից ավելի շատ պետք կգա)

-470 Օմ դիմադրություն (2)

-Ինֆրակարմիր LED

-Կարմիր LED

-Ինֆրակարմիր տվիչ (ես օգտագործել եմ մասի համարը VS1838B, դուք կարող եք օգտագործել մեկ այլ, պարզապես ստուգեք անջատումը)

(Ըստ ցանկության) Sոդման երկաթ, զոդման, զոդման հոսք:

Քայլ 1: Շղթայի կառուցում

Շղթայի կառուցում
Շղթայի կառուցում

1). Ես միշտ սիրում եմ սկսել իմ բաղադրամասերը շարադրելով, քանի որ դա միշտ տանում է դեպի հացահատիկի դասավորությունը:

-Սեղմեք կոճակները

-ԼԵԴ. Կարմիր LED- ն և IR LED- ը միացված են միաժամանակ, այնպես որ կարող եք տեսնել, թե ինչ է անում IR LED- ը:

-սենսոր

2). Ռեզիստորներ

- Հինգ 10K դիմադրիչները, որոնք մենք ամրացրել ենք սեղմման կոճակներին, կոչվում են «ներքև քաշվող» դիմադրիչներ: Ռեզիստորները ներքև քաշեք, համոզվեք, որ երբ կոճակը սեղմված չէ, համապատասխան Arduino- ի կապը ստանում է 0 վոլտ (կամ գոնե դրան մոտ): Իջեցման (կամ վերևի) դիմադրիչների մասին լրացուցիչ տեղեկությունների համար ահա խորը ուղեցույցը.

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

Այս ռեզիստորները կարող են ամբողջովին անհրաժեշտ չլինել, բայց եթե դուք ստանում եք «ուրվական» հրում, ապա դա, ամենայն հավանականությամբ, պայմանավորված է տարողունակ միացումով և դիմադրությունները քաշելով դա կանխում է դա:

3): Շղթայի լարեր

4): 5V և հողային լարեր

Տեղեկատվության համար օգտագործեք տրամադրված նկարը: մի վախեցեք այն փոխել ձեր կարիքների համար:

Քայլ 2: Կոդ

#ներառել const int RECV_PIN = 7; // IR սենսոր կարդալ pin int Button1 = A4; // Farthest Left int int Button2 = A3; // ձախից 2 -րդ int կոճակ 3 = A2; // Middle int Button4 = A1; // 2 -րդ դեպի աջ int Button5 = A0; // Ամենահեռու աջ int LED = 3; // IR LED & Red LED int val = 0; // Փոխվող արժեքը IRsend irsend; IRrecv irrecv (RECV_PIN); decode_results results;

void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); pinMode (LED, OUTPUT); Serial.begin (9600); irrecv.enableIRIn (); irrecv.blink13 (ճշմարիտ);} դատարկ շրջան () {{{եթե (analogRead (կոճակ 1)> 900) irsend.sendNEC (0xFF02FD, 32); // թվային ընթերցման փոխարեն անալոգային ընթերցման օգտագործումը `գերի տարողունակության խնդիրներից խուսափելու համար: նաև, օգնում է հանել կոճակները: // 900 -ում անալոգային ընթերցման առկայությունը թույլ է տալիս որոշ չափով տեղաշարժվել արժեքների մեջ, այսինքն `ինֆրակարմիր ազդանշանը կուղարկվի, նույնիսկ եթե ամբողջ 5V- ը չկիրառվի քորոցին: // բայց 900 -ը բավականաչափ բարձր է, որպեսզի սխալ չկարդա `կապակցման միացման հետաձգման պատճառով (100);} // RGB Strip On & Off {if (analogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // «i <3» - ում արժեքը փոխելը կփոխի ազդանշանը անմիջապես կրկնելու անգամների թիվը: այնպես որ «i <2» - ը երկու անգամ կրկնելու է ազդանշանը: // Ձեզ կարող է անհրաժեշտ լինել խաղալ այս համարի հետ, եթե ձեր հեռուստացույցը չի արձագանքում, ընդհանրապես, 1 -ը կամ 3 -ն ամենաշատն են աշխատում, եթե ոչ, փորձեք կենտ թվեր: // Ձեզ նույնպես կարող է անհրաժեշտ լինել խաղալ ազդանշանի հետաձգման ժամանակի արժեքների հետ, օրինակ ՝ իմ TV 10 -ի աշխատանքների համար, իսկ 30 -ը ՝ ոչ: {irsend.sendSony (0xa90, 12); // Sony TV- ի հզորության կոդ, իմ հեռուստացույցի համար ծածկագիրը պետք է ուղարկվի 3x3, այնպես որ 3 իմպուլս, երեք առանձին անգամ ուշացում (10); // «ներ ազդանշանային ուշացում» (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 հեռուստատեսության հոսանքի ձայնի նվազման հետաձգում (100);}}} ուշացում (100);} եթե (irrecv.decode (& results)) // ծածկագրի ներքևի հատվածը հնարավորություն է տալիս մեկնաբանել ինֆրակարմիր ազդանշանները տարբեր հեռակառավարիչներից: {Serial.println (results.value, HEX); // այն կստեղծի «NEC, Sony, Etc..» և «c90, a90, FF02FD» հեռուստատեսության ծածկագիրը, որը ձեզ հարկավոր է 0x ավելացնել TV Code անջատիչի առջևին (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"); ընդմիջում; գործ DISH: Serial.println ("DISH"); ընդմիջում; գործ SHARP: Serial.println ("SHARP"); ընդմիջում; գործ WHYNTER: Serial.println ("WHYNTER"); ընդմիջում; գործ AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); ընդմիջում; լռելյայն. դեպքում ԱՆՀԱՅՏ. Serial.println ("ԱՆՀԱՅՏ"); ընդմիջում;} irrecv.resume ();}}

Քայլ 3: Խորության մեջ գտնվող կոդը. IR ազդանշանների ուղարկում

Ես կանդրադառնամ կոդի տողերին `իրենց տողերի համարով: Հետևելու համար օգտագործեք այս հղումը.

pastebin.com/AQr0fBLg

Նախ, մենք պետք է ներառենք IR հեռակա գրադարանը z3t0- ի կողմից:

Ահա գրադարանի հղումը.

github.com/z3t0/Arduino-IRremote

Եթե Ձեզ անհրաժեշտ է ուղեցույց, թե ինչպես ճիշտ ներբեռնել գրադարանը և տեղադրել այն IDE- ում.

www.arduino.cc/hy/guide/libraries

Տող 1 -ը ներառում է գրադարանը:

Հաջորդը, մենք պետք է հայտարարենք մի քանի փոփոխական, 2-12 տողերը դա անում են:

Մենք օգտագործում ենք «cost int» ՝ փոփոխականներ սահմանելու համար, որոնք չեն փոխվի, բոլորը ներառված են այս կատեգորիայում:

Մենք օգտագործում ենք «int» ՝ փոփոխականներ սահմանելու համար, որոնք կփոխվեն:

Մենք պետք է օգտագործենք մոդուլյացիայի (PWM) իմպուլսային քորոց մեր LED քորոցի համար. Ցանկացած քորոց, որի կողքին կա «~», բավական կլինի, իմ ծածկագրում `մենք օգտագործում ենք թվային կապում 3:

Հաջորդը, մենք պետք է որոշ կարգավորումներ կատարենք. Այս կոդը կգործի միայն մեկ անգամ, երբ Arduino- ն միացված կամ վերականգնվի:

Ուշադրություն դարձրեք, որ մենք սահմանում ենք մեր մուտքերն ու ելքերը (15-20), կրակում ենք սերիական մոնիտորը (21), հնարավորություն ենք տալիս IR սենսորին (22) և Arduino- ին ասում ենք, որ թարթի բորդի LED- ն ցանկացած պահի, երբ սենսորում ազդանշան ստանանք (23):

Հաջորդը, մենք կկառուցենք մեր հանգույցը. Այս կոդը բազմիցս կգործի ՝ վայրկյանում մի բուռ անգամ վերևից ներքև անցնելով:

25 -րդ տողում մենք օգտագործում ենք if հայտարարություն, որն Arduino- ին ասում է. «Փնտրեք այս հատուկ չափանիշները, եթե այդ չափանիշները բավարարված են, արեք այս կոնկրետ բանը»: Այս դեպքում չափանիշներն են analogRead (Կոճակ 1)> 900, կամ այլ կերպ ասած ՝ «Arduino, Նայեք կոճակին 1, որը մենք ավելի վաղ սահմանել էինք որպես կապ A4, եթե ստացված անալոգային ազդանշանը 900 -ից մեծ է, անցեք մեր հաջորդ ցուցումներին:, եթե ոչ, ապա շարունակեք »: Այստեղ բացելու համար մի փոքր բան կա, այնպես որ եկեք սուզվենք. Arduino- ի անալոգային ազդանշանը 5V- ին հավասար կամ պակաս արժեք է, 5V- ը `1023, և 0V- ն` 0. մի թիվ, և մի փոքր մաթեմատիկայի դեպքում մենք կարող ենք պարզել այդ թիվը կամ հակառակը ՝ լարման: 1024 -ը (մենք ներառում ենք 0 -ը որպես միավոր) 5 -ի վրա, ինչը մեզ տալիս է 204.8: Օրինակ, մենք օգտագործում ենք 900 թիվը, այն լարման վերածելու համար մենք պարզապես 900 -ը բաժանում ենք 204.8 -ի ՝ տալով մեզ 4.4V ~: Մենք Arduino- ին ասում ենք, որ փնտրի a 4.4 վոլտից ավելի մեծ լարման, և եթե դա լինի, կատարիր մեր հաջորդ հրահանգը:

Խոսելով հաջորդ ցուցումների մասին (տող 25), մենք տեսնում ենք irsend.sendNEC (0xFF02FD, 32): Սա ասում է «Arduino, ուղարկիր մոդուլացված զարկերակ, որը հետևում է NEC արձանագրությանը, մասնավորապես FF02FD ազդանշանին և համոզվիր, որ դրա երկարությունը 32 բիթ է»: Սա կդարձնի մեր IR LED լուսարձակը այնպես, ինչպես մյուս սարքերը կարող են հասկանալ: Մտածեք դրա մասին մի փոքր Morse Code- ի նման, բայց պարզապես անտեսանելի լույսով: Կան բազմաթիվ տարբեր արձանագրություններ, որոնցից յուրաքանչյուրը պարունակում է հարյուրավոր, եթե ոչ հազարավոր անհատական ազդանշաններ, և յուրաքանչյուրը `իրենց հատուկ բիտերի համարով:

28 -րդ տողում մենք ունենք մեր առաջին հետաձգումը. Սա այստեղ է կանխելու ակամա կրկնվող ազդանշանները, երբ կոճակը սեղմված է և IR ազդանշանը ուղարկվում է, մենք ունենք 100 միլիվայրկյան ՝ մատը կոճակից հանելու համար: սա շատ ժամանակ չի հնչում, բայց գործնականում այն կարծես լավ է աշխատում: հետաձգման գործառույթը Arduino- ին ասում է «ոչինչ մի՛ արա X միլիվայրկյանների համար», իսկ տեղեկանքի համար դրանք մեկ վայրկյանում կազմում են 1000 միլիվայրկյան:

Անցնելով մեր հաջորդ կոճակին ՝ 29 -րդ տողում, կոճակ 5 (ես ի սկզբանե ունեի 4 կոճակ այս հեռակառավարման վահանակի վրա, ավելացրեց հինգերորդը, դրա համար էլ մենք շարքից դուրս ենք եկել): Սա, հոգով, նույնն է, ինչ 1 -ին կոճակը, բայց մի քանի հիմնական տարբերություններով: Առաջին տարբերությունը, որը դուք կտեսնեք, հայտարարության համար է. Սա էապես մեկ այլ հանգույց է `մեկ այլ ավելի մեծ հանգույցով օղակ` loopception: Մասնավորապես, մենք ունենք «for (int i = 0; i <3; i ++)», սա կարդացեք որպես «Arduino, եկեք սկսենք 0 -ից, կրկնեք հետևյալ հրահանգները մինչև հասնենք 3 անգամ»: For ֆունկցիան օգտագործվում է, քանի որ շատ սարքեր ծրագրված են կրկնվող ազդանշան փնտրելու համար, իսկ մեր դեպքում այստեղ ՝ 3 անգամ: Դուք պարզապես կարող եք 3 թիվը փոխել այլ համարի, եթե ձեր սարքը պահանջում է այլ կրկնությունների ժամանակացույց: Կոճակ 5 -ի հետ մեկ այլ հիմնական տարբերությունն այն է, որ այն նորից կրկնվում է 3 անգամ կամ 3x3: Այլ կերպ ասած, մենք ազդանշանը ուղարկում ենք 3 անգամ, սպասում ենք 10 միլիվայրկյան, կրկին ուղարկում ենք 3 անգամ, սպասում ենք ևս 10 միլիվայրկյան, այնուհետև կրկին ուղարկում ենք 3 անգամ: Հաղորդակցության այս տեսակը սովորական է սարքերը միացնելու և անջատելու համար և կարող է լինել այն, ինչ պահանջում է ձեր հեռուստացույցը կամ սարքը. Դրա բանալին այն է, որ բոլոր փոփոխականների հետ խաղաք, մինչև չստանաք ցանկալի արդյունքը: Փոխեք կարճ հետաձգման արժեքը, փոխեք կրկնելու արժեքը, ուղարկեք 6 խմբաքանակ ՝ 3 -ի փոխարեն և այլն: Սարքերը ծրագրված են կամայական ազդանշանային կանոններով `դիտավորյալ, պատկերացրեք, եթե ձեր հեռուստատեսության հեռակառավարիչը նույն տիպի ազդանշան ուղարկեր, ինչ ձայնային սանդղակը. ամեն անգամ, երբ հեռուստացույցի ալիքը փոխում ես, ձայնային սանդղակը անջատվում է, այդ պատճառով կան ազդանշանի տարբեր կանոններ:

Հաջորդ երեք կոճակները ծրագրված են նույն սկզբունքներով, գոնե մասամբ, վերը նկարագրված, այնպես որ մենք կարող ենք բաց թողնել մինչև 55 -րդ տողը:

Քայլ 4. Խորության կոդ. IR ազդանշանների ստացում

Խորը խորքում. IR ազդանշանների ստացում
Խորը խորքում. IR ազդանշանների ստացում

55 -րդ տողում մենք սկսում ենք Arduino- ի ծրագրավորումը `այլ հեռակառավարմամբ ուղարկված IR ազդանշանների մեկնաբանման համար. 55 -րդ տողի առաջին տողը հետևյալն է ՝ տեղեկատվությունը «արդյունքների» մեջ »:

Անցնելով 56 -րդ տող ՝ մենք ունենք Serial.println (results.value, HEX) սա ասում է «Արդունիո, տպիր արդյունքները սերիական մոնիտորում HEX ձևաչափով»: Hex- ը, որը նշանակում է վեցանկյուն, մի միջոց է, որով մենք կարող ենք կարճացնել երկուական տողը (ընդամենը 0 և 1 -երը) մի փոքր ավելի հեշտ մուտքագրվող բանի մեջ: Օրինակ ՝ 101010010000- ը «a90» է, որն օգտագործվում է հեռուստացույցս անջատելու և միացնելու համար, իսկ 11111111000000101011111101- ը 0xFF02FD է, որը վերահսկում է իմ RGB շերտը: Դուք կարող եք օգտագործել վերը նշված աղյուսակը ՝ երկուականը վեցանկյունի փոխարկելու և հակառակը, կամ կարող եք օգտագործել հետևյալ հղումը.

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

Մինչև 57 -րդ տողը, մենք ունենք նոր գործառույթ, որը կոչվում է անջատիչ գործ:

Ըստ էության, անջատիչ գործը թույլ է տալիս մեզ տարբեր հրահանգներ սահմանել տվյալ փոփոխականի (դեպքի) արդյունքների հիման վրա: ընդմիջումը դուրս է գալիս switch հայտարարությունից և օգտագործվում է յուրաքանչյուր հայտարարության վերջում:

Մենք այստեղ օգտագործում ենք անջատիչի գործը ՝ սերիական մոնիտորի վրա տպելու եղանակը փոխելու համար ՝ հիմնվելով մեր Arduino- ի զգայարանների վրա ՝ տարբեր հեռակառավարման վահանակներից:

Քայլ 5: Եզրակացություն

Եթե ունեք որեւէ հարց, խնդրում ենք ազատ զգալ կապվեք ինձ հետ այստեղ: Ես ուրախ եմ, որ փորձում եմ օգնել ձեզ հնարավորինս լավ:

Հուսով եմ, որ դուք սովորել եք մի բան, որը կարող եք օգտագործել ձեր կյանքը մի փոքր ավելի լավը դարձնելու համար:

-ՌԲ

Խորհուրդ ենք տալիս: