ویرگول
ورودثبت نام
uYSeali
uYSeali
uYSeali
uYSeali
خواندن ۴ دقیقه·۵ ماه پیش

کپی کردن کنترل تلویزیون با استفاده از Arduino

تلویزیون سینگل
تلویزیون سینگل

بابای من بعد مدت‌ها تصمیم گرفت تلویزیون CTR قدیمی مونو بندازه بیرون و یه تلویزیون جدید بگیره؛ در آخر تلویزیون خریداری شده یک محصول از یک برند گمنام به اسم Single بود.
همون موقع‌ها هم من یک گوشی شیائومی خریده بودم که فرستندهٔ مادون قرمز داشت اما هرچی کنترل‌های موجود توی اپلیکیشن Mi Remote رو امتحان میکردم هیچکدوم روی تلویزیون جدیدمون جواب نمی‌داد.

دیگه بیخیالش شده بودم تا اینکه این پست آقای خالقی رو توی ویرگول دیدم.

ایشون هم به همین مشکل برخورده بودند و با استفاده از برد Arduino و مهارت برنامه نویسی اندروید، کنترل مخصوص تلویزیون خودشونو ساخته بودن.

https://virgool.io/programming/remote-vx2tw4vfezor

این شد که منم تصمیم گرفتم طبق مقالهٔ ایشون کنترل مخصوص تلویزیون خودمونو بسازم؛ پس یک برد Arduino UNO به همراه گیرندهٔ مادون قرمز از دیجی‌کالا سفارش دادم. علت اینکه نیاز به داشتن این سخت‌افزار داریم اینه که روی گوشی‌ها فقط فرستندهٔ مادون قرمز وجود داره و خبری از گیرندهٔ مادون قرمز نیست، پس نمی‌تونیم تنها با استفاده از گوشی کدهای کنترل تلویزیون رو کپی کنیم.

بعد از اینکه برد Arduino به دستم رسید سعی کردم طبق مقالهٔ آقای خالقی کدهای مربوط به کنترل تلویزیون رو کپی کنم. در ابتدا فقط قصد داشتم کد مربوط به دکمهٔ خاموش و روشن کردن تلویزیون رو کپی کنم و با استفاده از یک اپلیکیشن اندروید اون رو از طریق فرستندهٔ مادون قرمز گوشیم به سمت تلویزیون ارسال کنم تا ببینم درست کار میکنه یا نه؟! (اولین بار پایه‌های گیرندهٔ مادون قرمز رو به شکل اشتباه وصل کردم اما خوشبختانه نسوخت :)

برد Arduino UNO به همراه گیرندهٔ مادون قرمز سه‌پایه
برد Arduino UNO به همراه گیرندهٔ مادون قرمز سه‌پایه

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

https://vrgl.ir/NW50X

در ابتدا طبق گفته‌های توی مقاله کد مربوط به دکمه روشن خاموش رو پیدا کردم (البته اون موقع هیچ ایده‌ای در موردش نداشتم و فقط دنبال چیزی بودم که شبیه کدهای توی کد اپلیکیشن اندرویدی که ایشون ساخته بودند باشه)؛ بعد از پیدا کردن کد یک اپلکیشن اندروید بسیار ساده ساختم که تنها یک دکمه داشت و در زمان فشرده شدن اون دکمه چیزی مشابه کد زیر رو اجرا می‌کرد:

irEngine.transmit(38000, intArrayOf(
9125,4391,569,569,569,569,569,569,
569,569,569,569,569,569,569,1604,
569,569,569,569,569,569,569,569,
569,569,569,569,569,569,569,1604,
569,569,569,569,569,1604,569,569,
569,1604,569,569,569,569,569,569,
569,569,569,1604,569,569,569,1604,
569,569,569,1604,569,1604,569,1604,
569,1604,569,45518))

بعد از کامپایل کردن برنامه و نصب اون روی گوشیم هر چی دکمه رو می‌زدم و گوشی رو به سمت تلویزیون می‌گرفتم، تلویزیون هیچ واکنشی نشون نمی‌داد. چند روش دیگه (مثلا اجرای فایل ReciveDump.ino که توی مثال‌های کتابخونهٔ IRremote در Arduino پیدا کرده بودمش) برای بدست آوردن کدهای مربوط به دکمهٔ خاموش و روشن استفاده کردم؛ اما هیچ کدوم جواب نمی‌دادن. دیگه داشتم ناامید میشدم که یکبار دکمهٔ اپلیکیشن رو چندبار پشت سر هم زدم و تلویزیون خاموش شد. اون موقع فهمیدم که هنوز امیدی هست و باید مشکل کار رو پیدا کنم :)

در همین حین با اپلیکیشن irplus که یک اپلیکیشن مخصوص ساختن کنترل با امکان شخصی سازی بالاست آشنا شدم. با استفاده از این اپلیکیشن میشه یک کنترل با ظاهر و کدهای دلخواه ساخت بدون اینکه نیاز به یک خط کدنویسی داشته باشیم. توی قسمت ویرایش کنترل این اپلیکیشن یک گزینه به اسم Repeat دیدم که دوهزاریمو جا انداخت که چرا فقط وقتی چند بار پشت سر هم دکمهٔ اپلیکیشن اندروید رو زده بودم، تلویزیون خاموش شده بود؛ علتش این بود که بعضی تلویزیون‌ها لازم دارن تا کد مربوطه رو بیشتر از یکبار در فاصله‌های زمانی کوتاه (چند میلی ثانیه) برای فرستندشون بفرستی تا عملکرد مربوطه رو انجام بدن.

تنظیمات اپلیکیشن irplus
تنظیمات اپلیکیشن irplus

خلاصه بعد اینکه مشکل حل شد و از صحت عملکردش مطمئن شدم تمامی کدهای مربوط به دکمه‌های کنترل تلویزیون رو کپی کردم و توی اپلیکیشن irplus وارد کردم.


از اینجای مقاله به بعد وارد جزئیات میشم و نحوهٔ دقیق کپی کردن کنترل و کدهایی که استفاده کردم رو توضیح میدم:

خواندن سیگنال هر دکمه از کنترل

برای اینکه دکمه‌های کنترل رو کپی کنیم لازم نیست که پروتکلی که استفاده کرده رو بدونیم؛ فقط کافیه عیناً سیگنالی که میفرسته رو کپی کنیم و با یه فرستندهٔ مادون قرمز همون رو بفرستیم.

برای این کار کد زیر رو توی آردوینو وارد کردم:

https://gist.github.com/337e378e8284b0e4d3568b4bf10b40f6.git

این کد سیگنال کنترل رو به دو شکل آرایه‌ای از زمان پالس‌ها و Pronto HEX Code خروجی میده؛ برای اینکه با برنامه نویسی در اندروید سیگنال رو بفرستیم نیاز به مورد اول داریم. اما در اپلیکیشن irplus هر دوی اونها پشتیبانی می‌شن.

واسه درست کردن کنترل توی اپلیکیشن irplus اول یک کنترل جدید اضافه میکنیم و سعی میکنیم از قسمت ویرایش دکمه‌هاشو شبیه کنترل خودمون کنیم؛ بعد از اینکار از کنترلی که ساختیم خروجی میگیریم (از قسمت Export). بعد از خروجی گرفتن فایل خروجی رو میبریم توی کامپیوتر و کدهایی که با آردینو کپی کردیم رو واردش میکنیم، باید دقت کنیم که فرمت درست رو توی فایل بذاریم، مثلا برای Pronto HEX با در قسمت format بنویسیم PRONTO (این موارد توی مستندات اپلیکیشن توضیح داده شدند). بعد از این کار فایل رو سیو میکنیم و دوباره توی گوشی میریزیم. در انتها لازمه که فایل رو توی اپلیکیشن Import کنیم.

۴
۰
uYSeali
uYSeali
شاید از این پست‌ها خوشتان بیاید