آردوینو, پروژه آردوینو

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

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

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

فهرست مطالب

نمایشگرهای 7 سگمنت از 8 چراغ LED تشکیل شده‌اند. آنها برای نشان دادن اعداد 0 تا 9 و برخی حروف الفبا مانند C، A، H، P و . . . به کار می‌روند.

هفت چراغ LED این نمایشگرها در یک خط قرار دارند و یک بخش نیز دایره‌ای است. هر کدام از هشت بخش نمایشگرهای 7 سگمنت، یک پین مخصوص دارد که با استفاده از آن می‌توان مقدارش را روی LOW یا HIGH تنظیم کرد. برای نمایش یک عدد یا حرف، باید هر کدام از چراغ‌های LED موجود را خاموش یا روشن نمود.

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

درباره ماژول نمایشگرهای سون سگمنت

ماژول‌های سون سگمنت زیادی در بازار وجود دارند که از ICها بهره می‌برند. از جمله این ماژول‌ها MAX7219 می‌باشد که قادرست چندین نمایشگر هفت قسمتی را با پروتکل ارتباطی SPI کنترل کند. تصویر زیر نمونه‌ای از این ماژول است.

ماژول سون سگمنت
ماژول سون سگمنت

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

در ادامه این مطلب، نحوه راه‌اندازی یک نمایشگر سون سگمنت و همچنین ماژولی که هشت سون سگمنت دارد را آموزش خواهیم داد.

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

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

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

نکته: در این پروژه از نمایشگر آند مشترک استفاده شده بنابراین پین مشترک نیز به پین 5 ولت متصل است. چنان‌چه نمایشگر کاتد مشترک استفاده کردید، پین مشترک باید به GND وصل گردد.

برای یک نمایشگر آند مشترک، پین LOW را درایو کنید تا LED روشن شود. در سمت دیگر و برای یک نمایشگر کاتد مشترک، پین HIGH را درایو کنید تا LED روشن گردد.

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

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

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

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

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

در این مرحله از کتابخانه LED Control که در سایت گیت‌هاب منتشر شده، استفاده می‌کنیم. با این کتابخانه، می‌توان تا هشت ماژول سون سگمنت دارای رابط SPI که در کنار یکدیگر قرار گرفته‌اند را با تنها سه پین کنترل کرد.

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

کتابخانه دانلود شده را در پوشه کتابخانه‌های آردوینو برده و در آنجا از حالت فشرده خارج کنید. در این کتابخانه سه اسکچ نمونه وجود دارد. البته ما با استفاده از فایل هدر این کتابخانه، اسکچ‌های ساده‌تری طراحی و تولید کرده‌ایم.

				
					int disp_pin[7];	/* array for a-g pins of 7-Segment display */

void define_segment_pins(int a, int b, int c, int d, int e, int f, int g)	/* Assigns 7-segment display pins to board */
{  
  disp_pin[0] = a;
  disp_pin[1] = b;
  disp_pin[2] = c;
  disp_pin[3] = d;
  disp_pin[4] = e;
  disp_pin[5] = f;
  disp_pin[6] = g;
}

void display_number(int num)	/* Function for displaying number (0-9) */
{
  switch(num)
  {
    case 0:
    digitalWrite(disp_pin[0], LOW);	/* Drive disp_pin[0] to LOW */
    digitalWrite(disp_pin[1], LOW);	/* Driving LOW turns on LED segment for common anode display */
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], LOW);
    digitalWrite(disp_pin[4], LOW);
    digitalWrite(disp_pin[5], LOW);
    digitalWrite(disp_pin[6], HIGH); 
    break;
    case 1:
    digitalWrite(disp_pin[0], HIGH);	/* Drive disp_pin[7] to HIGH */
    digitalWrite(disp_pin[1], LOW);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], HIGH);	/* Driving HIGH turns off LED segment for common anode display */
    digitalWrite(disp_pin[4], HIGH);
    digitalWrite(disp_pin[5], HIGH);
    digitalWrite(disp_pin[6], HIGH);
    break;
    case 2:
    digitalWrite(disp_pin[0], LOW);
    digitalWrite(disp_pin[1], LOW);
    digitalWrite(disp_pin[2], HIGH);
    digitalWrite(disp_pin[3], LOW);
    digitalWrite(disp_pin[4], LOW);
    digitalWrite(disp_pin[5], HIGH);
    digitalWrite(disp_pin[6], LOW);
    break;
    case 3:
    digitalWrite(disp_pin[0], LOW);
    digitalWrite(disp_pin[1], LOW);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], LOW);
    digitalWrite(disp_pin[4], HIGH);
    digitalWrite(disp_pin[5], HIGH);
    digitalWrite(disp_pin[6], LOW);
    break;
    case 4:
    digitalWrite(disp_pin[0], HIGH);
    digitalWrite(disp_pin[1], LOW);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], HIGH);
    digitalWrite(disp_pin[4], HIGH);
    digitalWrite(disp_pin[5], LOW);
    digitalWrite(disp_pin[6], LOW);
    break;
    case 5:
    digitalWrite(disp_pin[0], LOW);
    digitalWrite(disp_pin[1], HIGH);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], LOW);
    digitalWrite(disp_pin[4], HIGH);
    digitalWrite(disp_pin[5], LOW);
    digitalWrite(disp_pin[6], LOW);
    break;
    case 6:
    digitalWrite(disp_pin[0], LOW);
    digitalWrite(disp_pin[1], HIGH);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], LOW);
    digitalWrite(disp_pin[4], LOW);
    digitalWrite(disp_pin[5], LOW);
    digitalWrite(disp_pin[6], LOW);
    break;
    case 7:
    digitalWrite(disp_pin[0], LOW);
    digitalWrite(disp_pin[1], LOW);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], HIGH);
    digitalWrite(disp_pin[4], HIGH);
    digitalWrite(disp_pin[5], HIGH);
    digitalWrite(disp_pin[6], HIGH);
    break;
    case 8:
    digitalWrite(disp_pin[0], LOW);
    digitalWrite(disp_pin[1], LOW);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], LOW);
    digitalWrite(disp_pin[4], LOW);
    digitalWrite(disp_pin[5], LOW);
    digitalWrite(disp_pin[6], LOW);
    break;
    case 9:
    digitalWrite(disp_pin[0], LOW);
    digitalWrite(disp_pin[1], LOW);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], LOW);
    digitalWrite(disp_pin[4], HIGH);
    digitalWrite(disp_pin[5], LOW);
    digitalWrite(disp_pin[6], LOW);
    break;
    default:
    digitalWrite(disp_pin[0], HIGH);
    digitalWrite(disp_pin[1], LOW);
    digitalWrite(disp_pin[2], LOW);
    digitalWrite(disp_pin[3], LOW);
    digitalWrite(disp_pin[4], LOW);
    digitalWrite(disp_pin[5], HIGH);
    digitalWrite(disp_pin[6], LOW);
    break;
  }
}

void setup() {
  pinMode(6, OUTPUT);	
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  define_segment_pins(12,11,10,9,8,7,6);	/* a-g segment pins to Arduino */
}

void loop() {
  int i;
  for(i = 9; i>=0; i--)
  {
    display_number(i);
    delay(1000);
  }
  for(i = 0; i<=9; i++)
  {
    display_number(i);
    delay(1000);
  }
}
				
			

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

				
					int bcd_pins[4];				/* array for A-D pins of driver IC */

void bcd_control_pins(int a, int b, int c, int d)	/* Assigns A-D pins of deiver IC to Arduino board */
{  
  bcd_pins[0] = a;	
  bcd_pins[1] = b;
  bcd_pins[2] = c;
  bcd_pins[3] = d;
}

void display_number(int num)	/* Function for displaying number (0-9) */
{
  switch(num)
  {
    case 0:
    digitalWrite(bcd_pins[0], LOW);	/* Drive bcd_pin[0] to LOW */
    digitalWrite(bcd_pins[1], LOW);	/* Driving LOW turns on LED segment for common anode display */
    digitalWrite(bcd_pins[2], LOW);
    digitalWrite(bcd_pins[3], LOW);	
    break;
    case 1:
    digitalWrite(bcd_pins[0], HIGH);
    digitalWrite(bcd_pins[1], LOW);
    digitalWrite(bcd_pins[2], LOW);
    digitalWrite(bcd_pins[3], LOW);
    break;
    case 2:
    digitalWrite(bcd_pins[0], LOW);
    digitalWrite(bcd_pins[1], HIGH);
    digitalWrite(bcd_pins[2], LOW);
    digitalWrite(bcd_pins[3], LOW);
    break;
    case 3:
    digitalWrite(bcd_pins[0], HIGH);	/* Drive bcd_pin[3] to HIGH */
    digitalWrite(bcd_pins[1], HIGH);	/* Driving HIGH turns on LED segment for common anode display */
    digitalWrite(bcd_pins[2], LOW);
    digitalWrite(bcd_pins[3], LOW);
    break;
    case 4:
    digitalWrite(bcd_pins[0], LOW);
    digitalWrite(bcd_pins[1], LOW);
    digitalWrite(bcd_pins[2], HIGH);
    digitalWrite(bcd_pins[3], LOW);
    break;
    case 5:
    digitalWrite(bcd_pins[0], HIGH);
    digitalWrite(bcd_pins[1], LOW);
    digitalWrite(bcd_pins[2], HIGH);
    digitalWrite(bcd_pins[3], LOW);
    break;
    case 6:
    digitalWrite(bcd_pins[0], LOW);
    digitalWrite(bcd_pins[1], HIGH);
    digitalWrite(bcd_pins[2], HIGH);
    digitalWrite(bcd_pins[3], LOW);
    break;
    case 7:
    digitalWrite(bcd_pins[0], HIGH);
    digitalWrite(bcd_pins[1], HIGH);
    digitalWrite(bcd_pins[2], HIGH);
    digitalWrite(bcd_pins[3], LOW);
    break;
    case 8:
    digitalWrite(bcd_pins[0], LOW);
    digitalWrite(bcd_pins[1], LOW);
    digitalWrite(bcd_pins[2], LOW);
    digitalWrite(bcd_pins[3], HIGH);
    break;
    case 9:
    digitalWrite(bcd_pins[0], HIGH);
    digitalWrite(bcd_pins[1], LOW);
    digitalWrite(bcd_pins[2], LOW);
    digitalWrite(bcd_pins[3], HIGH);
    break;
    default:
    digitalWrite(bcd_pins[0], LOW);
    digitalWrite(bcd_pins[1], LOW);
    digitalWrite(bcd_pins[2], LOW);
    digitalWrite(bcd_pins[3], LOW);
    break; 
  }
}

void setup() {
  pinMode(8, OUTPUT);		
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  bcd_control_pins(11,10,9,8);	/* A-D of driver IC to Arduino */
}

void loop() {
  int i;
  for(i = 9; i>=0; i--)
  {
    display_number(i);
    delay(1000);
  }
  for(i = 0; i<=9; i++)
  {
    display_number(i);
    delay(1000);
  }
}
				
			

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

				
					#include "LedControl.h"

LedControl new_disp = LedControl(7,5,6,1);	/* Create an LED control object */

void setup() {
  new_disp.shutdown(0,false);	/* Normal functioning of device device with address 0 */
  new_disp.setIntensity(0,8);	/* Define medium(8) intensity of display device with address 0 */
  new_disp.clearDisplay(0);		/* Clear display device with address 0 */ 
}

void loop() {
  new_disp.setDigit(0,0,0,false);	/* Display 0 on the 1st 7-seg display */
  delay(1000);
  new_disp.setDigit(0,1,2,false);
  delay(1000);
  new_disp.setDigit(0,2,4,false);
  delay(1000);
  new_disp.setDigit(0,3,6,false);
  delay(1000);
  new_disp.setChar(0,4,'F',false);	/* Display F on the 5 th 7-seg display */
  delay(1000);
  new_disp.setChar(0,5,'P',false);
  delay(1000);
  new_disp.setChar(0,6,'c',false);
  delay(1000);
  new_disp.setChar(0,7,'A',false);
  delay(1000);
  new_disp.clearDisplay(0);		/* Clear display device with address 0 */
  delay(1000);
}
				
			

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

  • dataPin: پین آردوینو است که به پین DataIn ماژول وصل می‌شود. این همان پین آردوینو به شمار می‌رود که داده‌ها را شیفت می‌کند.
  • clkPin: پین آردوینو است که به پین CLK ماژول وصل می‌شود. این پین برای کلاک می‌باشد.
  • csPin: پین آردوینو است که به پین CS/Load ماژول وصل می‌شود. این پین برای انتخاب دستگاه در زمان ارسال داده‌ها می‌باشد.
  • Devices: این پین حداکثر تعداد دستگاه‌های قابل کنترل را مشخص می‌کند. این دستگاه‌ها می‌توانند 1 تا 8 عدد باشند. لازم به ذکر است که دستگاهی که مستقیماً به این پین وصل شده، دارای نشانی 0 است. دستگاه بعدی 1، دستگاه بعدی 2 و . . . خواهد بود و تا دستگاه آخر که به عدد 8 ختم می‌شود، ادامه خواهد یافت.

توابع استفاده شده در پروژه راه اندازی سون سگمنت با آردوینو

				
					LedControl new_disp = LedControl(dataPin, clkPin,  csPin,  Devices)
				
			

این تابع هدف کلاس LedControl را ایجاد می‌کند و اجازه برقراری ارتباط با ماژول سون سگمنت MAX7219 را می‌دهد.

				
					new_disp.shutdown(addr, status)
				
			

این تابع برای ذخیره انرژی استفاده می‌شود. اگر وضعیت آن true بود، دستگاه هماهنگ با دستور addr وارد حالت ذخیره انرژی خواهد شد و اگر وضعیت آن false بود، دستگاه به فعالیت خود ادامه خواهد داد.

				
					new_disp.setIntensity(addr, intensity)
				
			

این تابع برای تنظیم روشنایی نمایشگر سون سگمنت استفاده و با دستور addr کنترل می‌شود. میزان روشنایی صفحه نمایش می‌تواند بین 1 (حداقل) تا 15 (حداکثر) باشد.

				
					new_disp.setDigit(addr, digit, value, dp)
				
			

این تابع برای پخش عدد یا مقدار روی نمایشگر با دستور addr استفاده می‌شود. عدد وارد شده، در سون سگمنت‌های کنار نقطه پخش خواهند شد. ضمن اینکه نقطه موجود (dp) نیز نشان‌دهنده ممیز خواهد بود. اگر وضعیت dp روی false تنظیم شد، این نقطه خاموش می‌شود.

				
					new_disp.setChar(addr, digit, value, dp)
				
			

این تابع برای نشان دادن کاراکتر با دستور addr استفاده می‌شود. کاراکترها در سون سگمنت‌های کنار نقطه پخش خواهند شد. ضمن اینکه نقطه موجود (dp) نیز نشان‌دهنده ممیز خواهد بود. لازم به ذکر است که تنها برخی کاراکترها می‌توانند با این تابع پخش شوند. اگر وضعیت dp روی false تنظیم شد، این نقطه خاموش می‌شود. لازم به ذکر است که تنها برخی کاراکترها می‌توانند با این تابع پخش شوند.

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

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