کنترلکننده مادون قرمز (IR) عملکرد دستگاههایی مانند لوازم خانگی و ماشینهای اداری را بصورت بیسیم با انتقال سیگنالی شامل پالسهای نور مادون قرمز کنترل میکند.
در این مقاله یاد میگیریم چگونه یک سنسور مادون قرمز، سیگنالهای مادون قرمز از یک کنترل از راه دور را شناسایی و کدهای سیگنال متناظر را بر روی یک LCD نمایش داده، LEDها را کنترل و متن را با توجه به سیگنالهای فرستادهشده نمایش میدهد. یک LED ساطعکننده مادون قرمز و سنسور مادون قرمز برای ارسال و دریافت سیگنالهای مادون قرمز بکاربرده میشوند. هم چنین با یک جفت LED فرستنده و گیرنده مادون قرمز، با اندازهگیری فاصله بین فرستنده و گیرنده، یک آشکارساز حرکت را ایجاد میکنیم.
قطعات مورد نیاز هم در لیست زیر ارائه شده اند :
- آردوینو UNO و برد بورد
- سنسور مادون قرمز: VS1838B
- کنترل از راه دور مادون قرمز
- LED ساطعکننده مادون قرمز
- گیرنده مادون قرمز
- نمایشگر LCD: 16×4
- باس I2C برای نمایشگر LCD
- مقاومتها: 2 تا 220 اهم و یک 10 کیلو اهم
- LED : سه عدد
کنترل کننده مادون قرمز با آردوینو
کنترلکننده مادون قرمز (IR) عملکرد دستگاههایی مانند لوازم خانگی و ماشینهای اداری را بصورت بیسیم با انتقال سیگنالی شامل پالسهای نور مادون قرمز کنترل میکند. با فشردن دکمه کنترل از راه دور، سنسور مادون قرمز سیگنالی را دریافت میکند که برای انجام عمل مناسب و متناظر با دکمه کنترل از راه دور دیکد میشود. برای مثال، اگر نمایش باینری سیگنال دکمه “power on” بصورت B011101 باشد، سیگنال مادون قرمز پالسی مشابه شکل 1 خواهد بود. طول موج مادون قرمز برای چشم انسان قابل مشاهده نیست، اما میتوان یک سیگنال کنترل از راه دور را از طریق دوربین تلفن همراه مشاهده کرد.
کتابخانه IRremote طراحیشده توسط Ken Shirriff برای دستورات با یک سنسور IR پیشنهاد میشود. کتابخانه IRremote در IDE آردوینو موجود است و با استفاده از سومین روش توضیح داده شده در مقالات قبلی این دانشنامه نصب میشود. اتصالات سنسور IR در جدول 1 بیان شدهاند.
کد زیر یک سیگنال مادون قرمز را میخواند و کد سیگنال هگزادسیمال مرتبط با هر دکمه از کنترل از راه دور مادون قرمز را برای نشان دادن استفاده از سنسور مادون قرمز VS1838B نمایش میدهد.
#include // include IRremote library
int IRpin = 6; // IR sensor pin
IRrecv irrecv(IRpin); // associate irrecv with IRremote library
decode_results reading; // IRremote reading
void setup()
{
Serial.begin(9600); // set baud rate for Serial Monitor
irrecv.enableIRIn(); // initialise the IR receiver
}
void loop()
{
if(irrecv.decode(&reading)) // read the infrared signal
{
Serial.print("0x"); // print leading 0x for hexadecimal
Serial.println(reading.value, HEX); // print HEX code to Serial Monitor
irrecv.resume(); // receive the next infrared signal
}
delay(1000); // delay before next remote control input
}
با مشخص شدن سیگنال مادون قرمز پالسی برای دکمهها، هر دکمه با عملکرد خاصی مرتبط میشود. در کد پایین، سه دکمه برای روشن کردن یکی از سه LED مشخص شدهاست (شکل 2 را مشاهده کنید).
#include // include IRremote library
int IRpin = 6; // IR sensor pin
IRrecv irrecv(IRpin); // associate irrecv with IRremote library
decode_results reading; // IRremote reading
int redLED = 8;
int amberLED = 9; // LED pins
int greenLED = 10;
int color;
void setup()
{
irrecv.enableIRIn(); // initialise the IR receiver
pinMode(redLED, OUTPUT); // define LED pins as output
pinMode(amberLED, OUTPUT);
pinMode(greenLED, OUTPUT);
}
void loop()
{
if(irrecv.decode(&reading)) // read the IR signal
{
switch(reading.value) // switch ... case for button signals
{ // associate IR codes with LED pins
case 0xFF30CF: color = redLED; break;
case 0xFF18E7: color = amberLED; break;
case 0xFF7A85: color = greenLED; break;
}
digitalWrite(color,HIGH); // turn on and off corresponding LED
delay(1000);
digitalWrite(color,LOW);
}
irrecv.resume(); // receive the next infrared signal
delay(1000); // delay before next remote control input
}
جدول 1- اتصالات برای سنسور IR و LEDها
قطعه
|
متصل به
|
و متصل به
|
---|---|---|
VCC سنسور IR
|
5 ولت آردوینو
|
|
OUT سنسور IR
|
GND آردوینو
|
|
GND سنسور IR
|
پایه 6 آردوینو
|
|
پایه بلند LED
|
پایههای 8، 9 ، 10 آردوینو
|
|
پایه کوتاه LED
|
مقاومتهای 220 اهمی
|
GND آردوینو
|
سنسور IR و نمایش متن در آردوینو
سنسور IR همچنین میتواند با یک دکمه کنترل از راه دور برای نمایش متن مشخص بر روی یک LCD بکاربرده شود. رشته موجود در کد پایین، ترکیبی از متن و یک عدد است که با تابع String(number) به یک رشته تبدیل میشود. سیگنال مادون قرمز در فرمت هگزادسیمال (HEX) یا دسیمال (DEC) نمایش داده میشود.
#include // include Wire library
#include // include LiquidCrystal_I2C library
#include // include IRremote library
int I2Caddress = 0x3F; // address of I2C bus
int LCDcol = 16; // define the number of LCD columns
int LCDrow = 4; // define the number of LCD rows
// associate lcd with LiquidCrystal_I2C library, define LCD address and size
LiquidCrystal_I2C lcd(I2Caddress,LCDcol,LCDrow);
int IRpin = A0; // IR sensor pin
IRrecv irrecv(IRpin); // associate irrecv with IRremote library
decode_results reading; // IRremote reading
void setup()
{
lcd.init(); // initialise LCD
irrecv.enableIRIn(); // initialise the IR receiver
}
void loop()
{
if(irrecv.decode(&reading)) // read the IR signal
{
translateIR(); // function to map signal to display string
irrecv.resume(); // receive the next infrared signal
delay(1000); // delay before next IR signal
}
}
void translateIR() // function to determine display string
{
switch(reading.value) // switch case rather than a series of if else instructions
{ // string equal to text plus elapsed time
case 0xFF6897: displ("Outcome "+String(millis()/1000)); break;
// string equal to signal in hexadecimal
case 0xFF30CF: displ("Result "+String(reading.value,HEX)); break;
// string equal to signal in decimal
case 0xFF18E7: displ("Event "+String(reading.value,DEC)); break;
default: displ("Not valid"); // default display
}
}
void displ(String s) // function to display string on LCD
{
lcd.print(s); // display string on LCD
delay(2000); // delay 2000ms
lcd.clear(); // clear LCD display and move cursor to zero position
}
I2C با باس LCD جدول 2- اتصالات برای سنسور مادون قرمز و
قطعه
|
متصل به
|
قطعه
|
متصل به
|
---|---|---|---|
I2C باس GND
|
آردوینو GND
|
IR سنسور VCC
|
5 ولت آردوینو
|
I2C باس VCC
|
5 ولت آردوینو
|
IR سنسور OUT
|
پایه A0 آردوینو
|
I2C باس SDA
|
پایه A4 آردوینو
|
IR سنسور GND
|
آردوینو GND
|
I2C باس SCL
|
پایه A5 آردوینو
|
|
|
فرستنده و سنسور مادون قرمز با آردوینو
سیگنالهای مادون قرمز را میتوان با یک LED ساطعکننده IR ارسال و توسط یک سنسور مادون قرمز VS1838B دریافت کرد، دقیقا همانطورکه سیگنال IR توسط یک دستگاه کنترل از راه دور تولید میشود. هنگام استفاده از کتابخانه IRremote، LED ساطعکننده IR باید به پایه 3 PWM آردوینو متصل شود (شکل 4). توجه داشته باشید که بخش بالایی LED ساطعکننده IR باید رو به گیرنده IR بوده و هیچ مانعی بین فرستنده و گیرنده وجود نداشته باشد (جدول 3 را مشاهده کنید). اطلاعات سیگنال در فرمت Sony ارسال میشوند، و طول سیگنال در دستور irsend.sendSony(signal, signal length) گنجانده میشود. برای مثال با توجه به اینکه هر عدد صحیح 4 بیت دارد، سیگنال 0xFF30CF در فرمت هگزادسیمال دارای طول 24 بیت است. این دستورات از تابع () sendSonyبه عنوان یک فرمت نمونه برای انتقال سیگنالها استفاده میکنند، اما فرمتهای دیگر همانند NEC، JVC، RC5 و RC6 در کتابخانه IRremote، گنجانده میشوند (کد زیر را بررسی کنید). برای اطلاعات بیشتر در مورد کدهای IR به www.sbprojects.net/knowledge/ir/index.php مراجعه کنید.
جدول 3- اتصالات برای فرستنده و سنسور مادون قرمز
قطعه
|
متصل به
|
و متصل به
|
---|---|---|
VCC سنسور IR
|
5 ولت آردوینو
|
|
OUT سنسور IR
|
پایه 6 آردوینو
|
|
GND سنسور IR
|
GND آردوینو
|
|
پایه بلند LED ساطعکننده مادون قرمز
|
پایه 3 آردوینو
|
|
پایه کوتاه LED ساطعکننده مادون قرمز
|
مقاومت 220 اهم
|
GND آردوینو
|
دستورات فرستنده IR همراه با گیرنده IR (کد پایین را مشاده کنید) از اولین لیست دستورات این مقاله یا دستورات گیرنده مادون قرمز VS1838B (سومین لیست کدها) استفاده میکند. کدهای سیگنال هگزدسیمال بیانشده تنها مثال هستند.
#include // include IRremote library
long signal[ ] = {0xFF6897, 0xFF30CF, 0xFF18E7, 0xFF7A85, 0xFF10EF};
IRsend irsend; // associate irsend with IRremote library
void setup() // nothing in void setup function
{}
void loop()
{
for (int i=0; i<5; i++) // transmit each of the five signals
{
irsend.sendSony(signal[i], 24); // transmit signal with 24 bit length
delay(1000); // delay 1s between signals
}
}
فرستنده و گیرنده مادون قرمز با آردوینو
ماژولهای سنسور فاصله مادون قرمز شامل یک فرستنده و گیرنده مادون قرمز، و همچنین مدارهای پردازش سیگنال، همانند ماژول TCRT500 هستند (شکل 5). فرستنده مادون قرمز یک LED است که یک سیگنال مادون قرمز با طول موج 980 نانومتر را ساطع میکند و گیرنده مادون قرمز یک فتو دیود است. ماژولهای سنسور فاصله خاص فواصلی بین 10 تا 80 سانتیمتر را اندازهگیری میکنند، درحالیکه جفت گیرنده وفرستنده IR، یک اندازهگیری فاصله ساده بین 10 تا 40 سانتیمتر را انجام میدهند. گیرنده IR دارای یک پوشش مشکی برای جلوگیری از نور مرئی است، در حالیکه فرستنده پوششی شفاف دارد. همانند یک LED، پایههای بلند فرستنده و گیرنده IR آند و سمت صاف کاتد است. توجه داشته باشید که کاتد گیرنده IR به 5 ولت متصل میشود، زیرا یک دیود نوری بایاس معکوس با نور برخوردی هدایت میکند، درحالیکه LED بایاس مستقیم نور را ساطع میکند. مقاومت 10 کیلواهم متصل به گیرنده IR به صورت یک مقاومت پول دان عمل میکند، زیرا گیرنده IR یا دیود نوری در صورت عدم تشخیص نور مادون قرمز هدایت نمیکند (جدول 4 را مشاهده کنید).
جدول 4- اتصالات برای فرستنده و گیرنده مادون قرمز
قطعه
|
متصل به
|
و متصل
|
---|---|---|
پایه کوتاه گیرنده IR
|
5 ولت آردوینو
|
|
پایه بلند گیرنده IR
|
A5 آردوینو
|
|
پایه بلند گیرنده IR
|
مقاومت 10 کیلواهم
|
GND آردوینو
|
پایه بلند LED ساطعکننده IR
|
5 ولت آردوینو
|
|
پایه کوتاه LED ساطعکننده IR
|
مقاومت 220 اهم
|
GND آردوینو
|
ولتاژ خروجی از گیرنده IR با استفاده از ADC آردوینو به مقدار دیجیتال تبدیل میشود. هنگامیکه بالای فرستنده و گیرنده IR روبروی هم قرار میگیرند، مقدار خوانش گیرنده IR میتواند تقریبی از فاصله بین آنها ارایه دهد، چنانکه مقدار خوانش گیرنده IR با کاهش فاصله بطور غیرخطی از 0 تا 1000 افزایش مییابد (شکل 6). اگر فرستنده و گیرنده IR بصورت موازی و نزدیک به یکدیگر قرارداده شوند، سیگنال فرستنده IR از شی هدف در گیرنده IR منعکس میشود و خوانش گیرنده IR دو برابر فاصله تا شی هدف است. در کد زیر، معادلههای تبدیل مقدار خوانش دیجیتال به فاصله بهصورت تجربی برای یک جفت فرستنده و گیرنده IR استخراج شده است. برای یک جفت فرستنده و گیرنده IR از سازنده دیگر ممکن است معادلات متفاوتی موردنیاز باشد.
int IRpin = A5; // IR receiver pin
int reading, dist;
void setup()
{
Serial.begin(9600); // set Serial Monitor baud rate
}
void loop()
{ // reading from IR receiver
reading = analogRead(IRpin); // convert reading to distance
if (reading < 970) dist = 605*pow(reading, -0.53);
else dist = 409 - 0.406 * reading;
Serial.print(reading);Serial.print("\t"); // print reading, tab and
Serial.println(dist); // distance to Serial Monitor
delay(100); // delay between readings
}
از آنجاییکه یک شیء متحرک منجر به تغییر در خوانش گیرنده IR میشود، جفت فرستنده و گیرنده IR میتواند برای تشخیص یک شی در حال حرکت بین فرستنده و گیرنده IR، بکاربرده شود. ماژولهای گیرنده IR برای سیستمهای کنترل از راه دور، همانند TSOP382 شامل یک آشکارساز نوری و یک تقویتکننده با فاصله عملیاتی 45 متر هستند هنگامیکه تنها با 5 ولت تغذیه شوند. عملکرد برخی آشکارسازهای حرکت بدین صورت است که تغییر در سیگنال گیرنده IR میتواند یک هشدار را فعال کند.