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

راه اندازی سون سگمنت ۴ تایی با آردوینو ، پروژه ساخت ساعت

مقدمه

با سلام ، در این آموزش به شما ” راه اندازی سون سگمنت ۴ تایی با آردوینو ، پروژه ساخت ساعت ” را آموزش خواهیم داد . به طور کلی یک سون سگمنت ۴ تایی معمولی ۱۲ تا پایه دارد که برای راه اندازی آن باید سختی بسیار کشید !!! اما نگران نباشید این همان جایی است که ماژول سون سگمنت ۴ تایی TM1637 وارد می شود . ماژول TM1637 اتصالات پین را از ۱۲ به ۴ اتصال کاهش می دهد . دو پایه برای اتصالات برق و دو پایه دیگر برای کنترل بخشها استفاده می شود ، بدین صورت کار را برای ما مثل آب خوردن می شود ، پس با ما همراه باشید تا در ادامه به راه اندازی سون سگمنت ۴ تایی با آردوینو بپردازیم .

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

 

فهرست مطالب

 

بررسی ماژول TM1637

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

همچنین به شما امکان می دهد میزان روشنایی LED ها را تنظیم نمایید.

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

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

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

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

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

ماژول TM1637 با ولتاژ تغذیه ۳.۳ تا ۵ ولت کار می نماید و از طریق دو پایه داده به علاوه VCC (قطب مثبت) و GND (قطب منفی) نیاز دارد. برای ارتباط راحت تر با این ماژول ، آردوینو کتابخانه هایی دارد که کار را برای ما آسان می نماید .

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

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

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

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

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

اتصالات ماژول TM1637 با Arduino UNO

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

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

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

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

نصب کتابخانه TM1637

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

برای نصب کتابخانه ، به Sketch > Include Library > Manage Libraries بروید .

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

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

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

کد اولیه آردوینو

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

// 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 به صورت باینری به ۱۱۱۱۱۱۱۱ ترجمه می شود و همه بخش ها را روشن می نماید . به عنوان مثال 0xEF به ۱۱۱۰۱۱۱۱ ترجمه می شود ، و همه بخش ها را به جز بخش E روشن می کند ، در حالی که 0x00 تمام بخش ها را خاموش می نماید .

 

توجه داشته باشید که شمارش از راست به چپ انجام می شود ، بنابراین بخش ۱۱۱۱۱۱۱۱ مربوط به (نقطه) 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 (تنظیم روشنایی)

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

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

setSegments (سگمنت ها,طول,موقعیت)

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

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

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

// Prints dOnE
display.setSegments(done);

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

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

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

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

به عنوان مثال ، قطعه کد زیر از ۰ تا ۹ شمارش می شود و سپس -۱۲ و -۹۹۹ را بر روی صفحه نمایش چاپ می کند.

// 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

آرگومان سوم و چهارم همان تابع قبلی است. length تعداد ارقام موردنظر برای به روزرسانی را مشخص می کند (۰–۴) و موقعیت موقعیتی را که می خواهید از آن چاپ نمایید تعیین می نماید (۰-چپ ترین ، ۳-راست ترین).

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

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

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

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

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

اتصالات ، ماژول TM1637 و ماژول DS3231

طرح زیر زمان را در قالب ۲۴ ساعته نشان می دهد. این کد از کتابخانه 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);
}

سخن پایانی

از این که تا آخر مسیر ” راه اندازی سون سگمنت ۴ تایی با آردوینو ، پروژه ساخت ساعت ” همراه ما آمدید از شما دوستان عزیز سپاسگزاریم ، برای ما از تجربیات خودتون در زمینه این پروژه برای ما ارسال نمایید ، منتظر نظرات شما هستیم . هم چنین می توانید به مقاله ” راه اندازی سون سگمنت ۴ تایی با آردوینو ، پروژه ساخت دماسنج ” مراجعه نمایید .

نمایش بیشتر

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

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

دکمه بازگشت به بالا