IR vastuvõtja ja puldi komplekt Ühendatud arduino UNOga

Infrapuna vastuvõtja ühendamine ja puldiga kasutamine Arduino näitel

Käesolev artikkel räägib konkreetselt selle IR (infrapuna) puldi ja vastuvõtja ühendamisest ning kasutamisest Arduino mikrokontrolleriga. Tegelikult saab selle vastuvõtjaga ka muid pulte ning formaate lugeda, aga jäägu see hetkel koduseks katsetamiseks.

Installeerime IRLib teegi

Infrapuna ehk IR puldi ja vastuvõtva mooduli kasutamiseks Arduinoga on vaja kõigepealt installeerida IRLib teek/library mis teeb raskema töö meie eest ära. Selleks tuleb teha järgnevad sammud.

  1. Kõigepealt tuleb oma arvutisse alla laadida pakitud IRLib teek.
  2. Alla laetud pakk tuleb lahti pakkida ning sellest peaks tekkima kaust nimega “IRLib-master”.
  3. Kausta nimest eemaldada “-master” osa. Nüüd peaks nimeks olema lihtsalt “IRLib”.
  4. Avada Arduino IDE programmis  “Sketch -> Import library -> Add library”.  Avanenenud dialoogis navigeerida kohta kus asub just lahti pakitud “IRLib” kaust. Ära mine kausta sisse vaid vali see kaust ning vajuta “OK”. Nüüd peaks programmi all servas tulema ka teade “Library added to your libraries”.
  5. Teine võimalus on kopeerida see kaust Arduino teekide kausta milleks Windowsi kasutajal on  “(kasutaja)/Documents/Arduino/Libraries” ning linuxi kasutajal “/home/(kasutaja)/sketchbook/libraries/”. Peale kausta kopeerimist tuleb programmile teha taaskäivitus.
  6. Nüüd peaks teek olema lisatud ja siin postituses olev näidiskood töötama.

 

Mooduli ühendamine

Moodul vajab vaid toidet ning ühte pinni signaali edastuseks. Valime signaali edastuseks digitaalse pinni number 8 Arduino UNO peal. Sama mis kasutses ka allolevas näidisprogrammis. Vastuvõtja ühendamisel konkreetsel moodulil on märgitud vaid signaali (S) ja maa (-) klemmid. Seega keskmine on +5V toite klemm. Ühendused näiteks Arduino UNO peale tulevad selle järgi järgmised:

  • => Toide GND
  • +5V => Toide +5V
  • S => Digitaal sisend klemm  D8

IR vastuvõtja ühendusklemmid

 

Näidiskood ja tulemus

Kui siin antud näidiskood ei anna terminali sõnadega, et mis nuppu vajutati, siis tuleb seda koodi muuta vastavalt oma puldi antud väärtustele. See on nii kuna pulte on erinevaid ning koodi genereerib pult. Ka siin e-poes võib saada komplektiga kaasa erinevaid koode genereerivaid pulte. 

#include <IRLib.h>

/**
 * Loome vastuvõtja ning paneme ta kuulama signaale pin 8 
 * pealt. Paneme selle nimeks "MReceiver". 
 */
IRrecv MReceiver( 8 );
 
/**
 * Loome dekooder objekti nimega "IRDecoder". Kui kasutame mooduliga 
 * kaasas olevat NEC standardit kasutava puldi siis võime selle asemel 
 * ka "IRdecodeNEC" dekoodrit kasutada, et mälu kokku hoida. 
 * Muude pultide proovimiseks tuleks jätta "IRdecode" esialgu. 
 */
IRdecode IRDecoder;
//IRdecodeNEC IRDecoder;

/**
 * Kas lubame sama nuppu all hoides korduvad vajutusi? Kui paneme 
 * selle väärtuseks "0" siis käesolev programm ei tee nn "korduv vajutust".  
 */
int repatAllow = 1;

//neis hoiame hetkel vajutatud ning eelmise vajutatud nupu koodi
int currentValue = 0;
int lastValue = 0;


void setup() {
  Serial.begin(9600);
  MReceiver.enableIRIn();
}
 
void loop() {
  
  if (MReceiver.GetResults(&IRDecoder)) {
    IRDecoder.decode();
    //Näita terminalis kõike mis nupuvajutusest teatakse
    //IRDecoder.DumpResults();
    
    //Saame hetkel loetud väärtuse
    currentValue = IRDecoder.value;
    
    /**
     * Kui puldis all hoida ühte nuppu hakkab IR pult andma 
     * spetsiaalset nn kordus koodi "4294967295". Kui see kood tuleb 
     * kontrollime, et kas "korduv vajutused" on lubatud programmis. 
     * Kui "repatAllow" muutuja väärtuseks on "1" siis teeme korduv
     * vajutuse ära kasutades eelmise vajutatud nupu väärtust. 
     */
    if( currentValue == 4294967295 ){
      currentValue = lastValue;
      if(repatAllow == 1){
        doButtonAction( currentValue );
      }
    } else {
      lastValue = currentValue;
      doButtonAction( currentValue );
    }
    
    MReceiver.resume();
  }
}

/**
 * Siin teeme vastavalt nupu väärtusele tegevusi. Näidisprogrammis
 * kuvame lihtsalt terminali välja vajutatud nupu väärtuse/tegevuse.
 * Kuna pulte on erinevaid siis see kood ei pruugi igalühel anda 
 * terminali sõnadega, et mida vajutati. Kui pole päris sama pult siis
 * terminali tuleb vajutatud nupu kood. 
 * 
 * Seega võib järgneva koodi võtta põhjaks 
 * ning katsetamiseks muuta ära paremale, vasakule, üles ja 
 * alla 'case' koodid, et see käima saada konkreetse puldiga. 
 */
void doButtonAction( int code ) {
  
  switch( code ) {
    case 16720605:
      Serial.println( "Vajutati vasakule" );
      break;
      
    case 16761405:
      Serial.println( "Vajutati paremale" );
      break;
      
    case -22441:
      Serial.println( "Vajutati alla" );
      break;
      
    case 25245:
      Serial.println( "Vajutati ules" );
      break;
      
    default:
      //kõik muud nupud mis pole siin kaetud- prindime nende koodi
      //mille saab lisada siia
      Serial.print( "Vajutati nuppu koodiga: " );
      Serial.print( code );
      Serial.println( "" );
      break;
  }
  
}

Lae see kood oma Arduinole peale ning ava terminal (serial monitor). Vajutades nüüd nuppe peaks tekkima sinna aknasse tekstiread vastavalt puldil vajutatud nuppudele.

IR pult testkoodi tulemus terminalis
IR pult testkoodi tulemus terminalis

 

Proovi ka teisi kodus leiduvaid pulte selle programmiga.