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

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

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

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

ماژول نامبرده اتصالات پین را از 12 به 4 اتصال کاهش می‌دهد و دو پایه برای اتصالات برق و دو پایه دیگر برای کنترل بخش‌های مختلف دارد تا با این روش، کار را برای ما مثل آب خوردن کند. از میان پروژه‌های موجود ، پروژه دماسنج را انتخاب کرده‌ایم. شما برای انجام این پروژه، به یک عدد ماژول سون سگمنت 4 رقمی TM1637 و یک برد آردوینو ترجیحا آردوینو UNO، ماژول DHT11 / DHT22، تعدادی سیم جامپر و یک عدد برد بورد احتیاج دارید.

فهرست مطالب

بررسی ماژول سون سگمنت 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 Libraries

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

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

مدیریت و اضافه نمودن کتابخانه TM1637 به آردوینو
مدیریت و اضافه نمودن کتابخانه 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 آغاز می‌شود.

				
					#inclue #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، امکان نمایش داده‌های مربوط به سنسور دما، رطوبت، ولتاژ یا سرعت است.

پروژه زیر قرائت دمای به دست آمده از سنسور DHT11 و DHT22 را بر روی صفحه نمایش TM1637 پخش می‌کند.

نمودار سیم‌کشی زیر به شما نشان می‌دهد که چگونه می‌توانید سنسور DHT11 و DHT22 را به همراه صفحه نمایش TM1637 به Arduino متصل کنید.

راه اندازی ماژول TM1637 با سنسور دما و رطوبت DHT11
راه اندازی ماژول TM1637با سنسور دما و رطوبت DHT11

طرح زیر با سنسور DHT11 و DHT22 ارتباط برقرار می‌کند و نحوه قرائت دما را بر روی صفحه نمایش نشان می‌دهد. دما بر واحد سلسیوس و فارنهایت و با فاصله تازه‌سازی 2 ثانیه نمایش داده می‌شود.

این کد از سنسور Adafruit DHT و کتابخانه‌های سنسور یکپارچه Adafruit استفاده می‌کند بنابراین لطفا آنها را نیز نصب کنید.

				
					// Include the libraries
#include
#include
#include
// Define the connections pins
#define CLK 3
#define DIO 4
#define DHTPIN 5
// Create variable
int temperature_celsius;
int temperature_fahrenheit;
// Create °C symbol
const uint8_t celsius[] = {
	SEG_A | SEG_B | SEG_F | SEG_G,  // Circle
	SEG_A | SEG_D | SEG_E | SEG_F   // C
};
// Create °F symbol
const uint8_t fahrenheit[] = {
	SEG_A | SEG_B | SEG_F | SEG_G,  // Circle
	SEG_A | SEG_E | SEG_F | SEG_G   // F
};
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302)
// Create display object of type TM1637Display
TM1637Display display = TM1637Display(CLK, DIO);
// Create dht object of type DHT:
DHT dht = DHT(DHTPIN, DHTTYPE);
void setup() {
	// Set the display brightness (0-7)
	display.setBrightness(5);
	// Clear the display
	display.clear();
	// Setup sensor
	dht.begin();
}
void loop() {
	// Read the temperature as Celsius and Fahrenheit
	temperature_celsius = dht.readTemperature();
	temperature_fahrenheit = dht.readTemperature(true);
	// Display the temperature in celsius format
	display.showNumberDec(temperature_celsius, false, 2, 0);
	display.setSegments(celsius, 2, 2);
	delay(1000);
	// Display the temperature in fahrenheit format
	display.showNumberDec(temperature_fahrenheit, false, 2, 0);
	display.setSegments(fahrenheit, 2, 2);
	delay(1000);
}
				
			

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

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