Orodha ya maudhui:

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

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

Video: Universal Remote TV - Ardiuino, Infrared: Hatua 5
Video: How To Use Infrared Remote using Arduino - New Method 2024, Novemba
Anonim
Universal Remote TV - Ardiuino, Infrared
Universal Remote TV - Ardiuino, Infrared

Halo! Katika hii inayoweza kufundishwa, nitakuonyesha jinsi ya kuunda na kupanga programu yako ya mbali ambayo itafanya kazi na vitu vingi ambavyo hutumia kijijini cha infrared, na ambayo pia "itasikiliza" na ikamua ishara ya infrared iliyotumwa na mbali mbali zingine.

Asili kidogo ya kile kilichonipa msukumo wa kujenga kijijini hiki - mimi, kama wengi wenu, hupoteza masimulizi yangu kila wakati, na msiba huu unakatisha tamaa, kwa hivyo naona tuutatue! Nimejenga kijijini hiki na kukipachika kwa busara kwenye fremu yangu ya kitanda iliyojengwa (mimi pia ni mfanyakazi wa kuni) - siwezi kupoteza kijijini ikiwa ni sehemu ya kitanda changu!

Vifaa

Vitu utakavyohitaji: -Arduino UNO au Nano - mileage inaweza kutofautiana na bodi zingine

Bodi ya mkate isiyo na vidonge (au ubao wa kuuzwa kama ungependa kuifanya iwe ya kudumu)

-Jumperwires ya rangi na urefu anuwai

-Vifungo vya kushinikiza kwa muda (5) (unaweza kuongeza vitufe zaidi, lakini utahitaji kutumia pini za dijiti, kwani pini zote isipokuwa Analog zinatumiwa - utahitaji kuangalia kuhakikisha kuwa unatumia vizuizi vya kuvuta vizuri, au vuta vipinga, na utupe vifungo vya kushinikiza)

Upinzani wa -10K Ohm (5) (ikiwa ungependa vifungo zaidi vya kushinikiza, utahitaji zaidi ya hizi)

-470 kontena la Ohm (2)

-Uwe mkali wa LED

-Red LED

Sensorer Iliyodhibitiwa (nilitumia sehemu ya nambari VS1838B, unaweza kutumia nyingine, angalia tu siri)

(Hiari) Soldering Iron, Solder, Solder Flux.

Hatua ya 1: Kuunda Mzunguko:

Kujenga Mzunguko
Kujenga Mzunguko

1). Daima napenda kuanza na kuweka vifaa vyangu, kwani hii kila wakati huendesha mpangilio kwenye ubao wa mkate.

-Vifungo vya kushinikiza

-LED: LED Nyekundu na IR LED zina waya sanjari, kwa hivyo unaweza kuona kile IR ya IR inafanya.

-Sensor

2). Resistors

- Vipinzani vitano vya 10K ambavyo tumeambatanisha na vifungo vya kushinikiza vinaitwa "vuta chini" vipinga. Vuta vipinga kuhakikisha kwamba wakati kitufe cha kushinikiza hakijashinikizwa, pini inayolingana ya Arduino inapata Volts 0 (au angalau karibu nayo). Kwa habari zaidi juu ya vivinjari vya kuvuta (au kuvuta) hapa kuna mwongozo wa kina:

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

Vipinga hivi vinaweza kuwa sio lazima kabisa, lakini ikiwa unasukuma "mzuka", ni zaidi ya uwezekano unaosababishwa na kuunganishwa kwa nguvu na kubomoa vizuia kuzuia hii.

3). Waya za mzunguko

4). 5V na waya wa chini

Tumia picha iliyotolewa kwa kumbukumbu! usiogope kuibadilisha kwa mahitaji yako ingawa!

Hatua ya 2: Nambari:

# pamoja na const int RECV_PIN = 7; // sensorer ya IR inasoma pini ndani ya Kitufe1 = A4; // 2 kutoka kushoto Button3 = A2; // Kifungo cha kati cha kati = A1; // 2 hadi kulia kifungo Button5 = A0; // Mbali zaidi kwa kulia int LED = 3; // IR LED & Nyekundu LED int val = 0; // Thamani ya kubadilisha IRsend irsend; IRrecv irrecv (RECV_PIN); namua matokeo_ya matokeo;

kuanzisha batili () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Kitufe3, INPUT); pinMode (Kitufe4, INPUT); pinMode (Kitufe5, INPUT); pinMode (LED, OUTPUT); Kuanzia Serial (9600); irrecv.wezeshwaIRIn (); irrecv.blink13 (kweli);} kitanzi batili () {{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD, 32); // kutumia Analog kusoma badala ya kusoma kwa dijiti ili kuepuka maswala ya uwezo wa wafungwa. pia, husaidia kuondoa vifungo. // Kusomwa kwa Analog kwa 900 inaruhusu chumba kidogo kwenye maadili, ikimaanisha, ishara ya infra itatumwa hata ikiwa 5V kamili haitumiki kwa pini. // lakini 900 ni ya kutosha kutosoma kimakosa kwa sababu ya ucheleweshaji wa uunganishaji wa nguvu (100);} // Rip Strip On & off {if (AnalogRead (Button5)> 900) {for (int i = 0; i <3; i ++) // kubadilisha thamani katika "i <3" itabadilisha idadi ya nyakati ambazo ishara inarudiwa mara moja. kwa hivyo "i <2" itarudia ishara mara mbili. // unaweza kuhitaji kucheza karibu na nambari hii ikiwa Runinga yako haijibu, kwa ujumla, 1 au 3 hufanya kazi zaidi, ikiwa hizo hazifanyi hivyo, jaribu nambari zisizo za kawaida. // unaweza pia kuhitaji kucheza na nambari za ndani za kuchelewesha ishara, kwa mfano, kwa TV yangu 10 inafanya kazi, lakini 30 haifanyi. {irsend.sendSony (0xa90, 12); // Nambari ya nguvu ya runinga ya Sony, kwa Runinga yangu, nambari inahitaji kutumwa 3x3, kwa hivyo kunde 3, kuchelewesha mara tatu tofauti (10); // "kucheleweshwa kwa ishara ya ndani" kwa (int i = 0; i <3; i ++) {irsend.sendSony (0xa90, 12); // "12" ni nambari kidogo, itifaki tofauti zinaita nambari tofauti kidogo. NEC ni 32, Sony ni 12, unaweza kutafuta kuchelewesha wengine (10); kwa (int i = 0; i 900) {kwa (int i = 0; i 900) {kwa (int i = 0; i 900) {kwa (int i = 0; i <3; i ++) {irsend.sendSony (0xc90, 12); // kuchelewesha kwa nguvu ya runinga ya Sony TV (100);}}} kuchelewesha (100);} ikiwa (irrecv.decode (na matokeo)) // sehemu iliyo chini ya nambari hukuwezesha kutafsiri ishara nyekundu za infra kutoka mbali mbali. {Serial.println (matokeo.thamani, HEX); // itazalisha utaratibu "NEC, Sony, nk.." na nambari ya Runinga "c90, a90, FF02FD" utahitaji kuongeza 0x mbele ya kitufe cha Nambari ya Runinga (results.decode_type) {kesi DENON: Serial.println ("DENON"); kuvunja; kesi NEC: Serial.println ("NEC"); kuvunja; kesi PANASONIC: Serial.println ("PANASONIC"); kuvunja; kesi SONY: Serial.println ("SONY"); kuvunja; kesi RC5: Serial.println ("RC5"); kuvunja; kesi JVC: Serial.println ("JVC"); kuvunja; kesi SANYO: Serial.println ("SANYO"); kuvunja; kesi MITSUBISHI: Serial.println ("MITSUBISHI"); kuvunja; kesi SAMSUNG: Serial.println ("SAMSUNG"); kuvunja; kesi LG: Serial.println ("LG"); kuvunja; kesi RC6: Serial.println ("RC6"); kuvunja; kesi DISH: Serial.println ("DISH"); kuvunja; kesi SHARP: Serial.println ("SHARP"); kuvunja; kesi WHYNTER: Serial.println ("WHYNTER"); kuvunja; kesi AIWA_RC_T501: Serial.println ("AIWA_RC_T501"); kuvunja; chaguo-msingi: kesi HAIJULIKANI: Serial.println ("HAIJULIKANI"); kuvunja;} irrecv. kuendelea ();}}

Hatua ya 3: Kanuni kwa kina: Kutuma Ishara za IR

Nitakuwa nikirejelea mistari ya nambari kwa nambari yao ya laini - kufuata, tumia kiunga hiki:

pastebin.com/AQr0fBLg

Kwanza, tunahitaji kujumuisha Maktaba ya Kijijini ya IR na z3t0.

Hapa kuna kiunga cha maktaba:

github.com/z3t0/Arduino-IRremote

Ikiwa unahitaji mwongozo wa jinsi ya kupakua vizuri maktaba na kuiweka kwenye IDE:

www.arduino.cc/en/guide/libraries

Mstari wa 1 unajumuisha maktaba.

Ifuatayo, tunahitaji kutangaza anuwai kadhaa, mistari 2-12 fanya hivi.

Tunatumia "gharama int" kufafanua anuwai ambazo hazitabadilika, zote isipokuwa moja kuanguka katika kitengo hiki.

Tunatumia "int" kufafanua vigeuzi ambavyo vitabadilika.

Lazima tutumie pini iliyo na mpigo na moduli (PWM) kwa pini yetu ya LED - pini yoyote iliyo na "~" karibu nayo itatosha, katika nambari yangu - tunatumia pini ya dijiti 3.

Ifuatayo, tunahitaji kufanya usanidi - nambari hii itaendesha mara moja tu wakati Arduino inapowezeshwa au kuweka upya.

Kumbuka kuwa tunafafanua pembejeo na matokeo (15-20), tukirusha mfuatiliaji wa serial (21), kuwezesha sensa ya IR (22), na kumwambia Arduino kupepesa LED ya ndani wakati wowote tunapata ishara kwenye sensa (23).

Ifuatayo, tutaunda kitanzi chetu - nambari hii itaendelea kurudia, kutoka juu hadi chini mara kadhaa kwa sekunde.

Katika mstari wa 25, tunatumia if if statement, hii inaambia Arduino "tafuta vigezo hivi maalum, ikiwa vigezo hivyo vimetimizwa, fanya jambo hili maalum". Katika kesi hii, vigezo ni AnalogSoma (Kitufe1)> 900, au kwa maneno mengine - "Arduino, Angalia kitufe1, ambacho tulifafanua kama pini A4 mapema, ikiwa ishara ya analog imepokea ni kubwa kuliko 900, tafadhali endelea kwa maagizo yetu yafuatayo, ikiwa sio hivyo, tafadhali songa mbele ". Kuna kidogo ya kufungua hapa, kwa hivyo hebu tuzame: ishara ya Analog kwenye Arduino ni thamani sawa na au chini ya 5V, na 5V sawa na 1023, na 0V sawa na 0. Voltage yoyote kati ya 0 na 5V inaweza kuelezewa na nambari, na kwa hesabu kidogo, tunaweza kugundua nambari hiyo, au kinyume chake, voltage. Gawanya 1024 (tunajumuisha 0 kama kitengo) na 5, ambayo inatupa 204.8. Kwa mfano, tunatumia nambari 900, kutafsiri hiyo kuwa voltage, tunagawanya 900 ifikapo 204.8, ikitupa ~ 4.4V. Tunamwambia Arduino atafute voltage kubwa kuliko ~ 4.4 volts, na ikiwa ni hivyo, fanya maagizo yetu yafuatayo.

Akizungumzia maagizo yafuatayo (mstari wa 25), tunaona irsend.sendNEC (0xFF02FD, 32). Hii inasema "Arduino, tuma mapigo ya moduli ambayo yanafuata itifaki ya NEC, haswa ishara ya FF02FD, na uhakikishe kuwa na urefu wa bits 32". Hii itafanya taa yetu ya IR irambe kwa njia ambayo vifaa vingine vinaweza kuelewa. Fikiria kidogo kama Morse Code, lakini tu na nuru isiyoonekana! Kuna itifaki nyingi tofauti huko nje, kila moja ikiwa na mamia ikiwa sio maelfu ya ishara za kibinafsi, na kila moja ikiwa na nambari yao maalum - kifaa chetu kitaweza kutambua idadi kubwa ya ishara hizi, lakini tutatumbukia baadaye!

Katika mstari wa 28, tuna ucheleweshaji wetu wa kwanza - hii iko hapa kuzuia ishara za kurudia bila kukusudia, mara tu kitufe kinaposukumwa na ishara ya IR itumwe, tuna milliseconds 100 za kuondoa kidole kwenye kitufe. hii haionekani kama wakati mwingi, lakini kwa mazoezi, inaonekana inafanya kazi vizuri. kazi ya kuchelewesha inamwambia Arduino "usifanye chochote kwa X milliseconds" na kwa kumbukumbu, wao ni milliseconds 1000 kwa sekunde.

Kuhamia kwenye kitufe chetu kinachofuata kwenye laini ya 29, kifungo5 (hapo awali nilikuwa na vifungo 4 kwenye rimoti hii, niliongeza ya tano, kwa hivyo ndio sababu hatuko sawa). Hii, kwa roho, ni kitu sawa na kifungo 1, lakini na tofauti kadhaa muhimu. Tofauti ya kwanza utaona ni ya taarifa - hii kimsingi ni kitanzi kingine - kitanzi na kitanzi kingine kikubwa zaidi. Hasa tunayo "for (int i = 0; i <3; i ++)", soma hii kama "Arduino, lets start at 0, rudia maagizo yafuatayo hadi tufike mara 3". Kazi ya kazi hutumiwa kwa sababu vifaa vingi vimepangwa kutafuta ishara inayorudiwa, na kwa upande wetu hapa, mara 3. Unaweza kubadilisha nambari 3 kuwa nambari tofauti ikiwa kifaa chako kinahitaji ratiba tofauti ya kurudia. Tofauti nyingine muhimu na kifungo5 ni kwamba inarudiwa tena, mara 3, au 3x3. Kwa maneno mengine, tunatuma ishara mara 3, subiri millisecond 10, tuma tena mara 3, subiri millisecond 10 nyingine, kisha tuma mara 3 tena. Aina hii ya mawasiliano ni kawaida kwa kuwezesha na kuzima vifaa na inaweza kuwa tu kile TV yako au kifaa kinataka - ufunguo wa hii ni kucheza karibu na anuwai zote hadi utapata matokeo unayotaka. Badilisha thamani ya ucheleweshaji mfupi, badilisha thamani ya kurudia, tuma mafungu 6 badala ya 3, n.k Vifaa vimepangwa na sheria za ishara holela kwa makusudi, fikiria ikiwa kijijini chako cha Runinga kilituma ishara ya aina sawa na upau wako wa sauti; kila wakati ulibadilisha kituo kwenye Runinga yako, kizuizi chako cha sauti kimefungwa - ndio sababu kuna sheria tofauti za ishara.

Vifungo vitatu vifuatavyo vimepangwa na wakuu sawa, angalau kwa sehemu, ilivyoelezwa hapo juu - kwa hivyo tunaweza kuruka hadi mstari wa 55.

Hatua ya 4: Kanuni kwa kina: Kupokea Ishara za IR

Kanuni kwa Kina: Kupokea Ishara za IR
Kanuni kwa Kina: Kupokea Ishara za IR

Katika mstari wa 55, tunaanza kupanga Arduino kutafsiri ishara za IR zilizotumwa na vidokezo vingine - hii ni muhimu ili uweze kujua itifaki na ishara ambazo mbali zako hutumia. Mstari wa kwanza wa nambari kwenye laini ya 55 ni ikiwa (irrecv.decode (& matokeo) inasoma hii kama "Arduino, tafuta nambari ya IR, ukipata moja, rudisha thamani ya kweli, ikiwa hakuna kitu kilichopatikana, rudisha uwongo. Ukiwa kweli, rekodi habari hiyo kuwa "matokeo".

Kuendelea kwa laini ya 56, tuna Serial.println (matokeo.thamani, HEX) hii inasema "Ardunio, chapisha matokeo kwenye mfuatiliaji wa serial katika muundo wa HEX". Hex, ikimaanisha hexadecimal, ni njia tunaweza kufupisha kamba ya binary (tu 0 na 1's) kuwa kitu rahisi sana kuandika. Kwa mfano 101010010000 ni "a90", nambari inayotumika kuzima TV yangu na kuendelea, na 111111110000001011111101 ni 0xFF02FD, ambayo inadhibiti ukanda wangu wa RGB. Unaweza kutumia chati iliyo hapo juu kubadilisha binary kuwa hex, na kinyume chake, au unaweza kutumia kiunga kifuatacho:

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

Chini ya mstari wa 57, tuna kazi mpya, inayoitwa kesi ya kubadili.

Kwa kweli, kesi ya kubadili inatuwezesha kutaja maagizo tofauti kulingana na matokeo ya ubadilishaji uliopewa (kesi). mapumziko hutoka kwa taarifa ya kubadili, na hutumiwa mwishoni mwa kila taarifa.

Tunatumia kesi ya kubadili hapa kubadilisha jinsi tunavyochapisha kwenye mfuatiliaji wa serial kulingana na itifaki hisia zetu za Arduino kutoka kwa mbali mbali.

Hatua ya 5: Hitimisho

Ikiwa una swali - tafadhali jisikie huru kunifikia hapa! Nina furaha kujaribu kukusaidia kadri niwezavyo.

Natumahi umejifunza kitu ambacho unaweza kutumia kufanya maisha yako kuwa bora kidogo!

-RB

Ilipendekeza: