আরডুইনো দিয়ে ব্ল্যাক বা হোয়াইট রিমোট ডিকোড করা
এই টিউটোরিয়ালে, আমরা শিখব কীভাবে একটি Arduino এবং একটি IR রিসিভার ব্যবহার করে সাদা এবং কালো ইনফ্রারেড রিমোটের কীগুলো ডিকোড করা যায়। এই প্রজেক্টের শেষে, আপনি নির্ধারণ করতে পারবেন রিমোটের কোন কী চাপা হয়েছে এবং সেই তথ্য সিরিয়াল মনিটরে প্রদর্শন করতে পারবেন। এটি আপনার কাছে থাকা যেকোনো রিমোট, যেমন টিভি বা অন্যান্য যন্ত্রপাতি (ভিডিওতে ০১:০০ সময়ে) দিয়ে ডিভাইস নিয়ন্ত্রণের জন্য উপযোগী হতে পারে।
আমরা একটি সহজ সেটআপ ব্যবহার করব যাতে একটি Arduino, একটি ইনফ্রারেড রিসিভার মডিউল এবং সিগন্যাল ডিকোড করার জন্য প্রয়োজনীয় কোড অন্তর্ভুক্ত থাকবে। ইনফ্রারেড রিসিভার রিমোট থেকে সিগন্যাল ক্যাপচার করবে, এবং Arduino সেই সিগন্যালগুলো ব্যাখ্যা করে নির্ধারণ করবে কোন বোতাম চাপা হয়েছে। এই প্রজেক্টটি সহজবোধ্য এবং বিভিন্ন রিমোট কন্ট্রোলের জন্য অভিযোজিত করা যেতে পারে।
হার্ডওয়্যার ব্যাখ্যা
এই প্রজেক্টের প্রাথমিক উপাদানগুলির মধ্যে রয়েছে Arduino বোর্ড এবং একটি IR রিসিভার মডিউল, যা সাধারণত VS1838B নামে পরিচিত। Arduino প্রধান কন্ট্রোলার হিসেবে কাজ করবে, রিমোট থেকে প্রাপ্ত সিগন্যাল প্রক্রিয়াকরণকারী কোডটি কার্যকর করবে। IR রিসিভার রিমোট কন্ট্রোল দ্বারা নির্গত ইনফ্রারেড সিগন্যাল ক্যাপচার করে এবং সেগুলোকে এমন একটি ফরম্যাটে রূপান্তর করে যা Arduino বুঝতে পারে।
VS1838B 2.7V থেকে 5.5V ভোল্টেজ রেঞ্জে কাজ করে, যা বেশিরভাগ Arduino বোর্ডের সাথে সামঞ্জস্যপূর্ণ। এটি অবস্থার উপর নির্ভর করে ১০ থেকে ১৫ মিটার দূরত্ব থেকে সিগন্যাল শনাক্ত করতে পারে। ইনফ্রারেড রিসিভার একটি ডিজিটাল সিগন্যাল আউটপুট করে যা নির্দেশ করে রিমোটের কোন বোতাম চাপা হয়েছে, যার ফলে Arduino সেই অনুযায়ী সাড়া দিতে পারে।
ডেটাশিট বিবরণ
| প্রস্তুতকারক | VS1838B |
|---|---|
| পার্ট নম্বর | VS1838B |
| লজিক/আইও ভোল্টেজ | ২.৭–৫.৫ ভি |
| সাপ্লাই ভোল্টেজ | ৫ ভি |
| আউটপুট কারেন্ট (প্রতি চ্যানেলে) | ১.৫ এমএ |
| গ্রহণের দূরত্ব | ১০–১৫ মি |
| ইনপুট ফ্রিকোয়েন্সি | ৩৮ কিলোহার্টজ |
| কুইসেন্ট কারেন্ট | ০.৮ এমএ (সাধারণ) |
| কাজের কোণ | ৭০ ডিগ্রি |
| প্যাকেজ | TO-220 |
- IR রিসিভারের ক্ষতি এড়াতে সঠিক ভোল্টেজ সাপ্লাই নিশ্চিত করুন।
- রিসিভার মডিউলটি সরাসরি সূর্যের আলো বা শক্তিশালী ইনফ্রারেড উৎস থেকে দূরে রাখুন।
- সিগন্যাল রিডিং স্থিতিশীল করতে প্রয়োজন হলে পুল-আপ রেজিস্টর ব্যবহার করুন।
- অস্থির সিগন্যাল প্রতিরোধ করতে তারের সংযোগ নিরাপদ হওয়া উচিত।
- বিভিন্ন রিমোট পরীক্ষা করে দেখুন সেগুলো সেটআপের সাথে কতটা ভালো কাজ করে।
-
Deconding-IR-remote-main-1
ওয়্যারিং নির্দেশাবলী
IR রিসিভারটি Arduino-তে ওয়্যার করতে, প্রথমে IR রিসিভারের VCC পিনটি Arduino-এর 5V পিনের সাথে সংযুক্ত করুন। এরপর, রিসিভারের GND পিনটি Arduino-এর একটি GND পিনের সাথে সংযুক্ত করুন। সবশেষে, IR রিসিভারের সিগন্যাল পিনটি (প্রায়ই SIG বা OUT হিসেবে চিহ্নিত) Arduino-এর ডিজিটাল পিন ১১-এর সাথে সংযুক্ত করুন।
সংযোগগুলো নিরাপদ আছে তা নিশ্চিত করুন, কারণ আলগা সংযোগের কারণে অসামঞ্জস্যপূর্ণ রিডিং হতে পারে। আপনি যদি IR রিসিভারের PCB সংস্করণ বা একটি খালি মডিউল ব্যবহার করেন, তাহলে ওয়্যারিং একই থাকে; শুধু মডিউলের লেবেল অনুযায়ী পিনগুলো সঠিকভাবে শনাক্ত করুন (ভিডিওতে ০৩:১৫ সময়ে)।
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 দিয়ে IR রিসিভারের পিন নম্বর ১১ হিসেবে সংজ্ঞায়িত করি। আমরা type ভেরিয়েবলের মাধ্যমে ব্যবহৃত রিমোটের ধরনও নির্দিষ্ট করি, যেখানে 'W' সাদা রিমোট এবং 'B' কালো রিমোট নির্দেশ করে। PCB ভেরিয়েবলটি রিসিভারের PCB সংস্করণ বা খালি মডিউল ব্যবহারের মধ্যে পার্থক্য করে।
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // রিসিভার শুরু করুন
}
setup() ফাংশনে, আমরা ৯৬০০ বাউডে সিরিয়াল কমিউনিকেশন শুরু করি এবং IR রিসিভার চালু করি। সিরিয়াল মনিটরে আউটপুট পর্যবেক্ষণের জন্য এটি অত্যন্ত গুরুত্বপূর্ণ, যা আমাদের দেখতে দেয় কোন কী চাপা হয়েছে।
void loop() {
if (irrecv.decode(&results)) {
robojaxValidateCode(results.value); // প্রাপ্ত কোড যাচাই করুন
irrecv.resume(); // পরবর্তী মান গ্রহণ করুন
}
delay(100);
}প্রধান loop() ফাংশনটি পরীক্ষা করে যে IR রিসিভার একটি সিগন্যাল ডিকোড করেছে কিনা। যদি করে থাকে, তাহলে এটি প্রাপ্ত মান প্রক্রিয়া করার জন্য robojaxValidateCode ফাংশনটি কল করে এবং তারপর পরবর্তী সিগন্যাল শোনার জন্য আবার প্রস্তুত হয়। delay(100) নিশ্চিত করে যে লুপটি খুব দ্রুত না চলে, যা সিগন্যাল প্রক্রিয়াকরণে সাহায্য করতে পারে।
প্রদর্শন / কী আশা করবেন
একবার সবকিছু সেট আপ হয়ে গেলে এবং কোড আপলোড করা হলে, আউটপুট দেখতে সিরিয়াল মনিটর খুলুন। যখন আপনি রিমোটের একটি কী চাপবেন, তখন সংশ্লিষ্ট কী-এর নাম মনিটরে প্রদর্শিত হওয়া উচিত। যদি কীটি চেনা না যায়, তাহলে এটি "Key unknown" প্রদর্শন করবে। নিশ্চিত করুন যে আপনি কীগুলি শক্তভাবে চাপছেন, কারণ আলগা সংযোগের কারণে ভুল রিডিং হতে পারে (ভিডিওতে ০৫:৪০-এ)।
যদি আপনি একটি কী ক্রমাগত চাপেন, তাহলে আউটপুটে বারবার মান বা হেক্সাডেসিমেল কোড দেখা যেতে পারে। এই আচরণটি স্বাভাবিক, এবং আপনি চাইলে এই ক্রমাগত সিগন্যালগুলি ফিল্টার করার জন্য কোডটি পরিবর্তন করতে পারেন। অতিরিক্তভাবে, আপনি নির্দিষ্ট কী প্রেসের উপর ভিত্তি করে কাজ করার জন্য কোডটি সামঞ্জস্য করতে পারেন, যেমন লাইট চালু করা বা অন্যান্য ডিভাইস নিয়ন্ত্রণ করা।
ভিডিও টাইমস্ট্যাম্প
- ০০:০০ শুরু
- ০০:৫৬ হার্ডওয়্যার ব্যাখ্যা করা হয়েছে
- ০৪:২৬ ওয়্যারিং ব্যাখ্যা করা হয়েছে
- ০৫:২০ কোড ব্যাখ্যা করা হয়েছে
- ১২:২৭ কোড ডিকোডিংয়ের প্রদর্শন
/*
* 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
}
আপনাকে যা প্রয়োজন হতে পারে
-
অ্যামাজন
-
ইবে
সম্পদ ও রেফারেন্সসমূহ
এখনো কোনো সম্পদ নেই।
ফাইলসমূহ📁
কোনো ফাইল উপলব্ধ নেই।