فهرست مطالب:

تلویزیون از راه دور جهانی - Ardiuino ، مادون قرمز: 5 مرحله
تلویزیون از راه دور جهانی - Ardiuino ، مادون قرمز: 5 مرحله

تصویری: تلویزیون از راه دور جهانی - Ardiuino ، مادون قرمز: 5 مرحله

تصویری: تلویزیون از راه دور جهانی - Ardiuino ، مادون قرمز: 5 مرحله
تصویری: گیرنده سه پایه مادون قرمز چیه و چطور کار میکنه؟ 2024, جولای
Anonim
تلویزیون از راه دور جهانی - Ardiuino ، مادون قرمز
تلویزیون از راه دور جهانی - Ardiuino ، مادون قرمز

سلام! در این دستورالعمل ، من به شما نشان می دهم که چگونه ریموت جهانی خود را بسازید و برنامه ریزی کنید که با بیشتر مواردی که از ریموت مادون قرمز استفاده می کنند کار کند ، و همچنین "گوش" داده و رمزگشایی سیگنال مادون قرمز ارسال شده توسط ریموت های مختلف دیگر را نیز انجام دهد.

کمی از آنچه من را در ساخت این ریموت الهام بخشید - من ، مانند بسیاری از شما ، دائماً کنترل های خود را از دست می دهم ، و این فاجعه بسیار ناامید کننده است ، بنابراین فکر می کنم اجازه دهید آن را حل کنیم! من این ریموت را ساخته ام و با احتیاط آن را در قاب تختخواب سفارشی خود جاسازی کرده ام (من نیز نجار هستم) - اگر قسمتی از قاب تخت من باشد ، نمی توانم ریموت را گم کنم!

تدارکات

مواردی که نیاز دارید: -Arduino UNO یا Nano - مسافت پیموده شده ممکن است با تخته های دیگر متفاوت باشد

تخته نان بدون لحیم (یا اگر می خواهید دائمی تر شود)

-سیم های رنگی و طول های مختلف

دکمه های فوری (5) (می توانید دکمه های بیشتری اضافه کنید ، اما باید از پین های دیجیتالی استفاده کنید ، زیرا همه پین های آنالوگ به جز 1 مورد استفاده قرار می گیرند - باید مطمئن شوید که از مقاومت کششی به درستی استفاده می کنید. یا مقاومتها را پایین بیاورید و دکمه های فشار را کنار بگذارید)

مقاومت 10 کیلو اهم (5) (اگر دکمه های فشاری بیشتری می خواهید ، به تعداد بیشتری از آنها نیاز دارید)

مقاومت -470 اهم (2)

-LED مادون قرمز

-LED قرمز

سنسور مادون قرمز (من از شماره قسمت VS1838B استفاده کردم ، می توانید از دیگری استفاده کنید ، فقط پین کردن را بررسی کنید)

(اختیاری) آهن لحیم کاری ، لحیم کاری ، لحیم کاری.

مرحله 1: ایجاد مدار:

ساخت مدار
ساخت مدار

1) من همیشه دوست دارم با طرح اجزای خود شروع کنم ، زیرا این امر همیشه باعث ایجاد طرح روی تخته نان می شود.

-دکمه ها را فشار دهید

-LEDS: LED قرمز و LED IR به صورت پشت سر هم سیم کشی شده اند ، بنابراین می توانید ببینید IR IR چه کار می کند.

-حسگر

2) مقاومت ها

- پنج مقاومت 10K که به دکمه های فشاری متصل کرده ایم ، مقاومت های "پایین کشیدن" نامیده می شوند. مقاومت ها را پایین بکشید مطمئن شوید که وقتی دکمه ای فشار داده نمی شود ، پین Arduino مربوطه 0 ولت (یا حداقل نزدیک به آن) می گیرد. برای اطلاعات بیشتر در مورد مقاومتهای کشویی (یا بالا کشیدن) در اینجا یک راهنمای عمیق است:

www.electronics-tutorials.ws/logic/pull-up…

این مقاومتها ممکن است کاملاً ضروری نباشند ، اما اگر فشارهای "شبح" دریافت می کنید ، به احتمال زیاد ناشی از اتصال خازنی است و مقاومتهای کششی از این امر جلوگیری می کند.

3) سیمهای مدار

4) 5 ولت و سیمهای زمینی

برای ارجاع از تصویر ارائه شده استفاده کنید! نگران نباشید آن را برای نیازهای خود تغییر دهید!

مرحله 2: کد:

#شامل const int RECV_PIN = 7؛ // سنسور مادون قرمز pin int Button1 = A4؛ // Farthest Left int Button2 = A3؛ // دوم از سمت چپ int Button3 = A2؛ // Middle int Button4 = A1؛ // 2nd to the right int Button5 = A0؛ // دورترین سمت راست int LED = 3؛ // IR LED و LED قرمز int val = 0؛ // تغییر مقدار IRsend irsend؛ IRrecv irrecv (RECV_PIN) ؛ decode_results results؛

void setup () {pinMode (Button1، INPUT)؛ pinMode (Button2 ، INPUT) ؛ pinMode (Button3 ، INPUT) ؛ pinMode (Button4 ، INPUT) ؛ pinMode (Button5 ، INPUT) ؛ pinMode (LED ، OUTPUT) ؛ Serial.begin (9600)؛ irrecv.enableIRIn ()؛ irrecv.blink13 (true)؛} حلقه void () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD، 32)؛ // استفاده از خواندن آنالوگ به جای خواندن دیجیتال برای جلوگیری از مشکلات مربوط به ظرفیت. همچنین ، به حذف دکمه ها کمک می کند. // داشتن خواندن آنالوگ در 900 اجازه می دهد تا کمی مقدار اتاق تکان داده شود ، به این معنی که سیگنال مادون قرمز ارسال می شود حتی اگر 5 ولت کامل روی پین اعمال نشود. // اما 900 به اندازه کافی بلند است که به دلیل تأخیر اتصال خازنی (100) به اشتباه خوانده نمی شود ؛} // RGB Strip روشن و خاموش {if (analogRead (Button5)> 900) {for (int i = 0؛ i <3؛ i ++) // تغییر مقدار در "i <3" تعداد دفعات تکرار بلافاصله سیگنال را تغییر می دهد. بنابراین "i <2" سیگنال را دو بار تکرار می کند. // اگر تلویزیون شما پاسخ نمی دهد ، ممکن است لازم باشد با این شماره بازی کنید ، به طور کلی ، 1 یا 3 بیشتر کار می کنند ، اگر اینطور نیست ، اعداد فرد را امتحان کنید. // شما همچنین ممکن است نیاز به بازی با مقادیر زمان تاخیر درون سیگنال داشته باشید ، به عنوان مثال ، برای تلویزیون 10 من کار می کند ، اما 30 این کار را نمی کند. {irsend.sendSony (0xa90 ، 12) ؛ // کد پاور تلویزیون سونی ، برای تلویزیون من ، کد باید 3x3 ارسال شود ، بنابراین 3 پالس ، سه بار تاخیر جداگانه (10) ؛ // "تاخیر درون سیگنال" برای (int i = 0؛ i <3؛ i ++) {irsend.sendSony (0xa90، 12)؛ // "12" شماره بیت است ، پروتکل های مختلف شماره های مختلف بیت را فرا می گیرند. NEC 32 ، سونی 12 است ، می توانید دیگران را با تأخیر جستجو کنید (10). برای (int i = 0؛ i 900) {برای (int i = 0؛ i 900) {برای (int i = 0؛ i 900) {برای (int i = 0؛ i <3؛ i ++) {irsend.sendSony (0xc90 ، 12) ؛ // تأخیر صدا در کاهش صدا تلویزیون سونی (100) ؛}}} تاخیر (100) ؛} if (irrecv.decode (& results)) // قسمت زیر کد به شما امکان می دهد سیگنال های مادون قرمز را از راه دور مختلف تفسیر کنید. {Serial.println (results.value ، HEX) ؛ // روش "NEC، Sony، Etc.." و کد تلویزیون "c90، a90، FF02FD" را ایجاد می کند که باید 0x را به جلوی کلید TV Code (results.decode_type) اضافه کنید {case DENON: Serial.println ("DENON")؛ زنگ تفريح ؛ مورد NEC: Serial.println ("NEC") ؛ زنگ تفريح ؛ مورد PANASONIC: Serial.println ("PANASONIC")؛ زنگ تفريح ؛ مورد SONY: Serial.println ("SONY")؛ زنگ تفريح ؛ مورد RC5: Serial.println ("RC5") ؛ زنگ تفريح ؛ مورد JVC: Serial.println ("JVC") ؛ زنگ تفريح ؛ مورد SANYO: Serial.println ("SANYO")؛ زنگ تفريح ؛ مورد MITSUBISHI: Serial.println ("MITSUBISHI")؛ زنگ تفريح ؛ مورد SAMSUNG: Serial.println ("SAMSUNG")؛ زنگ تفريح ؛ مورد LG: Serial.println ("LG") ؛ زنگ تفريح ؛ مورد RC6: Serial.println ("RC6") ؛ زنگ تفريح ؛ مورد DISH: Serial.println ("DISH")؛ زنگ تفريح ؛ مورد SHARP: Serial.println ("SHARP")؛ زنگ تفريح ؛ مورد WHYNTER: Serial.println ("WHYNTER")؛ زنگ تفريح ؛ مورد AIWA_RC_T501: Serial.println ("AIWA_RC_T501") ؛ زنگ تفريح ؛ پیش فرض: case UNKNOWN: Serial.println ("UNKNOWN")؛ break؛} irrecv.resume ()؛}}}

مرحله 3: کد در عمق: ارسال سیگنال های IR

من به خطوط کد با شماره خط آنها اشاره می کنم - برای پیگیری ، از این پیوند استفاده کنید:

pastebin.com/AQr0fBLg

ابتدا ، ما باید کتابخانه راه دور IR را توسط z3t0 قرار دهیم.

در اینجا پیوندی به کتابخانه آمده است:

github.com/z3t0/Arduino-IRremote

اگر به راهنمای نحوه بارگیری صحیح کتابخانه و نصب آن در IDE نیاز دارید:

www.arduino.cc/fa/guide/libraries

خط 1 شامل کتابخانه است.

بعد ، ما باید چند متغیر را اعلام کنیم ، خطوط 2-12 این کار را انجام می دهند.

ما از "cost int" برای تعریف متغیرهایی استفاده می کنیم که تغییر نمی کنند ، همه جز این جزء این دسته هستند.

ما از "int" برای تعریف متغیرهایی که تغییر می کنند استفاده می کنیم.

ما باید از پین دارای پالس با مدولاسیون (PWM) برای پین LED خود استفاده کنیم - هر پینی که "~" در کنار آن باشد ، در کد من کافی است - ما از پین دیجیتال 3 استفاده می کنیم.

در مرحله بعد ، ما باید برخی از تنظیمات را انجام دهیم - این کد تنها یک بار با روشن یا بازنشانی آردوینو اجرا می شود.

توجه داشته باشید که ما ورودی ها و خروجی های خود را تعریف می کنیم (15-20) ، مانیتور سریال را روشن می کنیم (21) ، سنسور IR را فعال می کنیم (22) و به آردوینو می گوییم که هر زمان که سیگنالی در سنسور دریافت می کنیم ، LED داخلی را چشمک بزند (23)

در مرحله بعد ، حلقه خود را ایجاد می کنیم - این کد بارها اجرا می شود و چند ثانیه از بالا به پایین می رود.

در خط 25 ، از دستور if استفاده می کنیم ، این به آردوینو می گوید "به دنبال این معیارهای خاص باشید ، اگر این معیارها برآورده شده است ، این کار خاص را انجام دهید". در این مورد ، معیارها analogRead (Button1)> 900 است ، یا به عبارت دیگر - "Arduino ، به دکمه 1 نگاه کنید ، که قبلاً آن را به عنوان پین A4 تعریف کرده بودیم ، اگر سیگنال آنالوگ دریافتی بیشتر از 900 باشد ، لطفاً به دستورالعمل های بعدی ما ادامه دهید. ، اگر نه ، لطفاً ادامه دهید ". در اینجا چیزی برای باز کردن وجود دارد ، بنابراین اجازه دهید شیرجه بزنیم: یک سیگنال آنالوگ در آردوینو مقداری برابر یا کمتر از 5 ولت است که 5 ولت برابر 1023 و 0 ولت برابر 0 است. هر ولتاژ داده شده بین 0 تا 5 ولت را می توان با یک عدد ، و با کمی ریاضی ، می توانیم آن عدد را مشخص کنیم ، یا برعکس ، یک ولتاژ. 1024 (ما 0 را به عنوان واحد در نظر می گیریم) بر 5 تقسیم می کنیم که به ما 204.8 می دهد. برای مثال ، ما از عدد 900 استفاده می کنیم ، برای تبدیل آن به ولتاژ ، ما به سادگی 900 را بر 204.8 تقسیم می کنیم و به ما 4.4 ولت می دهند. ما به آردوینو می گوییم که به دنبال ولتاژ بیشتر از 4.4 ولت پوند باشید و اگر اینطور است ، دستورالعمل بعدی ما را انجام دهید.

در مورد دستورالعمل های بعدی (خط 25) ، irsend.sendNEC (0xFF02FD ، 32) را مشاهده می کنید. این می گوید: "آردوینو ، یک پالس مدوله شده را که از پروتکل NEC ، به ویژه سیگنال FF02FD پیروی می کند ، ارسال کنید و از طول 32 بیت آن اطمینان حاصل کنید". این باعث می شود که LED IR ما به گونه ای چشمک بزند که سایر دستگاه ها بتوانند آن را درک کنند. کمی شبیه کد مورس بدانید ، اما فقط با نور نامرئی! تعداد زیادی پروتکل متفاوت وجود دارد ، هر کدام دارای صدها یا هزاران سیگنال جداگانه و هر کدام با تعداد بیت خاص خود هستند - دستگاه ما قادر خواهد بود مقدار زیادی از این سیگنال ها را تشخیص دهد ، اما بعداً به آن خواهیم پرداخت!

در خط 28 ، ما اولین تأخیر خود را داریم - این اینجا برای جلوگیری از سیگنال های تکراری ناخواسته است ، هنگامی که دکمه را فشار می دهیم و سیگنال IR ارسال می شود ، ما 100 میلی ثانیه زمان داریم تا انگشت خود را از روی دکمه برداریم. این زمان زیادی به نظر نمی رسد ، اما در عمل به نظر می رسد خوب کار می کند. تابع تاخیر به آردوینو می گوید "برای X میلی ثانیه هیچ کاری نکنید" و برای مرجع ، آنها 1000 میلی ثانیه در ثانیه هستند.

در حال حرکت به دکمه بعدی ما در خط 29 ، button5 (من در ابتدا 4 دکمه روی این ریموت داشتم ، یک پنجم اضافه کردم ، بنابراین به همین دلیل ما از کار افتاده ایم). این ، از نظر روح ، همان دکمه 1 است ، اما با چند تفاوت کلیدی. اولین تفاوتی که مشاهده می کنید عبارت for for است - این اساساً یک حلقه دیگر است - حلقه ای که در حلقه بزرگتر دیگر ، loopception قرار دارد. به طور خاص ما "برای (int i = 0 ؛ i <3؛ i ++)" داریم ، این را به عنوان "آردوینو ، اجازه دهید از 0 شروع کنیم ، دستورالعمل های زیر را تکرار کنید تا به 3 بار برسیم" بخوانید. تابع for به این دلیل استفاده می شود که بسیاری از دستگاهها طوری برنامه ریزی شده اند که به دنبال سیگنال مکرر باشند ، و در مورد ما در اینجا ، 3 بار. اگر دستگاه شما برای برنامه تکرار متفاوت درخواست می کند ، می توانید به سادگی شماره 3 را به یک شماره دیگر تغییر دهید. یکی دیگر از تفاوت های کلیدی با button5 این است که دوباره ، 3 بار یا 3x3 تکرار می شود. به عبارت دیگر ، ما سیگنال را 3 بار ارسال می کنیم ، 10 میلی ثانیه منتظر می مانیم ، 3 بار دیگر آن را ارسال می کنیم ، 10 میلی ثانیه دیگر منتظر می مانیم و سپس دوباره 3 بار ارسال می کنیم. این نوع ارتباطات برای روشن و خاموش کردن دستگاه ها متداول است و ممکن است فقط همان چیزی باشد که تلویزیون یا دستگاه شما درخواست می کند - کلید این کار این است که با همه متغیرها بازی کنید تا به نتیجه دلخواه برسید. مقدار تأخیر کوتاه را تغییر دهید ، مقدار تکرار را تغییر دهید ، 6 دسته را به جای 3 ارسال کنید ، و غیره. دستگاهها عمداً با قوانین سیگنال دلخواه برنامه ریزی شده اند ، تصور کنید اگر کنترل از راه دور تلویزیون شما سیگنال مشابهی با نوار صوت شما ارسال کرده باشد. هر بار که کانال خود را در تلویزیون تغییر می دهید ، نوار صوتی شما خاموش می شود - به همین دلیل است که قوانین سیگنال متفاوتی وجود دارد.

سه دکمه بعدی با همان اصول برنامه ریزی شده اند ، حداقل تا حدی که در بالا توضیح داده شد - بنابراین ما می توانیم تا خط 55 برویم.

مرحله 4: کد در عمق: دریافت سیگنال های IR

کد در عمق: دریافت سیگنال های IR
کد در عمق: دریافت سیگنال های IR

در خط 55 ، ما برنامه نویسی Arduino را برای تفسیر سیگنالهای IR ارسال شده توسط دیگر ریموت ها شروع می کنیم - این امر ضروری است تا بتوانید پروتکل ها و سیگنالهایی را که ریموت های شما از آنها استفاده می کنند بفهمید. اولین خط کد در خط 55 این است که اگر (irrecv.decode (& results) این عبارت را بخوانید: "آردوینو ، به دنبال یک کد IR باشید ، اگر یک کد را پیدا کردید ، مقدار واقعی را برمی گردانید ، اگر چیزی پیدا نشد ، false را بازگردانید. در صورت درست بودن ، ضبط کنید اطلاعات را در "نتایج" "قرار دهید.

با حرکت به خط 56 ، Serial.println (results.value، HEX) را داریم که در آن آمده است "Ardunio ، نتایج را در مانیتور سریال با فرمت HEX چاپ کنید". Hex ، به معنی هگزادسیمال ، راهی است که می توان یک رشته باینری (فقط 0 و 1) را به چیزی که تایپ کردن آن آسان تر است کوتاه کرد. به عنوان مثال 101010010000 "a90" است ، کد مورد استفاده برای خاموش و روشن کردن تلویزیون من ، و 111111110000001011111101 0xFF02FD است که نوار RGB من را کنترل می کند. می توانید از نمودار بالا برای تبدیل باینری به هگز و بالعکس استفاده کنید ، یا می توانید از پیوند زیر استفاده کنید:

www.rapidtables.com/convert/number/hex-to-…

در خط 57 ، ما یک تابع جدید داریم ، به نام سوئیچ مورد.

در اصل ، یک case switch به ما اجازه می دهد تا دستورالعمل های مختلف را بر اساس نتایج یک متغیر (case) مشخص کنیم. break از دستور switch خارج می شود و در انتهای هر دستور استفاده می شود.

ما در اینجا از کلید تغییر جهت تغییر نحوه چاپ در مانیتور سریال بر اساس پروتکل هایی که Arduino ما از ریموت های مختلف حس می کند ، استفاده می کنیم.

مرحله 5: نتیجه گیری

اگر س questionالی دارید - لطفاً در اینجا با من تماس بگیرید! خوشحالم که تا جایی که می توانم به شما کمک می کنم.

امیدوارم چیزی آموخته باشید که بتوانید از آن برای بهبود زندگی خود کمی استفاده کنید!

-RB

توصیه شده: