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

۲۲ اسفند ۱۴۰۳
0 دیدگاه

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

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

این ماژول شامل یک درایور LED سریال که ساخت شرکت Titan MicroElectronic-TM1637 است.

ماژول TM1637

ماژول TM1637 عملیات‌های متفاوتی را پشتیبانی می‌کند، مانند روشن و خاموش کردن، کنترل روشنایی LEDها و دسترسی به هر سگمنت. ماژول سون سگمنت TM1637 شامل 4 عدد سون سگمنت 0.36 اینچی است. علاوه بر 4 عدد سون سگمنت، در میانه این ماژول یک نشانه دو نقطه یا کولون (:) قرار دارد که ساخت پروژه‌هایی مبتنی بر ساعت یا تایمر را آسان می‌کند.

ماژول TM1637

این ماژول با ولتاژ 3.3V تا 5V کار می‌کند و از دو سیمه برای تبادل داده استفاده می‌کند. بنابراین، علاوه بر پایه‌های VCC و GND، تنها به دو پایه دیگر نیاز دارد. پایه‌های سون سگمنت TM1637 عبارت‌اند از:

 

پایه های ماژول TM1637

    CLK : پایه ورودی کلاک است که می‌تواند به هر پایه دیجیتال آردوینو متصل شود.

    DIO : پایه داده ورودی / خروجی است که می‌‍تواند به هر کدام از پایه‌های دیجتال آردوینو متصل شود.

    VCC : پایه تغذیه است و به ولتاژ 3.3V تا 5V وصل می‌شود.

    GND : پایه زمین است.

 

سیم کشی – راه اندازی ماژول سون سگمنت TM1637 با آردوینو

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

    – ماژول نمایشگر سون سگمنت 4 رقمی TM1637

    – ماژول آردوینو UNO

    – کابل USB

    – سیم جامپر نر به ماده

این ماژول از ولتاژ 5 ولت خروجی برد آردوینو تغذیه می‌شود. پایه‌های CLK و DIO به ترتیب به پایه‌های دیجیتال 2 و 3 آردوینو متصل می‌شوند. در شکل زیر می‌توانید نتیجه نهایی اتصال ماژول TM1637 به آردوینو را مشاهده کنید:

اتصال ماژول TM1637 به آردوینو

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

 

کد آردوینو

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

دانلود کتابخانه کتابخانه TM1637

برای نصب این کتابخانه در نرم افزار آردوینو به قسمت Sketch > Include Library > Add .ZIP Library  بروید و فایلی را که دانلود کرده‌اید، انتخاب کنید.

پس از نصب کتابخانه، کد زیر را بر روی آردوینو بارگذاری کنید. این کد چیزهای معمول مانند ارقام، دما، کلمه و … را بر روی نمایشگر نشان می‌دهد. در ادامه به جزئیات بیشتری خواهیم پرداخت.

				
					#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000

const uint8_t SEG_DONE[] = {
	SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
	SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
	SEG_C | SEG_E | SEG_G,                           // n
	SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
	};

TM1637Display display(CLK, DIO);

void setup(){
}

void loop(){
  int k;
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
  display.setBrightness(0x0f);

  // All segments on
  display.setSegments(data);
  delay(TEST_DELAY);

  // Selectively set different digits
  data[0] = display.encodeDigit(0);
  data[1] = display.encodeDigit(1);
  data[2] = display.encodeDigit(2);
  data[3] = display.encodeDigit(3);
  display.setSegments(data);
  delay(TEST_DELAY);

  display.clear();
  display.setSegments(data+2, 2, 2);
  delay(TEST_DELAY);

  display.clear();
  display.setSegments(data+2, 2, 1);
  delay(TEST_DELAY);

  display.clear();
  display.setSegments(data+1, 3, 1);
  delay(TEST_DELAY);


  // Show decimal numbers with/without leading zeros
  display.showNumberDec(0, false); // Expect: ___0
  delay(TEST_DELAY);
  display.showNumberDec(0, true);  // Expect: 0000
  delay(TEST_DELAY);
  display.showNumberDec(1, false); // Expect: ___1
  delay(TEST_DELAY);
  display.showNumberDec(1, true);  // Expect: 0001
  delay(TEST_DELAY);
  display.showNumberDec(301, false); // Expect: _301
  delay(TEST_DELAY);
  display.showNumberDec(301, true); // Expect: 0301
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(14, false, 2, 1); // Expect: _14_
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(4, true, 2, 2);  // Expect: 04__
  delay(TEST_DELAY);
  display.showNumberDec(-1, false);  // Expect: __-1
  delay(TEST_DELAY);
  display.showNumberDec(-12);        // Expect: _-12
  delay(TEST_DELAY);
  display.showNumberDec(-999);       // Expect: -999
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(-5, false, 3, 0); // Expect: _-5_
  delay(TEST_DELAY);
  display.showNumberHexEx(0xf1af);        // Expect: f1Af
  delay(TEST_DELAY);
  display.showNumberHexEx(0x2c);          // Expect: __2C
  delay(TEST_DELAY);
  display.showNumberHexEx(0xd1, 0, true); // Expect: 00d1
  delay(TEST_DELAY);
  display.clear();
  display.showNumberHexEx(0xd1, 0, true, 2); // Expect: d1__
  delay(TEST_DELAY);
  
  // Run through all the dots
  for(k=0; k <= 4; k++) {
    display.showNumberDecEx(0, (0x80 >> k), true);
    delay(TEST_DELAY);
  }

  // Brightness Test
  for(k = 0; k < 4; k++)
	data[k] = 0xff;
  for(k = 0; k < 7; k++) {
    display.setBrightness(k);
    display.setSegments(data);
    delay(TEST_DELAY);
  }
  
  // On/Off test
  for(k = 0; k < 4; k++) {
    display.setBrightness(7, false);  // Turn off
    display.setSegments(data);
    delay(TEST_DELAY);
    display.setBrightness(7, true); // Turn on
    display.setSegments(data);
    delay(TEST_DELAY);  
  }

 
  // Done!
  display.setSegments(SEG_DONE);

  while(1);
}
				
			

توضیح کد:

در ابتدا، دو کتابخانه Arduino.h و TM1637Display.h اضافه شده‌اند. کتابخانه Arduino برای اجرای برنامه در آردوینو (این خط در بعضی از بردها ضروری نیست). کتابخانه‌ی TM1637 مخصوص کار با ماژول سون سگمنت TM1637 که کنترل سگمنت‌ها را ساده‌تر می‌کند.

				
					#include <Arduino.h>
#include <TM1637Display.h>
				
			

CLK (Clock) و DIO (Data) پایه‌هایی هستند که برای ارتباط با نمایشگر TM1637 استفاده می‌شوند. در اینجا، CLK به پایه ۲ و DIO به پایه ۳ متصل شده‌اند.

				
					// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
				
			

این ثابت، مدت زمان تأخیر بین تست‌های مختلف را ۲ ثانیه (۲۰۰۰ میلی‌ثانیه) تنظیم می‌کند.

				
					// The amount of time (in milliseconds) between tests
#define TEST_DELAY   2000
				
			

SEG_DONE آرایه‌ای از uint8_t است که الگوی نمایش کلمه “DONE” را روی نمایشگر نشان می‌دهد. هر مقدار OR ترکیبی از سگمنت‌های روشن‌شده برای هر حرف است.

📌 SEG_X مقدار سگمنت‌های فعال برای هر کاراکتر را مشخص می‌کند.

				
					const uint8_t SEG_DONE[] = {
	SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
	SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
	SEG_C | SEG_E | SEG_G,                           // n
	SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
	};
				
			

یک شیء (Object) از کلاس TM1637Display ساخته شده که ارتباط نمایشگر را با آردوینو مدیریت می‌کند.

				
					TM1637Display display(CLK, DIO);
				
			

حلقه ()setup خالی است چون تمامی عملیات در ()loop اجرا می‌شود.

				
					void setup(){
}
				
			

این بخش مهم‌ترین قسمت برنامه است که وظیفه نمایش تست‌های مختلف روی نمایشگر را بر عهده دارد. در ابتدای ()loop متغیرهای k، data و blank تعریف می‌شوند:

    – k یک متغیر عدد صحیح برای استفاده در حلقه‌های تکرار است.

    – data همه سگمنت‌ها را روشن می‌کند.
    – blank همه سگمنت‌ها را خاموش می‌کند.
دستور setBrightness روشنایی نمایشگر را روی حداکثر مقدار تنظیم می‌کند.

				
					void loop(){
  int k;
  uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
  uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
  display.setBrightness(0x0f);

				
			

این دستور، متغیر data را روی ماژول پیاده می کند. همه‌ی سگمنت‌ها روشن می‌شوند و به مدت ۲ ثانیه نمایش داده می‌شوند.

				
					display.setSegments(data);
delay(TEST_DELAY);
				
			

دستور display.encodeDigit(n) مقدار عدد n را به‌صورت سگمنت کدگذاری‌شده تبدیل می‌کند. این دستورات اعداد ۰ تا 3 را در اولین تا آخرین جایگاه نمایش داده می‌شود. نتیجه این بخش عدد 0123 را روی نمایشگر نشان می‌دهد. 

				
					data[0] = display.encodeDigit(0);
data[1] = display.encodeDigit(1);
data[2] = display.encodeDigit(2);
data[3] = display.encodeDigit(3);
display.setSegments(data);
delay(TEST_DELAY);
				
			

دستور ()display.clear نمایشگر را پاک می‌کند. در خط دوم، data+2 یعنی مقدار از خانه دوم (عدد ۲) شروع شود. 2 ,2 یعنی فقط دو رقم در جایگاه ۲ و ۳ نمایش داده شوند. با این دستور، فقط دو رقم آخر متغیر data نمایش داده می‌شوند. نتیجه، نمایشگر مقدار –23 را نشان می‌دهد.

				
					display.clear();
display.setSegments(data+2, 2, 2);
delay(TEST_DELAY);
				
			

دستور showNumberDec برای نمایش یه عدد رو ماژول استفاده می شود. ورودی اول این دستور عدد دلخواه 0 است و ورودی دوم می تواند true یا false باشد. false یعنی بدون صفرهای پیش‌فرض، عدد 0 نمایش داده می‌شود. true یعنی نمایشگر عدد 0000 را نشان می‌دهد. 

				
					display.showNumberDec(0, false); // ___0
display.showNumberDec(0, true);  // 0000
				
			

برای نمایش اعداد منفی روی نمایشگر، می توان از دستور showNumberDec استفاده کرد.

				
					display.showNumberDec(-999);
delay(TEST_DELAY);
				
			

showNumberHexEx(value) عدد value را در مبنای ۱۶ نمایش می‌دهد.

				
					display.showNumberHexEx(0xf1af);
delay(TEST_DELAY);
				
			

در این حلقه تکرار، نقطه‌های نمایشگر (Decimal points) یکی‌یکی روشن و خاموش می‌شوند.

				
					for(k=0; k <= 4; k++) {
    display.showNumberDecEx(0, (0x80 >> k), true);
    delay(TEST_DELAY);
}
				
			

با این حلقه تکرار، روشنایی نمایشگر از کم به زیاد تغییر می‌کند.

				
					for(k = 0; k < 7; k++) {
    display.setBrightness(k);
    display.setSegments(data);
    delay(TEST_DELAY);
}
				
			

با این کد، نمایشگر چهار بار خاموش و روشن می‌شود.

				
					for(k = 0; k < 4; k++) {
    display.setBrightness(7, false);  // خاموش
    display.setSegments(data);
    delay(TEST_DELAY);
    
    display.setBrightness(7, true); // روشن
    display.setSegments(data);
    delay(TEST_DELAY);  
}
				
			

پس از اتمام تست‌ها، کلمه “DONE” نمایش داده شده و برنامه متوقف می‌شود.

				
					display.setSegments(SEG_DONE);
while(1);
				
			

در ویدئوی زیر، راه اندازی ماژول سون سگمنت TM1637 با آردوینو را به طور کامل می توانید مشاهده کنید.

در این آموزش رباتیک بابل با ماژول TM1637 آشنا شدید.   

0 دیدگاه