આર્ડુઈનો સાથે બ્લેક અથવા વ્હાઈટ રિમોટ્સને ડીકોડ કરવું
આ ટ્યુટોરિયલમાં, આપણે Arduino અને IR રીસીવરનો ઉપયોગ કરીને કાળા અને સફેદ ઇન્ફ્રારેડ રિમોટમાંથી કીઓ કેવી રીતે ડીકોડ કરવી તે શીખીશું. આ પ્રોજેક્ટના અંત સુધીમાં, તમે નક્કી કરી શકશો કે રિમોટ પર કઈ કી દબાવવામાં આવી છે અને તે માહિતી સીરિયલ મોનિટર પર પ્રદર્શિત કરી શકશો. આ તમારી પાસે હોય તેવા કોઈપણ રિમોટ, જેમ કે ટીવી અથવા અન્ય ઉપકરણો (વિડિયોમાં 01:00 પર) સાથે ઉપકરણોને નિયંત્રિત કરવા માટે ઉપયોગી થઈ શકે છે.
અમે એક સરળ સેટઅપનો ઉપયોગ કરીશું જેમાં Arduino, ઇન્ફ્રારેડ રીસીવર મોડ્યુલ અને સિગ્નલો ડીકોડ કરવા માટે જરૂરી કોડનો સમાવેશ થાય છે. ઇન્ફ્રારેડ રીસીવર રિમોટમાંથી સિગ્નલો કેપ્ચર કરશે, અને Arduino તે સિગ્નલોનું અર્થઘટન કરીને નક્કી કરશે કે કઈ બટન દબાવવામાં આવી છે. આ પ્રોજેક્ટ સીધો છે અને વિવિધ રિમોટ કંટ્રોલ માટે અનુકૂળ કરી શકાય છે.
હાર્ડવેર સમજાવ્યું
આ પ્રોજેક્ટ માટેના મુખ્ય ઘટકોમાં Arduino બોર્ડ અને IR રીસીવર મોડ્યુલનો સમાવેશ થાય છે, જે સામાન્ય રીતે VS1838B તરીકે નિયુક્ત કરવામાં આવે છે. Arduino મુખ્ય નિયંત્રક તરીકે સેવા આપશે, જે રિમોટમાંથી પ્રાપ્ત સિગ્નલો પર પ્રક્રિયા કરતા કોડને ચલાવે છે. IR રીસીવર રિમોટ કંટ્રોલ દ્વારા ઉત્સર્જિત ઇન્ફ્રારેડ સિગ્નલોને કેપ્ચર કરે છે અને તેમને એવા ફોર્મેટમાં રૂપાંતરિત કરે છે જે Arduino સમજી શકે.
VS1838B 2.7V થી 5.5V ની વોલ્ટેજ રેન્જમાં કાર્ય કરે છે, જે તેને મોટાભાગના Arduino બોર્ડ સાથે સુસંગત બનાવે છે. તે પરિસ્થિતિઓના આધારે 10 થી 15 મીટરના અંતરથી સિગ્નલો શોધી શકે છે. ઇન્ફ્રારેડ રીસીવર એક ડિજિટલ સિગ્નલ આઉટપુટ કરે છે જે દર્શાવે છે કે રિમોટ પર કઈ બટન દબાવવામાં આવી છે, જે Arduino ને તે મુજબ પ્રતિસાદ આપવા દે છે.
ડેટાશીટ વિગતો
| ઉત્પાદક | VS1838B |
|---|---|
| ભાગ નંબર | VS1838B |
| લોજિક/IO વોલ્ટેજ | 2.7–5.5 V |
| સપ્લાય વોલ્ટેજ | 5 V |
| આઉટપુટ કરંટ (પ્રતિ ચેનલ) | 1.5 mA |
| પ્રાપ્તિ અંતર | 10–15 m |
| ઇનપુટ ફ્રીક્વન્સી | 38 kHz |
| ક્વિસેન્ટ કરંટ | 0.8 mA (typ.) |
| કાર્યક્ષમતાનો કોણ | 70 ડિગ્રી |
| પેકેજ | TO-220 |
- IR રીસીવરને નુકસાન ન થાય તે માટે યોગ્ય વોલ્ટેજ સપ્લાયની ખાતરી કરો.
- રીસીવર મોડ્યુલને સીધા સૂર્યપ્રકાશ અથવા મજબૂત ઇન્ફ્રારેડ સ્ત્રોતોથી દૂર રાખો.
- સિગ્નલ રીડિંગ્સને સ્થિર કરવા માટે જરૂર પડે તો પુલ-અપ રેઝિસ્ટરનો ઉપયોગ કરો.
- અસ્થિર સિગ્નલો અટકાવવા માટે વાયરિંગ કનેક્શન સુરક્ષિત હોવા જોઈએ.
- સેટઅપ સાથે કેટલી સારી રીતે કાર્ય કરે છે તે જોવા માટે વિવિધ રિમોટનું પરીક્ષણ કરો.
-
Deconding-IR-remote-main-1
વાયરિંગ સૂચનાઓ
IR રીસીવરને Arduino સાથે વાયર કરવા માટે, પહેલા IR રીસીવરના VCC પિનને Arduino પરના 5V પિન સાથે જોડો. આગળ, રીસીવરના GND પિનને Arduino પરના એક GND પિન સાથે જોડો. છેલ્લે, IR રીસીવરના સિગ્નલ પિન (ઘણીવાર SIG અથવા OUT તરીકે લેબલ થયેલ) ને Arduino પરના ડિજિટલ પિન 11 સાથે જોડો.
ખાતરી કરો કે કનેક્શન સુરક્ષિત છે, કારણ કે છૂટા કનેક્શન અસંગત રીડિંગ્સ તરફ દોરી શકે છે. જો તમે IR રીસીવરના PCB સંસ્કરણ અથવા બેર મોડ્યુલનો ઉપયોગ કરી રહ્યા છો, તો વાયરિંગ સમાન રહે છે; ફક્ત ખાતરી કરો કે તમે મોડ્યુલના લેબલિંગ મુજબ પિનને યોગ્ય રીતે ઓળખો છો (વિડિયોમાં 03:15 પર).
IRremote લાઇબ્રેરી ઇન્સ્ટોલ કરો
Arduino IDE લોંચ કરો. (તમે Arduino.cc થી મફતમાં મેળવો છો) ડાબી બાજુના લાઇબ્રેરી આઇકન પર ક્લિક કરો અને IRremote શોધો અને તેને ઇન્સ્ટોલ કરવા માટે "Install" પર ક્લિક કરો.
#include <IRremote.h>
કોડ ઉદાહરણો અને વોકથ્રુ
int RECV_PIN = 11;
const char type ='W'; // W સફેદ માટે, B કાળા માટે
const boolean PCB = 0; // 1 PCB માટે, 0 બેર મોડ્યુલ માટે
IRrecv irrecv(RECV_PIN);
આ ભાગમાં, અમે RECV_PIN ને 11 પર સેટ કરીને IR રીસીવર માટે પિન નંબર વ્યાખ્યાયિત કરીએ છીએ. અમે type ચલ સાથે ઉપયોગમાં લેવાતા રિમોટનો પ્રકાર પણ સ્પષ્ટ કરીએ છીએ, જ્યાં 'W' સફેદ રિમોટ દર્શાવે છે અને 'B' કાળા રિમોટ દર્શાવે છે. PCB ચલ રીસીવરના PCB સંસ્કરણ અથવા બેર મોડ્યુલના ઉપયોગ વચ્ચે તફાવત કરે છે.
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // રીસીવર શરૂ કરો
}
setup() ફંક્શનમાં, અમે 9600 બોડ પર સીરિયલ કમ્યુનિકેશન શરૂ કરીએ છીએ અને IR રીસીવર શરૂ કરીએ છીએ. સીરિયલ મોનિટર પર આઉટપુટ મોનિટર કરવા માટે આ નિર્ણાયક છે, જે આપણને જોવા દે છે કે કઈ કી દબાવવામાં આવી છે.
void loop() {
if (irrecv.decode(&results)) {
robojaxValidateCode(results.value); // પ્રાપ્ત કોડ માન્ય કરો
irrecv.resume(); // આગલું મૂલ્ય પ્રાપ્ત કરો
}
delay(100);
}મુખ્ય loop() તપાસે છે કે IR રીસીવરે સિગ્નલ ડીકોડ કર્યું છે કે નહીં. જો તેણે કર્યું હોય, તો તે પ્રાપ્ત મૂલ્ય પર પ્રક્રિયા કરવા માટે robojaxValidateCode ફંક્શનને કૉલ કરે છે અને પછી આગલા સિગ્નલ માટે સાંભળવાનું ફરી શરૂ કરે છે. delay(100) ખાતરી કરે છે કે લૂપ ખૂબ ઝડપથી ન ચાલે, જે સિગ્નલ પ્રોસેસિંગમાં મદદ કરી શકે છે.
પ્રદર્શન / શું અપેક્ષા રાખવી
એકવાર બધું સેટ થઈ જાય અને કોડ અપલોડ થઈ જાય, પછી આઉટપુટ જોવા માટે સીરિયલ મોનિટર ખોલો. જ્યારે તમે રિમોટ પર કોઈ કી દબાવો છો, ત્યારે તમારે સંબંધિત કીનું નામ મોનિટર પર પ્રદર્શિત થતું જોવું જોઈએ. જો કી ઓળખાતી નથી, તો તે "કી અજ્ઞાત છે." પ્રદર્શિત કરશે. ખાતરી કરો કે કીને મજબૂતીથી દબાવો છો, કારણ કે ઢીલા જોડાણો ખોટા રીડિંગ્સનું કારણ બની શકે છે (વિડિયોમાં 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
}
તમને જોઈતી વસ્તુઓ
-
Amazon
-
eBay
સંસાધનો અને સંદર્ભો
હજી સુધી કોઈ સંસાધનો નથી.
ફાઇલો📁
કોઈ ફાઇલો ઉપલબ્ધ નથી.