آموزش استفاده از 10 Segment LED Bar Graph با آردوینو

در این آموزش با استفاده از برد آردوینو نانو و یک پتاسیومتر، یک ۱۰ Segment LED Bar Graph را راه اندازی می کنیم. این آموزش روی بردبورد راه اندازی شده است و اجرای آن بسیار ساده است. به صورت خلاصه از LED های Bar Graph برای نمایش میزان فرایند یا مقدار درصدی یک متغیر استفاده می شود. برای مثال می توان از این LED ها برای نمایش میزان صدای یک آمپلی فایر استفاده کرد و خیلی مصارف دیگر…

 

نحوه ی عملکرد LED Bar Graph

این LED به صورت خلاصه ۱۰ LED مجزا در یک قاب مناسب است. برای هر LED یک پایه ی منفی و یک پایه ی مثبت در نظر گرفته شده است. فاصله ی پین ها از یکدیگر دقیقا همانند یک IC است و ابعاد مشابهی با IC دارد. مسلما استفاده از ۱۰ پین خروجی برای کنترل ۱۰ LED برای هر پروژه ای مناسب نیست و جهت کاهش پین های مصرفی ممکن است از روش هایی مانند ماتریکس یا IC های مختلفی مانند شیفت رجیستر استفاده شده باشد.

 

مدار مورد نیاز

مدار این آموزش بسیار ساده است، پایه های کناری پتاسیومتر به + و – پنج ولت متصل هستند و پایه ی وسطی به پین A0. پایه های منفی Bar Graph به صورت مشترک به مقاومت ۱۰۰ اهم و سپس به منفی متصل هستند. پین LED های یک تا ده به پین های D2-D11 برد آردوینو متصل هستند. به همین سادگی

 

اسکچ آردوینو

اسکچ زیر، اسکچ ساده ای است که با ابتدا با خواندن مقدار پین A0 متصل به پتاسیومتر ۱۰ کیلو و سپس پردازش مقدار آن تعداد LED های مطابق مقدار پتاسیومتر را روشن می کند. مقدار پین آنالوگ A0 از ۰ تا ۱۰۲۳ است. این مقدار به ۱۱ قسمت تقسیم شده است. اولین مقدار برای خاموشی کل LED هاست و مقدادیر ۲ تا ۱۱ برای LED های ۱ تا ۱۰٫ بنابراین با تحلیل مقدار ورودی پین A0 می توان پین های خروجی D2-D11 را High کرد و به این ترتیب Bar Graph ده قسمتی را راه اندازی کرد. دانلود اسکچ

/*

 Abole LED Bar Graph

*/

 

// مقادیر ست اپ که بعد از هر بار استارت اپ برد در نظر گرفته خواهند شد

void setup() {

 // تنظیم پین های LED ها به عنوان خروجی

 pinMode(2, OUTPUT);

 pinMode(3, OUTPUT);

 pinMode(4, OUTPUT);

 pinMode(5, OUTPUT);

 pinMode(6, OUTPUT);

 pinMode(7, OUTPUT);

 pinMode(8, OUTPUT);

 pinMode(9, OUTPUT);

 pinMode(10, OUTPUT);

 pinMode(11, OUTPUT);

 // تنظیم پین پتاسیومتر به عنوان ورودی

 pinMode(A0, INPUT);

}

 

// مقادیر لوپ که در زمان فعال بودن برد تکرار خواهند شد

void loop() {

 int inputv = analogRead(A0);

 if (inputv < 93) {

   digitalWrite(2, LOW);

   digitalWrite(3, LOW);

   digitalWrite(4, LOW);

   digitalWrite(5, LOW);

   digitalWrite(6, LOW);

   digitalWrite(7, LOW);

   digitalWrite(8, LOW);

   digitalWrite(9, LOW);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 93 & inputv < 186) {

   digitalWrite(2, HIGH);

   digitalWrite(3, LOW);

   digitalWrite(4, LOW);

   digitalWrite(5, LOW);

   digitalWrite(6, LOW);

   digitalWrite(7, LOW);

   digitalWrite(8, LOW);

   digitalWrite(9, LOW);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 186 & inputv < 279) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, LOW);

   digitalWrite(5, LOW);

   digitalWrite(6, LOW);

   digitalWrite(7, LOW);

   digitalWrite(8, LOW);

   digitalWrite(9, LOW);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 279 & inputv < 372) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, HIGH);

   digitalWrite(5, LOW);

   digitalWrite(6, LOW);

   digitalWrite(7, LOW);

   digitalWrite(8, LOW);

   digitalWrite(9, LOW);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 372 & inputv < 465) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, HIGH);

   digitalWrite(5, HIGH);

   digitalWrite(6, LOW);

   digitalWrite(7, LOW);

   digitalWrite(8, LOW);

   digitalWrite(9, LOW);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 465 & inputv < 558) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, HIGH);

   digitalWrite(5, HIGH);

   digitalWrite(6, HIGH);

   digitalWrite(7, LOW);

   digitalWrite(8, LOW);

   digitalWrite(9, LOW);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 558 & inputv < 651) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, HIGH);

   digitalWrite(5, HIGH);

   digitalWrite(6, HIGH);

   digitalWrite(7, HIGH);

   digitalWrite(8, LOW);

   digitalWrite(9, LOW);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 651 & inputv < 744) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, HIGH);

   digitalWrite(5, HIGH);

   digitalWrite(6, HIGH);

   digitalWrite(7, HIGH);

   digitalWrite(8, HIGH);

   digitalWrite(9, LOW);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 744 & inputv < 837) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, HIGH);

   digitalWrite(5, HIGH);

   digitalWrite(6, HIGH);

   digitalWrite(7, HIGH);

   digitalWrite(8, HIGH);

   digitalWrite(9, HIGH);

   digitalWrite(10, LOW);

   digitalWrite(11, LOW);

 }

 if (inputv > 837 & inputv < 930) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, HIGH);

   digitalWrite(5, HIGH);

   digitalWrite(6, HIGH);

   digitalWrite(7, HIGH);

   digitalWrite(8, HIGH);

   digitalWrite(9, HIGH);

   digitalWrite(10, HIGH);

   digitalWrite(11, LOW);

 }

 if (inputv > 930) {

   digitalWrite(2, HIGH);

   digitalWrite(3, HIGH);

   digitalWrite(4, HIGH);

   digitalWrite(5, HIGH);

   digitalWrite(6, HIGH);

   digitalWrite(7, HIGH);

   digitalWrite(8, HIGH);

   digitalWrite(9, HIGH);

   digitalWrite(10, HIGH);

   digitalWrite(11, HIGH);

 }

}