مقدمه
در این آموزش با پروتکل IR آشنا میشویم و چگونگی کار با ماژول گیرندهی IR را میآموزیم. در ابتدا به معرفی این سامانه و نحوه عملکرد آن میپردازیم. سپس نحوه راه اندازی و کار با ماژول آن را خواهیم دید. در نهایت نیز چند مثال کاربری را ارائه خواهیم داد.
آنچه در این آموزش یاد می گیرید
- پروتکل IR چیست و چگونه کار میکند
- آشنایی با ماژولهایگیرندهی IR
- راه اندازی ماژول توسط آردوینو
- کنترل صفحه کلید به وسیلهی IR ریموت کنترل
آشنایی با پروتکل IR
این ماژولها دارای 3 پین هستند که به ترتیب مربوط به VOUT ، VDD و Ground میباشند. به همین دلیل استفاده از آنها در مدار بسیار ساده است.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
کد مربوط به هر دکمه ریموت را پیدا کنید
در این قسمت میخواهیم با استفاده از آردوینو و یک فرستنده و گیرندهی IR ارتباط بین آنها را راهاندازی کنیم. برای اینکار ابتدا نیاز داریم تا کد مربوط به هر دکمهی کنترل را بدانیم. با فشرده شدن هر دکمه سیگنال مشخصی به گیرنده ارسال میشود و گیرنده آن دریافت کرده و در پنجره Serial Monitor نمایش میدهد.
سیم بندی
کد
برای راه اندازی مااژول IR نیاز دارید که کتابخانه مربوط به IR آردینو را نصب کنید. این کتابخانه را از لینک زیر دانلود کرده و در پنجرهی Sketch گزینه Include library را باز کرده و IR Remote.h را انتخاب کنید.
البته ممکن است این کتابخانه به صورت پیشفرض در فایل کتابخانههای آردوینوی شما موجود باشد. که در این صورت دیگر نیازی به نصب آن ندارید.
/*
* IR read codes
* by Hanie kiani
* https://electropeak.com/learn/
*/
#include <IRremote.h> //including infrared remote header file
int RECV_PIN = 7; // the pin where you connect the output pin of IR sensor
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop()
{
if (irrecv.decode(&results))// Returns 0 if no data ready, 1 if data ready.
{
int result = results.value;// Results of decoding are stored in result.value
Serial.println(" ");
Serial.print("Code: ");
Serial.println(results.value); //prints the value a a button press
Serial.println(" ");
irrecv.resume(); // Restart the ISR state machine and Receive the next value
}
}
بیایید با توابع مهم IR در کد آشنا شویم:
int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
پینی که خروجی ماژول گیرنده را به آن متصل کردیم مشخص کرده و آن را به آردوینو معرفی میکنیم.
irrecv.enableIRIn();
شروع به دریافت سیگنال IR
if (irrecv.decode(&results))
سیگنال IR دریافت شده را دیکد میکند و آن را در متغیر results ذخیره میکند. در صورتی که سیگنالی دریافت نشود صفر برمیگرداند.
irrecv.resume();
مقادیر results قبلی را صفر کرده و دوباره منتظر دریافت سیگنال جدید میشود.
مثال 1: با استفاده از ریموت کنترل IR اشیاء را کنترل کنید
پس از اینکه کد هر دکمه را پیدا کردیم، میتوانیم از آن برای کنترل دستورات استفاده کنیم. در این مثال یک ال ای دی RGB را به آردوینو متصل کرده و با کمک ریموت کنترل رنگ آن را تغیر میدهیم. برای اینکار چند دکمهی مشخص روی کنترل را در نظر گرفته و کد آنها را ذخیره میکنیم. در این مثال از دکمههای 1 تا 3 کنترل استفاده شده است. سپس به هر دکمه رنگ مشخصی را نسبت میدهیم. در نهایت با فشردن هر کدام از کلیدهای 1 تا 3، ال ای دی تغییر رنگ میدهد .
برای استفاده از رنگ های بیشتر میتوانید عدد مربوط به هر رنگ را اینجا پیدا کنید.
سیم بندی
Code
#include <IRremote.h>
const int RECV_PIN = 6;
int bluePin = 12;
int redPin = 9;
int greenPin = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
}
void loop(){
if (irrecv.decode(&results)){
int value = results.value;
Serial.println(value);
switch(value){
case 12495: //Keypad button "1"
//set color yellow
analogWrite(redPin, 0x8B);
analogWrite(greenPin, 0x8B);
analogWrite(bluePin, 0x8B);
break;
case 6375: //Keypad button "2"
//set color yellow
analogWrite(redPin, 0xFF);
analogWrite(greenPin, 0x00);
analogWrite(bluePin, 0x00);
break;
case 539: //Keypad button "3"
//set color red
analogWrite(redPin, 0x00);
analogWrite(greenPin, 0x00);
analogWrite(bluePin, 0xFF);
break;
case 25979: //Keypad button "4"
//set color light green
analogWrite(redPin, 0x50);
analogWrite(greenPin, 0x00);
analogWrite(bluePin, 0xAE);
break;
}
irrecv.resume();
}
}
مثال 2: با ریموت کنترل IR سوپرماریو بازی کنید!
سیم بندی
کد
در این قسمت برای کنترل کیبرد به کتابخانهی Keyboard.h نیاز دارید که میتوانید آن را از لینک زیر دریافت کنید:
/*
* IR REMOTE CONTROL
* by Hanie kiani
* https://electropeak.com/learn/
*/
#include <IRremote.h>
#include <Keyboard.h>
int RECV_PIN = 6;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
Keyboard.begin();
}
void loop() {
if (irrecv.decode(&results))
{ int value = results.value;
Serial.println(value);
switch(value)
{
//Backward key is used for left key operation
case 8925: Keyboard.press(KEY_LEFT_ARROW); //left key
delay(100);
Keyboard.releaseAll();
break;
//Forward Key is used for right key operation
case 765: Keyboard.press(KEY_RIGHT_ARROW); //right key
delay(100);
Keyboard.releaseAll();
//Forward Key is used for right key operation
case -15811: Keyboard.press(KEY_UP_ARROW); //up key
delay(100);
Keyboard.releaseAll();
break;
}
irrecv.resume(); // Receive the next value
}
}
نکته
یک گام جلوتر
- سعی کنید با استفاده از IR ریموت کنترل یک ربات را کنترل کنید.
Comments (16)
سلام مرسی بابت مطالب مفیدتون
چجوری میشه فهمید یه ریموت فرستنده مادون قرمز چه فرکانسی تولید میکنه
من یه فرستنده گیرنده دارم که سنسور گیرندش گم شده و نمیدونم باید با چه نوع گیرنده ای ار و با چه فرکانسی جایگزینش کنم
ممنون میشم راهنمایی کنید
سلام
متسفانه تا به حال با این مشکل مواجه نشده ام اما احتمالا می توانید با سرچ مدل ریموت فرستنده خود، فرکانس موج مادون قرمز تولید شده آن را پیدا کنید.
سلام ممنون بابت مطالب خوبتون ولی یه سوال چهجور میشه یک امواج مادون قرمز رو باار دوینو ارسال کرد؟ یعنی از آردوینو به گیرنده
باسلام. امیدوارم آموزش براتون مفید بوده باشه. بله، می توانید یک فرستنده ی مادون قرمز را به برد آردینو خود وصل کرده و از آن به عنوان فرستده ی امواج استفاده کنید. برای راهنمایی بیشتر به لینک زیر مراجعه کنید.
https://learn.adafruit.com/using-an-infrared-library/sending-ir-codes
تشکر فراوان جناب مهندس
عالی بود من دنبال ی دستور بودم ک شما اینجا بکار بردید .قشنگ و واضح بود
عالی بود.????
نظر لطفتان است. خوشحالیم که کمک کننده بوده.
سلام
Infrared/IR Remote Control Extender/IR Repeater Kit/Cable
يه چنين چيزي رو ميتونم ايران پيدا كنم
مرسي
سلام
میتونید به لینک زیر سر بزنید. خودتون هم همین عبارتی که فرمودید رو با کلمه خرید جست و جو کنید موارد مشابهی رو میتونید ببینید.
“https://malltina.com/product/mlt-177175”
سلام این کد اشتباه نوشته شده و کار نمیکنه و تو خود سایت آردوینو کلی کامنت منفی خورده لطفا کد رو اصلاح کنید
ممنون
سلام. ممنون از نظرتون.
کدهای مختلفی تو این آموزش گذاشته شده، منظور شما کدوم کده؟
کدهایی هم که در سایت قرار میگیره همگی از نظر کارکرد تست شدن.
سلام خسته نباشید
من این ماژول رو با nodemcu راه اندازی کردم تا فاصله نیم متری همه چی درست کار میکنه اما وقتی فاصله از نیم متر بیشتر میشه کدهای مربوط به هر کلید تغییر میکنند.
سلام.
برد ماژول فرستنده گیرنده IR حدود 4 تا 8 متر هست، اگر در فاصله کوتاه مشکلی نداره و کار میکنه اما از یه فاصلهای ارسال اطلاعات با مشکل روبهرو میشه احتمالش هست که ماژول گیرندتون دچار اشکال باشه.
سلام وقت بخیر ، بالات اطلاعات مفیدتون سپاس.
یک سوال داشتم خدمتتون، من تمامی کدهای یک کنترل رو یاداشت کردم. ولی میخوام توی یک پروژه استفاده کنم که هر کلید بصورت لچ عمل کنه، یعنی یک بار که یک دکمه رو فشار دادم خروجی یک رله رو روشن کنه تا زمانی که دوباره همون کلید زده بشه. ممنون میشم اگه راهنمایی کنید.
با سلام
ممنون بابت نظرتون.
باید یک کد بنویسید که به صورت چند شرط که هر کدام از این کد ها را بررسی بکند و یک متغییر bool را معکوس بکند و این متغییر را برای تنظیم خروجی پایه هایی که به رله ها رفته است استفاده بکنید.
حتما پس از چک کردن کد دریافتی و پردازش یک دیلی قرار بدهید تا لوپ مجدد نخورد.
سلام . از مهندسین کسسسییی رو میخوام که برامون چشمی بالای درب اتوماتیک شیشه ای کشویی که هست اونو بسازه .در طول دو الی سه متر رو و به شعاع یک و نیم رو سنس کنه
تا جایی که اطلاع دارم ایی ار هست و با فرستنده گیرنده معمولی ویا فرستنده گیرنده تلوزیون درست میشه
بیزحمت با ایمیل اطلاع دهید abbaskhani1360@gmail.com
درمورد چشمی درب اتوماتیک اگر میخواهید برامون درست کنید ۰۹۱۴۴۱۳۱۷۳۰اطلاع بدین