جلسه 15 دوره arduino- نوسان رنگ rgb

آموزش جامع آردوینو به زبان ساده ـ نوسان رنگ در RGB{جلسه پانزدهم}

 

نوسان رنگ در RGB با آردوینو

سلام مجدد خدمت دوستان و همراهان عزیز

در این جلسه در رابطه با نوسان رنگ در RGB صحبت خواهیم کرد.

 

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

طرح کلی بردبرد رو درشکل بالا ملاحظه می کنید. طولانی تربن پایه RGB که منفی است و بین همه پایه ها مشترک است را به زمین وصل میکنیم.(هر جا گفتیم زمین منظور همون قطب منفی است). این اتصال پایه منفی به زمین بافرض این است که شما یک RGB کاتد مشترک خریده اید. در صورتی که یک RGB آند مشترک داشتید باید طولانی ترین  پایه RGB را که پایه مثبت مشترک است به ولتاژ + وصل کنید. دقت کنید که در آند مشترک چرخش رنگ ها برعکس است و در کدنویسی باید لحاظ شود.

برای اینکه خودتون قطعات رو روی بردبرد بچینید از شکل زیر استفاده کنید:

 

کد نوسان رنگ در آردوینو

حالا به سراغ برنامه مورد نظر میریم:

    /*
    robouav.ir. 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 > 255) red = 0;
      }
      if (digitalRead(greenSwitchPin) == LOW)
      {
        green ++;
        if (green > 255) green = 0;
      }
      if (digitalRead(blueSwitchPin) == LOW)
      {
        blue ++;
        if (blue > 255) blue = 0;
      }
      analogWrite(redLEDPin, red);
      analogWrite(greenLEDPin, green);
      analogWrite(blueLEDPin, blue);  
      delay(10);
    }

 

توضیحات کد آردوینو

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

 

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

int redLEDPin = 11;
int greenLEDPin = 10;
int blueLEDPin = 9;
 

در کد بالا ما 3تا پین خروجی برای کنترل 3تا رنگمون داریم. این ها درحقیقت پین های PWM هستند که تعیین میکنند چه مقدار جریان وارد شود تا روشنایی رنگ مورد نظر را ببینیم یعنی اگر جریان مربوط به پین رنگ قرمز کم باشد کم رنگ تر است و اگر جریان زیادی وارد شود پر رنگ تر می شود.

int redSwitchPin = 7;
int greenSwitchPin = 6;
int blueSwitchPin = 5;

3تا پین دیگه هم لازم داریم که برای 3تا کلید روی برد هست. دقت کنید ما این سه تا پین رو در تابع SETUP به صورت ورودی تعریف کردیم. ورودیمون هم به صورت پولاپ تعریف کردیم تا وقتی کاری با مدار نداریم نویز نگیره و رو حالت 5ولت باقی بمونه. وقتی هم با مدار کار داریم و کلیدها فشرده میشن حالت LOW بوجود می آید چون اگه به مدار دقت کنید می بینید که ما کلیدهامون رو به ولتاژ منفی یا همون زمین وصل کردیم که اگه یوقت فشرده شدن حالت صفر ولت یا همون LOW رو پایه آردوینو قرار بگیره.

برای مطالعه پولاپ هم میتونید به لینک زیر مراجعه کنید:

پولاپ

 تابع  SETUP در آردوینو

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);
}

قبل از تابع setup ما اومدیم و سه تا متغیر red و green و blue را تعریف کردیم. این متغیرها رو برای این تعریف کردیم که میزان شدت جریانی که کم کم برای هر رنگ افزایش پیدا میکنه رو درونش ذخیره کنیم. بنابراین اگر متغیر red صفر باشد رنگ قرمز هم خاموش است. اگر هم این متغیر 255 باشد حداکثر شفافیت و نورانی بودن را داراست. به همین ترتیب روی هرمقداری بود میزان نورانی بودن آن را می رساند.

تابع LOOP در آردوینو

 

void loop()
{
  if (digitalRead(redSwitchPin) == LOW)
  {
    red ++;
    if (red > 255) red = 0;
  }
  if (digitalRead(greenSwitchPin) == LOW)
  {
    green ++;
    if (green > 255) green = 0;
  }
  if (digitalRead(blueSwitchPin) == LOW)
  {
    blue ++;
    if (blue > 255) blue = 0;
  }

تابع loop دو تا قسمت داره. قسمت اول چک میکنه که کدوم کلیدها فشرده شده اند تا تغییرات لازم رو اعمال کنه. یعنی هرکلیدی فشرده شده بود رو با تابع digitalRead شناسایی می کنه. وقتی آردوینو مقدار LOW رو شناسایی میکنه متوجه میشه که الان کلید فشرده شده و باید یک واحد به متغیر red اضافه کنه و red=1 می شود. علامت ++ یکی یکی به متغیر مورد نظر اضافه میکنه. با این وجود ما باید مراقب باشیم بخاطر اینکه حداکثر مقداری که برای PWM استفاده می کنیم 255 است بنابرین ما در خط بعدی چک می کنیم که این مقدار از 255 بیشتر نشده باشد و اگر بیشتر شده دوباره به صفر برگردد. ما برای رنگ قرمز رو توضیح دادیم بقیه رنگ ها هم به همین صورته.

  analogWrite(redLEDPin, red);
  analogWrite(greenLEDPin, green);
  analogWrite(blueLEDPin, blue);  
  delay(10);
}

بخش دوم تابع LOOP از تابع ‘analogWrite’ برای اختصاص دادن متغیرها به پین ها خودشون استفاده کردیم یعنی گفتیم روی پایه redLEDPin که مربوط به رنگ قرمز است مقدار متغیر red را قرار دهد و به همین ترتیب برای رنگ های سبز و آبی هم مقدار دو متغیر green و blue را قرار دهد. یه تاخیر 10میلی ثانیه ای هم در اخرکار تعریف کردیم که تغییر رنگ ها بهتر مشاهده بشه.

برای دریافت آخرین مطالب سایت  و همچنین مطالب منحصر به فرد دیگر که در سایت منتشر نمی شوند میتوانید در کانال تلگرام ما عضو شوید و یا در اینستاگرام ما را فالوو کنید:

پیروز باشید

قاسم قاسمی

 

2 نظر

  • شهریار عباسی

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

    • حامد قاسمی

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

  • نوشتن نظر

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

    Optionally add an image (JPEG only)