Mini proiect (22) - Control unui LED folosind TSOP4838 conectat la Arduino cu ajutorul unei telecomenzi de televizor

 Control unui LED folosind TSOP4838 conectat la Arduino cu ajutorul unei telecomenzi de televizor

Acest proiecțel l-am inițiat ca urmare a nevoii de a controla diverse candele cu LED. După documentare temeinică făcută inginerește (vezi secțiunea Documentație proiect) mi-a venit ideea să aprint un LED folosind orice telecomanda din casă. Pentru asta am folosit un Arduino Uno, un senzor IR TSOP4838, un modul cu LED și telecomanda de la televizor. Pentru software am folosit libraria Arduino IRemote concepută inițial de Ken Shirriff.

Info despre IR:

Detectoarele IR sunt mici microcipuri cu fotocelule care sunt reglate pentru a observa lumina infraroșie. Sunt aproape întotdeauna utilizate pentru detectarea telecomenzii - fiecare televizor și DVD player are unul din acestea în față pentru a asculta semnalul IR de la emițător. În interiorul telecomenzii este un LED IR potrivit, care emite impulsuri IR pentru a spune televizorului să pornească, să oprească sau să schimbe canalele. Lumina IR nu este vizibilă pentru ochiul uman, ceea ce înseamnă că este nevoie de ceva mai multă muncă pentru a testa o configurație.

  Schema electronica:

Am creeat prima oară schema în tinkercad și a rezultat ansamblul de mai jos:

Control unui LED folosind TSOP4838 conectat la Arduino cu ajutorul unei telecomenzi de televizor

 Apoi am executat circuitul , după cum se observă mai jos:

Control unui LED folosind TSOP4838 conectat la Arduino cu ajutorul unei telecomenzi de televizor
Am încărcat softul de mai jos și am testat apoi toate telecomenzile din casă pentru a observa ce comenzi trimit atunci când este apăsat butonul OFF.  Am obținut comenzile 0x0, 0x8 și 0x6, pe care le-am hardcodat în SW (plus 0x10). Acum arduino va aprinde LED-ul  dacă cel puțin una din aceste comenzi este recepționată de la telecomandă.

Control unui LED folosind TSOP4838 conectat la Arduino cu ajutorul unei telecomenzi de televizor
Și după cum se vede mai jos LED-ul s-a aprins, iar dacă mai apăs încă o dată butonul OFF de pe telecomandă se stinge. Brici!
Control unui LED folosind TSOP4838 conectat la Arduino cu ajutorul unei telecomenzi de televizor

Conexiunile:

  • PIN 11 Aduino e conectat la PIN-ul OUT de la TSOP4838 
  • 3.3V Arduino este conectat la VCC TSOP4838
  •  PIN 8 Arduino este concestat la PIN IN al modulului cu LED
  • GND Arduino este conectat la GND TSOP4838 și la GND LED

Documentatie proiect:  

 Componente:

Cod de test:

#include "IRremote.h"
#define LED_PIN 8
#define DEBUG_BUTTON_PIN    6 // if held low, print timing for each received data

int state = LOW;
int ir_data=0;
int IR_RECEIVE_PIN = 11; // Receive on pin 11

void setup()
{
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);  // Status on pin 3 LED
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver, enable feedback LED, take LED feedback pin from the internal boards definition
}

void loop() {
  if (IrReceiver.decode()) {
    if (IrReceiver.decodedIRData.flags & IRDATA_FLAGS_WAS_OVERFLOW) {
            IrReceiver.decodedIRData.flags = false; // yes we have recognized the flag :-)
            // no need to call resume, this is already done by decode()
            Serial.println(F("Overflow detected"));

        } else {
            // Print a short summary of received data
            IrReceiver.printIRResultShort(&Serial);
            if (IrReceiver.decodedIRData.protocol == UNKNOWN || digitalRead(DEBUG_BUTTON_PIN) == LOW) {
                // We have an unknown protocol, print more info
                IrReceiver.printIRResultRawFormatted(&Serial, true);
            }
        }
    if(  (IrReceiver.decodedIRData.command == 0x10)
       || (IrReceiver.decodedIRData.command == 0x8)
       || (IrReceiver.decodedIRData.command == 0x6)
       || (IrReceiver.decodedIRData.command == 0x0))
    {  // Can check for a specific button here e.g. if (IrReceiver.decodedIRData.command == 0x11) {
      if (state == LOW) { 
        state = HIGH;  // Button pressed, so set state to HIGH
        digitalWrite(LED_PIN, HIGH);
      }
      else
      {
        state = LOW; // Haven't heard from the button for a while, so not pressed
        digitalWrite(LED_PIN, LOW);
       }
    }
    IrReceiver.resume(); // Receive the next value
  }
}  
 

To do 

Și după acest success răsunător o să portez acest proiect pe un controller ATTiny85, și apoi să asamblez totul pe o placă mică-mică.

Pentru întrebari și/sau consultanță tehnică vă stau la dispozitie pe blog sau pe email simedruflorin@automatic-house.ro. O zi plăcută tuturor !

Etichete

Afișați mai multe

Arhiva

Afișați mai multe