آردوینو آموزش آردوینو پروژه های آردوینو کیت آردوینو

آموزش کنترل وسایل برقی با ریموت کنترل تلویزیون و آردوینو Arduino

Arduino-BMS-control-system-ir-remote-Module-digispark
نوشته شده توسط پریسا پوربلورچیان

کنترل وسایل الکترونیکی به ساده ترین روش ممکن! تصور کنید با هزینه‌ای بسیار ناچیز و تنها با در اختیار داشتن یک ریموت کنترل تلویزیون بتوانید تمامی وسایل برقی اطراف خود را کنترل کنید. کنترل وسایل برقی با ریموت با استفاده از یک ریموت کنترل ساده مانند تلویزیون می‌تواند بسیار کاربردی باشد. در آموزش مدیریت وسایل منزل با ریموت مادون قرمز گیرنده نحوه‌ی استفاده از ریموت و دریافت کد ریموت را توضیح دادیم. در این آموزش پروژه تعریف شده در آموزش قبل را توسعه داده و به بررسی کامل آن می‌پردازیم. در ادامه این آموزش جذاب با مرجع تخصصی آردوینو به زبان فارسیدیجی اسپارک همراه باشید.

 

 

اینفرارد Infrared

اشعه مادون قرمز یا به عبارتی (Infrared Radiation (IR یک نوع اشعه الکترومغناطیسی می‌باشد. در آموزش مدیریت وسایل منزل با ریموت به طور کامل در مورد اینفرارد توضیح داده‌ام. به طور کلی طیف از شکل موج تولید می‌شود و  هر موج یک فرکانس را تولید می‌کند. مادون قرمز اینفرارد Infrared در ریموت‌های IR مانند ریموت تلویزیون، ریموت تهویه و یا ریموت درب استفاده شده است. با روشن و خاموش کردن هریک از کلیدهای ریموت پالس به گیرنده ارسال شده و ماژول گیرنده پس از پردازش فرکانس و دامنه پالس، فرمان را اجرا خواهد کرد. در این آموزش با استفاده از ریموت کنترل مخصوص تلویزیون و یا گیرنده های دیجیتال از این ماهیت استفاده خواهیم کرد.

 

ماژول گیرنده مادون قرمز Infrared

ماژول گیرنده مادون قرمز Infrared دارای فرکانس ۳۷٫۹ کیلوهرتز یا ۳۸ کیلوهرتز می‌باشد. این گیرنده دارای سنسور TL1838 اینفرارد مادون قرمز است. ابعاد سنسور در حدود ۱۸۳۸، ۷٫۳ میلی متر است. همچنین محدوده پاسخگویی سنسور گیرنده با توجه به اطلاعات گفته شده در دیتاشیت ۱۸ متر است. ولی با توجه به تستی که در طول پروژه انجام شد، بیشتر از ۷ متر گیرنده پاسخگو نیست. ولتاژ کاری ماژول گیرنده مادون قرمز بین ۲٫۷ تا ۵٫۵ ولت است.  زاویه دید ماژول گیرنده مادون قرمز ۹۰ درجه است. این ماژول دارای سنسوری بسیار سبک و تا حدود ۳ گرم می‌باشد. ماژول گیرنده مادون قرمز به تربیت دارای سه پایه Signal, VCC, GND می‌باشد. ابعاد ماژول گیرنده مادون قرمز ۲٫۵ * ۱٫۵ * ۱٫۵ سانتی متر است.

 

رله Relay

ماژول رله Relay دارای ولتاژ ۵ ولت و توانایی سوئیچ کردن خروجی ۲۲۰ ولت را دارا می‌باشد. رله Relay همچنین توان ۱۰ آمپر دارد. برای پروژه‌های DIY مناسب می‌باشد. رله Relay در علم الکترونیک همانند کلید عمل می‌کند. در آموزش استفاده از رله در پروژه های DIY به بررسی رله و نحوه ی راه اندازی آن پرداختیم. ابتدا آموزش مربوطه را مطالعه کنید و سپس در صورت سوال و برخورد به مشکل از همان طریق اعلام کنید. در این آموزش با استفاده از ریموت کنترل تلویزیون و یا ریموت‌های مخصوص گیرنده دیجیتال، به ۸ کانال از یک رله فرمان می‌دهیم. با تعریف کد هر یک از کلیدهای ریموت کنترل، به خروجی فرمان ارسال می‌کنیم. سپس توسط یک کلید رله را غیر فعال خواهیم کرد. در ادامه آموزش به بررسی کامل آن خواهیم پرداخت.

کنترل وسایل برقی با ریموت IR - دیجی اسپارک مرجع آردوینو

 

فراخوانی کتابخانه در آردوینو

در آموزش مدیریت وسایل با ریموت مادون قرمز برای راه اندازی ریموت IR نیاز به کتابخانه IRRemote خواهیم داشت. لینک دانلود کتابخانه IRRemote در صفحه محصول ماژول ریموت IR با کنترل و رله در قسمت دانلود قرار دارد. با کلیک بر روی آن و دانلود کتابخانه IRRemote، آن در محل نصب آردوینو Arduino / Library ذخیره کنید. همچنین نحوه نصب کتابخانه در نرم افزار آردوینو در پست نصب کتابخانه در نرم افزار آردوینو کامل آموزش داده شده است، در صورت نیاز ابتدا مطالعه و سپس کتابخانه را فراخوانی کنید.

اتصالات مدار

  • پایه سیگنال (S) ماژول گیرنده مادو قرمز را به پایه ۱۱ دیجیتال آردوینو اتصال دهید.
  • پایه VCC ماژول گیرنده مادون قرمز را به پایه ۵ ولت آردوینو اتصال دهید.
  • پایه GND ماژول گیرنده مادون قرمز را به پایه GND آردوینو اتصال دهید.
  • پایه IN1 رله Relay را به پایه ۷ آردوینو اتصال دهید.
  • پایه IN2 رله Relay را به پایه ۶ آردوینو اتصال دهید.
  • پایه IN3 رله Relay را به پایه ۵ آردوینو اتصال دهید.
  • پایه IN4 رله Relay را به پایه ۴ آردوینو اتصال دهید.
  • پایه IN5 رله Relay را به پایه ۳ آردوینو اتصال دهید.
  • پایه IN6 رله Relay را به پایه ۲ آردوینو اتصال دهید.
  • پایه IN7 رله Relay را به پایه ۹ آردوینو اتصال دهید.
  • پایه IN8 رله Relay را به پایه ۱۰ آردوینو اتصال دهید.

 

کد برنامه کنترل وسایل برقی با ریموت IR

 

وسایل مورد نیاز

شیلد پروتوتایپ همراه با برد بورد آردوینو

برد آردوینو Arduino UNO

ماژول گیرنده مادون قرمز

ماژول رله ۸ کانال Relay

کابل فلت نری به نری

کابل فلت نری به مادگی

 

آموزش ساخت مدار کنترل وسایل برقی با ریموت IR و آردوینو - دیجی اسپارک

تحلیل کد برنامه کنترل وسایل برقی

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

نکته مهم

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

 

دریافت کد کلید های ریموت کنترل

در ابتدا برنامه را کامپایل و سپس سریال مانیتور را باز کنید. نوار پایینی را روی بادریت ۹۶۰۰ تنظیم کنید. حال با فشردن یکی از کلیدهای ریموت کنترل یک کد در سریال مانتیور نمایش داده خواهد شد. به همین ترتیب ۷ کلید دیگر را به دلخواه انتخاب کنید و کد هر یک از کلیدها را دریافت کنید. پیشنهاد می‌شود از کلید ۱ تا ۸ ریموت کنترل را برای این منظور انتخاب کنید تا دچار سردرگمی در کدهای دریافتی نشوید.

 

فعال شدن خروجی

همانطور که در کدها توضیح داده شده است، ۸ خروجی برای ارسال فرمان در نظر گرفته شده است. ۸ وردی رله ۸ کانال در کد برنامه به عنوان خروجی – Output تعریف شده‌اند. سپس نوبت به دریافت کد و ارسال فرمان خواهد رسید. کد در یافتی از کلید ریموت به صورت زیر در برنامه تعریف می‌شود:

در خط ۳۹ برنامه رله اول به صورت زیر تعریف شده است:

به این ترتیب به جای عبارت FF807F کد کلید شماره یک ریموت کنترل خود را جایگزین کنید. به همین ترتیب در طول برنامه ۷ کلید دیگر تعریف شده است. طبق مراحل گفته شده کدها را دریافت و در کد برنامه آردوینو جایگزین کنید.

 

غیر فعال شدن خروجی

برای غیر فعال شدن هر یک از خروجی ها یک کلید ثابت در کد برنامه تعریف می‌کنیم. با فشردن کلید خروجی مورد نظر غیرفعال شده و رله قطع خواهد شد. در این کد کلید ۰ را به عنوان کلید غیر فعال در نظر می‌گیریم. طیق آنچه گفته شد، کد کلید ۰ را از طریق سریال مانیتور دریافت و در کد برنامه جایگزین می‌کنیم. با توجه به کدها در می‌یابید که یک کد مشترک بعد از فراخوانی هر یک از کلیدها استفاده شده است. با خواندن کد ۰ کلید، رله مورد نظر غیر فعال خواهد شد. همچنین در صورت فعال بودن تمامی کانال‌ها با فشردن کلید ۰، هر ۸ خروجی غیر فعال خواهد شد. از این رو همانند زیر در کد برنامه تعریف خواهد شد:

به همین ترتیب هر ۸ کانال را تعریف و کد مربوط به آن را در برنامه جایگرین کنید. به این ترتیب توسط یک ریموت کنترل می‌توانید ۸ وسیله برقی را از راه دور کنترل کنید.

 

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۳۶ دیدگاه

    • سلام
      از توجه شما ممنونم.
      در حال حاضر خیر ولی می‌توانید برای آموزش های IR Tracking و تیلت و متال تاچ پروژه انجام دهید.

    • سلام
      هیچ تفاوتی ندارد و تنها باید به اتصالات پایه ها مطابق با کدها دقت کنید.
      همچنین دقت کنید کد ریموت را به درستی وارد کنید. همانطور که در متن آموزش گفته شده است پس از عبارت ۰x…. کد ریموت را وارد نمایید.

  • با سلام و عرض خسته نباشید. قبل از همه چیز از زحمات و آموزش های جالبتون تشکر میکنم. کدی که برای این مدار نوشتید رو تغییر کوچکی دادم و فکر کنم کد بهتری حاصل شد! کدی که شما نوشتید، برای روشن و خاموش کردن یک رله، به دو کلید از ریموت کنترل احتیاج داره. یعنی مثلا کلید ۱ از ریموت کنترل برای روشن کردن و کلید ۰ برای خاموش کردن رله ی اولی استفاده میشه. حال اگر بخواییم یه دستگاه بخصوص رو خاموش کنیم، با کدی که شما نوشتید و فشردن کلید صفر، کل دستگاه هایی که به رله ها متصل هستن خاموش میشن و این منطقی نیست. کد رو طوری تغییر دادم که با زدن کلید ۱، رله ی ۱ روشن و با زدن مجدد این کلید رله ی ۱ خاموش بشه! اینجوری کانال های خروجی همشون با هم خاموش نمیشن.
    کافیه وضعیت خروجی رله ۱ رو معکوس کنیم! یعنی اول وضعیت رله ۱ رو بررسی کنیم. بعد اگر خروجی رله ۱ خاموشه روشنش کنیم و اگر روشنه خاموشش کنیم که با not کردن وضعیت جاری رله به این مهم دست پیدا میکنیم. کد رو در نظر بعدی مینویسم که صفحه به هم نریزه…

    • سلام
      از توجه و دقت شما بسیار ممنونم.
      امیدوارم دیگر کاربران از کد ارسالی شما استفاده کنند. از اینکه تجربه خود را با ما و دیگر کاربران به اشتراک میگذارید، سپاسگزارم.

  • #include
    #include
    #include
    #include

    int RECV_PIN = 11;

    int Relay1 = 7;
    int Relay2 = 6;

    IRrecv irrecv(RECV_PIN);
    decode_results results;

    void setup(){
    Serial.begin(9600);
    irrecv.enableIRIn();
    pinMode (Relay1, OUTPUT) ;
    pinMode (Relay2, OUTPUT) ;
    }

    void loop() {
    if (irrecv.decode(&results)){
    Serial.println(results.value, HEX);
    if(results.value == 0xC03FA05F){
    digitalWrite (Relay1, !(digitalRead (Relay1)));
    }
    if(results.value == 0xC03F609F){
    digitalWrite (Relay2, !(digitalRead (Relay2)));
    }
    irrecv.resume();
    }
    }

      • تفاوت کدها فقط در این خط هستش:
        digitalWrite (Relay1, !(digitalRead (Relay1)));
        که وضعیت جاری رله رو not میکنیم. چون اولین بار رله خاموشه، not خاموش بودن میشه روشن شدن! بنابراین دستور روشن شدن به رله ارسال میشه… و برعکس زمانی که رله روشنه…

        راستی میشه از کد چندتا کنترل در این برنامه استفاده کرد! مثلا اگر دو تا کنترل داریم و میخواییم با زدن دکمه ی ۱ از هر دو کنترل، رله ۱ فعال و غیر فعال بشه، در دستور if کد کنترل دوم را با کد کنترل اول or میکنیم. به این ترتیب:
        if(results.value == 0xC03FA05F || results.value == 0xFF807F)
        بنابراین ساختار تصمیم گیری if با دو نوع کد فعال میشه! کد ۰xC03FA05F که با زدن دکمه ۱ از کنترل اول بنده ارسال شده و کد ۰xFF807F هم از کنترل دوم ارسال شده.
        به این دلیل دو تا کنترل رو تعریف کردم، چون ممکنه به هر دلیلی به یکی از کنترل ها دسترسی نداشته باشیم و بخواییم با کنترل دیگه ای مدار رو فعال و غیر فعال کنیم.
        موفق باشید …

        • بسیار عالی
          از توضیحات کامل شما ممنونم. امیدوارم دیگر کاربران از تجربیات شما استفاده کنند. حتما از همین طریق در ارتباط باشید.

        • سلام دوست عزیز
          من واقعآ از این راه حل ممنونم
          شما با این کد خیلی کار من رو راه انداختین
          بازم سپاسگزارم و امیدوارم موفق باشید

  • سلام ببخشید جرا این ارور را میدهد
    Arduino: 1.8.1 (Windows 10), Board: “Arduino/Genuino Uno”

    Build options changed, rebuilding all
    C:\Users\KAZEMI-PC\Desktop\p1\ARDUINO.1.8.1.Portable_YasDL.com\arduino-1.8.1\libraries\RobotIRremote\src\IRremoteTools.cpp:5:16: error: ‘TKD2’ was not declared in this scope

    int RECV_PIN = TKD2; // the pin the IR receiver is connected to

    ^

    exit status 1
    Error compiling for board Arduino/Genuino Uno.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    • سلام
      باید پایه سیگنال سنسور مادون قرمزگیرنده را به پایه ۱۱ وصل کنید و در کد برنامه تعریف کنید. خطای شما در خط ۲ برنامه است که به جای وارد کردن پایه دیجیتال یک عبارت نامفهوم وارد کرده اید.

      ;int RECV_PIN = 11

  • سلام ! اموزش خیلی خوبی بود. خوشحالم میبینم مثل خیلی کشورهای دیگه مفاهیم پایه ای خیلی خوب به اشتراک گذاشته میشه.
    دو نکته برأی دوستان :
    وقتی که تعداد خروجی ها زیاد میشه راحتره که از array و یه حلقه جهت تعیین وضعیت شان استفاده کرد .
    یه مشکل بزرگ استفاده از اردنیونو و رله با وسائل برقی و بخصوص کاربرد صنعتی هنگ کردن اردوینو بعد از قطع و وصل کردن رله هست. حتی اگه رله ها ایزوله نوری باشند. ایزوله کردن منبع تغذیه خیلی مهم هست.

    • سلام
      از توجه شما و اینکه اطلاعات خود را با دیگر کاربران به اشتراک می‌گذارید، صمیمانه سپاسگزارم.
      ولی در این پست راجع به موارد صنعتی صحبت نشده است.

        • باسلام
          کاربر گرامی بنده از ریموت شما اطلاعی ندارم. ولی دقت داشته باشید که برای هر کلید روی ریموت کد منحصر به فردی وجود دارد. که بایستی یکی یکی کدهای هر ریموت را در سریال مانیتور دریافت کرده و سپس مقادیر آن‌ها را در کدها قرار دهید. برای هر مقدار می‌توانید شرط تعرف کرده و خروجی تعیین کنید. برای این منظور به سطرهای ۳۸ تا ۱۵۲ دقت کنید.

  • با سلام وتشکر ازسایت خوبتون چطوری میشه رویه این برنامه رمز گذاشت مثلا ۱۲۳۴را بزنیم بعد کلید های روشن وخاموش فعال شود
    چگونه میتوان طوری برنامه بدیم که این رمز قابل تعویض باشد با خود ریمت برای تغییر رمز فقط از خود کنترل استفاده کرد

    • سلام
      باید در کد برنامه تغییراتی ایجاد کنید. از دستورات شرطی مانند Switch استفاده کنید و شرط گذاری کنید.

        • توابع شرطی مانند switch در حلقه LOOP تعریف می‌شود. باید برای هر رمز یک حالت Case از دستور Switch انتخاب و سپس برای هر case یک شرط تعریف کنید. به عنوان مثال با زدن کلید ۱، ال ای دی اول روشن گردد در غیر اینصورت دستور بعدی اجرا گردد.

  • سلام من این ماژول واسه ضبط خودرو میخوام استفاده کنم که ریموت نداره و روی تک تک کلیدهای ضبط میخوام راه بندازم و ریموت رو در کلیدهای فرمان راه اندازی کنم. لطفا در این خصوص نظر کارشناسی خودتونو اعلام بفرمایید.

    • سلام
      کاربر گرامی دقت داشته باشید، انجام چنین کاری نیاز به ایجاد تغییرات سخت افزاری روی دستگاه ضبط خودرو است. از اینرو با فرض داشتن دانش فنی و اطلاع کافی از سخت افزار ضبط خودرو، بازهم کار پیچیده‌ای خواهد بود. بنابراین از بحث این مبحث خارج می‌باشد.