آموزش کنترل ریموت مادون قرمز با آردوینو | رمزگشایی IR Remote

قسمت 56
مشاهده سایر جلسات آموزش
21 بازدید
۱۴۰۵-۰۵-۲۷
6 دقیقه
  • نویسنده: Arduino captain
  • درباره نویسنده: من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!

در آموزش‌های قبلی آموزش آردوینو به تولید تن‌های صوتی بدون تداخل با PWM و کنترل MIDI پرداختیم. در این قسمت قصد داریم در مورد واکنش به ریموت کنترل مادون قرمز و رمزگشایی سیگنال‌های آن صحبت کنیم.

واکنش به ریموت کنترل مادون قرمز

فرض کنید می‌خواهید آردوینو به فشرده شدن هر دکمه‌ای روی ریموت کنترل تلویزیون یا هر ریموت کنترل دیگری واکنش نشان دهد.

آردوینو با استفاده از قطعه‌ای به نام ماژول گیرنده IR می‌تواند سیگنال‌های ریموت مادون قرمز را دریافت و پردازش کند.

از مدل‌های رایج این ماژول می‌توان به TSOP38238، TSOP4838، PNA4602 و TSOP2438 اشاره کرد. سه مدل اول آرایش پایه یکسانی دارند، بنابراین مدار آن‌ها نیز یکسان است؛ اما در مدل TSOP2438 جای پایه‌های ‎+5V و GND برعکس است. برای اطمینان از اتصال درست، حتماً برگه مشخصات فنی یا Datasheet قطعه خود را بررسی کنید.

در این پروژه از کتابخانه IRremote استفاده می‌کنیم که می‌توانید آن را از طریق Library Manager در محیط آردوینو نصب کنید. ماژول گیرنده مادون قرمز را مطابق دیتاشیت آن به برد وصل کنید. سیم‌کشی نشان‌داده‌شده در شکل 56-1‎ برای مدل‌های TSOP38238، TSOP4838 و PNA4602 است.

sketch زیر باعث می‌شود با فشردن هر دکمه روی ریموت کنترل مادون قرمز، LED داخلی آردوینو تغییر وضعیت دهد و روشن یا خاموش شود.

شکل 1-56 - اتصال یک ماژول گیرنده مادون قرمز

شکل 1-56 – اتصال یک ماژول گیرنده مادون قرمز

اگر از برد 3/3 ولتی استفاده می‌کنید که تحمل ورودی 5 ولت ندارد، باید ماژول گیرنده مادون قرمز را به‌جای 5 ولت، از 3/3 ولت تغذیه کنید.

ماژول گیرنده IR سیگنال مادون قرمز را به مجموعه‌ای از پالس‌های دیجیتال تبدیل می‌کند. این پالس‌ها دنباله‌ای از صفرها و یک‌ها هستند که هر کدام متناظر با یکی از دکمه‌های ریموت کنترل هستند. کتابخانه IRremote این پالس‌ها را رمزگشایی کرده و برای هر دکمه یک مقدار عددی در اختیار sketch قرار می‌دهد. (مقادیر دریافتی sketch به نوع ریموت کنترلی که استفاده می‌کنید بستگی دارد.)

قرار دادن دستور زیر در ابتدای sketch، امکانات کتابخانه IRremote را در اختیار برنامه قرار می‌دهد:  

همچنین دستور زیر شیئی از کلاس IRrecv با نام irrecv ایجاد می‌کند تا سیگنال‌های ارسالی از ماژول گیرنده مادون قرمز متصل به پایه irReceiverPin، که در این مثال پایه 2 است، را دریافت کند.:

شما از شیء irrecv برای دسترسی به سیگنال گیرنده IR استفاده می‌کنید. می‌توانید به آن دستور دهید که به دنبال سیگنال‌ها بگردد و آن‌ها را رمزگشایی کند. پاسخ‌های رمزگشایی‌شده‌ای که توسط کتابخانه فراهم می‌شوند در متغیری به نام decode_results ذخیره می‌شوند. شیء گیرنده (irrecv) در setup با خط irrecv.enableIRIn‎‎();‎ شروع به کار می‌کند. نتایج در loop با فراخوانی تابع irrecv.decode(&decodedSignal)‎ بررسی می‌شوند.

شاید برای شما مفید باشد:
سنسور دما و رطوبت DHT

تابع decode اگر داده‌ای وجود داشته باشد مقدار true برمی‌گرداند، و آن داده در متغیر decodedSignal قرار می‌گیرد. دستورالعمل 2.11 توضیح می‌دهد که چگونه نماد ampersand در فراخوانی تابع‌هایی استفاده می‌شود که پارامترهای آن‌ها تغییر می‌کنند تا اطلاعات بتواند به عقب برگردانده شود.

اگر پیامی از ریموت دریافت شده باشد، کد LED را تغییر وضعیت می‌دهد (وضعیت آن را برعکس می‌کند)، به شرطی که از آخرین باری که تغییر وضعیت داده شده بیشتر از یک‌چهارم ثانیه گذشته باشد (در غیر این صورت، در ریموت‌هایی که هنگام فشار دادن دکمه، کدها را بیش از یک‌بار ارسال می‌کنند، LED خیلی سریع روشن و خاموش می‌شود و ممکن است به نظر برسد به شکل تصادفی چشمک می‌زند).

متغیر decodedSignal مقداری را در خود خواهد داشت که به یک کلید مرتبط است. این مقدار در این دستورالعمل نادیده گرفته می‌شود، هرچند در دستورالعمل بعدی استفاده خواهد شد. شما می‌توانید با افزودن خط Serial.println که در کد زیر برجسته شده است، مقدار را چاپ کنید. (همچنین باید Serial.begin(9600);‎ را در تابع setup اضافه کنید):

باید به کتابخانه گفته شود که پایش سیگنال‌ها را ادامه دهد و این کار با خط irrecv.resume();‎ انجام می‌شود.

این sketch هنگامی که هر دکمه‌ای روی ریموت کنترل فشرده شود یک LED را چشمک‌زن می‌کند، اما شما می‌توانید چیزهای دیگری را هم کنترل کنید؛ برای مثال، می‌توانید از یک stepper motor برای چرخاندن knob روی چراغ یا استریو استفاده کنید.

رمزگشایی سیگنال‌های ریموت کنترل مادون قرمز

فرض کنید می‌خواهید یک کلید خاص را که روی کنترل تلویزیون یا ریموت کنترل دیگری فشرده شده است تشخیص دهید.

این sketch از فشرده شدن کلیدهای ریموت کنترل برای تنظیم روشنایی یک LED استفاده می‌کند. هنگام شروع sketch، کدها برای کلیدهای 0 تا 4 ریموت کنترل درخواست می‌شوند. این کدها در حافظه آردوینو (RAM) ذخیره می‌شوند و سپس sketch با تنظیم روشنایی LED متناسب با دکمه فشرده‌شده به این کلیدها پاسخ می‌دهد، به طوری که 0 باعث خاموش شدن LED می‌شود و کلیدهای 1 تا 4 روشنایی را به صورت مرحله‌ای افزایش می‌دهند:

شاید برای شما مفید باشد:
اندازه‌گیری دما + خواندن تگ‌های RFID (NFC)

این راه‌حل بر اساس کتابخانه IRremote است.

این sketch کتابخانه ریموت کنترل را با کد زیر شروع می‌کند:

سپس تابع learnKeyCodes را فراخوانی می‌کند تا از کاربر بخواهد کلیدهای 0 تا 4 را فشار دهد. کد هر کلید در آرایه‌ای به نام irKeyCodes ذخیره می‌شود. پس از اینکه تمام کلیدها شناسایی و ذخیره شدند، کد loop منتظر فشرده شدن یک کلید می‌ماند و بررسی می‌کند که آیا این کلید یکی از ارقام ذخیره‌شده در آرایه irKeyCodes بوده است یا خیر. اگر چنین باشد، از مقدار آن برای کنترل روشنایی یک LED با استفاده از analogWrite استفاده می‌شود.

برای اطلاعات بیشتر درباره استفاده از تابع map و analogWrite برای کنترل روشنایی LED، دستورالعمل 5.7 را ببینید.

کتابخانه باید بتواند تقریباً با هر ریموت کنترل IR کار کند؛ این کتابخانه می‌تواند زمان‌بندی‌ها را کشف و به خاطر بسپارد و در صورت دستور، سیگنال را تکرار کند.

می‌توانید مقادیر کد کلیدها را به صورت دائمی ذخیره کنید تا لازم نباشد هر بار که sketch را شروع می‌کنید آن‌ها را یاد بگیرید. اعلان irKeyCodes را با خطوط زیر جایگزین کنید تا مقادیر هر کلید مقداردهی اولیه شوند، و فراخوانی learnKeycodes();‎ را به صورت comment درآورید. مقادیر را طوری تغییر دهید که با مقادیر ریموت شما مطابقت داشته باشند (این مقادیر هنگامی که کلیدها را در تابع learnKeyCodes فشار می‌دهید در Serial Monitor نمایش داده می‌شوند):

اطلاعات
21
0
0
اشتراک و حمایت
جلسات دیگر
آردوینو

آموزش ساخت Synthesizer صوتی با Arduino

profile نویسنده: Arduino captain متخصص الکترونیک

من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!


ویراستار: حسین زنجانی زاده
مقالات بیشتر

slide

پالت | بازار خرید و فروش قطعات الکترونیک

قطعات اضافه و بدون استفاده همیشه یکی از سرباره‌‌های شرکتها و طراحان حوزه برق و الکترونیک بوده و هست. پالت سامانه‌ای است که بصورت تخصصی اجازه خرید و فروش قطعات مازاد الکترونیک را فراهم می‌کند. فروش در پالت
family

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. جستجو در آیسی
family

سیسوگ‌شاپ | فروشگاه محصولات Quectel

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
family

سیکار | اولین مرجع متن باز ECU در ایران

بررسی و ارائه اطلاعات مربوط به ECU (واحد کنترل الکترونیکی) و نرم‌افزارهای متن باز مرتبط با آن برو به سیکار
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله

خانواده سیسوگ

سیسوگ‌شاپ

فروشگاه محصولات Quectel

پالت
سیسوگ فروم

محلی برای پاسخ پرسش‌های شما

سیسوگ جابز
سیسوگ
سیسوگ فروم
سی‌کار

اولین مرجع متن باز ECU در ایران

سیسوگ مگ
آی‌سی

موتور جستجوی قطعات الکترونیکی

سیسوگ آکادمی
پالت

بازار خرید و فروش قطعات الکترونیک

دیدگاه ها

become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله
become a writer
نویسنده شو !

سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.

ارسال مقاله