آردوینو آردوینو Arduino Uno آموزش آردوینو پروژه های آردوینو

آموزش ساخت LED Chaser با آردوینو و ال ای دی

led-chaser-with-arduino-digispark
نوشته شده توسط پریسا پوربلورچیان

از ابتدایی ترین پروژه های آردوینو و صد البته کاربری ترین ساخت رقص نور با ال ای دی 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 از مدل های زیر میتوانید استفاده کنید.

در این مرحله اهمیت استفاده از مقاومت بر سر راه پایه های آردوینو قابل مشاهده است. حداکثر جریان عبوری از پایه های آردوینو در حدود ۴۰ میلی آمپر است و باید جریان عبوری در مدار کنترل گردد. به عنوان مثال با قرار گرفتن یک ال ای دی LED در مدار، پایه ها یک بار ۱ و یک بار ۰ خواهد شد. این به این دلیل است که ولتاژ و جریان بیش از حد مجاز بر روی پایه ها قرار گرفته و همزمان ۱ و ۰ می‌شود. برای کنترل جریان عبوری در مدار از مقاومت استفاده خواهیم کرد.

V= R * I

به عنوان مثال اگر ولتاژ مورد نیاز برای ال ای دی LED در حدود ۳٫۳ ولت و جریان عبوری از آن ۲۰ میلی آمپر یا ۰٫۰۲ آمپر باشد و ولتاژ آردوینو ۵ ولت DC در نظر گرفته شود، برای محاسبه مقاومت Resistor از فرومول زیر استفاده می‌کنیم.

R = V/I

  (۵-۳٫۳)÷ ۰٫۰۲ = ۸۵

R = 85Ω

حداقل مقاومت مورد نیاز برای کنترل جریان مدار در حدود ۸۵ اهم است. مقاومت بیش تر از ۸۵ اهم باعث کم شدن نور ال ای دی خواهد شد.  مقدار ولتاژ و جریان برای ال ای دی ها متفاوت است. به عنوان مثال اگر ولتاژ ال ای دی را در حدود ۳٫۴ ولت و جریان عبوری از آن را ۵ میلی آمپر در نظر بگیریم، مقاومت مورد نیاز در حدود ۳۲۰ اهم خواهد بود. در حالت کلی مقاومت تست شده و قابل اطمینان برای استفاده در آردوینو ۲۲۰ و ۳۳۰ اهم می‌باشد. با انتخاب این دو در مدار شدت نور ال ای دی LED بالا بوده و از سوختن آن پیشگیری خواهد کرد. با این حال بین ۱۰۰ تا ۱۵۰ اهم بهترین انتخاب برای استفاده در آردوینو خواهد بود.

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

کاربرد مقاومت در بردهای آردوینو Arduino و روش استفاده

 

ال ای دی برای ساخت led chaser با آردوینو - دیجی اسپارک

 


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


برای شروع برنامه نویسی آردوینو به نرم افزار آردوینو Arduino IDE نیاز داریم. زبان برنامه نویسی آردوینو سی پلاس پلاس است و محیط نرم افزار برای شروع به واسطه رابط کاربری ساده و کتابخانه ها و برنامه های از پیش تعریف شده شروع کار را برای همه آسان کرده است. در لینک زیر روش نصب و اجرای برنامه در نرم افزار آردوینو کامل توضیح داده شده است.

آموزش کار با برد آردوینو Arduino و نصب نرم افزار Arduino IDE

در این آموزش برای روشن و خاموش شدن ال ای دی یک الگو پیاده سازی می‌کنیم. ال ای دی ها با زمان تاخیری که ما در برنامه تعریف می‌کنیم روشن و خاموش شده و سرعت آن با تاخیر در برنامه به صورت Delay قابل تنظیم است.

 

محیط برنامه نویسی آردوینو برای ساخت led chaser - دیجی اسپارک

 


استفاده از آرایه Array


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

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

نوع آرایه       نام آرایه        [طول آرایه]
  • نوع آرایه مانند int, float, char است.
  • نام آرایه جهت دسترسی به مقادیر آرایه مشخص می‌شود.
  • طول آرایه با یک عدد صحیح + معرفی می‌شود.

 در این برنامه با توجه به اینکه از ۶ ال ای دی LED استفاده می‌کنیم. جهت سهولت در برنامه نویسی و سبک شدن برنامه از آرایه برای معرفی هر ۶ ال ای دی به عنوان خروجی استفاده می‌کنیم.

int Leds[] = {2,3,4,5,6,7};

همانطور که گفته شد، برد آردوینو دارای ۱۴ پایه دیجیتال است که برای اتصال ورودی و خروجی ها I/O استفاده می‌شود. ۶ ال ای دی به تریبت و به دلخواه به پایه های ۲,۳,۴,۵,۶,۷ متصل شده و در برنامه به این صورت تعریف شده است. int همان نوع آرایه، Led همان نام آرایه و طول آرایه با پایه های آردوینو که به ال ای دی ها متصل است، مشخص شده است.

استفاده از آرایه برای ساخت led chaser - دیجی اسپارک

 


استفاده از ساختار تکرار For


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

استفاده از ساختار For در برنامه نویسی آردوینو led chaser - دیجی اسپارک

ساختار تکرار برای ۶ ال ای دی 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 استفاده می‌کنیم.

اتصالات led chaser به برد آردوینو - دیجی اسپارک

آموزش ساخت led chaser با ال ای دی و برد آردوینو - دیجی اسپارک

 


کد آردوینو 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 با ذکر دقیق پایه ها قابل استفاده است.

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۳۲ دیدگاه

  • سلام
    خانم مهندس از اینکه برنامه نویسی رو اینقدر کامل توضیح دادید واقعا در تعجب هستم!!!! کامل دقیق
    خیلی ممنونم لطفا این آموزش ها بیشتر باشد.

    • با سلام
      خیر در صورت افزایش تعداد پایه ها در کد برنامه آرایه ها را تغییر دهید.

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

    • با سلام
      در این خصوص پروژه های بسیاری با بردهای آردوینو در سایت منتشر شده است. در صورتیکه علاقمند به اجرای پروژه با بردهای آردوینو و سری سنسورهای کاربردی دارید، پیشنهاد می‌شود کیت آردوینو نانو را تهیه کنید. تمامی آموزش های کیت به صورت رایگان در دیجی اسپارک آمورش داده شده است. برای شروع سنسورهای ساده اما بسیار کاربردی در کیت قرار گرفته شده است.
      خرید کیت آردوینو

    • با سلام
      بله برای هر ال ای دی به صورت جداگانه یک متغیر تعریف کرده و توسط دستورات digitalread و digitalwrite ال ای دی ها را HIGH و LOW کنید. طبیعتا این روش اصلا پیشنهاد نمی‌شود.

    • با سلام
      خیر محدودیتی در کدنویسی برنامه وجود ندارد و هر تعداد آرایه که مد نظر شما است، میتوانید در کد برنامه وارد کنید.

  • سلام .
    تعداد ۲۶ ال ای دی را به شکل دایره قرار دادم تا هر زمان ال ای دی بر فرض مثال ال ای دی ۱۶ روشن باشد یک کلید فشاری که روبروی همین لامپ قرار دادم اگر کاربر همزمان با روشن شدن این لامپ کلید را فعال کند به نشانه قبول شدن فشردن کلید توسط او تمام لامپ ها ۳ مرتبه روشن و خاموش شوند و روال به لامپ شماره ۱ برگردد برای شروع دوباره . اگر کاربر زودتر از زمان رسیدن به لامپ مورد نظر کلید را فعال کند مدار ریست شده به ابتدای شروع برنامه برمی گردیم . البته لامپ ۲۶ مدار زرد انتخاب شده تا ۳ مرتبه قبل از شروع روال برنامه روشن شود سپس لامپ ۱ روشن شود و ادامه داستان.
    از آنجا که برد اردوینو که دارم فقط ۱۳ پایه دارد که قابل استفاده برای ال ای دی است لامپ ها را در ارایه ای از ۵ ستون و ۵ سطر سیم کشی کرده تا با ۵ پایه اردوینو ۵ سطر منفی لامپ ها را فعال کنم و با ۵ پایه دیگر اردوینو ۵ ستون لامپ ها را روشن کنم در واقع مثبت را به لامپ ها برسانم و بتوانم نوبتی ۲۵ لامپ را روشن کنم . چون خروجی اردوینو مثبت است آن ۵ سطر منفی را به ترانزیستور منفی متصل کردم تا با روشن شدن هر ترانزیستور منفی همزمان ۵ لامپ منفی را دریافت کنند و روال مثبت دادن به لامپ ها هم که مشخص است .
    البته قصد دارم در ادامه با اضافه کردن یک پتانسیومتر به مدار بتوانم سرعت روشن شدن لامپ ها را تنظیم کنم
    ولی اول هدف اجرای حداقل کار بصورت روتین هست تا بعد کد تکمیل تر شود.
    مشکلی که دارم این هست که نیازمند کمک برای تکمیل کد هستم اگر امکان دارد راهنمایی کنید . مقاله لامپ آبشاری تا حدودی کمک کننده هست و با ریختن کد داخل اردوینو خودم و دستکاری کد به راه حل نهایی نرسیدم و از آنجا که بنده حرفه ای برنامه نویسی اردوینو را دنبال نکرده ام و برای این امر زمان اندکی دارم. تقاضای کمک دارم.
    درست است که برنامه من در مقابل پروژه هایی که کار کرده اید آب خوردن بیش نیست ممنون می شوم کمک کنید
    سپاس.

    • با سلام
      کاربر گرامی ضمن تشکر از شما، موردی که میفرمایید عملا در کامنت ها امکان پذیر نیست. با توجه به متن شما آیا برای اضافه شدن پتانسیومتر در برنامه نیاز به راهنمایی دارید؟

      • سلام.
        از بابت توجه شما سپاس.
        محبت کنید ساختار اصلی برنامه را مانند ارایه و حلقه تو در توی for ها را بنویسید طوری که ۲۶ لامپ از ۱ تا ۲۶ روشن شود. خودم شرط و قسمتهای دیگر را اضافه میکنم.

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

      • خیر.
        ساختار اصلی کد مد نظر من می باشد.
        کد اصلی برنامه برای روشن کردن ۲۶ لامپ بنویسید.
        اگر وقت ندارید و یا نمیخواهید همکاری کنید فقط اعلام کنید تا من خودم جستجو کنم
        سپاس که تا همین جا هم کمک کردید موفق و پیروز باشید.

        • با سلام
          کاربر گرامی در حال حاضر امکان اجرای درخواست شما فراهم نیست.
          سپاس از همراهی شما

  • سلام خسته نباشید
    در قسمت setup شما اومدی با حلقه for خروجی دادید خب نمیشه همون نام آریه رو نوشت و بعد OUTPUT کرد برای مثال
    ;pinMode(pins,OUTPUT)
    نمیشه اینجوری نوشت☝️☝️☝️☝️

    • با سلام
      در این قسمت برای ساده تر شدن کد برنامه از حلقه ی FOR استفاده شده است.

    • با سلام
      اگر بخواهید شدت نور ال ای دی را توسط analogwrite تنظیم کنید از پایه های pwm بایستی استفاده کنید.

  • با سلام و خسته نباشید ببخشید سوالی داشتم ، ۸ تا ای دی را میخواهم وصل میکنم به پایه‌ای اردینو فقط نمیخواهم به ترتیب روشن بشن ،با ارایه چطور دیتا را وارد اردینو بکنم که دیتای که تو ارایه نوشتم بیاید به ال ای دی ها مثلا ob11101101 ,ob11110111 به طور مثال این ارایه هست که میخواهم ال ای دی باهاش روشن یا خاموش بشن چطور وارد کنم بلد نیستم

  • سلام من خیلی کم با اردوینو کار کردم و وقت هایی که کار کردم هم کد های سایت ها رو کپی کردم و خیلی کم بلدم میخوام ماشین کنترلی ای بسازم که بردش ۲۰۰ متر باشه چجوری میتونید کمکم کنید؟

  • عرض ادب واحترام
    سلام
    مهندس عزیز بنده نیازدارم به هرپایه آردوینو ۴۰ ال ای دی متصل کنم
    درواقع از ۴ پایه pwm آردوینو ۱۶۰ ال ای دی ۳.۳ ولت را راه اندازی کنم
    حال با توجه به محدودیت جریان پایه آردوینو باید چطور تغذیه ۴۰ تا ال ای دی را تامیین کنم تا آردوینو دچار آسیب نشود و خاصیت pwm را اعمال کنم.رله جوابگوی pwm نیست
    سپاس از شما

      • سلام و سپاس
        شیفت ریجستر چیست؟
        به تابلو ال ای دی ثابت های تبلیغاتی نگاه کنید .حدود ۵۰۰ تا ال ای دی برای یک کلمه خوش آمدید با pwm روشن میشه.میخوام با آردوینو انجام بدم
        آیا عمر و کیفیت دارد برای دراز مدت؟
        سپاس

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