BUWEKKKKK



Pernah tertanya-tanya tentang bagaimana remote control TV di rumah berfungsi? kita cuma perlu kawal tv daripada jauh dgn remote dan tidak perlu berada berhampiran dgn tv untuk menukar channel.
Perkara yg sama untuk peralatan elektronik lain yg menggunakan remote seperti Portable kipas dan airconditioning.
Dalam post ini marih kita sama-sama berbincang mengenai remote ini dan bagaimana untuk decode menggunakan Arduino. Jom..




IR led di Remote

-LED yg berada di remote itu bukanlah yg biasa, iainya untuk menghantar signal IR(cahaya nya boleh dilihat mengunakan kamera).
-Di TV pula ada IR receiver untuk menerima/mengesan cahaya IR ini. Normal frequency cahaya IR yg boleh dibaca dengan IR receiver ini ialah 38Khz.
-Ir receiver akan menghasilkan logic "0"(gnd) dan akan menghasilkan output logic "1"(5/12v) jika mengesan 38Khz cahaya IR.



Arduino connection for Receiver

-IR receiver nih boleh di beli di mana2 kedai elektronik. Rupanya lebih kurang cam kt bawah ni:
Contoh model: TSOP4038
-Connection untuk arduino se simple cm kat bawah ni:
kita guna pin 2 Arduino.


Klik gambar untuk besarkan

-Teori nye, IR Led(transmitter) akan menghantar sepasang(pair of code) logic code untuk diterima oleh IR receiver. Code tuh dalam bentuk 10101010(on-off-on...). Perbezaan setiap code ialah berapa lama delay "off state" dan delay "on state" atau juga panjang code(berapa byk on-off cth: 1010 -> 4 bit).


Klik gambar untuk besarkan


-Connect IR receiver ke Arduino dan upload program bawah ni:

#define IRpin      PIND /// guna pind utk detect signal laju// arduino mmg connect ke kaki2 IRpin=high !IRpin=Low// mcm analogread gak tapi digital
#define kakiIR          2

//maximum pulse 50 ms/// set nih sje je nk sruh stop loop//////////
#define MAX 50000


// multiplier// besar kn// nilai kecik sgt kdg2 x accurate.. yg penting code betul  gg...
#define Mul 30 

// untuk simpan brapa byk cycle//////////
uint16_t cycle[100][2];  // int 32 bit sbb max set ke 5000.. xnk nilai negative..
int cycle_skrg = 0; // variable utk setiap bit cycle

void setup(void) {
  Serial.begin(9600);
  Serial.println("marih bace code ir/n");
}

void loop(void) {
  uint32_t high, low;  
  high = 0;
  low = 0; 
  //// 1 cycle ade high ngan low, depend brapa lame....


//mula2 kira high pulse dlu brapa lame...//////////////////
    while (IRpin &(1 << kakiIR)) {
     high++;
     delayMicroseconds(Mul);

     // kalau pulse first lame sgt kita stop bace// error
     if ((high >= MAX) && (cycle_skrg  != 0)) {
       tulis();
       cycle_skrg=0;
       return;
     }
  }

  cycle[cycle_skrg][0] = high;
////////////////simpan IR high nye mase tuh dlm index/////////////////
///ir akan always high, bila receive akan jadi low.... code dia bedasarkan brapa lame hold signal high ngan low.......
//skrg kita nk bace mase tuh... gg


 ////////////////kira low signal plak.. tunggu smpai abis detect high ///////////
  while (! (IRpin & _BV(kakiIR))) {
     // pin is still LOW
     low++;
     delayMicroseconds(Mul);
     /// klu lame sgt maksudnye ade error///////////////
     if ((low >= MAX)  && (cycle_skrg != 0)) {
       tulis();
       cycle_skrg=0;
       return;
     }
  }
   cycle[cycle_skrg][1] = low;
////////////////simpan mase lowpulse tuh dlm index/////////////////
  

  // setiap cycle kita tambah index dia untuk simpan index seterusnya//////////////////
  cycle_skrg++;
}
// pahtu repeat bace cycle seterusnya//////////// smpai lah pulse tu lame sgt.. kita stop kn...

 //////////////////dah abis bace pulse, simpan kat sini
void tulis(void) {
  for (uint8_t i = 0; i < cycle_skrg; i++) {
    Serial.print("delayMicroseconds(");
    Serial.print(cycle[i][0] * Mul, DEC);
    Serial.print(");");
    Serial.print("\n kesan_IR(");
    Serial.print(cycle[i][1] * Mul, DEC);
    Serial.println(");");
  }
}


-Halakan Remote TV korang ke IR receiver(lagi dekat lagi bagus). kemudian open "Serial Monitor" atau tekan "ctrl+shift+M". Tekan ape2 button di remote korang tuh, code tuh akan muncul di serial monitor. Copy/paste dan simpan code tuh untuk digunakan kemudian. Itulah cara untuk dapatkan IR code dari mana2 remote. Tgok Video kat bawah ni contoh:



Arduino connection for Transmitter


-Connect IR led ke arduino korang cam gambar kat bawah:

Klik gambar untuk besarkan

-Guna transistor NPN cam gambar kat bawah. Connect ke pin 13 Arduino.

-Base->IR led, Collector->1k ohm resistor, Emitter->GND.

-Connect IR transmitter ke Arduino dan upload program bawah ni:


 int kakiIR =  13;    // IR connect ke kaki 13 ard

void setup()   {                
  pinMode(kakiIR, OUTPUT);      
  Serial.begin(9600);
}

void loop()                     
{
  Serial.println("anta signal");

Anto();

  delay(10000);  // delay untuk anta lagi
}

// kita kena send 38khz utk nyalakan kebanyakkan device.. universal remote biasanya

void kesan_IR(long ms) {
  cli();  //on interrupt -->mase on interrupt  program tutup semua bnda dan bace program bwh ni jek////

  while (ms > 0) {
    // 38 kHz = 13 microseconds high ngan 13 microseconds low  (1/(13milli+13milli))
   digitalWrite(kakiIR, HIGH);  
   delayMicroseconds(10);         
   digitalWrite(kakiIR, LOW);  
   delayMicroseconds(10);       

   // kita anta 38khz utk 26 kali cycle->> universal std
   ms -= 26;
  }

  sei();  // off kn interrupt jln kan program
}

void Anto() {
  //masukkan signal yg dapat dri receiver kt sini
  //ni contoh signal dari remote aircond
//delayMicroseconds(42870);
// kesan_IR(9540);
//delayMicroseconds(9450);
// kesan_IR(9540);
//delayMicroseconds(9480);
// kesan_IR(4500);
//delayMicroseconds(2400);
// kesan_IR(390);
//delayMicroseconds(330);
// kesan_IR(360);
//delayMicroseconds(900);
// kesan_IR(360);
//delayMicroseconds(900);
// kesan_IR(360);
//delayMicroseconds(360);
// kesan_IR(360);
//delayMicroseconds(900);
// kesan_IR(360);
//delayMicroseconds(330);
// kesan_IR(360);
//delayMicroseconds(360);
// kesan_IR(360);
//delayMicroseconds(330);
// kesan_IR(360);
//delayMicroseconds(360);
// kesan_IR(360);
//delayMicroseconds(900);
// kesan_IR(360);
//delayMicroseconds(19590);
// kesan_IR(4500);
}

-Masukkan Signal yang korang dapat dari receiver tadi dlm program transmitter nih.
Itu contoh code yg kami dapat daripada remote air conditioning. 

Lepas upload, halakan IR led ke TV untuk test arduino remote korang ;)
Program kat atas ni delay 10s loop ataupon korang tekan reset button kat arduino utk lebih cepat. Korang boleh cuba ubahsuai program kat atas ni ikot keperluan.

Rumusan

1)Korang boleh test cara ini kat apa2 remote yg korang ade.

2)Lepas upload program dalam Arduino, korang halakan IR led ke TV untuk test.

3)Contoh projek elektronik yg boleh dibuat dgn cara ini ialah:

a)Control TV using android phone.
b)GSM control air conditioning.
c)Machine control with artificial flexible remote.
d)Universal remote read and write box.
e)Ethernet control air conditioning.

4)Contoh video test di TV:




~Untuk apa2 pertanyaan boleh la direct mesej ke page facebook kami untuk jawapan yg pantas... hehe... Selamat mencuba....







Popular posts from this blog

Pendahuluan:Peripheral Interface Controller(PIC microcontroller)

Pengenalan Interrupt

Pendahuluan: Proteus simulasi yg berguna