از ابتدایی ترین پروژه های آردوینو و صد البته کاربری ترین ساخت رقص نور با ال ای دی LED است. قطعا بیش از ۱۰ روش برای برنامه نویسی رقص نور وجود دارد که ما در این آموزش یکی از جذاب ترین و کوتاه ترین روش برنامه نویسی را آموزش خواهیم داد. قرار بر این است، روش ساخت LED Chaser یا همان ال ای دی آبشاری با آردوینو را اجرا کنیم. در این پروژه آردوینو Arduino چند تکنیک بسیار مهم در برنامه نویسی را با هم مرور میکنیم. در ادامه ساخت LED Chaser با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
برد آردوینو Arduino
برد آردوینو میکروکنترلری با قابلیت دسترسی به پورت های دیجیتال و آنالوگ و پروتکلهای I2C و SPI است. در این آموزش از آردوینو Arduino مدل UNO استفاده شده است. برد آردوینو Arduino دارای تراشه Atmega328P است و با در اختیار داشتن پایههای کنترلی آنالوگ و دیجیتال I/O میتوان با سنسورهای مختلف ارتباط برقرار کرد. با در نظر گرفتن پروتکل ارتباطی، آنها را راه اندازی و کدنویسی کرد. محیط برنامه نویسی IDE Arduino است که نیاز به دانش برنامه نویسی C++ خواهد داشت. با انتقال کد به محیط برنامه نویسی و کامپایل کد پروژه آماده اجرا خواهد بود. مراحل نصب نرم افزار آردوینو Arduino در آموزش زیر نوشته و منتشر شده است. در صورتیکه تا به حال با برد آردوینو کار نکرده اید، ابتدا آموزش زیر را مطالعه و سپس مراحل بعدی را اجرا کنید. آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE همچنین به صورت مستقیم میتوانید نرم افزار آردوینو را از طریق لینک زیر دانلود کنید. مراحل نصب نرم افزار دقیقا مشابه دیگر نرم افزارهای کامپیوتری است. برد آردوینو دارای مدل های مختلفی است که در این بین بردهای در دسترس که از لحاظ ساختاری شبیه به یکدیگر هستند به صورت زیر است.
- آردوینو UNO
- آردوینو Mega2560
- آردوینو NANO
- آردوینو Pro mini
- آردوینو Pro micro
در پروژه ساخت LED Chaser به دلخواه از برد آردوینو Arduino UNO استفاده میکنیم. برد آردوینو اونو Arduino UNO دارای ۱۴ پایه دیجیتال است. به این معنی که امکان اتصال ۱۴ ورودی I/O به آردوینو فراهم است که فقط از ورودی های دیجیتال Digital پشتیبانی میکند. همچنین این برد دارای ۶ پایه آنالوگ منحصرا برای ورودی های آنالوگ Analog مانند ولوم و یا جوی استیک است. برای تغذیه برد پایه های ۵ ولت و ۳٫۳ ولت بر روی برد قرار دارد.
ال ای دی LED
ال ای دی به معرفی نیازی ندارد. ال ای دی مخفف Light Emitting Diode از خانواده Semiconductor ها است با عبور جریان از آن نور تولید میکند. ال ای دی ها بر اساس ولتاژ کاری، جریان عبوری از آنها، رنگ و ابعاد دسته بندی شده اند که با توجه به ولتاژ و میکرو مورد استفاده انتخاب و استفاده میشود. برای انتخاب نوع ال ای دی برای آردوینو Arduino از مدل های زیر میتوانید استفاده کنید.
- ال ای دی ۵ میلی متری شفاف
- ال ای دی ۳ میلی متری شفاف
- ال ای دی هفت رنگ
- ال ای دی RGB
- ال ای دی اوال Oval
در این مرحله اهمیت استفاده از مقاومت بر سر راه پایه های آردوینو قابل مشاهده است. حداکثر جریان عبوری از پایه های آردوینو در حدود ۴۰ میلی آمپر است و باید جریان عبوری در مدار کنترل گردد. به عنوان مثال با قرار گرفتن یک ال ای دی LED در مدار، پایه ها یک بار ۱ و یک بار ۰ خواهد شد. این به این دلیل است که ولتاژ و جریان بیش از حد مجاز بر روی پایه ها قرار گرفته و همزمان ۱ و ۰ میشود. برای کنترل جریان عبوری در مدار از مقاومت استفاده خواهیم کرد.
V= R * I
به عنوان مثال اگر ولتاژ مورد نیاز برای ال ای دی LED در حدود ۳٫۳ ولت و جریان عبوری از آن ۲۰ میلی آمپر یا ۰٫۰۲ آمپر باشد و ولتاژ آردوینو ۵ ولت DC در نظر گرفته شود، برای محاسبه مقاومت Resistor از فرومول زیر استفاده میکنیم.
R = V/I (۵-۳٫۳)÷ ۰٫۰۲ = ۸۵ R = 85Ω
حداقل مقاومت مورد نیاز برای کنترل جریان مدار در حدود ۸۵ اهم است. مقاومت بیش تر از ۸۵ اهم باعث کم شدن نور ال ای دی خواهد شد. مقدار ولتاژ و جریان برای ال ای دی ها متفاوت است. به عنوان مثال اگر ولتاژ ال ای دی را در حدود ۳٫۴ ولت و جریان عبوری از آن را ۵ میلی آمپر در نظر بگیریم، مقاومت مورد نیاز در حدود ۳۲۰ اهم خواهد بود. در حالت کلی مقاومت تست شده و قابل اطمینان برای استفاده در آردوینو ۲۲۰ و ۳۳۰ اهم میباشد. با انتخاب این دو در مدار شدت نور ال ای دی LED بالا بوده و از سوختن آن پیشگیری خواهد کرد. با این حال بین ۱۰۰ تا ۱۵۰ اهم بهترین انتخاب برای استفاده در آردوینو خواهد بود.
آموزش کامل استفاده از مقاومت برای ال ای دی LED ها در لینک زیر قرار گرفته شده است. مطالعه کنید.
کاربرد مقاومت در بردهای آردوینو Arduino و روش استفاده
برنامه نویسی آردوینو Arduino
برای شروع برنامه نویسی آردوینو به نرم افزار آردوینو Arduino IDE نیاز داریم. زبان برنامه نویسی آردوینو سی پلاس پلاس است و محیط نرم افزار برای شروع به واسطه رابط کاربری ساده و کتابخانه ها و برنامه های از پیش تعریف شده شروع کار را برای همه آسان کرده است. در لینک زیر روش نصب و اجرای برنامه در نرم افزار آردوینو کامل توضیح داده شده است.
آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE
در این آموزش برای روشن و خاموش شدن ال ای دی یک الگو پیاده سازی میکنیم. ال ای دی ها با زمان تاخیری که ما در برنامه تعریف میکنیم روشن و خاموش شده و سرعت آن با تاخیر در برنامه به صورت Delay قابل تنظیم است.
استفاده از آرایه Array
جهت ذخیره داده ها در برنامه نویسی سی پلاس پلاس از متغیرها و توابع ثابت در برنامه استفاده میکنیم. اما تصور کنید تعداد داده ها بیش از حد زیاد باشد و عملا تعریف هر یک از داده ها به صورت مجزا و اختصاص یک متغیر برای هرکدام علاوه بر زمان تعداد خط های برنامه نویسی زیاد میشود. چاره کار استفاده از آرایه Array است. آرایه ها مجموعه ای از عناصر همنوع است و هر آرایه دقیقا مشابه متغیرها نام گذاری شده و از متغیر اندیس برای معرفی آن استفاده میشود.
نام دیگر آرایه در برنامه نویسی لیست است که در پایتون هم از آن استفاده میکنیم. توسط یک اندیس به مقادیر آرایه دسترسی داشته و به صورت زیر قابل استفاده است.
نوع آرایه نام آرایه [طول آرایه]
- نوع آرایه مانند int, float, char است.
- نام آرایه جهت دسترسی به مقادیر آرایه مشخص میشود.
- طول آرایه با یک عدد صحیح + معرفی میشود.
در این برنامه با توجه به اینکه از ۶ ال ای دی LED استفاده میکنیم. جهت سهولت در برنامه نویسی و سبک شدن برنامه از آرایه برای معرفی هر ۶ ال ای دی به عنوان خروجی استفاده میکنیم.
int Leds[] = {2,3,4,5,6,7};
همانطور که گفته شد، برد آردوینو دارای ۱۴ پایه دیجیتال است که برای اتصال ورودی و خروجی ها I/O استفاده میشود. ۶ ال ای دی به تریبت و به دلخواه به پایه های ۲,۳,۴,۵,۶,۷ متصل شده و در برنامه به این صورت تعریف شده است. int همان نوع آرایه، Led همان نام آرایه و طول آرایه با پایه های آردوینو که به ال ای دی ها متصل است، مشخص شده است.
استفاده از ساختار تکرار For
به صورت پیش فرض در برنامه نویسی آردوینو، دستورات برنامه از اولین دستور به آخرین دستور اجرا شده و تحت شرایط خاصی دستورات را اجرا میکنند که به عبارتی تحت کنترل هستند. یکی از ساختار های کنترلی ساختار تکرار است که تحت شرایط خاصی یک یا چند دستور چندین بار متوالی اجرا و تکرار میشوند. یکی از این ساختارهای تکرار پرکاربرد ساختار تکرار for است. از ساختار تکرار for در زمانیکه تعداد دفعات تکرار حلقه از قبل مشخص باشد، استفاده میشود. توسط متغیری که در این ساختار تعریف میشود، تعداد دفعات تکرار حلقه در برنامه کنترل میشود. در ساختار for یک مقدار اولیه تعریفش شده و در هر بار اجرای دستورات حلقه مقداری به آن اضافه میشود و سپس این مقدار به گام حرکت اضافه میشود. در نهایت نوبت به شرط حلقه میرسد. شرط حلقه مشخص میکند که دستورات نوشته شده در حلقه تا کی اجرا شود.
ساختار تکرار برای ۶ ال ای دی LED در این برنامه به صورت زیر است.
for (int i=0; i<Ledpins; i=i+1){ // تعریف افزاینده digitalWrite(pins[i], HIGH); } for (int i=Ledpins-1; i>0; i=i-1){ // تعریف کاهنده digitalWrite(pins[i], HIGH); }
اتصال LED به آردوینو
در این آموزش به دلخواه از ۶ ال ای دی استفاده شده است. برای اتصال ۶ ال ای دی به آردوینو از پایه های دیجیتال I/O استفاده میکنیم.
کد آردوینو Arduino
کد آردوینو برای ساخت led chaser یا همان ال ای دی آبشاری به صورت کامل نوشته شده و آماده اجرا است. نوع برد آردوینو مورد استفاده را از نرم افزار انتخاب کرده و پورت را مشخص کنید. سپس برد آردوینو را به سیستم متصل کرده و برنامه را به نرم افزار انتقال دهید. ابتدا یک بار Verify و سپس Upload کنید.
int Ledpins=6; // مشخص شدن تعداد ال ای دی ها int pins[] = {2,3,4,5,6,7}; // تعریف آرایه برای پایه ها void setup() { for (int i=0; i<Ledpins; i=i+1){ // استفاده از تابع for pinMode(pins[i], OUTPUT); // خروجی ها طبق الگوی for در برنامه تغییر میکند. } } void loop() { for (int i=0; i<Ledpins; i=i+1){ // تعریف افزاینده digitalWrite(pins[i], HIGH); // با تعریف high ال ای دی ها به ترتیب روشن شده delay(100); // برای ۱۰۰ میلی ثانیه متوقف شده digitalWrite(pins[i], LOW); // سپس ال ای دی ها کاهشی خاموش میشود } for (int i=Ledpins-1; i>0; i=i-1){ // تعریف کاهنده digitalWrite(pins[i], HIGH); delay(100); digitalWrite(pins[i], LOW); } }
جمع بندی لیدی پای
به همین ترتیب با اجرای پروژه با دو ساختار برنامه نویسی در زبان سی پلاس پلاس آشنا شده اید. استفاده از ساختارها شاید کمی سخت باشد، اما تعداد خط های برنامه نویسی به شدت کاهش یافته و برنامه ساختار منظمی داشته و توسعه و رفع عیب بسیار ساده تر است. در این برنامه از شش ال ای دی LED برای اتصال به آردوینو و روشن و خاموش شدن استفاده شده و با تاخیر و سرعت بسیار کم خاموش و روشن میشود. در صورت اضافه شدن ال ای دی های بیشتر کافیست طول آرایه در برنامه را افزایش داده و تعداد ال ای دی های استفاده شده را در برنامه تغییر دهید. این برنامه با تمامی بردهای میکروکنترلر از خانواده آردوینو Arduino و خانواده ESP8266 با ذکر دقیق پایه ها قابل استفاده است.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام
خانم مهندس از اینکه برنامه نویسی رو اینقدر کامل توضیح دادید واقعا در تعجب هستم!!!! کامل دقیق
خیلی ممنونم لطفا این آموزش ها بیشتر باشد.
با سلام
امیدوارم مفید واقع شده باشد.
سپاس از همراهی شما
با سلام
آیا تعداد ال ای دی ها تاثیری در عملکرد کدهای برنامه دارد؟
با سلام
خیر در صورت افزایش تعداد پایه ها در کد برنامه آرایه ها را تغییر دهید.
سلام
خیلی توضیحات کامل و جامعی بود، متشکرم ازتون
با سلام
کاربر گرامی ضمن تشکر از شما امیدوارم مفید واقع شده باشد.
سلام
من در سالهای دور الکترونیک کار میکردم و با الکترونیک مدرن روز فاصله دارم ولی عاشق کار با لوازم الکترونیک بخصوص در مبحث وسایل کاربردی روزمره هستم، لطفا راهنمایی کنید از کجا و با چه مرجعی شروع کنم تا زودتر آپدیت شده و بتونم فعالیتم رو از سر بگیرم
با سلام
در این خصوص پروژه های بسیاری با بردهای آردوینو در سایت منتشر شده است. در صورتیکه علاقمند به اجرای پروژه با بردهای آردوینو و سری سنسورهای کاربردی دارید، پیشنهاد میشود کیت آردوینو نانو را تهیه کنید. تمامی آموزش های کیت به صورت رایگان در دیجی اسپارک آمورش داده شده است. برای شروع سنسورهای ساده اما بسیار کاربردی در کیت قرار گرفته شده است.
خرید کیت آردوینو
سلام
و خسته نباشید خانم
آیا امکان حذف آرایه وجود دارد؟
با سلام
بله برای هر ال ای دی به صورت جداگانه یک متغیر تعریف کرده و توسط دستورات digitalread و digitalwrite ال ای دی ها را HIGH و LOW کنید. طبیعتا این روش اصلا پیشنهاد نمیشود.
سلام آیا استفاده از آرایه محدودیت دارد؟ در کدنویسی برنامه مد نظرم است
با سلام
خیر محدودیتی در کدنویسی برنامه وجود ندارد و هر تعداد آرایه که مد نظر شما است، میتوانید در کد برنامه وارد کنید.
سلام .
تعداد ۲۶ ال ای دی را به شکل دایره قرار دادم تا هر زمان ال ای دی بر فرض مثال ال ای دی ۱۶ روشن باشد یک کلید فشاری که روبروی همین لامپ قرار دادم اگر کاربر همزمان با روشن شدن این لامپ کلید را فعال کند به نشانه قبول شدن فشردن کلید توسط او تمام لامپ ها ۳ مرتبه روشن و خاموش شوند و روال به لامپ شماره ۱ برگردد برای شروع دوباره . اگر کاربر زودتر از زمان رسیدن به لامپ مورد نظر کلید را فعال کند مدار ریست شده به ابتدای شروع برنامه برمی گردیم . البته لامپ ۲۶ مدار زرد انتخاب شده تا ۳ مرتبه قبل از شروع روال برنامه روشن شود سپس لامپ ۱ روشن شود و ادامه داستان.
از آنجا که برد اردوینو که دارم فقط ۱۳ پایه دارد که قابل استفاده برای ال ای دی است لامپ ها را در ارایه ای از ۵ ستون و ۵ سطر سیم کشی کرده تا با ۵ پایه اردوینو ۵ سطر منفی لامپ ها را فعال کنم و با ۵ پایه دیگر اردوینو ۵ ستون لامپ ها را روشن کنم در واقع مثبت را به لامپ ها برسانم و بتوانم نوبتی ۲۵ لامپ را روشن کنم . چون خروجی اردوینو مثبت است آن ۵ سطر منفی را به ترانزیستور منفی متصل کردم تا با روشن شدن هر ترانزیستور منفی همزمان ۵ لامپ منفی را دریافت کنند و روال مثبت دادن به لامپ ها هم که مشخص است .
البته قصد دارم در ادامه با اضافه کردن یک پتانسیومتر به مدار بتوانم سرعت روشن شدن لامپ ها را تنظیم کنم
ولی اول هدف اجرای حداقل کار بصورت روتین هست تا بعد کد تکمیل تر شود.
مشکلی که دارم این هست که نیازمند کمک برای تکمیل کد هستم اگر امکان دارد راهنمایی کنید . مقاله لامپ آبشاری تا حدودی کمک کننده هست و با ریختن کد داخل اردوینو خودم و دستکاری کد به راه حل نهایی نرسیدم و از آنجا که بنده حرفه ای برنامه نویسی اردوینو را دنبال نکرده ام و برای این امر زمان اندکی دارم. تقاضای کمک دارم.
درست است که برنامه من در مقابل پروژه هایی که کار کرده اید آب خوردن بیش نیست ممنون می شوم کمک کنید
سپاس.
با سلام
کاربر گرامی ضمن تشکر از شما، موردی که میفرمایید عملا در کامنت ها امکان پذیر نیست. با توجه به متن شما آیا برای اضافه شدن پتانسیومتر در برنامه نیاز به راهنمایی دارید؟
سلام.
از بابت توجه شما سپاس.
محبت کنید ساختار اصلی برنامه را مانند ارایه و حلقه تو در توی for ها را بنویسید طوری که ۲۶ لامپ از ۱ تا ۲۶ روشن شود. خودم شرط و قسمتهای دیگر را اضافه میکنم.
با سلام
همانطور که اعلام شد امکان ارسال کد به این طریق فراهم نیست و نیاز به زمان و بررسی خواهد داشت.
خیر.
ساختار اصلی کد مد نظر من می باشد.
کد اصلی برنامه برای روشن کردن ۲۶ لامپ بنویسید.
اگر وقت ندارید و یا نمیخواهید همکاری کنید فقط اعلام کنید تا من خودم جستجو کنم
سپاس که تا همین جا هم کمک کردید موفق و پیروز باشید.
با سلام
کاربر گرامی در حال حاضر امکان اجرای درخواست شما فراهم نیست.
سپاس از همراهی شما
سلام خسته نباشید
در قسمت setup شما اومدی با حلقه for خروجی دادید خب نمیشه همون نام آریه رو نوشت و بعد OUTPUT کرد برای مثال
;pinMode(pins,OUTPUT)
نمیشه اینجوری نوشت☝️☝️☝️☝️
با سلام
در این قسمت برای ساده تر شدن کد برنامه از حلقه ی FOR استفاده شده است.
ممنون از شما
فقط LED آبشاری به صورت PWM هست.
با سلام
اگر بخواهید شدت نور ال ای دی را توسط analogwrite تنظیم کنید از پایه های pwm بایستی استفاده کنید.
با سلام و خسته نباشید ببخشید سوالی داشتم ، ۸ تا ای دی را میخواهم وصل میکنم به پایهای اردینو فقط نمیخواهم به ترتیب روشن بشن ،با ارایه چطور دیتا را وارد اردینو بکنم که دیتای که تو ارایه نوشتم بیاید به ال ای دی ها مثلا ob11101101 ,ob11110111 به طور مثال این ارایه هست که میخواهم ال ای دی باهاش روشن یا خاموش بشن چطور وارد کنم بلد نیستم
با سلام
این مورد توسط بنده تست نشده است.
سلام من خیلی کم با اردوینو کار کردم و وقت هایی که کار کردم هم کد های سایت ها رو کپی کردم و خیلی کم بلدم میخوام ماشین کنترلی ای بسازم که بردش ۲۰۰ متر باشه چجوری میتونید کمکم کنید؟
با سلام
در این خصوص از ماژول های رادیویی پیشنهاد میشود استفاده کنید.
ماژول رادیویی
عرض ادب واحترام
سلام
مهندس عزیز بنده نیازدارم به هرپایه آردوینو ۴۰ ال ای دی متصل کنم
درواقع از ۴ پایه pwm آردوینو ۱۶۰ ال ای دی ۳.۳ ولت را راه اندازی کنم
حال با توجه به محدودیت جریان پایه آردوینو باید چطور تغذیه ۴۰ تا ال ای دی را تامیین کنم تا آردوینو دچار آسیب نشود و خاصیت pwm را اعمال کنم.رله جوابگوی pwm نیست
سپاس از شما
با سلام
در این خصوص بایستی از شیفت رجیستر استفاده کنید.
سلام و سپاس
شیفت ریجستر چیست؟
به تابلو ال ای دی ثابت های تبلیغاتی نگاه کنید .حدود ۵۰۰ تا ال ای دی برای یک کلمه خوش آمدید با pwm روشن میشه.میخوام با آردوینو انجام بدم
آیا عمر و کیفیت دارد برای دراز مدت؟
سپاس
با سلام
در این خصوص این مورد توسط بنده تست نشده است. با آردوینو قابل اجرا است و تا زمانی که تغذیه متعارف به برد اعمال شده باشد، مشکلی پیش نخواهد آمد.
با سلام آردینو مدل due قابلیت راه اندازی استپ موتور را دارد
با سلام
بله امکان پذیر است.