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

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

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

مقدمه

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

فهرست مطالب

بررسی ماژول سون سگمنت 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 هم به پایه‌های دیجیتال متصل هستند. (مشابه شکل زیر)

اتصالات ماژول سون سگمنت تی ام 1637

هیچ یک از پین‌های مورد استفاده در 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 فقط با علامت “:”

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

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

راهنما

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

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

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

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

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

اگر با ماژول DHT11 یا DHT22 آشنایی ندارید، مطالعه مقاله DHT11 و DHT22: معرفی و مقایسه این ۲ سنسور دما و رطوبت را از دست ندهید .

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

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

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

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

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