Controlarea led-urilor printr-o telecomandă IR

Salutare!Am revenit cu un nou proiect Arduino. Astăzi vom controla 3 led-uri cu ajutorul unei teleomenzi infraroșu(orice telecomanda TV) și a unui receptor pentru aceasta.

Conform Wikipedia, Radiația în infraroșu (IR) este o radiație electromagnetică a cărei lungime de undă este mai lungă decât cea a luminii vizibile (400 – 700 nm), dar mai scurtă decât cea a radiației terahertz (100 μm – 1 mm) și a microundelor (~30000 μm). Majoritatea radiației termice emise de către obiectele aflate la temperatura camerei este în infraroșu.

Mai pe scurt, radiația infraroșie face parte din spectrul electromagnetic, iar omul nu poate percepe vizual aceste unde electromagnetice. Deci, receptorul primește semnalul de la telecomandă sub formă de radiație infraroșie.

De ce avem nevoie?

  1. Placa Arduino UNO(sau orice altă placă compatibila Arduino);
  2. 3 Led-uri de diferite culori;
  3. 3 rezistențe de 220 Ω;
  4. Modul receptor Infraroșu CHQ1838 (sau oricare altul).

Schema folosită este următoarea:

Cum conectăm componentele?

  • ARDUINO 5V – BREADBOARD 5V(+)
  • ARDUINO GND – BREADBOARD GND(-)
  • CATOD(-) LED 1 – BREADBOARD GND(-)
  • CATOD(-) LED 2 – BREADBOARD GND(-)
  • CATOD(-) LED 3 – BREADBOARD GND(-)
  • ANOD(+) LED 1 – REZISTENTA 220 Ω – ARDUINO PIN 2
  • ANOD(+) LED 2 – REZISTENTA 220 Ω – ARDUINO PIN 3
  • ANOD(+) LED 3 – REZISTENTA 220 Ω – ARDUINO PIN 4
  • RECEPTOR IR 5V – BREADBOARD 5V(+)
  • RECEPTOR IR GND – BREADBOARD GND(-)
  • RECEPTOR IR SIGNAL (S) – ARDUINO PIN 11

Bun, cu toate conexiunile realizate, să trecem la cod:

       
//Acest cod a fost scris de Ilinca Stefan - Costin
//Copyright stefanilinca.ro
#include <IRremote.h> //includem library-ul pt IR

int irpin = 11; //pinul unde este conectat reciever-ul
int led1 = 2; //led1=pin 2
int led2 = 3; //led2=pin 3
int led3 = 4; //led3=pin 4
int stare[] = {0,0,0,0};// starea initiala a ledurilor //
#define cod_led1  41565 //cod led1   /*editeaza
#define cod_led2  25245 //cod led2      aceste
#define cod_led3  57885 //cod led3      3 randuri */

IRrecv irrecv(irpin); //initializam reciever-ul

decode_results results; ;//decodam rezultatele si le atribuim variabilei results

void setup()
{
  Serial.begin(9600);   //initializam serial-ul la 9600baud
  pinMode(led1, OUTPUT); //led1 iesire
  pinMode(led2, OUTPUT); //led2 iesire
  pinMode(led3, OUTPUT); //led3 iesire
  irrecv.enableIRIn(); // Pornim reciever-ul IR
}

void loop() { //structura repetitiva
  if (irrecv.decode(&results)) {
    unsigned int value = results.value;
    switch(value) {
       case cod_led1: //in cazul in care butonul ce transmite cod_led1 este apasat
         if(stare[1] == 1) { // daca primul led este pornit
            digitalWrite(led1, LOW); //il oprim cand reciever-ul primeste cod_led1
            stare[1] = 0;// setam stare=oprit
         } else {// altfel daca primul led este oprit
             digitalWrite(led1, HIGH); // il pornim cand recieverul primeste cod_led1
             stare[1] = 1;// setam stare=pornit
         }
          break; 
       case cod_led2: //in cazul in care butonul ce transmite cod_led2 este apasat
         if(stare[2] == 1) {// daca al doilea led este pornit
            digitalWrite(led2, LOW);//il oprim cand reciever-ul primeste cod_led2
            stare[2] = 0; // setam stare=oprit
         } else {// altfel daca al doilea led este oprit
             digitalWrite(led2, HIGH);// il pornim cand recieverul primeste cod_led2
             stare[2] = 1;// setam stare=pornit
         }
          break;
       case cod_led3://in cazul in care butonul ce transmite cod_led3 este apasat
         if(stare[3] == 1) {// daca al treilea led este pornit
            digitalWrite(led3, LOW);//il oprim cand reciever-ul primeste cod_led3
            stare[3] = 0;//setam stare=oprit
         } else {// altfel daca al treilea led este oprit
             digitalWrite(led3, HIGH);// il pornim cand recieverul primeste cod_led3
             stare[3] = 1;// setam stare=pornit
         }
          break;          
    }
    Serial.println(value); //afisam in serial monitor codul primit
    irrecv.resume(); //Primim urmatoarea valoare
  }//inchidem bucla
} 

Descarcă codul

Încărcăm codul pe placă, și deschidem serial monitor-ul, apăsând aici:

Acum, luam o telecomandă și o îndreptăm către receptor, apăsând un buton care va porni și opri primul led(NU ȚINEȚI APĂSAT PE BUTON!)

Copiem codul primit în serial și îl introducem în cod:
#define cod_led1 cod
Repetăm acest proces pentru toate cele 3 led-uri.

După ce am atribuit cod-urile, reuploadăm sketch-ul pe placă and THAT’S IT :).

FINAL

Cam atât cu acest post, dacă aveți întrebări nu ezitați să le lăsați mai jos, în secțiunea de comentarii.

Succes! 

 

Leave a Reply

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *