توسعهدهنده موبایل و علاقهمند به خوندن و نوشتن
چطور از کنترل تلویزیون کپی بگیریم؟
یه ضربالمثل فنلاندی هست که میگه: «گیرم که همه چیز را داخلی کردی، با رویش ناگزیر محدودیتها چه میکنی؟»!
ماجرا از جایی شروع شد که ما یه تلویزیون دوو خریدیم و هیچ اپلیکیشنی برای کنترل این تلویزیون با تلفنهمراه وجود نداشت. البته چند موردی وجود داشت که برای تلویزیونهای دووی قدیمی و کُرهای کاربرد داشت؛ نه این جدیدای ایرانی. در نتیجه به سرم زد که خودم یه اپلیکیشن کنترل تلویزیون بسازم.
تا حدی روند کار مشخص بود که چیکار باید بکنم. بعضی گوشیهای جدید بالای سرشون یه فرستنده مادونقرمز دارن که نقش همون چراغ بالای سر کنترل تلویزیون رو داره. این چراغ وقتی دکمهای از کنترل رو فشار میدی یه سیگنال مادونقرمز میفرسته سمت تلویزیون. تلویزیون هم یه گیرندهی مادونقرمز داره که این موج رو میگیره و برحسب نوع و مدت زمانی که موج ارسال شده، واکنش مناسب مثل تغییر کانال یا صدا رو انجام میده.
کاری که من باید میکردم این بود که اول بفهمم این سیگنالهایی که کنترل میفرسته چه محتوایی داره و چه شکلیه و بعدش چطور میشه این محتوا رو در قالب یه برنامه موبایل به سمت تلویزیون فرستاد.
مرحله اول: مطالعه
ابتدا یه جستوجوی مختصر کردم که شاید یه نفر اطلاعات مربوط به سیگنالهای تلویزیونهای دوو رو جایی آپلود کرده باشه توی اینترنت که قاعدتاً سایت خود دوو از بیخ تعطیل بود و توی گیتهاب و جاهای دیگه هم اطلاعات همهجور تلویزیونی بود به جز ایرانیها.
بعدش رفتم سراغ اینکه خودم چطور میتونم اطلاعات یه ریموت کنترل رو بدون هزینه یا با حداقل هزینه دریافت کنم. توی جستوجوها مشخص شد که ظاهراً مفتی نمیشه این اطلاعات رو بدست آورد و نیاز به یه سختافزار هست که بتونه اطلاعاتی که کنترل میفرسته رو بخونه. در نتیجه یه برد آردوینو و یه پکیج مادونقرمزش رو سفارش دادم. برد آردوینو به زبان ساده یه کامپیوتر خیلی ریزهمیزه و سادهست که میشه باهاش کارای این مدلی کرد.
مرحله دوم: دریافت اطلاعات کنترل
در این مرحله با استفاده از اطلاعاتی که توی اینترنت بود، یه مدار جمع و جور ساختم که بتونم اطلاعات کنترل رو دریافت کنم. این مدار شامل یه گیرندهی مادونقرمزه که به برد آردوینو وصل میشه و با یه کم برنامهنویسی اطلاعات هر موج مادونقرمزی که دریافت بکنه رو نمایش میده.
عکسهای بالا مربوط به مدار سادهای هستند که برای خوندن اطلاعات مادونقرمز مورد نیازه. یه چنین کدی هم برای نصب روی برد و نمایش اطلاعات باید پیادهسازی بشه:
در نهایت خروجی این مدار وقتی یه دکمه تلویزیون فشار داده میشه چنین چیزیه:
عدد خط اول همون اطلاعاتیه که تلویزیون دریافت میکنه و خط دوم هم مشخص میکنه این سیگنال از یه کنترل با برند ناشناخته ارسال شده.
حالا باید اطلاعات تکتک دکمههای کنترل تلویزیون رو یادداشت میکردم و از طریق برنامه موبایل ارسالشون میکردم.
بعد از تهیه این جدول خیلی خوشحال و سرخوش رفتم سراغ مرحله بعدی یعنی پیادهسازی برنامه اندروید.
مرحله سوم: پیادهسازی اپ اندروید
انتظار نمیرفت پیادهسازی اپلیکیشن کار زیاد سختی باشه. صرفاً طراحی ظاهر کنترل و پیدا کردن روش ارتباط با فرستنده مادونقرمز دو بخش انجام این کار بود.
مستندات برقراری ارتباط با فرستنده مادونقرمز خیلی محدود بود و عملاً با تیکهکدهای پراکندهای که پیدا کردم تونستم اولین سیگنال رو ارسال کنم ولی یه مشکل خیلی بزرگ به وجود اومد که نزدیک بود پروژه رو کلاً کنسل کنه.
اعدادی که به عنوان اطلاعات ارسالی کنترل به دست آورده بودم هیچ شباهتی به نمونهکدهایی که میدیدم نداشتند. توی نمونهکدها یه رشته کاراکتر نسبتاً طولانی ارسال میشد که در اصل زمانبندی و اندازه موجهای مادونقرمز رو مشخص میکرد و اعداد من صرفاً یه عدد چندرقمی بودند که معنی خاصی هم نمیتونستم براشون پیدا کنم. بعد از کلی گشتن اینترنت و بالا و پایین کردن کدهای آردوینو تقریباً ناامید شده بودم که با استفاده از این پست تونستم اطلاعاتی که میخواستم رو تا حدودی بهدست بیارم.
خروجی این کد چنین چیزی بود که تا حد زیادی شباهت به چیزی که من میخواستم داشت:
مختصر بخوام توضیح بدم در طی فرآیند ارسال اطلاعات، فرستندهی مادونقرمز چندین بار به مدتزمانهای مختلف روشن و خاموش میشه و این اطلاعات میگه چند بار چراغ باید روشن و خاموش بشه و هر دفعه به چه مدت.
بعد از یه کم تغییر دادن خروجی موفق شدم اولین سیگنال رو با گوشیم به تلویزیون بفرستم و چند باری از شادی جفتک بزنم توی خونه.
در ادامه هم یه دستی به سر و روی ظاهر برنامه کشیدم و چنین برنامهای به وجود اومد:
برای نصب این برنامه میتونید از این لینک استفاده کنید:
همچنین سورسکد برنامه رو هم میتونید از اینجا دریافت کنید .
مطلبی دیگر از این انتشارات
عمو فالت بگیروم؟
مطلبی دیگر از این انتشارات
چطور کانتریبیوتر زبان دارت شدم؟
مطلبی دیگر از این انتشارات
بعضی وقتا هم کپیکردن جواب نیست.