የAC አምፑልን በማንኛውም የኢንፍራሬድ ሪሞት ኮንትሮል በመጠቀም ከአርዱኖ እና ሪሌይ ጋር ይቆጣጠሩ
በዚህ ትምህርት ውስጥ፣ የኢንፍራሬድ ርቀት መቆጣጠሪያን በመጠቀም የኤሲ አምፖልን በአርዱኖ እና በሪሌይ ሞጁል እንዴት መስራት እንደምንችል እንማራለን። ይህ ፕሮጀክት ከርቀት መቆጣጠሪያው የሚመጡ ምልክቶችን መበተን እና ሪሌይን ለመቆጣጠር መጠቀምን ያካትታል፣ ይህም የኤሲ አምፖሉን ለማብራት እና ለማጥፋት ያስችላል። በዚህ ትምህርት መጨረሻ ላይ፣ የብርሃን መሳሪያዎን ለመቆጣጠር ማንኛውንም የኢንፍራሬድ ርቀት መቆጣጠሪያ መጠቀም ይችላሉ።
ከርቀት መቆጣጠሪያው ምልክቶችን ለመያዝ የኢንፍራሬድ መቀበያን እንጠቀማለን፣ እና አርዱኖው እነዚህን ምልክቶች ተርጉሞ የተወሰኑ ተግባራትን ያከናውናል። የቀረበው ኮድ የርቀት መቆጣጠሪያውን አይነት (ጥቁር ወይም ነጭ) እና ለመቀበያው PCB ወይም ባዶ ሞጁል እየተጠቀሙ እንደሆነ እንዲመርጡ ያስችልዎታል። ለተጨማሪ ዝርዝሮች እና ማብራሪያዎች ተያያዥ ቪዲዮውን መመልከትዎን ያረጋግጡ (በቪዲዮው 0፡00 ላይ)።
ሃርድዌር ተብራርቷል
ለዚህ ፕሮጀክት፣ ዋና ዋና ክፍሎቹ የአርዱኖ ቦርድ፣ የኢንፍራሬድ መቀበያ ሞጁል እና የሪሌይ ሞጁል ያካትታሉ። የኢንፍራሬድ መቀበያው ከርቀት መቆጣጠሪያው ምልክቶችን በመያዝ ወደ አርዱኖ የመላክ ኃላፊነት አለበት። የሪሌይ ሞጁሉ የኤሲ አምፖሉን ለመቆጣጠር እንደ መቀየሪያ ሆኖ ይሰራል፣ ይህም በተቀበሉት ምልክቶች መሰረት እንዲበራ እና እንዲጠፋ ያስችላል።
የኢንፍራሬድ መቀበያው በተለምዶ በ38 kHz ድግግሞሽ ይሰራል እና ከ10 እስከ 15 ሜትር ርቀት ላይ ያሉ ምልክቶችን መለየት ይችላል። አርዱኖው ምልክቱን ከተቀበለ በኋላ፣ ይተረጉመዋል እና ሪሌይን በመጠቀም የአምፖሉን ኃይል ይቆጣጠራል።
የሽቦ አገናኝ መመሪያዎች

ሽቦ ማገናኘት የሚጀምሩት የኢንፍራሬድ መቀበያ ሞጁሉን ከአርዱኖ ጋር በማገናኘት ነው። የመቀበያው 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 የቲቪ ርቀት መቆጣጠሪያዎን በመጠቀም የኤሲ አምፖልን መቆጣጠር
/*
* 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
እንደሚያስፈልግዎት ይችላል
-
አማዞን
-
ኢቤይ
ምንጮች እና ምንጮች
አሁን ምንም ምንጮች የለም።
ፋይሎች📁
ፍሪትዚንግ ፋይል
-
VS1838B Infrared receiver
VS1838B_part.fzpz