Search Code

የAC አምፑልን በማንኛውም የኢንፍራሬድ ሪሞት ኮንትሮል በመጠቀም ከአርዱኖ እና ሪሌይ ጋር ይቆጣጠሩ

የAC አምፑልን በማንኛውም የኢንፍራሬድ ሪሞት ኮንትሮል በመጠቀም ከአርዱኖ እና ሪሌይ ጋር ይቆጣጠሩ

በዚህ ትምህርት ውስጥ፣ የኢንፍራሬድ ርቀት መቆጣጠሪያን በመጠቀም የኤሲ አምፖልን በአርዱኖ እና በሪሌይ ሞጁል እንዴት መስራት እንደምንችል እንማራለን። ይህ ፕሮጀክት ከርቀት መቆጣጠሪያው የሚመጡ ምልክቶችን መበተን እና ሪሌይን ለመቆጣጠር መጠቀምን ያካትታል፣ ይህም የኤሲ አምፖሉን ለማብራት እና ለማጥፋት ያስችላል። በዚህ ትምህርት መጨረሻ ላይ፣ የብርሃን መሳሪያዎን ለመቆጣጠር ማንኛውንም የኢንፍራሬድ ርቀት መቆጣጠሪያ መጠቀም ይችላሉ።

ከርቀት መቆጣጠሪያው ምልክቶችን ለመያዝ የኢንፍራሬድ መቀበያን እንጠቀማለን፣ እና አርዱኖው እነዚህን ምልክቶች ተርጉሞ የተወሰኑ ተግባራትን ያከናውናል። የቀረበው ኮድ የርቀት መቆጣጠሪያውን አይነት (ጥቁር ወይም ነጭ) እና ለመቀበያው PCB ወይም ባዶ ሞጁል እየተጠቀሙ እንደሆነ እንዲመርጡ ያስችልዎታል። ለተጨማሪ ዝርዝሮች እና ማብራሪያዎች ተያያዥ ቪዲዮውን መመልከትዎን ያረጋግጡ (በቪዲዮው 0፡00 ላይ)።

ሃርድዌር ተብራርቷል

ለዚህ ፕሮጀክት፣ ዋና ዋና ክፍሎቹ የአርዱኖ ቦርድ፣ የኢንፍራሬድ መቀበያ ሞጁል እና የሪሌይ ሞጁል ያካትታሉ። የኢንፍራሬድ መቀበያው ከርቀት መቆጣጠሪያው ምልክቶችን በመያዝ ወደ አርዱኖ የመላክ ኃላፊነት አለበት። የሪሌይ ሞጁሉ የኤሲ አምፖሉን ለመቆጣጠር እንደ መቀየሪያ ሆኖ ይሰራል፣ ይህም በተቀበሉት ምልክቶች መሰረት እንዲበራ እና እንዲጠፋ ያስችላል።

5V HIGH-level trigger relay module
5V ከፍተኛ-ደረጃ ቀስቅሴ ሪሌይ ሞጁል

የኢንፍራሬድ መቀበያው በተለምዶ በ38 kHz ድግግሞሽ ይሰራል እና ከ10 እስከ 15 ሜትር ርቀት ላይ ያሉ ምልክቶችን መለየት ይችላል። አርዱኖው ምልክቱን ከተቀበለ በኋላ፣ ይተረጉመዋል እና ሪሌይን በመጠቀም የአምፖሉን ኃይል ይቆጣጠራል።

የሽቦ አገናኝ መመሪያዎች

IR_remote_AC_relay_wiring

ሽቦ ማገናኘት የሚጀምሩት የኢንፍራሬድ መቀበያ ሞጁሉን ከአርዱኖ ጋር በማገናኘት ነው። የመቀበያው VCC ፒን በአርዱኖ ላይ ካለው 5V ፒን ጋር ይገናኛል፣ እና የመሬት ፒኑ ከGND ፒን ጋር ይገናኛል። ከኢንፍራሬድ መቀበያው የሚመጣው የምልክት ፒን በአርዱኖ ላይ ካለው ዲጂታል ፒን 11 ጋር መገናኘት አለበት።

በመቀጠል፣ የሪሌይ ሞጁሉን ያገናኙ። የሪሌይ መቆጣጠሪያ ፒን በአርዱኖ ላይ ካለው ዲጂታል ፒን 2 ጋር መገናኘት አለበት። እንዲሁም የሪሌይውን VCC እና GND ፒኖች ከአርዱኖው 5V እና GND ጋር በቅደም ተከተል ያገናኙ። በመጨረሻም፣ ደህንነቱ የተጠበቀ አሰራርን ለማረጋገጥ የኤሲ አምፖሉን በሪሌይ ዝርዝር መስፈርት መሰረት ከሪሌይ ጋር ያገናኙ።

የኮድ ምሳሌዎች እና ማብራሪያ

በፕሮግራሙ የማዋቀር ደረጃ ላይ፣ ተከታታይ ግንኙነትን እንጀምራለን እና የሪሌይ ፒንን እናዋቅራለን። መለያው RECV_PIN ወደ 11 ተዋቅሯል፣ ይህም የኢንፍራሬድ መቀበያው የምልክት ፒን የተገናኘበት ቦታ ነው። ይህ ከርቀት መቆጣጠሪያው መረጃ እንድንቀበል ያስችለናል።

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // መቀበያውን ይጀምሩ
  pinMode(RELAY_PIN, OUTPUT); // ለሪሌይ ፒን እንደ OUTPUT ይግለጹ
  digitalWrite(RELAY_PIN, HIGH); // መጀመሪያ ላይ ሪሌይን ወደ OFF ያዋቅሩ
}

በloop ተግባር ውስጥ፣ ከርቀት መቆጣጠሪያው የሚመጡ ምልክቶችን ያለማቋረጥ እንፈትሻለን። ምልክት ሲገኝ፣ እሴቱ ይተረጎማል፣ እና በተጫነው ቁልፍ መሰረት ተጓዳኝ እርምጃ ይወሰዳል።

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // የተቀበለውን እሴት ያትሙ
    robojaxValidateCode(results.value); // ኮዱን ያረጋግጡ
    irrecv.resume(); // የሚቀጥለውን እሴት ይቀበሉ
  }
  delay(100);
}

robojaxValidateCode ተግባር የተቀበለውን ኮድ ከርቀት መቆጣጠሪያው ከሚታወቁ እሴቶች ጋር ያወዳድራል። የትኛው ቁልፍ እንደተጫነ በመወሰን፣ ሪሌይን በመጠቀም ተጓዳኝ እርምጃውን ያከናውናል።

void robojaxValidateCode(int cd) {
  if (type == 'W' && !PCB) {
    // የነጭ ርቀት መቆጣጠሪያ ኮዶችን ያረጋግጡ
    for (int i = 0; i < sizeof(whiteRemote) / sizeof(int); i++) {
      if (whiteRemote[i] == cd) {
        Serial.print("የተጫነ ቁልፍ፡ ");
        Serial.println(whiteRemoteKey[i]);
        relayAction(whiteRemoteKey[i]); // እርምጃ ይውሰዱ
      }
    }
  }
}

በዚህ ተግባር ውስጥ፣ ኮዱ የተጫነው ቁልፍ ከተገለጹት የድርድር እሴቶች ጋር ይዛመድ እንደሆነ ይፈትሻል። ተዛማጅ ከተገኘ፣ በተጫነው ቁልፍ መሰረት ሪሌይን ለማብራት ወይም ለማጥፋት የrelayAction ተግባርን ይጠራል።

ማሳያ / ምን እንደሚጠበቅ

ሽቦ ማገናኘትን ከጨረሱ እና ኮዱን ከጫኑ በኋላ፣ የኤሲ አምፖሉን ለመቆጣጠር የኢንፍራሬድ ርቀት መቆጣጠሪያዎን መጠቀም ይችላሉ። በርቀት መቆጣጠሪያው ላይ የተመረጡትን ቁልፎች ይጫኑ፣ እና ሪሌዩ አምፖሉን በዚሁ መሰረት ያጠቃልል ወይም ያጠፋል። እያንዳንዱን ቁልፍ ምላሹን ለማየት መሞከርዎን ያረጋግጡ (በቪዲዮው 5፡00 ላይ)።

የቪዲዮ ጊዜ ምልክቶች

  • 00፡00 መጀመሪያ
  • 00፡49 መግቢያ
  • 02፡00 ሽቦ ማገናኘት እና ግንኙነት
  • 05፡27 የአርዱኖ ኮድ ተብራርቷል
  • 09፡51 የኤሲ አምፖልን በተለያዩ ርቀት መቆጣጠሪያዎች መቆጣጠር ማሳያ
  • 13፡13 የቲቪ ርቀት መቆጣጠሪያዎን በመጠቀም የኤሲ አምፖልን መቆጣጠር

ምስሎች

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
ቋንቋ: 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

እንደሚያስፈልግዎት ይችላል

ምንጮች እና ምንጮች

አሁን ምንም ምንጮች የለም።

ፋይሎች📁

ፍሪትዚንግ ፋይል