Infraraudonųjų spindulių (IR) ryšys yra plačiai naudojama ir lengvai įgyvendinama belaidė technologija, turinti daug naudingų programų. Ryškiausi kasdienio gyvenimo pavyzdžiai yra televizoriaus / vaizdo nuotolinio valdymo pultai, judesio jutikliai ir infraraudonųjų spindulių termometrai.
Yra daug įdomių „Arduino“ projektų, kurie taip pat naudoja IR ryšį. Naudodami paprastą IR siųstuvą ir imtuvą, galite sukurti nuotoliniu būdu valdomus robotus, atstumo jutiklius, širdies ritmo monitorius, DSLR fotoaparato nuotolinio valdymo pultus, televizoriaus nuotolinio valdymo pultus ir daug daugiau.
Šioje pamokoje pirmiausia paaiškinsiu, kas yra infraraudonųjų spindulių ryšys ir kaip jis veikia. Tada aš jums parodysiu, kaip nustatyti IR imtuvą ir nuotolinio valdymo pultą „Arduino“. Aš taip pat parodysiu, kaip praktiškai naudoti bet kokį IR nuotolinio valdymo pultą (pvz., Jūsų televizoriaus), norint valdyti su „Arduino“ susijusius dalykus.
Dabar įsigilinkime į detales …
Kas yra infraraudonasis?
Infraraudonoji spinduliuotė yra šviesos forma, panaši į šviesą, kurią matome aplinkui. Vienintelis IR šviesos ir matomos šviesos skirtumas yra dažnis ir bangos ilgis. Infraraudonoji spinduliuotė yra už matomos šviesos ribų, todėl žmonės jos nemato:
Kadangi IR yra šviesos tipas, IR ryšiui reikalinga tiesioginė matymo linija nuo imtuvo iki siųstuvo. Jis negali perduoti per sienas ar kitas medžiagas, tokias kaip „WiFi“ ar „Bluetooth“.
Kaip veikia IR nuotolinio valdymo pultai ir imtuvai
Tipinei infraraudonųjų spindulių ryšio sistemai reikalingas IR siųstuvas ir IR imtuvas. Siųstuvas atrodo kaip standartinis šviesos diodas, išskyrus tai, kad jis spinduliuoja IR spindulių šviesą, o ne matomą spektrą. Jei pažvelgsite į televizoriaus nuotolinio valdymo pulto priekį, pamatysite IR siųstuvo šviesos diodą:
To paties tipo šviesos diodai naudojami „Arduino“ IR siųstuvų pertraukimo plokštėse. Tai galite pamatyti šio „Keyes“ IR siųstuvo priekyje:
IR imtuvas yra fotodiodas ir išankstinis stiprintuvas, kuris IR šviesą paverčia elektriniu signalu. IR imtuvo diodai paprastai atrodo taip:
Kai kurie gali ateiti į tokią išsiveržimo lentą:
IR signalo moduliacija
IR šviesą skleidžia saulė, lemputės ir visa kita, kas gamina šilumą. Tai reiškia, kad aplink mus sklinda daug IR šviesos triukšmo. Kad šis triukšmas netrukdytų IR signalui, naudojama signalo moduliavimo technika.
Vykdant IR signalo moduliavimą, IR nuotolinio valdymo pulto daviklis konvertuoja dvejetainį signalą į moduliuojamą elektrinį signalą. Šis elektrinis signalas siunčiamas į perduodantį šviesos diodą. Perduodantis šviesos diodas paverčia moduliuojamą elektrinį signalą į moduliuojamą IR šviesos signalą. Tada IR imtuvas, prieš perduodamas informaciją mikrovaldikliui, demoduliuoja IR šviesos signalą ir paverčia jį atgal į dvejetainį:
Moduliuojamas IR signalas yra IR šviesos impulsų serija, įjungiama ir išjungiama aukštu dažniu, vadinamu nešiklio dažniu. Daugumos siųstuvų naudojamas nešiklio dažnis yra 38 kHz, nes jis yra retas pobūdis, todėl jį galima atskirti nuo aplinkos triukšmo. Tokiu būdu IR imtuvas žinos, kad 38 kHz signalas buvo siunčiamas iš siųstuvo ir nebuvo paimtas iš supančios aplinkos.
Imtuvo diodas aptinka visus IR šviesos dažnius, tačiau jis turi dažnių juostos filtrą ir praleidžia IR tik 38 kHz dažniu. Tada jis sustiprina moduliuojamą signalą su išankstiniu stiprintuvu ir paverčia jį dvejetainiu signalu prieš siunčiant jį į mikrovaldiklį.
IR perdavimo protokolai
Šabloną, kuriame moduliuojamas IR signalas paverčiamas dvejetainiu, apibrėžia perdavimo protokolas. Yra daug IR perdavimo protokolų. „Sony“, „Matsushita“, NEC ir RC5 yra vieni iš dažniausiai pasitaikančių protokolų.
NEC protokolas taip pat yra labiausiai paplitęs „Arduino“ projektų tipas, todėl naudosiu jį kaip pavyzdį norėdamas parodyti, kaip imtuvas konvertuoja moduliuojamą IR signalą į dvejetainį.
Loginis „1“ prasideda 562,5 µs ilgio 38 kHz IR HIGH impulsu, po kurio eina 1 687,5 µs ilgio LOW impulsas. Loginis „0“ perduodamas 562,5 µs ilgio HIGH impulsu, po kurio eina 562,5 µs ilgio LOW impulsas:
Taip NEC protokolas užkoduoja ir iššifruoja dvejetainius duomenis į moduliuojamą signalą. Kiti protokolai skiriasi tik pagal atskirų HIGH ir LOW impulsų trukmę.
IR kodai
Kiekvieną kartą paspaudus nuotolinio valdymo pulto mygtuką, sukuriamas unikalus šešioliktainis kodas. Tai yra informacija, kuri yra moduliuojama ir siunčiama per IR imtuvui. Norėdamas iššifruoti, kuris mygtukas yra paspaustas, priimantis mikrovaldiklis turi žinoti, kuris kodas atitinka kiekvieną nuotolinio valdymo pulto raktą.
Skirtingi nuotolinio valdymo pultai siunčia skirtingus klavišų paspaudimų kodus, todėl turėsite nustatyti kodą, sugeneruotą kiekvienam klavišui jūsų nuotolinio valdymo pulte. Jei rasite duomenų lapą, turėtų būti pateikti IR raktų kodai. Jei taip nėra, yra paprastas „Arduino“ eskizas, kuris nuskaitys daugumą populiarių nuotolinio valdymo pultų ir atspausdins šešioliktainius kodus į nuoseklųjį monitorių, kai paspausite klavišą. Aš jums parodysiu, kaip tai nustatyti per minutę, bet pirmiausia turime prijungti imtuvą prie „Arduino“ …
Kaip prijungti IR imtuvą prie „Arduino“
Yra keli skirtingų tipų IR imtuvai, kai kurie yra atskiri, o kai kurie montuojami ant pertraukiamosios lentos. Patikrinkite konkretaus IR imtuvo duomenų lapą, nes kaiščiai gali būti išdėstyti kitaip nei čia naudojamas HX1838 IR imtuvas ir nuotolinis rinkinys. Visuose IR imtuvuose bus trys kaiščiai: signalas, įžeminimas ir Vcc.
Leiskite pradėti nuo aparatūros jungčių. Daugelio pertraukiamųjų lentų kaiščių išdėstymas atrodo taip:
Daugelio atskirų diodų kištukas yra toks:
Norėdami prijungti „breakout“ plokštėje sumontuotą IR imtuvą, prijunkite jį prie „Arduino“ taip:
Norėdami prijungti atskirą imtuvo diodą, prijunkite jį taip:
IR imtuvo programavimas
Kai prijungsite imtuvą, galėsime įdiegti „Arduino“ biblioteką ir pradėti programuoti. Žemiau pateiktuose pavyzdžiuose parodysiu, kaip rasti nuotolinio valdymo pulto siunčiamus kodus, kaip rasti nuotolinio valdymo pulto naudojamą IR protokolą, kaip spausdinti klavišų paspaudimus prie nuoseklaus monitoriaus ar skystųjų kristalų ekrano ir galiausiai, kaip valdyti „Arduino“ išvesties kaiščius su nuotolinio valdymo pultu.
Įdiekite „IRremote Library“
Visiems žemiau esantiems kodų pavyzdžiams naudosime „IRremote“ biblioteką. Bibliotekos ZIP failą galite atsisiųsti iš čia.
Norėdami įdiegti biblioteką iš ZIP failo, atidarykite „Arduino IDE“, tada eikite į „Eskizas“> „Įtraukti biblioteką“> „Pridėti .ZIP biblioteką“, tada pasirinkite „IRremote ZIP“ failą, kurį atsisiuntėte iš anksčiau pateiktos nuorodos.
Raskite savo nuotolinio valdymo pulto kodus
Norėdami rasti pagrindinius nuotolinio valdymo pulto kodus, įkelkite šį kodą į „Arduino“ ir atidarykite nuoseklųjį monitorių:
#include <IRremote.h>
const int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop(){
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
irrecv.resume();
}
}
Dabar paspauskite kiekvieną nuotolinio valdymo pulto klavišą ir įrašykite kiekvienam paspaudimui išspausdintą šešioliktainį kodą.
Naudodamasis aukščiau pateikta programa, iš nuotolinio valdymo pulto, kuris buvo kartu su mano HX1838 IR imtuvu ir nuotoliniu rinkiniu, išvedžiau raktų lentelę ir atitinkamus jų kodus. Atminkite, kad nuolat spausdami klavišą gausite 0XFFFFFFFF kodą.
Raktas | Kodas |
CH- | 0xFFA25D |
CH | 0xFF629D |
CH + | 0xFFE21D |
<< | 0xFF22DD |
>> | 0xFF02FD |
> || | 0xFFC23D |
– | 0xFFE01F |
+ | 0xFFA857 |
EQ | 0xFF906F |
100+ | 0xFF9867 |
200+ | 0xFFB04F |
0 | 0XFF6897 |
1 | 0xFF30CF |
2 | 0xFF18E7 |
3 | 0xFF7A85 |
4 | 0xFF10EF |
5 | 0xFF38C7 |
6 | 0xFF5AA5 |
7 | 0xFF42BD |
8 | 0xFF4AB5 |
9 | 0xFF52AD |
Raskite nuotolinio valdymo pulto naudojamą protokolą
Žinoti, kurį protokolą naudoja jūsų nuotolinis valdymas, gali būti naudinga, jei norite dirbti su keliais pažangesniais projektais. Arba jums gali būti tiesiog įdomu. Žemiau esanti programa identifikuos jūsų nuotolinio valdymo protokolą. Tai turėtų veikti net daugumoje jūsų namuose esančių nuotolinio valdymo pultų.
#include <IRremote.h>
const int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop(){
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
switch (results.decode_type){
case NEC: Serial.println("NEC"); break ;
case SONY: Serial.println("SONY"); break ;
case RC5: Serial.println("RC5"); break ;
case RC6: Serial.println("RC6"); break ;
case DISH: Serial.println("DISH"); break ;
case SHARP: Serial.println("SHARP"); break ;
case JVC: Serial.println("JVC"); break ;
case SANYO: Serial.println("SANYO"); break ;
case MITSUBISHI: Serial.println("MITSUBISHI"); break ;
case SAMSUNG: Serial.println("SAMSUNG"); break ;
case LG: Serial.println("LG"); break ;
case WHYNTER: Serial.println("WHYNTER"); break ;
case AIWA_RC_T501: Serial.println("AIWA_RC_T501"); break ;
case PANASONIC: Serial.println("PANASONIC"); break ;
case DENON: Serial.println("DENON"); break ;
default:
case UNKNOWN: Serial.println("UNKNOWN"); break ;
}
irrecv.resume();
}
}
Spausdinkite serijinio monitoriaus raktus
Išplėtiau anksčiau pateiktą kodą, kad atspausdintumėte rakto vertę, o ne šešioliktainį kodą:
#include <IRremote.h>
const int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long key_value = 0;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop(){
if (irrecv.decode(&results)){
if (results.value == 0XFFFFFFFF)
results.value = key_value;
switch(results.value){
case 0xFFA25D:
Serial.println("CH-");
break;
case 0xFF629D:
Serial.println("CH");
break;
case 0xFFE21D:
Serial.println("CH+");
break;
case 0xFF22DD:
Serial.println("|<<");
break;
case 0xFF02FD:
Serial.println(">>|");
break ;
case 0xFFC23D:
Serial.println(">|");
break ;
case 0xFFE01F:
Serial.println("-");
break ;
case 0xFFA857:
Serial.println("+");
break ;
case 0xFF906F:
Serial.println("EQ");
break ;
case 0xFF6897:
Serial.println("0");
break ;
case 0xFF9867:
Serial.println("100+");
break ;
case 0xFFB04F:
Serial.println("200+");
break ;
case 0xFF30CF:
Serial.println("1");
break ;
case 0xFF18E7:
Serial.println("2");
break ;
case 0xFF7A85:
Serial.println("3");
break ;
case 0xFF10EF:
Serial.println("4");
break ;
case 0xFF38C7:
Serial.println("5");
break ;
case 0xFF5AA5:
Serial.println("6");
break ;
case 0xFF42BD:
Serial.println("7");
break ;
case 0xFF4AB5:
Serial.println("8");
break ;
case 0xFF52AD:
Serial.println("9");
break ;
}
key_value = results.value;
irrecv.resume();
}
}
Jei nuotolinio valdymo pultas siunčia kitokius kodus nei tie, kurie pateikti aukščiau esančioje lentelėje, tiesiog pakeiskite šešioliktainį kodą kiekvienoje eilutėje, kur parašyta:
case 0xFFA25D:
Serial.println(“CH-“);
Šiose eilutėse, kai šešioliktainis kodas 0xFFA25D
gaunamas, „Arduino“ spausdina „CH-“.
Kaip veikia kodeksas
Bet kokiam IR ryšiui naudojant IRremote biblioteką pirmiausia reikia sukurti objektą, vadinamą irrecv
ir nurodykite PIN kodą, kuriame prijungtas IR imtuvas (3 eilutė). Šis objektas pasirūpins protokolu ir informacijos apdorojimu iš imtuvo.
Kitas žingsnis yra sukurti objektą, vadinamą results
, nuo decode_results
klasė, kuria naudosis irrecv
objektu pasidalinti iššifruota informacija su mūsų programa (5 eilutė).
Viduje konors void setup()
blokuoti, pirmiausia sukonfigūruojame serijinio monitoriaus perdavimo greitį. Tada mes pradedame IR imtuvą …