مطمئنا تا به حال با کنترلهای تلوزیون کار کردهاید و حداقل چندین کلید را فشردهاید ( وجدانن شوخیشم قشنگ نیست بگید اصلا کار نکردیم) و هر کلید هم کار خاص خودش را انجام میدهد به طور مثال اگر کلید افزایش صدا را انتخاب کرده باشید، قاعدتا باید صدای تلوزیون زیاد شود و یا اگر کلید شماره 3 را انتخاب کنید باید شبکه 3 را نمایش دهد و به عبارت دیگر هر کدام از این کلیدها یک عمل خاص را انجام میدهند.
اگر بخواهیم به صورت کلیتر به موضوع نگاه کنیم میتوانیم بگوییم که این کنترلها، جهت برقراری ارتباط از راه دور با دستگاه موردنظر هستند که در اینجا دستگاه موردنظر ما تلوزیون است اما اگر کمی گستردهتر به داستان نگاه کنیم میتوانیم کاربردهای بیشتری را برای این کنترلها ذکر کنیم به طور مثال کنترل ضبط های ماشین، کنترل پنکههای دستی و خود تلوزیونها و …
در این مقاله میخواهیم ابتدا به تعریف مادونقرمز بپردازیم و در نهایت یک کنترل تلوزیون را برداریم و ببینیم که چه کدهایی ارسال میکند و آیا میتوانیم ما هم از این کنترل برای کارهای الکترونیکی خود استفاده کنیم یا خیر؟ با ما همراه باشید.
شاید برای شما مفید باشد: راه اندازی ریموت کد لرن
“Infrared” یا اشعه مادون قرمز، یك تابش الكترومغناطیسی با طول موج بیشتر از امواج مرئی و كوتاهتر از امواج رادیویی است.
انتقال دادهها از طریق امواج فروسرخ نیز در ابعاد مكانی كوچك و بین دستگاههای كامپیوتری دیجیتال و تلفنهای همراه مورد استفاده قرار میگیرد. این گونه دستگاهها خود را با استانداردها و قوانینی كه توسط “انجمن دادههای اینفرارد( IrDA )” تطبیق میدهند و كار میكنند.
كنترلهای از راهدور و دستگاههای مطابق با استانداردهای IrDA از دیودهای ساطعكنندهی نور یا LED برای ساطع كردن امواج فروسرخ كه توسط یك لنز پلاستیكی داخل نورافكنی كوچك و نازك كارگذاشته شدهاند استفاده میشوند. این نورافكنها، نوسانبندی شدند و وقتی روشن و خاموش میشوند، به تناسب، دادهها را رمزگذاری مینمایند.
دستگاه دریافتكنندهی امواج فروسرخ، از یك فتودیود با جنس سیلیكون استفاده میكند تا موج اینفرارد را به جریان الكتریكی تبدیل سازد. دستگاه دریافتكنندهی امواج، تنها به سیگنالهای پالسدهندهایی كه مدام توسط فرستنده یا Transmitter ساخته میشوند، پاسخ میدهد و امواج فروسرخی كه به آرامی از نورهای محدود و كوچكی تغییر حالت میدهند را از صافی مخصوص خود میگذرانند.
فناوری اینفرارد در ارتباطات برای استفاده در محلهای كوچكی كه تراكم افراد و جمعیت در آنها بالا است و بلوتوث یا سایر فناوریها قادر به انتقال داده به شكلی مناسب نیستند بسیار مفید به نظر میرسد. ( کار ما هم دقیقا همینه جایی که استفاده از سایر پروتکلها خیلی مناسب نیست از این تکنولوژی میخواهیم استفاده کنیم)
شاید برای شما مفید باشد: ساخت ریموت کنترل 4 کاناله
امواج فروسرخ یا Infrared از دیوارها عبور نمیكنند و در نتیجه در كار سایر دستگاههای اتاقهای مجاور دخالت نمینمایند. اینفرارد رایجترین فناوری استفادهشده در كنترلهای از راه دور دستگاههای مختلف است.
امواج اینفرارد، نور لازم برای ارتباطات فیبر نوری را فراهم میكنند. این امواج، طول موجی با حداقل میزان انتشار ۱.۳۳ نانومتر و حداكثر میزان پراكنش نور ۱.۵۵ نانومتر دارند و در سیمهای سیلیسیومی بسیار استفاده میشوند
اینفرارد برای مبادله اطلاعات بین کامپیوتر و گوشی همراه استفاده می شود. گوشیهایی که قابلیت اینفرارد را دارند، توسط این دستگاه که به کامپیوتر متصل میشود فایلهای صوتی و تصویری را دریافت می کنند. یکی از مزایای اینفرارد این است که، اطلاعات بدون سیم منتقل می شود.
دستگاه اینفرارد شما را قادر میسازد تا حداکثر به فاصله 20-30 سانتی متری با دستگاهی که دارای اینفرارد است ارتباط برقرار کند . ذکر این نکته ضروریست که تکنولوژی اینفرارد یک تکنولوژی Face to Face بوده ( روبروی هم ) و همانند کنترل های دستگاههای صوتی و تصویری که از فناوری اینفرارد بهره می برند عمل میکند . فاصله برد آن برای گوشی های موبایل حداکثر 30 سانتی متر است.
خب پس از اینکه یک آشنایی نسبی با نحوه کار مادون قرمز بدست آوردیم نوبت به استفاده عملی از این ماژول رسیده است.
وسایل موردنیاز جهت انجام پروژه راهاندازی ماژول IR RECEIVER
شماتیک راهاندازی ماژول IR RECEIVER با آردوینو
خب پس از اینکه مدار را به صورت بالا متصل کردیم نیاز است که آن را برنامهنویسی کنیم برای این کار باید به صورت زیر عمل کنیم.
برنامهنویسی ماژول IR RECEIVER با آردوینو
این بخش شامل سه قسمت مییاشد.
قسمت اول: نصب کتابخانه IRremote
قسمت دوم: نوشتن برنامهای که کدهای هگز هر کنترلی را قادر به دریافت کردن است.
قسمت سوم: تنظیم کدهای هگز بدست آمده جهت انجام کار موردنظر.
قسمت اول: برای این قسمت باید به به صورت تصاویری که در ادامه قرار میدهیم عمل کنیم.
پس از اینکه نصب کتابخانه به اتمام رسید نوبت به انجام قسمت دوم است.
کد قسمت دوم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #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(); } } |
کنترل استفاده شده در پروژه (حقیقتا خودمم نمیدونم کنترل چه تلوزیونیه ولی جواب کار ما رو میده)
کدهای هگز بدست آمده از کنترل موردنظر:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1067C23D کد هگز کلید خاموش شدن 106742BD کد هگز کلید شماره 1 1067827D کد هگز کلید شماره 2 106702FD کد هگز کلید شماره 3 1067629D کد هگز کلید شماره 4 1067A25D کد هگز کلید شماره 5 106722DD کد هگز کلید شماره 6 1067A857 کد هگز کلید شماره Enter |
خب پس از اینکه کدهای هگز موردنظر را در آوردیم نوبت به نوشتن کد موردنظرمان است که در قسمت دوم به آن میپردازیم.
کد قسمت دوم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | #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 را انجام میدهد در غیر اینصورت کار خاصی را انجام نمیدهد.
ساختار کلی برنامه به این نحو است که اگر:
شاید برای شما مفید باشد: ریموت هاپینگ
تمرین: به عنوان تمرین میتوانید یک OLED را راهاندازی و سپس توسط کلیدهای کنترل تلوزیون خود یک منو درست کنید که با زدن هر کلید یک عمل خاصی را روی OLED انجام دهد.
امیدواریم که این آموزش هم موردنظر شما مخاطبین سیسوگی عزیز قرار گرفته باشد.
«السَّلَامُ عَلَیْکَ یَا أَبَا عَبْدِ اللَّهِ، السَّلَامُ عَلَیْکَ وَ رَحْمَهُ اللَّهِ وَ بَرَکَاتُهُ».
مقالات بیشترسلام مهندس من کتابخانه IRremote رو دانلود کردم اما وقتی داخل کد اصلی وارد میکنم در سریال مانیتور میگه این کتابخانه قدیمی شده و یه لینک میده که از اینجا دانلود کنید اون کار رو هم کردم اما دوباره همین پیغام رو میده و در خود برنامه آردوینو کتابخانه رو به نسخه ۴ هم ارتقا دادم اما باز هم همون پیغام رومیده چرا؟
درود.
در پاسخ به دوستمون که دنبال دیتابیس برای ریموتهای IR می گشت:
https://files.remotecentral.com/
سلام به مطلب هم برای ساخت فرستنده مادون قرمز با آردوینو بزارید که کد رو بفرستی
سلام دوست عزیز
فکر کنم قبلا چنین پروژه ای در سایت قرار داده شده
به مطلب
پروژه رایگان راه اندازی RC5 با آردوینو
مراجعه کنید.
این چیزی که میخواستم نبود من میخوام آردوینو رو تبدیل به ریموت کنم نه اینکه باهاش گیرنده بسازم درواقع میخوام کنترل tv باهاش درست کنم
آها خوب اول باید ببینید چه پروتکلی رو میخواد پیاده سازی کنید
بعد بر اون اساس تصمیم بگیرید که از چه راهی برید
مثلا برای همین پروتکل RC5 کتابخانه آماده وحود داره که فرستنده هستند ولی ما مطلبش رو کار نکردیم/.
سلام کتابخانه یا دیتابیس کدهای hex مربوط به ریموت های مختلف که در بازار وجود داره رو از جایی میشه پیدا کرد؟
من توی اینرنت پروژه هایی رو دیدم که کدهای چند تا ریموت رو گذاشتن ولی چیزی که جامع باشه رو ندیدم
با سلام برای من این بخشو irrecv.blink13(true); داره اشتباه میگیره ممنونمیشم اگر کمک کنید
سلام دوست عزیز
برای این که بتونیم کمکتون کنیم نیازه متن خطا رو بذارید که بتونیم بفهمیم چه خطایی داره میده
سلام این ارور برای چیه ؟
C:\Users\moota\Desktop\آردویینو\ir.recive\remote-start\remote-start.ino: In function ‘void setup()’:
remote-start:10:10: error: ‘class IRrecv’ has no member named ‘blink13’
Multiple libraries were found for “IRremote.h”
Used: C:\Users\moota\Documents\Arduino\libraries\IRremote
Not used: C:\Users\moota\Documents\Arduino\libraries\Arduino-IRremote-master
exit status 1
‘class IRrecv’ has no member named ‘blink13’
فکر میکنم اول لازم باشه توی میسر پروژه از اسم فارسی برای پوشه خودداری کنید
البته خطایی که دارید دریافت میکنید داره میگه از چند کتابخانه به این اسم دارید
سلام اینو با دومدل مادون قرمز ساختم ولی کار نکرد یعنی ال ای دی روشن نشد
کد های کنترلتون رو با کد های برنامه عوض کردید؟
شاید کدینگ ارسالی ریموتی که استفاده میکنید متفاوت هست
سلام خسته نباشید.
ممنون از مطالب مفیدتون.
کتابخونه IRremote رو از کجا میتونم دانلود کنم؟
سلام دوست عزیز
از لینک زیر میتونید دانلود کنید
https://github.com/Arduino-IRremote/Arduino-IRremote
سلام. مطالبی بسیار خوبی بود.حالا من بخوام برای tiny13استفاده کنم باید چکار کنم؟
سلام دوست عزیز
احتمالا با توجه به محدودیت حافظه پیاده سازی این پروژه بسیار چالشی باشه و ساده نباشه :/
شاید بتونید پرتکل هایی مثل rc5 رو به شکل اسمبلی پیاده سازی کنید
سلام من IRدوپایه دارم میشه بگید طوری باید به بورد اردوینو متصل بشه
اون چیزی که شما دارد دیود IR هست – حالا ممکنه گیرنده یا فرستنده باشه
اگر گیرنده باشه برای اتصال اون نیاز به مدار تقویت کننده دارید که با سه جستجوی ساده میتونید مدار موردنیازش رو پیدا کنید
سلام وقتتون بخیر
این برنامه رو میتوان برای میکروهای stm32F103 هم اجرا کرد؟؟ کد هگز ها رو میتوان بدست آورد؟
سلام اگر از پلتفرم آردوینو برای میکروتون استفاده کنید – میتونید این کد رو به سادگی استفاده کنید.
سلام خسته نباشید میخواستم اموزش کنترل تلوزیون dvd player و کولر رو با گوشی انجام بدم مثلا کد های ریموت رو تو اردونیو سوار کنم و با گوشی خودم مثلا با بلوتوث و ماژول ir receiver این کارو انجام بدم
خوب برای این کار حتی نیاز به آردوینو ندارید 🙂
پروژه ای هست که با استفاده از خروجی هدفون گوشی میتونید این کار رو انجام بدید به سادگی
سلام
تشکر میکنم از مطالب خوبتون و همچنین سایت عالیتون
یه سوال داشتم
اگه کد یکی از دکمه های کنترل را که روبروی سنسور گرفتیم و بدست آوردیم، (مثلا اگه کد دکمه ی خاموش، 6583529838 باشه) را بدست آوردیم و حالا بخواهیم با فرستنده ی مادون قرمز همون کد را بفرستیم و مثلا در همین گیرنده ای که در این آموزش ازش استفاده کردیم، دریافتش کنیم، باید چه کدی برای فرستادن اون کد بدست اومده با فرستنده انجام بدیم؟
ممنون
همین کتابخانه کلاسی داره تحت عنوان irSend که میتونید با استفاده از اون داده ها رو ارسال کنید.
سلام
ببخشید چطری می شه کد های هگز را به دست بیاریم؟
توی متن مقاله کد قسمت دوم رو ببینید
با این کد میتونید داده های هگز رو به دست بیارید
سلام
این مادون قرمز ها خوبی که دارن اینه که نویزی نیستن (یا حداقل من ندیدم که اینجوری باشه)… البته کدهای هگز متفاوت هم مزیدبرعلت هست…
اما فکر نمی کنم که بیشتر از 10 متر جواب بدن … شما تست کردی چقدر برد داره ؟
سلام دوست عزیزم بل همینطوریه که گفتید
حداکثرش 10 متره فکر کنم البته مطالبی رو که خوندم عرض میکنم وگرنه از لحاظ تست عملی که بخواید جواب بگیرید کمتره
حداقل خودم برای همین پروژه باید حتما نزدیکش میگرفتم ( تقریبا زیر 1 متر در نظر بگیرید ) تا کار کنه.
موفق باشید.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.