راه اندازی سون سگمنت با آردوینو(پارت اول)

راه اندازی سون سگمنت با آردوینو(پارت اول)

سلام به همه. تو این پست میخوایم سون سگمنت رو بوسیله برد آردوینو uno راه اندازی کنیم .

اول بیاید با همدیگه ببینیم سون سگمنت چی هست؟

شماتیک سون سگمنت

سون سگمنت ساده ترین نوع نمایشگره که برای کاهش هزینه ساخت و سادگی راه اندازی شهرت داره . این نمایشگر برای کاربردای مختلف مثل نمایشگر وزن ،دما ، مقادیر انواع سنسور ها و… داره.

به این علت بهش میگن “سون سگمنت ” یا نمایشگر هفت قسمتی چون از هفت قسمت تشکیل شده که این هفت قسمت هرکدومشون یدونه LED هستن و با روشن شدن LED ها به ما اعداد رو نشون میده (البته گاهی برای نمایش حروف هم بکار میره). این LED هارو با نامگذاری های خاصی نشون میدن که در شکل زیر میتونید ببینید:

خب طبق شکل بالا ، اگر LED های B وC باهم روشن بشن ، ما عدد 1 رو میبینیم. اگر A,B,G,E,D با هم روشن باشن ما عدد 2 رو میبینیم و به همین ترتیب ادامه داره . سون سگمنت ها در دو مدل common cathode(کاتد مشترک ) و common anode (آند مشترک) ساخته میشه که تفاوتش در اینه که در کاتد مشترک ها منفی LED ها بهم وصله و در آند مشترک ها مثبت LEDها بهم وصله.

تصویر زیر رو ببینید تا منظورم رو بهتر متوجه بشید:

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

خب پایه های سون سگمنت چطوریه ؟

برای پیدا کردن پایه های سون سگمنت به یک مولتی متر و تست بوقش یا منبع تغذیه 3 ولتی با یک مقاومت 220 اهمی احتیاج دارید. به ترتیب یک پایه رو مثبت بدید و بقیه رو منفی بزنید تا ببینید پایه ها به چه شکل هستن و بعدش دوباره همین کارو با پایه های دیگه انجام بدید . راه دیگه هم اینه که از طریق دیتاشیت سون سگمنت به پایه ها پی ببرید که متاسفاه به عل ازدیاد قطعات چینی در بازار فعلی ایران ، دیتاشیت درست حسابی از سون سگمنت ها پیدا نمیشه پس تست دستی (روش اول) از همش بهتره.

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

تو این پست میخوایم راه اندازی سون سگمنت رو با اردوینو UNO انجام بدیم.

بسته به اندازه و جریان کشی سون سگمنتتون معلوم میشه که باید درایوش کنید یا نه . بطور کلی پایه های اردوینو UNO تا 40 میلی آمپر ( هر پایه 40 میلی آمپر) جریان میده و اگر سون سگمنتتون بزرگه یا دیجیت های زیادی داره بهتره که از ایسی های درایور مختلف بسته به نیازتون استفاده کنید . ما اینجا یه سون سگمنت کوچیک رو راه اندازی میکنیم پس نیازی به درایور نیست.

کتابخونه مورد استفاده ما sevseg هست که یک کتابخونه معروف تو این زمینه به حساب میاد . مدار به شکل زیر هست (مقدار مقاومت ها 220 اهم هستند) :

سیم کشی سون سگمنت با اردوینو UNO

حالا که با سیم کشی آشنا شدید ، بریم نمونه کد جهت راه اندازی رو ببینیم:

//CLOONER.IR

#include "SevSeg.h"
SevSeg sevseg; 

void setup(){
    byte numDigits = 1;
    byte digitPins[] = {};
    byte segmentPins[] = {6, 5, 2, 3, 4, 7, 8, 9};
    bool resistorsOnSegments = false;
    bool updateWithDelays = false;
    bool leadingZeros = false; 
    bool disableDecPoint = false; 
    byte hardwareConfig = COMMON_CATHODE; 
    sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
  updateWithDelays, leadingZeros, disableDecPoint);
    sevseg.setBrightness(90);
}

void loop(){
        sevseg.setNumber(4);
        sevseg.refreshDisplay();        
}

خب حالا قراره خط به خط کد رو تحلیل کنیم که ببینیم هر خط کد به چه معناست:

تو این خط کتابخونه رو فراخوانی میکنیم:

#include "SevSeg.h"

اینجا یک آبجکت بنام sevseg میسازیم تا با اون سون سگمنت رو راه اندازی کنیم:

SevSeg sevseg;

این کد تعداد دیجیت های سون سگمنت رو تعیین میکنه که توی مورد ما 1 دیجیت هست . مال شما هر تعداد بود میتونید عددش رو قرار بدید:

    byte numDigits = 1;

اینم شماره پین مربوط به هر دیجیت هست که چون ما یک دیجیت داریم اونو خالی میزاریم:

  byte digitPins[] = {};

اینجا شماره های مربوط به سگمنت های A,B,C,D,E,F,G رو وارد میکنیم که فرمتش بصورت زیره :

 byte segmentPins[] = {A, B, C, D, E, F, G, DP};

کد زیر تعیین میکنه که مقاومت سر راه دیجیت ها هست یا نه . اگر مقدارش false باشه یعنی سر راه دیجیت ها مقاومت هست و اگر true باشه یعنی سر راه دیحیت ها مقاومت نیست . ما هم مقاومت سر راه دیجیت هاگذاشتیم پس مقدار false رو قرار میدیم:

   bool resistorsOnSegments = false;

این کد بصورت پیش فرض پیشنهاد شده false قرار داده بشه پس ما هم دست بهش نمیزنیم:

bool updateWithDelays = false;

خب میرسیم به یک تیکه کد بینهایت مهم :

 bool leadingZeros = false; 

خیلی از افراد این خط کد رو قرار نمیدن و بعد با صحنه زیر مواجه میشن:

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

اون خط کدی که گفتیم ، صفر پیش از عدد رو تعیین میکنه و اگر مقدارش true باشه اعداد بصورت زیر نمایش داده میشن:

01

022

0456

اگر مقدارش false باشه اعداد بصورت زیر نمایش داده میشن:

1

22

456

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

کد زیر هم برای زمانی استفاده میشه که پین های دسیمال سون سگمنت وجود نداشته باشن یا وصل نباشن . اگر مقدارش true باشه یعنی پین دسیمالی وجود نداره یا وصل نیست. اینجا ما پین دسیمال رو قرار دادیم پس از false استفاده میکنیم:

  bool disableDecPoint = false; 

تو این کد تعیین میکنیم که سون سگمنت آند مشترکه یا کاتد مشترک که بالاتر هم توضیح دادیم فرقشون رو:(COMMON_CATHODE برای کاتد مشترک و COMMON_ANODE برای آند مشترک)

  byte hardwareConfig = COMMON_CATHODE;

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

    sevseg.setBrightness(90);

در نهایت اینجا هر چیزیکه بالاتر نوشتیم رو فراخوانی میکنیم تا اجرا بشن:

sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
  updateWithDelays, leadingZeros, disableDecPoint);

قطعه کد زیر هم عدد 4 رو روی سون سگمنت به ما نشون میده :

 sevseg.setNumber(4);

در نهایت اینجا با رفرش سون سگمنت و اجرای کد بصورت لوپ دیجیت های عدد 4 روشن میشن و میتونیم تو سون سگمنت عدد رو ببینیم:

 sevseg.setNumber(4);

یادتون باشه که داخل کتابخانه sevseg ما نمیتونیم از هیچ گونه dealy استفاده کنیم . پس بهتره از millis استفاده کنید تا کتابخونه کرش نکنه و اعداد رو درست نشون بده بهتون.

امیدوارم لذت برده باشید .

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *