مقدمه
مطمئنا تابهحال با کنترلهای تلویزیون کار کردهاید و حداقل چندین کلید را فشردهاید(وجدانن شوخیشم قشنگ نیست بگید اصلا کار نکردیم) و هر کلید هم کار خاص خودش را انجام میدهد بهطورمثال اگر کلید افزایش صدا را انتخابکردهباشید، قاعدتا باید صدای تلویزیون زیاد شود و یا اگر کلید شماره ۳ را انتخابکنید باید شبکه ۳ را نمایش دهد و بهعبارتدیگر هرکدام از این کلیدها یک عمل خاص را انجام میدهند. اگر بخواهیم بهصورت کلیتر به موضوع نگاهکنیم میتوانیم بگوییم که این کنترلها، جهت برقراری ارتباط از راهدور با دستگاه موردنظر هستند که در اینجا دستگاه موردنظر ما تلویزیون است اما اگر کمی گستردهتر به داستان نگاهکنیم میتوانیم کاربردهای بیشتری را برای این کنترلها ذکر کنیم بهطورمثال کنترل ضبط های ماشین، کنترل پنکههای دستی و خود تلوزیونها و … در این مقاله میخواهیم ابتدا به تعریف مادونقرمز بپردازیم و درنهایت یک کنترل تلویزیون را برداریم و ببینیم که چه کدهایی ارسال میکند و آیا میتوانیم ما هم از این کنترل برای کارهای الکترونیکی خود استفادهکنیم یا خیر؟ با ما همراه باشید.
منظور از کارهای الکترونیکی راهاندازی انواع سنسورها و ماژولها و … است که در ادامه با یکدیگر به این موضوع خواهیمپرداخت.
مادون قرمز (IR) چیست؟
“Infrared” یا اشعه مادون قرمز، یك تابش الكترومغناطیسی با طول موج بیشتر از امواج مرئی و كوتاهتر از امواج رادیویی است. انتقال دادهها ازطریق امواج فروسرخ نیز در ابعاد مكانی كوچك و بین دستگاههای كامپیوتری دیجیتال و تلفنهای همراه مورد استفاده قرار میگیرد. اینگونه دستگاهها خود را با استانداردها و قوانینی كه توسط “انجمن دادههای اینفرارد( IrDA )” تطبیق میدهند و كار میكنند. كنترلهای از راهدور و دستگاههای مطابق با استانداردهای IrDA از دیودهای ساطعكنندهی نور یا LED برای ساطعكردن امواج فروسرخ كه توسط یك لنز پلاستیكی داخل نورافكنی كوچك و نازك كارگذاشته شدهاند استفاده میشوند. این نورافكنها، نوسانبندی شدند و وقتی روشن و خاموش میشوند، به تناسب، دادهها را رمزگذاری مینمایند. دستگاه دریافتكنندهی امواج فروسرخ، از یك فتودیود با جنس سیلیكون استفاده میكند تا موج اینفرارد را به جریان الكتریكی تبدیل سازد. دستگاه دریافتكنندهی امواج، تنها به سیگنالهای پالسدهندهایی كه مدام توسط فرستنده یا Transmitter ساخته میشوند، پاسخ میدهد و امواج فروسرخی كه به آرامی از نورهای محدود و كوچكی تغییر حالت میدهند را از صافی مخصوص خود میگذرانند. فناوری اینفرارد در ارتباطات برای استفاده در محلهای كوچكی كه تراكم افراد و جمعیت در آنها بالا است و بلوتوث یا سایر فناوریها قادر به انتقال داده به شكلی مناسب نیستند بسیارمفید بهنظر میرسد.(کار ما هم دقیقا همینه جایی که استفادهاز سایر پروتکلها خیلی مناسب نیست از این تکنولوژی میخواهیم استفادهکنیم) امواج فروسرخ یا Infrared از دیوارها عبور نمیكنند و درنتیجه در كار سایر دستگاههای اتاقهای مجاور دخالت نمینمایند. اینفرارد رایجترین فناوری استفادهشده در كنترلهای از راهدور دستگاههای مختلف است. امواج اینفرارد، نور لازم برای ارتباطات فیبر نوری را فراهم میكنند. این امواج، طول موجی با حداقل میزان انتشار ۱.۳۳ نانومتر و حداكثر میزان پراكنش نور ۱.۵۵ نانومتر دارند و در سیمهای سیلیسیومی بسیار استفاده میشوند اینفرارد برای مبادله اطلاعات بین کامپیوتر و گوشیهمراه استفاده میشود. گوشیهایی که قابلیت اینفرارد را دارند، توسط این دستگاه که به کامپیوتر متصل میشود فایلهای صوتی و تصویری را دریافت میکنند. یکیاز مزایای اینفرارد این است که، اطلاعات بدون سیم منتقل میشود. دستگاه اینفرارد شما را قادر میسازد تا حداکثر به فاصله ۲۰-۳۰ سانتیمتری با دستگاهی که دارای اینفرارد است ارتباط برقرار کند . ذکر این نکته ضروریست که تکنولوژی اینفرارد یک تکنولوژی Face to Face بوده (روبروی هم) و همانند کنترلهای دستگاههای صوتی و تصویری که از فناوری اینفرارد بهره میبرند عمل میکند. فاصله برد آن برای گوشیهای موبایل حداکثر ۳۰سانتیمتر است. خب پساز اینکه یک آشنایی نسبی با نحوهیکار مادون قرمز بدست آوردیم نوبتبه استفاده عملی از این ماژول رسیدهاست. وسایل موردنیاز جهت انجام پروژه راهاندازی ماژول IR RECEIVER:
- کنترل( هر کنترلی که مدنظرتان است چه کنترل ضبط ماشین، تلویزیون و …)
- آردوینو( هر مدلی که در دسترس است اصلا نوع آن مهم نیست)
- سه یا 4 عدد LED (اینم اگه در دسترس نبود اشکالی نداره)
شماتیک راهاندازی ماژول IR RECEIVER با آردوینو
خب پساز اینکه مدار را بهصورتبالا متصل کردیم نیاز است که آنرا برنامهنویسی کنیم برای این کار باید بهصورتزیر عملکنیم. برنامهنویسی ماژول IR RECEIVER با آردوینو این بخش شامل ۳قسمت میباشد:
- قسمت اول: نصب کتابخانه IRremote
- قسمت دوم: نوشتن برنامهای که کدهای هگز هر کنترلی را قادر به دریافتکردن است.
- قسمت سوم: تنظیم کدهای هگز بدست آمده جهت انجام کار موردنظر.
قسمت اول:
برای این قسمت باید بهصورت تصاویری که در ادامه قرار میدهیم عملکنیم.
پساز اینکه نصب کتابخانه به اتمام رسید نوبت به انجام قسمت دوم است.
کد قسمت دوم
#include <IRremote.h> const int RECV_PIN = 8; IRrecv irrecv(RECV_PIN); decode_results results; void setup(){ Serial.begin(9600); irrecv.enableIRIn(); irrecv.blink13(true); } void loop(){ if (irrecv.decode(&results)){ Serial.println(results.value, HEX); irrecv.resume(); } }
عملکرد این کد بهگونهای است که درواقع هر کنترلی را به سمت IR RECEIVER بگیرید و کلیدهای مدنظرتان را انتخابکنید، کدهگز کلید فشرده را خواهید دید. بهطورمثال بنده تصویر کنترلی را که درادامه میبینید استفاده کردهام و درادامه میخواهم که از کلیدهای خاموشکردن، ۱، ۲، ۳، ۴، ۵، ۶، و Enter استفاده کنم. برای این کار قاعدتا باید اول از همه کد هگز کلیدهای خواستهشده را دربیاورم پس برای این کار کد بالا را روی آردوینو آپلود میکنم و درنهایت نتیجه بهصورتزیر خواهد بود.
کنترل استفادهشده در پروژه(حقیقتا خودمم نمیدونم کنترل چه تلوزیونیه ولی جواب کار ما رو میده)
کدهای هگز بدستآمده از کنترل موردنظر:
1067C23D کد هگز کلید خاموش شدن 106742BD کد هگز کلید شماره 1 1067827D کد هگز کلید شماره 2 106702FD کد هگز کلید شماره 3 1067629D کد هگز کلید شماره 4 1067A25D کد هگز کلید شماره 5 106722DD کد هگز کلید شماره 6 1067A857 کد هگز کلید شماره Enter
خب پساز اینکه کدهای هگز موردنظر را درآوردیم نوبت به نوشتن کد موردنظرمان است که در قسمت دوم به آن میپردازیم.
کد قسمت دوم:
#include <IRremote.h> const int RECV_PIN = 8; IRrecv irrecv(RECV_PIN); decode_results results; unsigned long key_value = 0; void Gpio_Output_Mode(); void LED_Strip_1(); void LED_Strip_2(); void LED_Strip_3(); void LED_OFF(); void setup(){ Serial.begin(9600); irrecv.enableIRIn(); irrecv.blink13(true); Gpio_Output_Mode(); } void loop(){ if (irrecv.decode(&results)){ if (results.value == 0XFFFFFFFF) results.value = key_value; switch(results.value){ case 0x1067C23D: Serial.println("LEDS OFF"); LED_OFF(); break; case 0x106742BD: Serial.println("First LED Is On"); digitalWrite(2,1); break; case 0x1067827D: Serial.println("Second LED Is On"); digitalWrite(3,1); break; case 0x106702FD: Serial.println("Thired LED Is On"); digitalWrite(4,1); break; case 0x1067629D: Serial.println("LED_Strip_1 Is On"); for(unsigned short i=10;i!=0;i--) { LED_Strip_1(); } break; case 0x1067A25D: Serial.println("LED_Strip_2 Is On"); for(unsigned short i=10;i!=0;i--) { LED_Strip_2(); } break; case 0x106722DD: Serial.println("LED_Strip_3 Is On"); for(unsigned short i=10;i!=0;i--) { LED_Strip_3(); } break; case 0x1067A857: Serial.println("LED_All_Strips Are On"); for(unsigned short i=10;i!=0;i--) { LED_Strip_1(); delay(300); LED_Strip_2(); delay(200); LED_Strip_3(); delay(100); } break; } key_value = results.value; irrecv.resume(); } } void Gpio_Output_Mode() { pinMode(6,OUTPUT); pinMode(5,OUTPUT); pinMode(4,OUTPUT); } void LED_Strip_1() { digitalWrite(4,1); delay(100); digitalWrite(5,1); digitalWrite(4,0); delay(120); digitalWrite(6,1); digitalWrite(4,0); } void LED_Strip_2() { digitalWrite(4,1); digitalWrite(5,1); digitalWrite(6,1); delay(300); digitalWrite(4,0); digitalWrite(6,0); digitalWrite(5,0); delay(300); } void LED_Strip_3() { digitalWrite(4,1); delay(125); digitalWrite(4,0); delay(105); digitalWrite(5,1); delay(250); digitalWrite(5,1); delay(360); digitalWrite(6,1); delay(400); digitalWrite(6,0); delay(320); } void LED_OFF() { digitalWrite(6,0); digitalWrite(5,0); digitalWrite(4,0); }
اگر به کد دقتکنید اصل کد در ساختار Switch/ Case نوشتهشدهاست که درواقع عملکرد آن به این نحو است که اگر کدهگز موردنظر جز یکیاز Case باشد کار مربوط به آن Case را انجام میدهد درغیر اینصورت کارخاصی را انجام نمیدهد. ساختارکلی برنامه به این نحو است که اگر:
- کلید ۱ انتخابشود یک LED روشن میشود.
- اگر کلید ۲ انتخابشود LED شماره دو روشن میشود.
- اگر کلید ۳ انتخابشود LED شماره سه روشن میشود.
- اگر کلید شماره ۴ انتخابشود تابع LED_Strip1 فراخوانیشده و عمل میکند.
- اگر کلید شماره ۵ انتخابشود تابع LED_Strip2 فراخوانیشده و عمل میکند.
- اگر کلید شماره ۶ انتخابشود تابع LED_Strip3 فراخوانیشده و عمل میکند.
- و درنهایت اگر کلید خاموششدن انتخاب شود تمامی LEDها خاموش میشوند.
به این نکته توجهکنید که با این آموزش با کمی خلاقیت قادر هستید تقریبا تمامی ادوات الکترونیکی را با آن کنترلکنید.
تمرین: بهعنوان تمرین میتوانید یک OLED را راهاندازی و سپس توسط کلیدهای کنترل تلویزیون خود یک منو درست کنید که با زدن هر کلید یک عمل خاصی را روی OLED انجامدهد. امیدواریم که این آموزش هم موردنظر شما مخاطبین عزیز قرارگرفتهباشد.
منبع: سیسوگ