مطمئنا تا به حال با کنترلهای تلوزیون کار کردهاید و حداقل چندین کلید را فشردهاید ( وجدانن شوخیشم قشنگ نیست بگید اصلا کار نکردیم) و هر کلید هم کار خاص خودش را انجام میدهد به طور مثال اگر کلید افزایش صدا را انتخاب کرده باشید، قاعدتا باید صدای تلوزیون زیاد شود و یا اگر کلید شماره 3 را انتخاب کنید باید شبکه 3 را نمایش دهد و به عبارت دیگر هر کدام از این کلیدها یک عمل خاص را انجام میدهند.
اگر بخواهیم به صورت کلیتر به موضوع نگاه کنیم میتوانیم بگوییم که این کنترلها، جهت برقراری ارتباط از راه دور با دستگاه موردنظر هستند که در اینجا دستگاه موردنظر ما تلوزیون است اما اگر کمی گستردهتر به داستان نگاه کنیم میتوانیم کاربردهای بیشتری را برای این کنترلها ذکر کنیم به طور مثال کنترل ضبط های ماشین، کنترل پنکههای دستی و خود تلوزیونها و …
در این مقاله میخواهیم ابتدا به تعریف مادونقرمز بپردازیم و در نهایت یک کنترل تلوزیون را برداریم و ببینیم که چه کدهایی ارسال میکند و آیا میتوانیم ما هم از این کنترل برای کارهای الکترونیکی خود استفاده کنیم یا خیر؟ با ما همراه باشید.
منظور از کارهای الکترونیکی راهاندازی انواع سنسورها و ماژولها و … است که در ادامه با یکدیگر به این موضوع خواهیم پرداخت.
مادون قرمز (IR) چیست؟
“Infrared” یا اشعه مادون قرمز، یك تابش الكترومغناطیسی با طول موج بیشتر از امواج مرئی و كوتاهتر از امواج رادیویی است.
انتقال دادهها از طریق امواج فروسرخ نیز در ابعاد مكانی كوچك و بین دستگاههای كامپیوتری دیجیتال و تلفنهای همراه مورد استفاده قرار میگیرد. این گونه دستگاهها خود را با استانداردها و قوانینی كه توسط “انجمن دادههای اینفرارد( IrDA )” تطبیق میدهند و كار میكنند.
كنترلهای از راهدور و دستگاههای مطابق با استانداردهای IrDA از دیودهای ساطعكنندهی نور یا LED برای ساطع كردن امواج فروسرخ كه توسط یك لنز پلاستیكی داخل نورافكنی كوچك و نازك كارگذاشته شدهاند استفاده میشوند. این نورافكنها، نوسانبندی شدند و وقتی روشن و خاموش میشوند، به تناسب، دادهها را رمزگذاری مینمایند.
دستگاه دریافتكنندهی امواج فروسرخ، از یك فتودیود با جنس سیلیكون استفاده میكند تا موج اینفرارد را به جریان الكتریكی تبدیل سازد. دستگاه دریافتكنندهی امواج، تنها به سیگنالهای پالسدهندهایی كه مدام توسط فرستنده یا Transmitter ساخته میشوند، پاسخ میدهد و امواج فروسرخی كه به آرامی از نورهای محدود و كوچكی تغییر حالت میدهند را از صافی مخصوص خود میگذرانند.
فناوری اینفرارد در ارتباطات برای استفاده در محلهای كوچكی كه تراكم افراد و جمعیت در آنها بالا است و بلوتوث یا سایر فناوریها قادر به انتقال داده به شكلی مناسب نیستند بسیار مفید به نظر میرسد. ( کار ما هم دقیقا همینه جایی که استفاده از سایر پروتکلها خیلی مناسب نیست از این تکنولوژی میخواهیم استفاده کنیم)
امواج فروسرخ یا Infrared از دیوارها عبور نمیكنند و در نتیجه در كار سایر دستگاههای اتاقهای مجاور دخالت نمینمایند. اینفرارد رایجترین فناوری استفادهشده در كنترلهای از راه دور دستگاههای مختلف است.
امواج اینفرارد، نور لازم برای ارتباطات فیبر نوری را فراهم میكنند. این امواج، طول موجی با حداقل میزان انتشار ۱.۳۳ نانومتر و حداكثر میزان پراكنش نور ۱.۵۵ نانومتر دارند و در سیمهای سیلیسیومی بسیار استفاده میشوند
اینفرارد برای مبادله اطلاعات بین کامپیوتر و گوشی همراه استفاده می شود. گوشیهایی که قابلیت اینفرارد را دارند، توسط این دستگاه که به کامپیوتر متصل میشود فایلهای صوتی و تصویری را دریافت می کنند. یکی از مزایای اینفرارد این است که، اطلاعات بدون سیم منتقل می شود.
دستگاه اینفرارد شما را قادر میسازد تا حداکثر به فاصله 20-30 سانتی متری با دستگاهی که دارای اینفرارد است ارتباط برقرار کند . ذکر این نکته ضروریست که تکنولوژی اینفرارد یک تکنولوژی Face to Face بوده ( روبروی هم ) و همانند کنترل های دستگاههای صوتی و تصویری که از فناوری اینفرارد بهره می برند عمل میکند . فاصله برد آن برای گوشی های موبایل حداکثر 30 سانتی متر است.
خب پس از اینکه یک آشنایی نسبی با نحوه کار مادون قرمز بدست آوردیم نوبت به استفاده عملی از این ماژول رسیده است.
وسایل موردنیاز جهت انجام پروژه راهاندازی ماژول IR RECEIVER
کنترل( هر کنترلی که مدنظرتان است چه کنترل ضبط ماشین، تلوزیون و …)
آردوینو( هر مدلی که در دسترس است اصلا نوع آن مهم نیست)
سه یا 4 عدد LED (اینم اگه در دسترس نبود اشکالی نداره)
شماتیک راهاندازی ماژول IR RECEIVER با آردوینو
خب پس از اینکه مدار را به صورت بالا متصل کردیم نیاز است که آن را برنامهنویسی کنیم برای این کار باید به صورت زیر عمل کنیم.
برنامهنویسی ماژول IR RECEIVER با آردوینو
این بخش شامل سه قسمت مییاشد.
قسمت اول: نصب کتابخانه IRremote
قسمت دوم: نوشتن برنامهای که کدهای هگز هر کنترلی را قادر به دریافت کردن است.
قسمت سوم: تنظیم کدهای هگز بدست آمده جهت انجام کار موردنظر.
قسمت اول: برای این قسمت باید به به صورت تصاویری که در ادامه قرار میدهیم عمل کنیم.
پس از اینکه نصب کتابخانه به اتمام رسید نوبت به انجام قسمت دوم است.
کد قسمت دوم:
Arduino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <IRremote.h>
constintRECV_PIN=8;
IRrecvirrecv(RECV_PIN);
decode_resultsresults;
voidsetup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
voidloop(){
if(irrecv.decode(&results)){
Serial.println(results.value,HEX);
irrecv.resume();
}
}
عملکرد این کد به گونهای است که در واقع هر کنترلی را به سمت IR RECEIVER بگیرید و کلیدهای مدنظرتان را انتخاب کنید، کدهگز کلید فشرده را خواهید دید. به طور مثال بنده تصویر کنترلی را که در ادامه میبینید استفاده کردهام و در ادامه میخواهم که از کلید های خاموش کردن، 1، 2، 3، 4، 5، 6، و Enter استفاده کنم. برای این کار قاعدتا باید اول از همه کد هگز کلیدهای خواسته شده را در بیاورم پس برای این کار کد بالا را روی آردوینو آپلود میکنم و در نهایت نتیجه به صورت زیر خواهد بود.
کنترل استفاده شده در پروژه (حقیقتا خودمم نمیدونم کنترل چه تلوزیونیه ولی جواب کار ما رو میده)
کدهای هگز بدست آمده از کنترل موردنظر:
Arduino
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
خب پس از اینکه کدهای هگز موردنظر را در آوردیم نوبت به نوشتن کد موردنظرمان است که در قسمت دوم به آن میپردازیم.
کد قسمت دوم:
Arduino
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>
constintRECV_PIN=8;
IRrecvirrecv(RECV_PIN);
decode_resultsresults;
unsignedlongkey_value=0;
voidGpio_Output_Mode();
voidLED_Strip_1();
voidLED_Strip_2();
voidLED_Strip_3();
voidLED_OFF();
voidsetup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
Gpio_Output_Mode();
}
voidloop(){
if(irrecv.decode(&results)){
if(results.value==0XFFFFFFFF)
results.value=key_value;
switch(results.value){
case0x1067C23D:
Serial.println("LEDS OFF");
LED_OFF();
break;
case0x106742BD:
Serial.println("First LED Is On");
digitalWrite(2,1);
break;
case0x1067827D:
Serial.println("Second LED Is On");
digitalWrite(3,1);
break;
case0x106702FD:
Serial.println("Thired LED Is On");
digitalWrite(4,1);
break;
case0x1067629D:
Serial.println("LED_Strip_1 Is On");
for(unsignedshorti=10;i!=0;i--)
{
LED_Strip_1();
}
break;
case0x1067A25D:
Serial.println("LED_Strip_2 Is On");
for(unsignedshorti=10;i!=0;i--)
{
LED_Strip_2();
}
break;
case0x106722DD:
Serial.println("LED_Strip_3 Is On");
for(unsignedshorti=10;i!=0;i--)
{
LED_Strip_3();
}
break;
case0x1067A857:
Serial.println("LED_All_Strips Are On");
for(unsignedshorti=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();
}
}
voidGpio_Output_Mode()
{
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(4,OUTPUT);
}
voidLED_Strip_1()
{
digitalWrite(4,1);
delay(100);
digitalWrite(5,1);
digitalWrite(4,0);
delay(120);
digitalWrite(6,1);
digitalWrite(4,0);
}
voidLED_Strip_2()
{
digitalWrite(4,1);
digitalWrite(5,1);
digitalWrite(6,1);
delay(300);
digitalWrite(4,0);
digitalWrite(6,0);
digitalWrite(5,0);
delay(300);
}
voidLED_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);
}
voidLED_OFF()
{
digitalWrite(6,0);
digitalWrite(5,0);
digitalWrite(4,0);
}
اگر به کد دقت کنید اصل کد در ساختار Switch/ Case نوشته شده است که در واقع عملکرد آن به این نحو است که اگر کدهگز مورد نظر جز یکی از Case باشد کار مربوط به آن Case را انجام میدهد در غیر اینصورت کار خاصی را انجام نمیدهد.
ساختار کلی برنامه به این نحو است که اگر:
کلید 1 انتخاب شود یک LED روشن میشود.
اگر کلید 2 انتخاب شود LED شماره دو روشن میشود.
اگر کلید 3 انتخاب شود LED شماره سه روشن میشود.
اگر کلید شماره 4 انتخاب شود تابع LED_Strip1 فراخوانی شده و عمل میکند.
اگر کلید شماره 5 انتخاب شود تابع LED_Strip2 فراخوانی شده و عمل میکند.
اگر کلید شماره 6 انتخاب شود تابع LED_Strip3 فراخوانی شده و عمل میکند.
و در نهایت اگر کلید خاموش شدن انتخاب شود تمامی LED ها خاموش میشوند.
به این نکته توجه کنید که با این آموزش با کمی خلاقیت قادر هستید تقریبا تمامی ادوات الکترونیکی را با آن کنترل کنید.
تمرین: به عنوان تمرین میتوانید یک OLED را راهاندازی و سپس توسط کلیدهای کنترل تلوزیون خود یک منو درست کنید که با زدن هر کلید یک عمل خاصی را روی OLED انجام دهد.
امیدواریم که این آموزش هم موردنظر شما مخاطبین سیسوگی عزیز قرار گرفته باشد.
آها خوب اول باید ببینید چه پروتکلی رو میخواد پیاده سازی کنید
بعد بر اون اساس تصمیم بگیرید که از چه راهی برید
مثلا برای همین پروتکل RC5 کتابخانه آماده وحود داره که فرستنده هستند ولی ما مطلبش رو کار نکردیم/.
سلام این ارور برای چیه ؟
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’
فکر میکنم اول لازم باشه توی میسر پروژه از اسم فارسی برای پوشه خودداری کنید
البته خطایی که دارید دریافت میکنید داره میگه از چند کتابخانه به این اسم دارید
سلام دوست عزیز
احتمالا با توجه به محدودیت حافظه پیاده سازی این پروژه بسیار چالشی باشه و ساده نباشه :/
شاید بتونید پرتکل هایی مثل rc5 رو به شکل اسمبلی پیاده سازی کنید
اون چیزی که شما دارد دیود IR هست – حالا ممکنه گیرنده یا فرستنده باشه
اگر گیرنده باشه برای اتصال اون نیاز به مدار تقویت کننده دارید که با سه جستجوی ساده میتونید مدار موردنیازش رو پیدا کنید
سلام خسته نباشید میخواستم اموزش کنترل تلوزیون dvd player و کولر رو با گوشی انجام بدم مثلا کد های ریموت رو تو اردونیو سوار کنم و با گوشی خودم مثلا با بلوتوث و ماژول ir receiver این کارو انجام بدم
خوب برای این کار حتی نیاز به آردوینو ندارید 🙂
پروژه ای هست که با استفاده از خروجی هدفون گوشی میتونید این کار رو انجام بدید به سادگی https://www.youtube.com/watch?v=xyeFf42uE9M
سلام
تشکر میکنم از مطالب خوبتون و همچنین سایت عالیتون
یه سوال داشتم
اگه کد یکی از دکمه های کنترل را که روبروی سنسور گرفتیم و بدست آوردیم، (مثلا اگه کد دکمه ی خاموش، 6583529838 باشه) را بدست آوردیم و حالا بخواهیم با فرستنده ی مادون قرمز همون کد را بفرستیم و مثلا در همین گیرنده ای که در این آموزش ازش استفاده کردیم، دریافتش کنیم، باید چه کدی برای فرستادن اون کد بدست اومده با فرستنده انجام بدیم؟
ممنون
سلام
این مادون قرمز ها خوبی که دارن اینه که نویزی نیستن (یا حداقل من ندیدم که اینجوری باشه)… البته کدهای هگز متفاوت هم مزیدبرعلت هست…
اما فکر نمی کنم که بیشتر از 10 متر جواب بدن … شما تست کردی چقدر برد داره ؟
ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموتهای درب بازکن تا ریموتهای دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی میکنند و آنهم ارسال اطلاعات بهصورت بیسیم است....
امنیت همیشه و در همهی اعصار، مقولهی مهم و قابلتوجه ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموتهای کنترل خواهیم پرداخت....
سلام به مطلب هم برای ساخت فرستنده مادون قرمز با آردوینو بزارید که کد رو بفرستی
سلام دوست عزیز
فکر کنم قبلا چنین پروژه ای در سایت قرار داده شده
به مطلب
پروژه رایگان راه اندازی 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 این کارو انجام بدم
خوب برای این کار حتی نیاز به آردوینو ندارید 🙂
پروژه ای هست که با استفاده از خروجی هدفون گوشی میتونید این کار رو انجام بدید به سادگی
https://www.youtube.com/watch?v=xyeFf42uE9M
سلام
تشکر میکنم از مطالب خوبتون و همچنین سایت عالیتون
یه سوال داشتم
اگه کد یکی از دکمه های کنترل را که روبروی سنسور گرفتیم و بدست آوردیم، (مثلا اگه کد دکمه ی خاموش، 6583529838 باشه) را بدست آوردیم و حالا بخواهیم با فرستنده ی مادون قرمز همون کد را بفرستیم و مثلا در همین گیرنده ای که در این آموزش ازش استفاده کردیم، دریافتش کنیم، باید چه کدی برای فرستادن اون کد بدست اومده با فرستنده انجام بدیم؟
ممنون
همین کتابخانه کلاسی داره تحت عنوان irSend که میتونید با استفاده از اون داده ها رو ارسال کنید.
سلام
ببخشید چطری می شه کد های هگز را به دست بیاریم؟
توی متن مقاله کد قسمت دوم رو ببینید
با این کد میتونید داده های هگز رو به دست بیارید
سلام
این مادون قرمز ها خوبی که دارن اینه که نویزی نیستن (یا حداقل من ندیدم که اینجوری باشه)… البته کدهای هگز متفاوت هم مزیدبرعلت هست…
اما فکر نمی کنم که بیشتر از 10 متر جواب بدن … شما تست کردی چقدر برد داره ؟
سلام دوست عزیزم بل همینطوریه که گفتید
حداکثرش 10 متره فکر کنم البته مطالبی رو که خوندم عرض میکنم وگرنه از لحاظ تست عملی که بخواید جواب بگیرید کمتره
حداقل خودم برای همین پروژه باید حتما نزدیکش میگرفتم ( تقریبا زیر 1 متر در نظر بگیرید ) تا کار کنه.
موفق باشید.