آردوینوپروژه آردوینو

کنترل RGB LED با شاسی فشاری

در این درس می خواهیم با ترکیبی از مطالبی که در درس های گذشته یاد گرفتیم ، با سه کلید فشاری (push switches) یک LED RGB را که در درس ۳ یاد گرفتید را کنترل کنیم تا ترکیبی از رنگ های مختلف را داشته باشیم.

LED RGB

قطعات مورد نیاز :

۱ برد آردوینو Uno R3 LED RGB
۲ برد بورد LED RGB
۳ RGB LED
۴ مقاومت ۲۷۰ اهم LED RGB
۵ دکمه فشاری LED RGB
۶ جامپر

آرایش برد بورد

آرایش برد بورد در شکل زیر نمایش داده شده است. بلند ترین پایه LED RGB که همان پایه مشترک به زمین بود را بایستی به زمین برد بورد اتصال دهیم.

نحوه سیم بندی این مدار بر طبق LED کاتد مشترک صورت گرفته است. اگر شما یک LED آند مشترک دارید ، باید پایه دوم یا مشترک LED ها را به منبع تغذیه ۵ ولت متصل کنید. دقت داشته باشید که با استفاده از LED آند مشترک ، چرخش رنگ های شما معکوس خواهد شد.

LED RGB

برنامه آردوینو

برنامه ای را که در ادامه آمده است را در آردوینو خود بارگذاری نمایید:


    /*
    Adafruit Arduino - Lesson 7. RGB Fader
    */
     
    int redLEDPin = 11;
    int greenLEDPin = 10;
    int blueLEDPin = 9;
     
    int redSwitchPin = 7;
    int greenSwitchPin = 6;
    int blueSwitchPin = 5;
     
    int red = 0;
    int blue = 0;
    int green = 0;
     
    void setup()
    {
      pinMode(redLEDPin, OUTPUT);
      pinMode(greenLEDPin, OUTPUT);
      pinMode(blueLEDPin, OUTPUT);  
      pinMode(redSwitchPin, INPUT_PULLUP);
      pinMode(greenSwitchPin, INPUT_PULLUP);
      pinMode(blueSwitchPin, INPUT_PULLUP);
    }
     
    void loop()
    {
      if (digitalRead(redSwitchPin) == LOW)
      {
        red ++;
        if (red > ۲۵۵) red = 0;
      }
      if (digitalRead(greenSwitchPin) == LOW)
      {
        green ++;
        if (green > ۲۵۵) green = 0;
      }
      if (digitalRead(blueSwitchPin) == LOW)
      {
        blue ++;
        if (blue > ۲۵۵) blue = 0;
      }
      analogWrite(redLEDPin, red);
      analogWrite(greenLEDPin, green);
      analogWrite(blueLEDPin, blue);  
      delay(10);
    }

ترکیب رنگ ها

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

شما می توانید زمانی که نور یک رنگ از LED به مقدار مناسبی رسید ، دکمه مربوط به رنگ دیگری را فشار دهید تا با رنگ قبلی ترکیب شود. به این ترتیب شما می توانید شاهد ترکیب رنگ های مختلفی باشید.

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

این برنامه مطابق آن چیزی است که در درس شماره ۳ گفته شد. در اینجا هم ما سه پایه خروجی داریم که LED را کنترل می کنند. این سه پایه خروجی PWM آردوینو هستند که با کنترل توان خروجی آنها، میزان رنگ LED ها را کنترل می کنیم.

این پایه ها به وسیله مقاومت داخلی pull up  به طور دائم دارای مقدار HIGH می باشند. وقتی که یکی از دکمه ها فشار داده می شود ، پایه مربوط به خود را به مقدار LOW تغییر می دهد. این مقدار ناشی از اتصال  کوتاه کلید با زمین اتفاق می افتد.

تعریف پایه LED ها و متغیر ها

بعد معرفی پایه های دکمه ها و LED ها ، نوبت به معرفی سه متغیر به نام های قرمز ‘red’ و آبی ‘blue’ و سبز ‘green’ می رسد.

int red = 0;
int blue = 0;
int green = 0;

این متغیرها برای نگه داشتن آخرین مقادیر شدت روشنایی هر رنگ از LED به کار می روند. یعنی اگر آخرین مقدار رنگ قرمز برابر ۰ باشد ، آنگاه قسمت قرمز رنگ LED خاموش می باشد. اگر مقدار آن برابر ۲۵۵ باشد آنگاه میزان روشنایی آن رنگ دارای بیشترین مقدار می باشد. 

تابع حلقه به دو قسمت تقسیم می شوند: قسمت اول هر دکمه را چک کرده و متناسب با آن ، مقادیر سه متغیر ‘red’ ، ‘green’ و ‘blue’ را مقدار دهی می کند.  همه دکمه ها شبیه به هم عمل می کنند با این تفاوت که هر کدام مربوط به یکی از سه رنگ می باشد.

    if (digitalRead(redSwitchPin) == LOW)
      {
        red ++;
        if (red > ۲۵۵) red = 0;
      }

تشریح کد

اولین جمله شرطی شرایط پایه مربوط به دکمه قرمز را چک می کند که می تواند به دو حالت منطقی ۰  و یا ۱ باشد. اگر دکمه فشرده نباشد آنگاه به علت وجود مقاومت PULL UP مقدار پایه برابر ۵ ولت یا همان ۱ منطقی می باشد. اگر که دکمه فشرده شود ، مقدار پایه به ۰ منطقی تبدیل می شود که ناشی از اتصال کوتاه شدن پایه به زمین می باشد. در زمانی که مقدار پایه برابر ۰ یا همان LOW شود ، آنگاه وارد زیر مجموعه شرط اول می شویم و یک مقدار به متغیر ‘red’ اضافه می شود.

در اینجا البته از یک نظر بایستی احتیاط نمود . از آن جا که نهایت مقدار قابل قبول برای موج PWM برابر ۲۵۵ می باشد ، بایستی طی ایجاد یک محدودیتی ، مانع از افزایش مقدار متغیر بشویم. برای این منظور در خط بعد با ایجاد یک جمله شرطی دیگر این محدودیت را اعمال کرده که در صورت افزایش متغیر از ۲۵۵ ، آن را به مقدار صفر می رسانیم و دوباره شروع می کنیم.

قسمت دوم تابع حلقه به دستور ‘analogWrite’s مربوط می شود که مقادیر متغیرهای سه رنگ را به مقدار آنالوگ تبدیل کرده و به پایه های LED انتقال می دهد.

 analogWrite(redLEDPin, red);
 analogWrite(greenLEDPin, green);
 analogWrite(blueLEDPin, blue); 

در نهایت تابع نیز یک تاخیر کوتاه درنظر گرفته شده تا تغیر رنگ های LED با سرعت قابل کنترل تری صورت پذیرد.

علت گزاشتن تاخیر در برنامه

سعی کنید تا دستور تاخیر در پایان برنامه را حذف کنید. به این منظور می توانید دستور تاخیر را به کامنت تبدیل کنید.


 analogWrite(blueLEDPin, blue);  
  // delay(10);
  }

این روش بسیار کارآمد است و اگر در زمانی نیاز به آن دستور شد ، دیگر نیازی به نوشتن دوباره دستور ندارید و فقط کافیست که // را از ابتدای آن حذف کنید.

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

یک کار دیگر که شما می توانید انجام دهید این است که طرز کار مدار را به گونه ای تغییر دهید که کنترل LED ها مانند کنترل چراغ های راهنمایی صورت پذیرد.  به این ترتیب که دکمه بالایی رنگ LED را سبز کند ، دکمه وسط آن را نارنجی و دکمه پایین را قرمز کند.

این مطلب نیز به پایان رسید، امیدواریم برای شما عزیزان مفید واقع شده باشد، همچنین می تواند جهت کسب اطلاعات تکمیلی از لینک های زیر دیدن کنید:
What is RGB LED

برچسب ها
نمایش بیشتر

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا
بستن