Kod Ara

Herhangi bir kızılötesi uzaktan kumanda ile bir Arduino ve röle kullanarak bir AC ampulü kontrol edin

Herhangi bir kızılötesi uzaktan kumanda ile bir Arduino ve röle kullanarak bir AC ampulü kontrol edin

Bu eğitimde, bir Arduino ve bir röle modülü aracılığıyla bir AC ampulü çalıştırmak için kızılötesi uzaktan kumandanın nasıl kullanılacağını öğreneceğiz. Bu proje, uzaktan kumandadan gelen sinyallerin kodunu çözmeyi ve bunları röleyi kontrol etmek için kullanmayı içerir; bu da AC ampulü açıp kapatacaktır. Bu eğitimin sonunda, herhangi bir kızılötesi uzaktan kumandayı kullanarak ışık armatürünüzü kontrol edebileceksiniz.

Uzaktan kumandadan gelen sinyalleri yakalamak için bir kızılötesi alıcı kullanacağız ve Arduino bu sinyalleri belirli eylemleri gerçekleştirmek için yorumlayacaktır. Sağlanan kod, uzaktan kumandanın türünü (siyah veya beyaz) ve alıcı için PCB mi yoksa çıplak modül mü kullandığınızı seçmenize olanak tanır. Ek ayrıntılar ve açıklamalar için ilişkili videoyu izlediğinizden emin olun (videoda 0:00).

Donanım Açıklaması

Bu proje için ana bileşenler Arduino kartı, bir kızılötesi alıcı modülü ve bir röle modülüdür. Kızılötesi alıcı, uzaktan kumandadan gelen sinyalleri yakalamaktan ve bunları Arduino'ya göndermekten sorumludur. Röle modülü, AC ampulü kontrol etmek için bir anahtar görevi görür ve alınan sinyallere göre açılıp kapanmasını sağlar.

5V HIGH-level trigger relay module
5V YÜKSEK seviye tetiklemeli röle modülü

Kızılötesi alıcı tipik olarak 38 kHz frekansında çalışır ve yaklaşık 10 ila 15 metre mesafeden sinyalleri algılayabilir. Arduino sinyali aldığında, onu çözer ve ampulün gücünü kontrol etmek için röleyi kullanır.

Bağlantı Talimatları

IR_remote_AC_relay_wiring

Kablolamaya kızılötesi alıcı modülünü Arduino'ya bağlayarak başlayın. Alıcının VCC pini Arduino'daki 5V pinine bağlanır ve toprak pini bir GND pinine bağlanır. Kızılötesi alıcıdan gelen sinyal pini Arduino'daki dijital pin 11'e bağlanmalıdır.

Ardından, röle modülünü bağlayın. Rölenin kontrol pini Arduino'daki dijital pin 2'ye bağlanmalıdır. Ayrıca, rölenin VCC ve GND pinlerini sırasıyla Arduino'nun 5V ve GND pinlerine bağlayın. Son olarak, güvenli çalışmayı sağlamak için AC ampulü rölenin özelliklerine göre röleye bağlayın.

Kod Örnekleri ve Açıklaması

Programın kurulum aşamasında, seri iletişimi başlatır ve röle pinini ayarlarız. RECV_PIN tanımlayıcısı, kızılötesi alıcının sinyal pininin bağlı olduğu 11 olarak ayarlanır. Bu, uzaktan kumandadan veri almamızı sağlar.

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Alıcıyı başlat
  pinMode(RELAY_PIN, OUTPUT); // röle için bir pini ÇIKIŞ olarak tanımla
  digitalWrite(RELAY_PIN, HIGH); // başlangıçta röleyi KAPALI olarak ayarla
}

Döngü fonksiyonunda, uzaktan kumandadan gelen sinyalleri sürekli kontrol ederiz. Bir sinyal algılandığında, değer çözülür ve basılan tuşa göre ilgili eylem gerçekleştirilir.

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // Alınan değeri yazdır
    robojaxValidateCode(results.value); // Kodu doğrula
    irrecv.resume(); // Sonraki değeri al
  }
  delay(100);
}

robojaxValidateCode fonksiyonu, alınan kodu uzaktan kumandanın bilinen değerleriyle karşılaştırır. Hangi tuşa basıldığına bağlı olarak, röleyi kullanarak ilgili eylemi gerçekleştirir.

void robojaxValidateCode(int cd) {
  if (type == 'W' && !PCB) {
    // Beyaz uzaktan kumanda kodlarını kontrol et
    for (int i = 0; i < sizeof(whiteRemote) / sizeof(int); i++) {
      if (whiteRemote[i] == cd) {
        Serial.print("Basılan tuş: ");
        Serial.println(whiteRemoteKey[i]);
        relayAction(whiteRemoteKey[i]); // Eylemi gerçekleştir
      }
    }
  }
}

Bu fonksiyonda, kod basılan tuşun tanımlanan dizi değerlerine karşılık gelip gelmediğini kontrol eder. Bir eşleşme bulunursa, basılan tuşa bağlı olarak röleyi açmak veya kapatmak için relayAction fonksiyonunu çağırır.

Gösterim / Beklentiler

Kablolamayı tamamladıktan ve kodu yükledikten sonra, AC ampulü kontrol etmek için kızılötesi uzaktan kumandanızı kullanabilirsiniz. Uzaktan kumandada belirlenen tuşlara basın ve röle ampulü buna göre etkinleştirip devre dışı bırakmalıdır. Her tuşun tepkisini görmek için test ettiğinizden emin olun (videoda 5:00).

Video Zaman Damgaları

  • 00:00 Başlangıç
  • 00:49 Giriş
  • 02:00 Kablolama ve bağlantı
  • 05:27 Arduino kodu açıklaması
  • 09:51 Farklı uzaktan kumanda ile AC ampulü kontrol etme gösterimi
  • 13:13 TV uzaktan kumandanızı kullanarak AC ampulü kontrol etme

Görseller

5V LOW-LEVEL trigger relay
5V LOW-LEVEL trigger relay
5V HIGH-level trigger relay module
5V HIGH-level trigger relay module
remote
remote
IR_remote_AC_relay_wiring
IR_remote_AC_relay_wiring
138-Source for controlling an AC load using an Arduino
Dil: C++
/*
 * Original library from - http://arcfn.com
 * 
 * This Arduino code decodes any remote code and then you can control an AC load using a relay
 * sold on eBay for Arduino. 
 * You have to select the type of your remote as Black or White in the code below
 * and also select your receiver 1838 as either a PCB or bare module. See video for details
 * 
 * You have to watch this video: https://youtu.be/muAkBQb24NI
 * before proceeding with this code. 
 * 
 * Modified/Written by Ahmad Shamshiri
 * on July 31, 2018 at 20:33 in Ajax, Ontario, Canada
 * for Robojax.com
 * Watch video instructions for this code: https://youtu.be/j5kb0WBpD30
 * Get other Arduino codes from Robojax.com
 * 
 */

#include <IRremote.h>

int RECV_PIN = 11;
const char type ='W';// W for white, B for black. Must keep single quotes like 'B' or 'W'
const boolean PCB = 1;// if receiver is PCB set to 1, if not set to 0. See video for details
boolean displayCode = true;// to display remote code. if not, set to false

//***** Relay settings begins
const int RELAY_PIN = 2;// 
const String ON="3";// turn relay ON with + key on remote
const String OFF="1";// turn relay OFF with - key on remote
//**** Relay settings ends

IRrecv irrecv(RECV_PIN);


// this is array holding codes for White Remote when used with PCB version of receiver
unsigned int whiteRemotePCB[] ={
            0xE318261B, // CH-
            0x511DBB,   // CH
            0xEE886D7F,  // CH+

            0x52A3D41F, // |<<
            0xD7E84B1B, // >>|
            0x20FE4DBB, // >||          

            0xF076C13B, // -
            0xA3C8EDDB, // +
            0x12CEA6E6, // EQ

            0xC101E57B, // 0
            0x97483BFB, // 100+
            0xF0C41643, // 200+

            0x9716BE3F, // 1
            0x3D9AE3F7, // 2
            0x6182021B, // 3           

            0x8C22657B, // 4 
            0x488F3CBB, // 5
            0x449E79F,  // 6

            0x32C6FDF7, // 7
            0x1BC0157B, // 8
            0x3EC3FC1B  // 9                          
            };

// this is array holding codes for White Remote when used with non-PCB version of receiver            
unsigned int whiteRemote[] ={
            0xFFA25D, // CH-
            0xFF629D,   // CH
            0xFFE21D,  // CH+

            0xFF22DD, // |<<
            0xFF02FD, // >>|
            0xFFC23D, // >||          

            0xFFE01F, // -
            0xFFA857, // +
            0xFF906F, // EQ

            0xFF6897, // 0
            0xFF9867, // 100+
            0xFFB04F, // 200+

            0xFF30CF, // 1
            0xFF18E7, // 2
            0xFF7A85, // 3           

            0xFF10EF, // 4 
            0xFF38C7, // 5
            0xFF5AA5,  // 6

            0xFF42BD, // 7
            0xFF4AB5, // 8
            0xFF52AD  // 9                          
            };
// key lables of white remote
 String whiteRemoteKey[] ={
            "CH-",
            "CH",
            "CH+",

            "|<<",
            ">>|",
            ">||",

            "-",
            "+",
            "EQ",

            "0",
            "100+",
            "200+",

            "1",
            "2",
            "3",

            "4",
            "5",
            "6",

            "7",
            "8",
            "9"
            };

// this is array holding codes for Black Remote when used with non-PCB version of receiver
 unsigned int blackRemote[] ={
            0xFF629D, // ^
            0xFF22DD,   // <
            0xFF02FD,  // OK
            0xFFC23D, // >
            0xFFA857, // v

            0xFF6897, // 1
            0xFF9867, // 2
            0xF0C41643, // 3           

            0xFF30CF, // 4 
            0xFF18E7, // 5
            0xFF7A85,  // 6

            0xFF10EF, // 7
            0xFF38C7, // 8
            0xFF5AA5,  // 9 

            0xFF42BD, // *
            0xFF4AB5, // 0
            0xFF52AD  // #                                      
            };

// this is array holding codes for Black Remote when used with PCB version of receiver
 unsigned int blackRemotePCB[] ={
            0x511DBB, // ^
            0x52A3D41F,   // <
            0xD7E84B1B,  // OK
            0x20FE4DBB, // >
            0xA3C8EDDB, // v


            0xC101E57B, // 1
            0x97483BFB, // 2
            0xF0C41643, // 3           

            0x9716BE3F, // 4 
            0x3D9AE3F7, // 5
            0x6182021B,  // 6

            0x8C22657B, // 7
            0x488F3CBB, // 8
            0x449E79F,  // 9 

            0x32C6FDF7, // *
            0x1BC0157B, // 0
            0x3EC3FC1B  // #                                      
            };

// Black remote key names
 String blackRemoteKey[] ={
            "^",
            "<",
            "OK",
            ">",
            "v",

            "1",
            "2",
            "3",

            "4",
            "5",
            "6",

            "7",
            "8",
            "9",
            
            "*",
            "0",
            "#"
            };

decode_results results;


void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Robojax IR Decode");
  Serial.println("Control Relay with Remote");
  irrecv.enableIRIn(); // Start the receiver

  pinMode(RELAY_PIN,OUTPUT);// define a pin for relay as OUTPUT
  digitalWrite(RELAY_PIN, HIGH);// set relay to OFF at the begining
}

void loop() {

  if (irrecv.decode(&results)) {
    if(displayCode)Serial.println(results.value, HEX);
    robojaxValidateCode(results.value);// used the "robojaxValidateCode" bellow
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

/*
 * function: robojaxValidateCode
 * validates the remote code and prints the correct key name
 * cd is code passed from the loop
 * Written by A. S. for Robojax
 */
void robojaxValidateCode(int cd)
{

  // Robojax IR Remote decoder
  int found=0;

 if(type =='W' && !PCB)
 {
    // Robojax IR White Remote decoder
    // if type is set to 'W' (white remote) and PCB=0 then check White remote code
      for(int i=0; i< sizeof(whiteRemote)/sizeof(int); i++)
      {
        if(whiteRemote[i] ==cd)
        {
          
          Serial.print("Key pressed:");
          Serial.println(whiteRemoteKey[i]);
          relayAction(whiteRemoteKey[i]);// take action
          found=1;
        }// if matched
      }// for
 }else if(type =='W' && PCB){
    // Robojax IR White Remote decoder
    // if type is set to 'W' (white remote) and PCB=1 then check White remote code
      for(int i=0; i< sizeof(whiteRemotePCB)/sizeof(int); i++)
      {
        if(whiteRemotePCB[i] ==cd)
        {
          
          Serial.print("Key pressed:");
          Serial.println(whiteRemoteKey[i]);
          relayAction(whiteRemoteKey[i]);// take action 
          found=1;
        }// if matched
      }// for  
 }else if(type =='B' && PCB){
    // Robojax IR Black Remote decoder
       // if type is set to 'B' (black remote) and PCB=1 then check Black remote code
       for(int i=0; i< sizeof(blackRemotePCB)/sizeof(int); i++)
      {
        // Robojax IR black Remote decoder
        if(blackRemotePCB[i] ==cd)
        {

          Serial.print("Key pressed:");
          Serial.println(blackRemoteKey[i]);
         relayAction(blackRemoteKey[i]);// take action     
          found=1;
        }// if matched
      }// for   
 }else{

      // if type is set to 'B' (black remote) and PCB =0 then check Black remote code
       for(int i=0; i< sizeof(blackRemote)/sizeof(int); i++)
      {
        // Robojax IR black Remote decoder
        if(blackRemote[i] ==cd)
        {

          Serial.print("Key pressed:");
          Serial.println(blackRemoteKey[i]);
          relayAction(blackRemoteKey[i]);// take action          
    
          found=1;
        }// if matched
      }// for  
 }// else
  if(!found){
    if(cd !=0xFFFFFFFF)
      {
    Serial.println("Key unknown");
      }
  }// found
}// robojaxValidateCode end

/*
 * 
 * relayAction()
 * receives string "value" as input and based on the settings, 
 * turns relay pin HIGH or LOW
 */
void relayAction(String value)
{
  // Robojax IR Relay control
   if(value == ON)
   {
    digitalWrite(RELAY_PIN, LOW);// Turn relay ON
    Serial.println("Relay Turned ON");
   }

   if(value == OFF)
   {
    digitalWrite(RELAY_PIN, HIGH);// Turn relay OFF
    Serial.println("Relay Turned OFF");
   }
}//relayAction end

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Henüz kaynak yok.

Dosyalar📁

Fritzing Dosyası