آردوینو آموزش آردوینو نمایشگر Segment پروژه های آردوینو

آموزش راه اندازی سون سگمنت Seven Segment با آردوینو Arduino

آموزش سون سگمنت آردوینو
نوشته شده توسط علیرضا قربانی

سون سگمنت‌ها (Seven Segment ) یکی از پرکاربردترین ، ارزان‌ترین و پرمصرف‌ترین نمایشگر‌‌ها در دنیاست.از سون سگمنت‌ها برای نشان دادن اعداد در ساعت‌های دیجیتالی، چراغ راهنما، ماشین حساب، ترازوی دیجیتالی و …استفاده می‌شود. در ادامه آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید. هر سون سگمنت در حقیقت از چند LED در کنار هم به شکل زیر تشکیل شده است.

 


انواع سون سگمنت Segment


سگمنت‌های یک نمایشگر سون سگمنت به صورت زیر ار حروف A تا G به صورت ساعت‌گرد  نام‌گذاری می‌شوند.

آموزش راه اندازی سون سگمنت با آردوینو

 

  • سون سگمنت کاتد مشترک

در این نوع سون سگمنت‌ها کاتدهای تمام LED ‌های موجود در سون سگمنت به یکدیگر متصل می‌باشند.به این معنی که برای روشن کردن هر کدام از سگمنت‌های سون سگمنت کافی‌است پایه‌ی متناظر آن را یک منطقی کنیم و پین مشترک سون سگمنت را به GND ( صفر منطقی ) متصل کنیم. برای مثال برای نشان دادن عدد ۱ بر روی این‌گونه سون‌سگمنت‌ها کافی است پین سگمنت متناظر B و C را یک منطقی کنیم و پین مشترک سون‌سگمنت را به زمین متصل کنیم.

آموزش راه اندازی سون سگمنت با آردوینو
  • سون سگمنت آند مشترک

در این نوع سون‌سگمنت‌ها تمام LEDهای موجود در سون سگمنت به یک‌دیگرمتصل می‌باشند.به این معنی که برای روشن کردن هر کدام از سگمنت‌های سون‌سگمنت کافی است پایه‌ی متناظر آن را صفر منطقی کنیم و پین مشترک سون سگمنت را به VCC ( یک منطقی) متصل کنیم. برای مثال برای نشان دادن عدد ۱ بر روی این‌گونه سون سگمنت‌ها کافی است پین سگمنت متناظر B , C را صفر منطقی کنیم و پین مشترک سون سگمنت را به VCC متصل کنیم

آموزش راه اندازی سون سگمنت با آردوینو

جدول نمایش اعداد روی سون سگمنت


 

آموزش راه اندازی سون سگمنت با آردوینو
Decimal Digit Individual Segments Illuminated
a b c d e f g
۰ × × × × × ×
۱ × ×
۲ × × × × ×
۳ × × × × ×
۴ × × × ×
۵ × × × × ×
۶ × × × × × ×
۷ × × ×
۸ × × × × × × ×
۹ × × × × ×

 


نمایش اعداد روی سگمنت چهارتایی


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

آموزش راه اندازی سون سگمنت با آردوینو

اکنون فرض کنید نیاز به راه‌اندازی یک عدد سون سگمنت چهارتایی داریم ، اگر بخواهیم مطابق روش فوق پیش برویم باید از ۳۲ پین آردوینو(۸*۴=۳۲) استفاده کنیم که این عمل کاملا غیر عاقلانه می‌باشد پس باید از روشی به نام مالتی پلکسینگ به همراه خطای دید انسان استفاده نمود. در این روش تمام سگمنت‌های مشابه به هم دیگر متصل می‌باشند یعنی تمام a ها به یکدیگر ، تمام bها به یکدیگر و….. به هم دیگر متصل می‌باشند و پین مشترکه هر کدام  نیز به هم دیگر متصل هستتند.

 

آموزش راه اندازی سون سگمنت با آردوینو

 

البته در ماژول‌های سون سگمنت ( همانند تصویر زیر)  نیازی به اتصال سگمنت‌های مشابه به یکدیگر به صورت دستی نمی‌باشد و تمام سگمنت‌های مشابه در داخل ماژول به یکدیگر متصل هستند.

آموزش راه اندازی سون سگمنت با آردوینو

 


سخت افزار مورد نیاز


سون سگمنت ۴تایی

آردوینو Uno

 

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

آموزش راه اندازی سون سگمنت با آردوینو

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

#include <SevSeg.h>

سپس باید از کلاس SevSeg یک آبجکت بسازیم:

SevSeg sevseg;

سپس نوبت به تعریف تعداد بلاک‌ها ، پین‌های مشترک و پین‌های سگمنت‌ها می‌باشد:

byte numDigits = 4; //تعریف تعداد بلاک ها
byte digitPins[] = { 9, 10, 11, 12 };// تعریف پین های مشترک
byte segmentPins[] = { 2, 3, 4, 5, 6, 7, 8, 13 };// تعریف پین های متصل به سگمنت

 


اتصالات سون سگمنت به آردوینو


 

آموزش راه اندازی سون سگمنت با آردوینو

در این پروژه از عملیات دیبانسینگ کلید استفاده شده است که برای اطلاعات بیشتر می‌توانید به لینک زیر مراجعه نمایید: آموزش دیبانسینگ در آردوینو

 


کدهای پروژه سون سگمنت با آردوینو


کدهای زیر را در نرم افزار آردوینو وارد کنید. اگر روش این کار را نمیدانید، به پست آموزش کار با نرم افزار آردوینو IDE مراجعه کنید.

#include <Bounce2.h>
#include <SevSeg.h>
Bounce debouncer1=Bounce();
Bounce debouncer2=Bounce();
SevSeg sevseg; //Instantiate a seven segment controller object


float number=0.0;
void setup()
{
  Serial.begin(9600);
  byte numDigits = 4;
  byte digitPins[] = {9,10,11,12};
  byte segmentPins[] = {2,3,4,5,6,7,8,13};

  sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
  sevseg.setBrightness(100);


pinMode (A0,INPUT_PULLUP);
debouncer1.attach(A0);
debouncer1.interval(50);

pinMode(A1,INPUT_PULLUP);
debouncer2.attach(A1);
debouncer2.interval(50);
}

void loop()
{
debouncer1.update();
debouncer2.update();
  if(debouncer1.fell())
  {
    number+=0.1;
  }

  if(debouncer2.fell())
  {
    number-=0.1;
  }
  sevseg.setNumber(number,1);
  sevseg.refreshDisplay();

}

 

 


معرفی چند تابع آردوینو


sevseg.begin (Type, NumberOFBlock, CommenPin, segmentPins)

توسط این تابع کانفیگ سون سگمنت انجام می‌شود. آرگمان اول نوع سون سگمنت را مشخص می‌کند ، اگر آند مشترک باشد به جای آرگمان Type از COMMON_ANODE ، اگر کاتد مشترک باشد از  COMMON_CATHODE  استفاده می‌شود ، هچنین می‌تواند دارای مقادیر زیر باشد:

N_TRANSISTORS ، P_TRANSISTORS ، NP_COMMMON_CATHODE و NP_COMMMON_ANODE

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

 

 

sevseg.setNumber (your number, DP location)

توسط این تابع می‌توان عدد دلخواه خود را برای نمایش بر روی سون سگمنت مشخص کنیم.آرگمان اول ، عدد مورد نظر ما می‌باشد و آرگمان دوم تعداد رقم اعشاری است که به عددمان نسبت می‌دهیم .برای مثال برای نمایش عدد ۱۵٫۷۵ باید مطابق قطعه کد زیر عمل کنیم:

sevseg.setNumber(1575,2);

همچنین اگر بخواهیم  عددی را بدون ممیز نمایش دهیم باید به جای آرگمان دوم عدد ۰ نوشته شود.

sevseg.refreshDisplay ()

بعد از مشخص کردن عدد مورد نظر توسط تابع sevseg.setNumber ، به وسیله تابع فوق ، عدد مورد نظر را بر روی سون سگمنت به نمایش در می‌آوریم. در قسمت زیر با استفاده از توابع فوق ، یک عدد را به صورت اعشاری بر روی سون سگمنت نمایش می‌دهیم به طوری که با فشردن کلید متصل به پینA0 ، به عدد ۰٫۱ اشافه می‌شود و در صورت فشرده شدن کلید متصل به پین A1 ، از عدد ۰٫۱ کم می‌شود.

 

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

 

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

 

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

علیرضا قربانی

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

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

۴۷ دیدگاه

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

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

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

  • بابــــــــــــــــــــــــــــــــــــــــــــــا …
    سایتتون خیلی توپه مـــــــــــــــــــــــــــــــــــــــــــــرد …

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

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

  • سلام آقای قربانی با چه دستوری کارکترها رو میشه نشون داد.(مثال a,b,c,..).باتشکر از سایت خوبتون.

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

      • با سلام
        هر کتابخانه به گونه ای توسعه داده شده است که از یک سری تابع و کلاس مشخص برای انجام عمل خاصی است. به عنوان مثال از منو نرم افزار بر روی library manager کلیک کنید. چندین کتابخانه سرچ کنید برای هر کدام توضیحاتی نوشته شده است که مشخص می‌کند این کتابخانه مناسب است یا خیر همچنین فایل هگز و cpp را مطالعه کنید تا با کلاس های هر کتابخانه آشنا شوید.

  • سلام خسته نباشد.من می خوام حروف رو ی سون سگمنت نمایش بده.چه دستوری داره؟مثال( a,b,c,d )

    تشکر از سایت خوبتون.

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

  • سلام ممنون از آموزش خوبتون
    ببخشید چرا کتابخانه رو نمیشناسه من حتی تمام کتابخانه سون سگمتمم آپدیت کردم ولی هنوز همون خط رو ارور میده اگه راهنمایی کنید ممنون میشم

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

    • سلام مجدد
      هر کدام مربوط به یکی از دیاگرام‌ها می‌باشد. مانند تصویر داخل آموزش مشاهده می‌کنید که سگمنت ۴ رقمی دارای ۴ دیاگرام می‌باشد.

  • سلام
    یه سوال دیگه هم دارم. اینکه چطور میشه یه عدد تک رقمی را در یه دیاگرام مشخص در یه سون سگمنت ۴ تایی نمایش داد.مثلا به جای اینکه عدد ۵ را در دیاگرام ۴ نمایش بده اون را در دیاگرام ۲ نمایش بده. اصلا شدنیه؟

  • عالی بود دوست عزیز .من یه سوال دارم ازتون میخوام توسط آرداینو و ۷ سگمنت اعداد رو برروی ۷ سگمنت نشون بدم منتها نیاز ندارم که میکرو خودش شماره ها رو بشموره بلکه خودم با فشاردادن همون دکمه برروی ۷ سگمنت عددش روبخونم .یعنی برفرض میخوام برروی سون سگمن ۸ شماره نوشته بشه و برای هرکدومشون هم یک سویچ مجزا گذاشته بشه که بافشتردادن سویچ ۱ برروی ۷ سگمنت عدد ۱ و بافشار دادن سویچ ۲ عدد ۲ و الی آخر نمایش دده بشه .میتونید دراین زمینه کمکی بهم بکنید .باتشکر از شما

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

  • سلام
    من نیاز دارم به غیر از نمایش اعداد با این کتابخانه یک سری حروف هم نمایش دهم چطور میتونم با استفاده از تابع های این کتابخانه یک سری حروف را نمایش دهم ؟؟؟

  • سلام و تشکر از پست خوبتون
    پین a سون سگمنت من تو هر چهار دیاگرامش روشنه ….خاموش نمیشه و این که دات ها ینی همون dp ها هم روشن نمیشن مشکل از سون سگمنت هستش؟
    و این که من lm35 استفاده کردم و مقدارشو نشون میده….ولی میخام که هر ۵۰۰ میلی ثانیه عددم ریفرش بشه چیکار کنم؟

  • سلام من یه ساعت دیواری مثل همینی که تو تصویر اول این صفحه هست میخوام….(اینطوری که فقط همون سگمنتها باشه و صفحه پشت نداشته باشه) کسی می تونه برام بسازه یا بگه از کجا می تونم تهیه کنم…ممنون

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

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

  • ببخشید من اتصالات رو متوجه نشدم.میشه توضیح بدین؟
    در مورد سون سگمنت تکی هم مطلبی نبود.

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

  • سلام
    می‌بخشید من سون سگمنت از بازار تهیه کردم که با کمک آردوینو ساعت بسازم ولی سون سگمنتها پایه‌هاش برام مشکل درست کردن بطوریکه پایه‌های پایین دو تا کناری که dp و e میباشند مشترک بوده و vcc بهش متصل میشه و بالا پایه وسط بهش gnd وصل میشه وفقط چراغ اعشارش روشن میشه و پایه‌های دیگه هیچ عکس العملی نشون نمیدن ، ممنون میشم راهنمایی بفرمایید

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

  • سلام، وقت بخیر. من میخوام یه ساعت دیجیتالی ۶ رقمی بسازم و دیجیت های بزرگ جداگونه بذارم که هم ثانیه رو نشون بده هم دقیقه و هم ساعت. چجوری با آردوینو و همین تابعی که توی همین آموزش گفتید، یک تابع تعریف کنم که با تاخیر ۱۰۰۰ میلی ثانیه ای به یکان ثانیه اضافه کنه و وقتی به ۹ رسید، صفر شه و یکی به دهگان ثانیه اضافه کنه، بعد از اون وقتی دهگان ثانیه به ۶ رسید، صفر شه و یکی به یکان دقیقه اضافه کنه به همین ترتیب الی آخر و یک ساعت دیجیتالی کامل داشته باشیم …؟

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

  • سلام
    خسته نباشید
    من همین کد رو اجرا کردم،
    ولی اون ال ای دی هایی که در یک بخش روشن شده رو در بخش دیگه روشن نمیکنه
    مثلا
    وقتی میخوام ۱۳ رو نشون بدم، یک رو نشون میده اما وقتی ۳ رو نشون میده ال ای دی های B و C رو نشون نمی ده

  • با سلام و خسته نباشید ویژه؛
    یه مشکل داشتم

    وقتی در یک دیجیت برای مثال، c و b روشن هستند، در دیجیت بعدی دیگه اون ال ای دی ها روشن نمیشن
    برای نمونه:
    وقتی عدد ۱۳ رو میخوام نشون بدم، عدد ۱ به طور کامل نمایش داده میشه( ال ای دی های a و c روشن میشن)، ولی در عدد سه که در دیجیت بعدی است، ال ای دی های a و c خاموش هستند و فقط A و G و D روشن هستند.
    البته از کتابخانه SevSeg.h استفاده میکنم
    ممنون میشم راهنمایی کنید.