راه اندازی RGB با آردوینو و نحوه نوسان رنگ با آن
مقدمه
با سلام خدمت همه شما دوستان در این جلسه در رابطه با نوسان رنگ در RGB صحبت خواهیم کرد. پیشنهاد بنده برای خوندن ادامه مطلب این هست که اگه چیزی از آردوینو نمیدونید ، ابتدا نگاهی به دوره آردوینو ما بندازید تا یک مقدار بیشتر با مباحث مرتبط با اون آشنا بشید و درک این جلسه برای شما راحتتر بشه.
سخت افزار
طرح کلی بردبرد رو درشکل زیر ملاحظه می کنید. طولانی تربن پایه RGB که منفی است و بین همه پایه ها مشترک است را به زمین وصل میکنیم.(هر جا گفتیم زمین منظور همون قطب منفی است). این اتصال پایه منفی به زمین بافرض این است که شما یک RGB کاتد مشترک خریده اید. در صورتی که یک RGB آند مشترک داشتید باید طولانی ترین پایه RGB را که پایه مثبت مشترک است به ولتاژ + وصل کنید. دقت کنید که در آند مشترک چرخش رنگ ها برعکس است و در کدنویسی باید لحاظ شود.
البته اگه بخواید نمایی واضح تر از این مدار رو داشته باشید ، میتونید از شکل زیر استفاده کنید:
نرم افزار
کد برنامه :
بر خلاف خیلی از سنسورهایی که برای راه اندازی اون ها به یک کتابخانه مجزا نیاز هست ، برای RGB به این کتابخانه نیاز نیست. ابتدا یک نگاه کلی به این کد داشته باشید تا در ادامه به صورت خط به خط اون رو توضیح بدیم.
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میلی ثانیه ای هم در اخرکار تعریف کردیم که تغییر رنگ ها بهتر مشاهده بشه.
خوب دوستان. این جلسه هم به پایان رسید. مثل همیشه میتونید ما رو در تلگرام و یا اینستاگرام دنبال کنید:
4 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
با سلام و تشکر از سایت خوب شما . میخواستم خواهش کنم در صورت امکان نحوه اتصال آردوینو رو به بلوک led 16*32 برای تابلو های روان تجاری رو تو سایت قرار بدین . ممنون
با سلام. متاسفانه فعلا دوره مقدماتی آردوینو به پایان رسیده است. ولی در آینده درصورت نیاز قرار داده می شود.
موفق باشید.
با سلام و خسته نباشید.
بنده مدت کوتاهیه که توسط سایت شما با ماژول آردوینو آشنا شدم و باید بگم این واقعا همون چیزیه که همیشه دنبالش بودم و از شما بسیار متشکرم…
در حین مطالعه این مطلب متوجه موضوعی شدم که بنظرم اشتباهه کوچیکی پیش اومده:
در بخش «توضیحات کد آردوینو» فکر میکنم دو بخش کوچک کد آورده شده، جا به جا قرار گرفتن، یعنی از پین های خروجی برای کنترل سه رنگ صحبت شده ولی داخل تکستباکس سه متغییر سوئیچ قرار گرفتن. در عوض در بند بعدی از متغییر های ورودی کلید ها صحبت شده ولی در باکس متغییر های خروجی مربوط به رنگ ها قرار گرفتن.
اگر نظرم درست نیست لطفا برام توضیح بدین تا متوجه بشم.
با تشکر…
بله دوست عزیز. مشکل از ما بود. تصحیح انجام گرفت. ممنون از همکاری شما.