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

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

مقدمه

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

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

 

فهرست مطالب

 

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

بهترین استفاده از نمایشگر TM1637 نمایش قرائت سنسور مانند دما ، رطوبت ، ولتاژ یا سرعت است. پروژه زیر قرائت دما از DHT11 / DHT22 را بر روی صفحه نمایش TM1637 نمایش می دهد.

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

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

اتصالات ، ماژول TM1637 و ماژول DHT11 / DHT22

طرح زیر با سنسور DHT11 / DHT22 ارتباط برقرار می نماید و قرائت دما را بر روی صفحه نمایش نشان می دهد. دما در Celius و Fahrenheit با فاصله ۲ ثانیه نمایش داده می شود. این کد از سنسور 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);
}

سخن پایانی

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

نمایش بیشتر

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

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

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