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

ساخت ساعت با ماژول سون سگمنت و آردوینو

ساخت ساعت با ماژول سون سگمنت و آردوینو

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

از میان پروژه‌های موجود، پروژه ساخت ساعت یا تایمر را انتخاب کرده‌ایم. شما برای انجام این پروژه، به یک عدد ماژول سون سگمنت 4 رقمی TM1637، یک برد آردوینو ترجیحا آردوینو UNO، ماژول DS3231، تعدادی سیم جامپر و یک عدد برد بورد احتیاج دارید.

فهرست مطالب

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

TM1637 از عملکردهای بسیاری از جمله روشن و خاموش و همچنین کنترل روشنایی LEDها و دسترسی به هر یک از بخش‌های A تا G پشتیبانی می‌کند.

به علاوه، تی ام 1637 این امکان را به شما می‌دهد تا میزان روشنایی LEDها را تنظیم نمایید.

حالت های مختلف سون سگمنت
حالت‌های مختلف نمایشگر سون سگمنت

یکی از نکات خوب این ماژول این است که به محض به‌روزرسانی نمایشگر توسط میکروکنترلر، TM1637 از تازه‌سازی نمایشگر مراقبت می‌نماید که این خود باعث طول عمر نمایشگر و برد می‌شود. نکته خوب دیگر این محصول این است که برای نشان دادن زمان ، دارای علامت “:” ( دو نقطه) به صورت پیش‌فرض می‌باشد.

نمایشگرهای 7 سگمنتی معمولی در واقع فقط هفت LED هستند که در یک الگوی خاص (عدد 8 انگلیسی) قرار گرفته‌اند‌.

ماژول TM1637
ماژول TM1637

ماژول TM1637 شامل چهار سون سگمنت برای نمایش داده‌ها یا دما است. علاوه بر چهار سون سگمنت، این ماژول دارای یک “:” در مرکز است که ایجاد پروژه‌های مبتنی بر زمان را بسیار آسان خواهد کرد.

ماژول تی ام 1637 با ولتاژ تغذیه 3.3 تا 5 ولت کار می‌کند و از طریق دو پایه داده، به VCC (قطب مثبت) و GND (قطب منفی) نیاز دارد. برای ارتباط راحت‌تر با این ماژول، آردوینو کتابخانه‌هایی دارد که کار را برای ما آسان خواهد کرد.

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

آشنایی با مهمترین پین‌های ماژول TM1637 پیش از ساخت ساعت با ماژول سون سگمنت و آردوینو

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

DIO: پین ورودی و خروجی داده است. (به هر پین دیجیتال آردوینو متصل می‌شود).

VCC: پین قطب مثبت (آن را به منبع تغذیه 3.3 ولت تا 5 ولت وصل نمایید).

GND: پین قطب منفی.

آشنایی با اتصالات ماژول سون سگمنت تی ام 1637 با Arduino UNO پیش از ساخت ساعت با ماژول سون سگمنت و آردوینو

اتصالات TM1637 با آردوینو بسیار ساده است. شما فقط باید چهار سیم برای داشته باشید؛ دو سیم برای برق و دو سیم دیگر برای کنترل صفحه نمایش.

انرژی مورد نیاز این ماژول از خروجی 5 ولت آردوینو تأمین می‌شود. پایه‌های CLK و DIO هم به پایه‌های دیجیتال متصل هستند. (مشابه شکل زیر)

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

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

نصب کتابخانه TM1637 جهت ساخت ساعت با ماژول سون سگمنت و آردوینو

برای ارتباط با تراشه TM1637، باید از کتابخانه‌های آردوینو استفاده نمایید. Avishay Orpaz یک کتابخانه عالی برای نمایشگرهای TM1637 می‌باشد. این کتابخانه چند عملکرد داخلی دارد که کنترل نمایشگر را نسبتاً آسان می‌کند بنابراین شما فقط باید مشخص کنید که کدام شماره نمایش داده شده و کنترل شود.

برای نصب کتابخانه، به آدرس زیر بروید:

Sketch > Include Library > Manage

مدیریت و اضافه نمودن کتابخانه به آردوینو
مدیریت و اضافه نمودن کتابخانه به آردوینو

با تایپ tm1637 جستجوی خود را فیلتر نمایید. بعد به دنبال کتابخانه Avishay Orpaz باشید. سپس Install را انتخاب کنید.

مدیریت و اضافه نمودن کتابخانه TM1637 به آردوینو
مدیریت و اضافه نمودن کتابخانه TM1637 به آردوینو

آشنایی با کد اولیه آردوینو به منظور ساخت ساعت با ماژول سون سگمنت و آردوینو

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

				
					// Include the library
#include <TM1637Display.h>

// Define the connections pins
#define CLK 3
#define DIO 4

// Create a display object of type TM1637Display
TM1637Display display = TM1637Display(CLK, DIO);

// Create an array that turns all segments ON
const uint8_t allON[] = {0xff, 0xff, 0xff, 0xff};

// Create an array that turns all segments OFF
const uint8_t allOFF[] = {0x00, 0x00, 0x00, 0x00};

// Create an array that sets individual segments per digit to display the word "dOnE"
const uint8_t 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
};

// Create degree celsius symbol
const uint8_t celsius[] = {
  SEG_A | SEG_B | SEG_F | SEG_G,  // Degree symbol
  SEG_A | SEG_D | SEG_E | SEG_F   // C
};

void setup() {

}

void loop() {
	// Set the brightness to 5 (0=dimmest 7=brightest)
	display.setBrightness(5);

	// Set all segments ON
	display.setSegments(allON);

	delay(2000);
	display.clear();

	// Show counter 0-9
	int i;
	for (i = 0; i < 10; i++) {
		display.showNumberDec(i);
		delay(50);
	}

	delay(2000);
	display.clear();

	display.showNumberDec(-12);			// Prints _-12
	delay(2000);
	display.clear();
	
	display.showNumberDec(-999);		// Prints -999
	delay(2000);
	display.clear();
	
	display.showNumberDec(31, false);	// Prints __31
	delay(2000);
	display.clear();
	
	display.showNumberDec(31, true);	// Prints 0031
	delay(2000);
	display.clear();
	
	display.showNumberDec(14, false, 2, 1);	// Prints _14_
	delay(2000);
	display.clear();
	
	display.showNumberDec(-5, false, 3, 0);	// Prints _-5_
	delay(2000);
	display.clear();

	// Prints 12:34
	display.showNumberDecEx(1234, 0b11100000, false, 4, 0);

	delay(2000);
	display.clear();

	// Prints 15°C
	int temperature = 15;
	display.showNumberDec(temperature, false, 2, 0);
	display.setSegments(celsius, 2, 2);

	delay(2000);
	display.clear();
	
	// Prints dOnE
	display.setSegments(done);

	while(1);
}
				
			

توضیح کد

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

				
					#include <TM1637Display.h>
#define CLK 3
#define DIO 4
				
			

در مرحله بعد، نمونه جدیدی از کلاس TM1637Display با تابع TM1637Display () ایجاد می‌شود. این عملکرد به دو پارامتر احتیاج دارد؛ یکی پین CLK و دیگری پین DIO.

				
					TM1637Display display = TM1637Display(CLK, DIO);
				
			

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

اولین گزینه برای تنظیم بخش‌های منفرد، استفاده از اعداد هگزادسیمال است. Hexadecimal 0xFF به صورت باینری به 11111111 ترجمه می‌شود و همه بخش‌ها را روشن می‌کند. به عنوان مثال، 0xEF به 11101111 ترجمه شده و همه بخش‌ها را به جز بخش E روشن خواهد کرد حال آنکه 0x00 تمام بخش‌ها را خاموش می‌نماید.

توجه داشته باشید که شمارش از راست به چپ انجام می‌شود بنابراین بخش 11111111 مربوط به (نقطه) GFEDCBA است.

				
					// Create an array that turns all segments ON
const uint8_t allON[] = {0xff, 0xff, 0xff, 0xff};
// Create an array that turns all segments OFF
const uint8_t allOFF[] = {0x00, 0x00, 0x00, 0x00};
				
			

دیگر روش برای تنظیم هر کدام از سگمنت‌ها، مشخص کردن سگمنتی است که می‌خواهید روشن شود. این شیوه از روش اولیه آسان‌تر است. به کدهای زیر نگاهی بیندازید. اولیه آرایه dOne را نشان می‌دهد حال آنکه دومین آرایه C° را نشان خواهد داد.

				
					// Create an array that sets individual segments per digit to display the word "dOnE"
const uint8_t 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
};

// Create °C symbol
const uint8_t celsius[] = {
  SEG_A | SEG_B | SEG_F | SEG_G,	// °
  SEG_A | SEG_D | SEG_E | SEG_F		// C
};
				
			

چیزی برای تنظیم وجود ندارد بنابراین قسمت تنظیمات خالی نگه داشته شود.

				
					void setup() { }
				
			

در بخش حلقه کد، از بسیاری از توابع کتابخانه استفاده کرده‌ایم که در ادامه یکی از آنها را بررسی می‌کنیم؛

کد setBrightness (تنظیم روشنایی) برای ساخت ساعت با ماژول سون سگمنت و آردوینو

این عملکرد برای تنظیم روشنایی صفحه نمایش استفاده می‌شود. می‌توانید سطح روشنایی را از 0 (کمترین روشنایی) تا 7 (بالاترین میزان روشنایی) مشخص نمایید. آرگومان دوم اختیاری است و می‌تواند برای روشن یا خاموش کردن نمایشگر استفاده شود. درست (نمایشگر روشن)، غلط (نمایشگر خاموش).

به عنوان مثال، display.setBrightness (5) روشنایی را روی 5 تنظیم می‌کند در حالی که display.setBrightness (5 ، false) نمایشگر را خاموش می‌کند.

کد setSegments (سگمنت‌ها، طول، موقعیت) برای ساخت ساعت با ماژول سون سگمنت و آردوینو

از این عملکرد می‌توان برای تنظیم بخش‌های جداگانه نمایشگر استفاده کرد. اولین آرگومان آرایه‌ای است که شامل اطلاعات بخش می‌شود. آرگومان دوم تعداد ارقام به روزرسانی شده (0–4) را مشخص خواهد کرد. اگر می‌خواهید کلمه “dOnE” را چاپ کنید، عدد 4 خواهد بود. برای نماد ” ° C ” اما، عدد 2 خواهد بود. آرگومان سوم موقعیتی را که می‌خواهید از آن چاپ کنبد، تعیین خواهد کرد (0 چپ‌ترین و 3 راست‌ترین).

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

				
					// Set all segments ON
display.setSegments(allON);
// Prints dOnE
display.setSegments(done);
				
			

با این حال، اگر می‌خواهید فقط دو رقم آخر نمایشگر را برای چاپ نماد “° C” به‌روز کنید از کد زیر استفاده می‌کنید.

				
					// Prints __°C
display.setSegments(celsius, 2, 2);
				
			

کد showNumberDec (تعداد، پیشروها، طول، موقعیت) جهت ساخت ساعت با ماژول سون سگمنت و آردوینو

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

به عنوان مثال، قطعه کد زیر از 0 تا 9 شمارش می‌شود و سپس -12 و -999 را بر روی صفحه نمایش چاپ می‌کند.

				
					// Show counter 0-9
int i;
for (i = 0; i < 10; i++) {
	display.showNumberDec(i);
	delay(50);
}
display.showNumberDec(-12);			// Prints _-12
display.showNumberDec(-999);		// Prints -999
				
			

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

				
					display.showNumberDec(31, false);	// Prints __31
display.showNumberDec(31, true);	// Prints 0031
				
			

مثلا، آرگومان سوم و چهارم همان تابع قبلی است. طول تعداد ارقام مورد نظر برای به‌روزرسانی را مشخص می‌کند (0–4) و موقعیتی که می‌خواهید از آن چاپ کنید را تعیین خواهد کرد (0-چپ‌ترین ، 3-راست‌ترین).

بنابراین ، اگر می‌خواهید عددی را در وسط نمایشگر نشان دهید، می‌نویسید:

				
					display.showNumberDec(14, false, 2, 1);	// Prints _14_
display.showNumberDec(-5, false, 3, 0);	// Prints _-5_
				
			

کد showNumberDecEx (تعداد، نقاط، پیشروها، طول، موقعیت) برای ساخت ساعت با ماژول سون سگمنت و آردوینو

این یک نسخه توسعه‌یافته از عملکرد showNumberDec () است. می‌بینید که تنها استدلال دوم تفاوت دارد. این آرگومان به شما امکان می‌دهد نقاط نمایش را کنترل کنید. می‌توانید از مقادیر زیر بهره ببرید:

برای نمایشگرهای TM1637 با نقاط بین هر رقم

راهنما

showNumberDecEx (تعداد، نقاط، پیشروها، طول، موقعیت)

راهنما

showNumberDecEx (تعداد، نقاط، پیشروها، طول، موقعیت)

راهنما

بنابراین اگر می‌خواهید ساعتی با علامت “:” در وسط فعال شود، از کد زیر استفاده نمایید:

				
					// Prints 12:34 display.showNumberDecEx(1234, 0b11100000, false, 4, 0);
				
			

ساخت ساعت با ماژول سون سگمنت و آردوینو

یکی دیگر از کاربردهای معمول صفحه نمایش TM1637، جفت کردن آن با ماژول DS3231 RTC و ایجاد ساعت 24 ساعته است.

در مرحله بعد، باید همانطور که در زیر نشان داده شده، به DS3231 متصل شویم. توجه داشته باشید که نمایشگر TM1637 به همان روش قبلی متصل شده است.

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

طرح زیر زمان را در قالب 24 ساعته نشان می‌دهد. این کد از کتابخانه Adafruit RTC استفاده می‌کند که می‌توانید با جستجوی ‘RTClib which، آن را از طریق مدیر کتابخانه در Arduino IDE نصب کنید.

				
					// Include the libraries
#include "RTClib.h"
#include
// Define the connections pins
#define CLK 3
#define DIO 4
// Create rtc and display object
RTC_DS3231 rtc;
TM1637Display display = TM1637Display(CLK, DIO);
void setup() {
	// Begin serial communication
	Serial.begin(9600);
	// Check if RTC is connected correctly
	if (! rtc.begin()) {
		Serial.println("Couldn't find RTC");
		while (1);
	}
	// Check if the RTC lost power and if so, set the time
	if (rtc.lostPower()) {
		Serial.println("RTC lost power, lets set the time!");
		// The following line sets the RTC to the date & time this sketch was compiled:
		rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
		// This line sets the RTC with an explicit date & time, for example to set
		// January 21, 2014 at 3am you would call:
		//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
	}
	// Set the display brightness (0-7)
	display.setBrightness(5);
	// Clear the display
	display.clear();
}
void loop() {
	// Get current date and time
	DateTime now = rtc.now();
	// Create time format to display
	int displaytime = (now.hour() * 100) + now.minute();
	// Display the current time in 24 hour format with leading zeros and a center colon enabled
	display.showNumberDecEx(displaytime, 0b11100000, true);
	delay(1000);
}
				
			

4 دیدگاه در “ساخت ساعت با ماژول سون سگمنت و آردوینو

  1. نعیم گفت:

    سلام
    موقع کامپایل کردن اررور میده بورد انتخاب شده رو میده .. تغییر هم دادم بورد رو ولی بازم اررور پابرجا هست

    1. فروشگاه بهنام رباتیک گفت:

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

  2. پرنیا گفت:

    سلام خسته نباشید
    کدی که دادید ارور میده من library سون سگمنت رو هم نصب کردم اما بازم مشکلی داره…ممنون میشم اگه راهنمایی کنید
    ارورش اینه:
    Clock:2:10: fatal error: RTClib.h: No such file or directory
    #include “RTClib.h”
    ^~~~~~~~~~
    compilation terminated.
    exit status 1
    RTClib.h: No such file or directory

    1. فروشگاه بهنام رباتیک گفت:

      سلام
      کدهای قرار داده شده داخل مطلب اصلاح شدند
      با تشکر از توجه شما

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

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