آردوینو سیستم اوپن سورس (متن باز) است که میشود گفت همان AVR است. ولی در قالبی بسیار سادهتر و مفهومیتر برای یادگیری زبان برنامه نویسی میباشد. مدلهای بسیاری تا کنون از اردوینو ساخته شده که می توان به UNO,MEGA وmini اشاره کرد. قبل از توضیحات در مورد پروژه باید اضافه کنم که این پروژه نیازمند آشنایی با برنامه نویسی و مدارهای آردوینو در سطح نیمه حرفهای میباشد. در پروژه LED RGB آردوینو قصد دارم یک عدد RGB را توسط سه پتانسیومتر کنترل کنم. سپس نتیجه را روی LCD کاراکتری نمایش دهم. توجه داشته باشید LCD مورد استفاده در این پروژه به همراه رابط I2Cمیباشد. هم پینها را کمتر میکند و هم راه اندازی را راحتتر میکند. این رابط ۱۶ پایه LCD را به ۴ پایه تبدیل می کند. در ادامه آموزش LED RGB آردوینو با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
۱- کتابخانه آردوینو
در این آموزش از یک کتابخانه استفاده میکنیم. کتابخانه LiquidCrystal_I2C.h برای ایجاد ارتباط با مبدل I2C ال سی دی کاراکتری میباشد. دقت داشته باشید که در این آموزش از برد آردوینو مدل Uno استفاده شده است. از اینرو اتصالات هم به ترتیب به همان پایههای نام برده شده متصل میشوند.
اتصالات مدار
پتانسیومترها: ابتدا سه پتانسیومتر را به داخل برد برد فرو کنید. سپس دو پایه کنار پتانسیومتر را را یکی به زمین و دیگری را به مثبت متصل نمایید.این کار را برای سه پتانسیومتر انجام دهید.پایه ی وسط اولین پتانسیومتر را به ورودی انالوگ A1 متصل کنید.پایه وسط پتانسیومتر دوم را به A0 متصل کنید و در آخر پایه وسط پتانسیومتر سوم را به پایه ی A2 متصل نمایید.دقت نمایید که شما می توانید از پایه های دیگر آنالوگ نیز استفاده کنید ولی اگر از LCD I2C استفاده می کنید نباید از پایه های A4 و A5 استفاده کنید زیرا این پایه ها برای ارتباط I2C رزرو شده هستند.
LED RGB: برای RGB هم پایه منفی را به زمین(اگر از ماژول استفاده نمی کنید حتما از مقاومت استفاده کنید). و سپس پایه R را به پایه ۹ ,G به ۱۰ و B را به پایه ی ۱۱ متصل نمایید.دقت کنید که اگر می خواهید از پایه های دیگر استفاده کنید آن بایه ها باید قابلیت PWM را دارا باشند.علامت PWM در اردوینو به این شکل(~) می باشد.
LCD I2C کاراکتری: به دلیل استفاده از رابط I2C ما فقط ۴ پایه خواهیم داشت.پایه منفی به زمین و مثبت به ۵ ولت متصل می شوند و پایه ی SDA به A4 و پایه ی SCL به A5 متصل می شود در ضمن شما نمی توانید SDA و SCL را به پایه های آنالوگ دیگر متصل کنید.
۲- کدنویسی LED RGB آردوینو
ابتدا نرم افزار Arduino IDE را باز کرده و کدهای زیر را در آن بنویسید.سپس گزینه Verify را انتخاب کنید.اگر مشکل و خطایی وجود نداشت آن را upload کنید.
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C mylcd(0x3F,16,2); int LEDR=9; int LEDG=10; int LEDB=11; int potr=A1; int potg=A0; int potb=A2; void setup() { // put your setup code here, to run once: mylcd.init(); mylcd.backlight(); pinMode(LEDR,OUTPUT); pinMode(LEDG,OUTPUT); pinMode(LEDB,OUTPUT); pinMode(potr,INPUT); pinMode(potg,INPUT); pinMode(potb,INPUT); } void loop() { // put your main code here, to run repeatedly: int rvalue=analogRead(potr); int gvalue=analogRead(potg); int bvalue=analogRead(potb); int Rvalue= map(rvalue,0,1023,0,255); int Gvalue =map(gvalue,0,1023,0,255); int Bvalue= map(bvalue,0,1023,0,255); mylcd.clear(); mylcd.setCursor(2,0); mylcd.print("Control RGB"); mylcd.setCursor(1,1); mylcd.print("R G B"); mylcd.setCursor(2,1); mylcd.print(Rvalue); mylcd.setCursor(7,1); mylcd.print(Gvalue); mylcd.setCursor(12,1); mylcd.print(Bvalue); analogWrite(LEDR,Rvalue); analogWrite(LEDG,Gvalue); analogWrite(LEDB,Bvalue); delay(500); }
تحلیل کد LED RGB آردوینو
ابتدا باید ذکر کنم در این بخش فقط توابع مهم تشریح شده اند و بهتر است خودتان بقیه کد را تحلیل کنید تا دستورات جدید در ذهن شما بماند
#include <LiquidCrystal_I2C.h>
در این خط ما کتابخانه ی LCD کاراکتری I2C را به برنامه اضافه کردیم.
LiquidCrystal_I2C mylcd(0x3F,16,2);
در این خط ابتدا شیٌ از نوع LiquidCrystal_I2C به نام mylcd ساخته شده.دستور ۰x3F آدرس ماژول I2C برای اردوینو می باشد.۲ ارگومان بعدی نشانه ۱۶ در ۲ بودن LCD است.
mylcd.init();
در این خط LCD راه اندازی شده است.این کار را فقط نیاز است که ۱ بار انجام دهیم.
mylcd.backlight();
در این خط نور پس زمینه LCD راه اندازی شده است.این کار را هم فقط نیاز است که ۱ بار انجام دهیم.
int rvalue=analogRead(potr); int gvalue=analogRead(potg); int bvalue=analogRead(potb);
در این ۳ خط ابتدا مقدار آنالوگ potg,potr و potb خوانده می شود سپس به ترتیب در gvalue,rvalue و bvalue ذخیره می شود.
int Rvalue= map(rvalue,0,1023,0,255); int Gvalue =map(gvalue,0,1023,0,255); int Bvalue= map(bvalue,0,1023,0,255);
قدار خوانده شده از پتانسیومتر ها عددی بین ۰ تا ۱۰۲۸ می باشد.ولی برای استفاده از PWM ما نیاز به عددی بین ۰ تا ۲۵۵ داریم به همین دلیل از دستور map استفاده می کنیم. ارگومان اول،متغیری است که عددی که باید تبدیل شود در آن وجود دارد.ارگومان ۲و۳ مقدار اولیه متغیر است و ارگومان ۴و۵ مقداری است که عدد اولیه باید به عددی بین ان تبدیل شود.
mylcd.clear();
این دستور هر چیزی که داخل LCD نوشته شده باشد را پاک می کند.
mylcd.setCursor(2,0);
این دستور محل نوشته شدن مطلب را مشخص میکند.عدد اول داخل پرانتز شماره ستون و عدد دوم شماره ی ردیف می باشد.دقت کنید که این اعداد در هر LCD از ۰ شروع می شود نه از ۱٫یعنی ستون اول از ردیف دوم به این صورت نوشته می شود(۰,۱)
mylcd.print();
این دستور چیزی را که داخل پرانتز باشد نشان می دهد.اگر داخل پرانتز یک متن ساده باشد باید آنرا داخل “” بنویسید ولی اگر یک متغیر باشد آنرا را به صورت عادی می نویسیم.
delay(500);
در برنامه وقفه ای ۵۰۰ میلی ثانیه ای ایجاد کردیم تا موارد نوشته شده روی LCD قابل دیدن باشد.
جمع بندی
این پروژه مخصوص کسانی است که برنامه نویسی اردوینو را به بلد باشند و بخواهند به مهارت های خود در برنامه نویسی اردوینو بیفزایند.بهتر است که خودتان بنشینید و قسمت های که در این پروژه تحلیل نشدند را تحلیل کنید تا دستورات و توابع بالا را به خوبی یاد بگیرید ول در کل اگر مشکل یا سوالی در مورد اردوینو یا برنامه نوسی آن داشتید در انتهای همین پست آن را با ما در میان بگذارید تا ما در سریع ترین زمان ممکن به آن پاسخ دهیم.
وسایل مورد نیاز
۱-سه عدد پتانسیومتر یا ولوم
۲-RGB یا ماژول آن(مزیت ماژول این است که داخل خود مقاومت دارد و دیگر نیاز به مقاومت خارجی نیست)
۳-اردوینو UNO(یا مدل های دیگر)
۴-LCD کاراکتری به همراه رابط I2C(مدل ۱۶ ستون در۲ ردیف)
۵-مقداری سیم جامپری
۶- برد برد
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
پروژه و دریافت بن ارسال رایگان
برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکههای اجتماعی از جمله آپارات و اینستگرام، با هشتگهای دیجی_اسپارک و دانشجوکیت و digispark و daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۰۳۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
با سلامو خسته نباشید خدمت شما دوستان گرامی.
میخواستم بپرسم در پروژه ی ایجاد نور توسط led RGB با پتانسیومتر، مقاومت این پتانسیومتر ها چند کیلو اهمی هستن؟
سلام خسته نباشید.توی این پروژه پتانسیونتر ها چند اهمی هستن؟
سلام
ممنون سلامت باشید
پتانسیومتر های استفاده شده توی این پروژه ١٠ کیلو اهمی بودند ولی از پتانسیومتر های مختلف دیگه هم میشه استفاده کرد
شاد و پیروز باشید
سلام وقتتون بخیر
میشه یکم از ال سی دی که استفاده کردین توضیح بدین؟و همچنین رابط i2c .پایه منفی که گفتین به gnd اردوینو وصل میشه مثبتش هم به ۵v ؟ ممنون میشم راهنماییم کنید.
اگه از رابط i2c استفاده نکنیم طرز کار عوض میشه؟
سلام.
بله. هم اتصالات نیاز به تغییر دارند و همچنین در برنامه نویسی نیاز است تا کتابخانه عوض شده و کد های جدید جایگزین شود.
شاد و پیروز باشید
با سلام…یک سوال داشتم
می خوام یه صفحه ی led rgb درست کنم که ۲۵۰ تا led به کار گرفته شد
مدار باید چطور ببندم
با ماژول بلوتوث هم رنگ ها رو کنترل میکنم
سلام،
لینک آموزش مورد نظرتون رو در زیر مینویسم، البته برای کنترل ۲۵۰ تا ال ای دی نیاز به یک درایور دارین که بتونه جریان این تعداد ال ای دی رو تامین کنه.
https://digispark.ir/%da%a9%d9%86%d8%aa%d8%b1%d9%84-led-rgb-%d8%a8%d8%a7-%d9%85%d8%a7%da%98%d9%88%d9%84-%d8%a8%d9%84%d9%88%d8%aa%d9%88%d8%ab-hc05-%d8%aa%d9%88%d8%b3%d8%b7-%d9%be%d9%84%d8%aa%d9%81%d8%b1%d9%85-blynk/
سلام وقت بخیر
من میخواستم بعد از اینکه اعداد Rvalue , Gvalue, Bvalue روی اعداد خاصی تنظیم و نمایش داده شدند رله فعال بشه کد رو نوشتم فقط مشکل اینه دستور if برای باز کردن رله روی Gvalue عمل میکنه و برای دوتای دیگه تنظیم نمیشه
if (Rvalue==5)
این دستور عمل میکنه فقط:
{ digitalWrite(3, HIGH);
delay(4000);
}
else
digitalWrite(3, LOW);}
میخوام این دستور اجرا بشه:
if (Rvalue==5 && Bvalue==7&& Gvalue ==2)
{ digitalWrite(3, HIGH);
delay(4000);
}
else
digitalWrite(3, LOW);}