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

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

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

مقدمه

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

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

فهرست مطالب

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

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

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

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

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

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

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

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

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

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

مهمترین پین‌های ماژول سون سگمنت TM1637

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

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

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

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

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

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

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

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

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

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

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

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

Sketch > Include Library > Manage Libraries

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

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

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

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

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

// Include the library
#include
// 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
#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 با نقاط بین هر رقم

راهنما

برای نمایشگرهای TM1637 فقط با علامت “:”

راهنما

برای نمایشگرهای TM1637 با نقاط و علامت ” : “

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

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

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

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

اگر با ماژول DS3231 RTC آشنایی ندارید ، مقاله راهنمای جامع برای ماژول و سنسورهای آردوینو را از دست ندهید.

در مرحله بعد، باید همانطور که در زیر نشان داده شده، به 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);
}
بازگشت به لیست

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد.