የጥቁር ወይም ነጭ ሪሞቶችን ከአርዱኖ ጋር መተርጎም
በዚህ መማሪያ ውስጥ፣ አርዱኖ እና አይአር መቀበያ በመጠቀም ከጥቁር እና ነጭ ኢንፍራሬድ ሪሞቶች ቁልፎችን እንዴት መፍታት እንደምንችል እንማራለን። በዚህ ፕሮጀክት መጨረሻ ላይ፣ በሪሞቱ ላይ የትኛው ቁልፍ እንደተጫነ መወሰን እና ያንን መረጃ በሴሪያል ሞኒተር ላይ ማሳየት ይችላሉ። ይህ እንደ ቲቪ ወይም ሌሎች መገልገያዎች (በቪዲዮ 01:00 ላይ) ያሉዎትን ማንኛውንም ሪሞት በመጠቀም መሳሪያዎችን ለመቆጣጠር ጠቃሚ ሊሆን ይችላል።
አርዱኖ፣ ኢንፍራሬድ መቀበያ ሞጁል እና ምልክቶቹን ለመፍታት አስፈላጊውን ኮድ የሚያካትት ቀላል ውቅር እንጠቀማለን። ኢንፍራሬድ መቀበያው ከሪሞቱ የሚመጡ ምልክቶችን ይይዛል፣ አርዱኖ ደግሞ የትኛው ቁልፍ እንደተጫነ ለመወሰን እነዚያን ምልክቶች ይተረጉማል። ይህ ፕሮጀክት ቀላል ነው እና ለተለያዩ የርቀት መቆጣጠሪያዎች ሊስተካከል ይችላል።
ሃርድዌር ተብራርቷል
ለዚህ ፕሮጀክት ዋና ዋና ክፍሎች የአርዱኖ ቦርድ እና የአይአር መቀበያ ሞጁል፣ በተለምዶ VS1838B ተብሎ የሚጠቀሰውን ያካትታሉ። አርዱኖ ከሪሞቱ የተቀበሉትን ምልክቶች የሚያስኬድ ኮድን በማስፈጸም እንደ ዋና መቆጣጠሪያ ያገለግላል። አይአር መቀበያው በርቀት መቆጣጠሪያው የሚለቀቁትን የኢንፍራሬድ ምልክቶች ይይዛል እና አርዱኖ ሊረዳው ወደሚችለው ቅርጸት ይቀይራቸዋል።
VS1838B ከ2.7V እስከ 5.5V ባለው የቮልቴጅ ክልል ውስጥ ይሰራል፣ ይህም ከአብዛኞቹ የአርዱኖ ቦርዶች ጋር ተኳሃኝ ያደርገዋል። እንደ ሁኔታዎች በመመስረት ከ10 እስከ 15 ሜትር ርቀት ላይ ምልክቶችን መለየት ይችላል። ኢንፍራሬድ መቀበያው በሪሞቱ ላይ የትኛው ቁልፍ እንደተጫነ የሚያመለክት ዲጂታል ምልክት ያወጣል፣ ይህም አርዱኖ በዚሁ መሰረት ምላሽ እንዲሰጥ ያስችለዋል።
የዳታሼት ዝርዝሮች
| አምራች | VS1838B |
|---|---|
| የክፍል ቁጥር | VS1838B |
| የሎጂክ/አይኦ ቮልቴጅ | 2.7–5.5 ቮ |
| የአቅርቦት ቮልቴጅ | 5 ቮ |
| የውጤት ጅረት (በአንድ ቻናል) | 1.5 ሚኤ |
| የመቀበያ ርቀት | 10–15 ሜ |
| የግቤት ድግግሞሽ | 38 ኪሎሄርትዝ |
| የእረፍት ጅረት | 0.8 ሚኤ (በተለምዶ) |
| የአሰራር አንግል | 70 ዲግሪ |
| ፓኬጅ | TO-220 |
- የአይአር መቀበያውን ከመጉዳት ለመቆጠብ ትክክለኛ የቮልቴጅ አቅርቦትን ያረጋግጡ።
- የመቀበያ ሞጁሉን ከቀጥታ የፀሐይ ብርሃን ወይም ከጠንካራ የኢንፍራሬድ ምንጮች ያርቁ።
- የምልክት ንባቦችን ለማረጋጋት አስፈላጊ ከሆነ የፑል-አፕ ተቃዋሚዎችን ይጠቀሙ።
- ያልተረጋጋ ምልክቶችን ለመከላከል የሽቦ ግንኙነቶች ደህንነታቸው የተጠበቀ መሆን አለባቸው።
- ከውቅሩ ጋር እንዴት እንደሚሰሩ ለማየት የተለያዩ ሪሞቶችን ይሞክሩ።
-
Deconding-IR-remote-main-1
የሽቦ መገጣጠም መመሪያዎች
አይአር መቀበያውን ከአርዱኖ ጋር ለማገናኘት፣ በመጀመሪያ የአይአር መቀበያውን የቪሲሲ ፒን በአርዱኖ ላይ ካለው የ5ቮ ፒን ጋር ያገናኙ። በመቀጠል የመቀበያውን የጂኤንዲ ፒን በአርዱኖ ላይ ካሉት የጂኤንዲ ፒኖች አንዱ ጋር ያገናኙ። በመጨረሻም የአይአር መቀበያውን የሲግናል ፒን (ብዙውን ጊዜ SIG ወይም OUT ተብሎ የሚሰየም) በአርዱኖ ላይ ካለው ዲጂታል ፒን 11 ጋር ያገናኙ።
ግንኙነቶቹ ደህንነታቸው የተጠበቀ መሆናቸውን ያረጋግጡ፣ ምክንያቱም ልቅ ግንኙነቶች ወደማይጣጣሙ ንባቦች ሊመሩ ይችላሉ። የፒሲቢ ስሪት የአይአር መቀበያ ወይም ባዶ ሞጁል እየተጠቀሙ ከሆነ፣ ሽቦው ተመሳሳይ ነው፤ ልክ እንደ ሞጁሉ መለያ ፒኖቹን በትክክል መለየትዎን ያረጋግጡ (በቪዲዮ 03:15 ላይ)።
የIRremote ቤተ-መጻሕፍትን ይጫኑ
የአርዱኖ አይዲኢን ያስጀምሩ። (ከArduino.cc በነጻ ያገኛሉ) በግራ በኩል ያለውን የቤተ-መጻሕፍት አዶን ጠቅ ያድርጉ እና IRremote ን ይፈልጉ እና ለመጫን "Install" ን ጠቅ ያድርጉ።
#include <IRremote.h>
የኮድ ምሳሌዎች እና ማብራሪያ
int RECV_PIN = 11;
const char type ='W'; // W ለነጭ፣ B ለጥቁር
const boolean PCB = 0; // 1 ለፒሲቢ፣ 0 ለባዶ ሞጁል
IRrecv irrecv(RECV_PIN);
በዚህ ክፍል ውስጥ፣ የአይአር መቀበያውን የፒን ቁጥር በRECV_PIN ወደ 11 በማዘጋጀት እንገልጻለን። እንዲሁም ጥቅም ላይ የሚውለውን የሪሞት አይነት በtype ተለዋዋጭ እንገልጻለን፣ 'W' ነጭ ሪሞትን እና 'B' ጥቁር ሪሞትን ያመለክታል። የPCB ተለዋዋጭ የፒሲቢ ስሪት ወይም ባዶ ሞጁል መጠቀምን ይለያል።
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // መቀበያውን ያስጀምሩ
}
በsetup() ተግባር ውስጥ፣ በ9600 ባውድ የሴሪያል ግንኙነትን እንጀምራለን እና የአይአር መቀበያውን እናስጀምራለን። ይህ በሴሪያል ሞኒተር ላይ ውጤቱን ለመከታተል ወሳኝ ነው፣ ይህም የትኛው ቁልፍ እንደተጫነ እንድናይ ያስችለናል።
void loop() {
if (irrecv.decode(&results)) {
robojaxValidateCode(results.value); // የተቀበለውን ኮድ ያረጋግጡ
irrecv.resume(); // የሚቀጥለውን እሴት ይቀበሉ
}
delay(100);
}ዋናው loop() የ IR መቀበያ ምልክት መቀየሩን ያረጋግጣል። ከተቀበለ፣ የተቀበለውን እሴት ለማስኬድ robojaxValidateCode ተግባርን ይጠራል እና ከዚያ ለሚቀጥለው ምልክት መስማት ይቀጥላል። delay(100) loop በጣም በፍጥነት እንዳይሰራ ያደርጋል፣ ይህም ለምልክት ማስኬጃ ሊረዳ ይችላል።
ማሳያ / ምን እንደሚጠበቅ
ሁሉም ነገር ከተዘጋጀ እና ኮዱ ከተጫነ በኋላ፣ ውጤቱን ለማየት የሴሪያል መቆጣጠሪያውን ይክፈቱ። በርቀት መቆጣጠሪያው ላይ ቁልፍ ሲጫኑ፣ ተጓዳኝ የቁልፍ ስም በማሳያው ላይ ሲታይ ማየት አለብዎት። ቁልፉ ካልታወቀ፣ "ቁልፍ ያልታወቀ" ይታያል። ቁልፎችን በጥብቅ መጫንዎን ያረጋግጡ፣ ምክንያቱም የተላላ ግንኙነቶች የተሳሳተ ንባብ ሊያስከትሉ ይችላሉ (በቪዲዮው 05:40 ላይ)።
ቁልፍን ያለማቋረጥ ከተጫኑ፣ ውጤቱ ተደጋጋሚ እሴቶችን ወይም ሄክሳዴሲማል ኮዶችን ሊያሳይ ይችላል። ይህ ባህሪ መደበኛ ነው፣ እና ከፈለጉ እነዚህን ተከታታይ ምልክቶች ለማጣራት ኮዱን ማሻሻል ይችላሉ። በተጨማሪም፣ እንደ መብራት ማብራት ወይም ሌሎች መሳሪያዎችን መቆጣጠር ባሉ ልዩ የቁልፍ ጭነቶች ላይ ተመስርተው እርምጃዎችን ለማከናወን ኮዱን ማስተካከል ይችላሉ።
የቪዲዮ ጊዜ ምልክቶች
- 00:00 መጀመሪያ
- 00:56 ሃርድዌር ተብራርቷል
- 04:26 የወልና አገናኝ ተብራርቷል
- 05:20 ኮድ ተብራርቷል
- 12:27 የኮድ መቀየር ማሳያ
/*
* Original code and library from - http://arcfn.com
*
* This code decodes keys of Black IR remote and White IR remote
* 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 either as PCB or bare module. See video for details
*
* Modified/Written by Ahmad Shamshiri
* on July 28, 2018 at 22:48 in Ajax, Ontario, Canada
* for Robojax.com
* Watch video instruction for this code:https://youtu.be/muAkBQb24NI
* 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 = 0;// if receiver is PCB set to 1, if not set to 0. See video for details
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 labels 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 Remote Decoder");
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
//Serial.println(results.value, HEX);
robojaxValidateCode(results.value);// used the "robojaxValidateCode" below
irrecv.resume(); // Receive the next value
}
delay(100);
}
/*
* function: robojaxValidateCode
* validates the remote code and prints 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 Black remote code
for(int i=0; i< sizeof(whiteRemote)/sizeof(int); i++)
{
if(whiteRemote[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(whiteRemoteKey[i]);
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 Black remote code
for(int i=0; i< sizeof(whiteRemotePCB)/sizeof(int); i++)
{
if(whiteRemotePCB[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(whiteRemoteKey[i]);
found=1;
}// if matched
}// for
}else if(type =='B' && PCB){
// Robojax IR White 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]);
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)
{
if(blackRemoteKey[i] == "OK"){
digitalWrite(9,HIGH);
}
Serial.print("Key pressed:");
Serial.println(blackRemoteKey[i]);
found=1;
}// if matched
}// for
}// else
if(!found){
if(cd !=0xFFFFFFFF)
{
Serial.println("Key unknown");
}
}// found
}
እንደሚያስፈልግዎት ይችላል
-
አማዞን
-
ኢቤይ
ምንጮች እና ምንጮች
አሁን ምንም ምንጮች የለም።
ፋይሎች📁
አንድ ፋይል የለም።