د کوډ کول د تور یا سپین ریموټونو د آردوینو سره
په دې ټیوټوریل کې به موږ زده کړو چې څنګه د تور او سپین انفراریډ ریموټ کنټرولونو کیلي ډیکوډ کړو د 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);
په دې برخه کې، موږ د IR رسیدونکي لپاره د پن شمېره د RECV_PIN سره 11 ټاکو. موږ د کارول شوي ریموټ ډول هم د 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) ډاډ ورکوي چې لوپ ډیر ژر نه ځي، کوم چې د سیګنال پروسس کې مرسته کولی شي.
ښودنه / څه تمه ولرئ
یوځل چې هرڅه تنظیم شي او کوډ اپلوډ شي، سریال مانیټر خلاص کړئ ترڅو آوټ پټ وګورئ. کله چې تاسو په ریموټ کې یو کیلي فشاروئ، تاسو باید په مانیټر کې د اړونده کیلي نوم وګورئ. که چیرې کیلي ونه پیژندل شي، نو دا به "Key unknown" ښکاره کړي. ډاډ ترلاسه کړئ چې کیلي په کلکه فشاروئ، ځکه چې نرۍ اړیکې کولی شي غلط لوستل رامنځته کړي (په ویډیو کې په 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
}
هغه شیان چې تاسو ورته اړتیا لرئ
-
امازون
-
ای بی
سرچینې او حوالې
تر اوسه هیڅ سرچینې نشته.
فایلونه📁
هیڅ فایل شتون نلري.