در قسمت قبل از آموزش آردوینو با کنترل دستگاههای خارجی توسط Arduino آشنا شدیم و دیدیم چگونه میتوان یک دستگاه AC مجهز به ریموت کنترل را بدون اتصال مستقیم آردوینو به برق شهر کنترل کرد. همچنین در قسمت 60 آموزش آردوینو وارد فصل جدیدی میشویم و به سراغ یکی از پرکاربردترین تجهیزات در پروژههای الکترونیکی یعنی نمایشگرها میرویم.
در این قسمت ابتدا با نمایشگرهای LCD و LED آشنا میشویم و سپس نحوه راهاندازی LCD متنی با آردوینو را با استفاده از کتابخانه LiquidCrystal بررسی میکنیم.
آشنایی با نمایشگرها در آردوینو
نمایشگرهای کریستال مایع یا LCD و نمایشگرهای LED راهی ساده، کاربردی و نسبتاً ارزان برای ایجاد رابط کاربری در پروژههای Arduino هستند. با استفاده از این نمایشگرها میتوان اطلاعات مختلفی مانند مقادیر سنسورها، وضعیت سیستم، پیامها، اعداد و دادههای پردازششده توسط Arduino را مستقیماً به کاربر نمایش داد. در این فصل از آموزش، نحوه اتصال و استفاده از نمایشگرهای متنی و گرافیکی LCD و LED بررسی میشود.
LCD متنی HD44780 چیست؟
یکی از رایجترین نمایشگرهای متنی مورد استفاده در پروژههای Arduino، نمایشگرهایی هستند که بر پایه کنترلر Hitachi HD44780 یا کنترلرهای سازگار با آن ساخته شدهاند. این نمایشگرها معمولاً دارای دو یا چهار سطر هستند و در هر سطر میتوانند 16 یا 20 کاراکتر نمایش دهند. مدلهایی با 32 یا 40 کاراکتر در هر سطر نیز وجود دارند، اما معمولاً قیمت بیشتری دارند.
Arduino بهصورت پیشفرض کتابخانهای برای کنترل این نمایشگرها در اختیار ما قرار میدهد. با استفاده از این کتابخانه میتوان تقریباً مشابه کاری که با Serial.print() انجام میدهیم، متن و اعداد را روی LCD نمایش داد. دلیل شباهت این دو روش این است که نمایشگر LCD و خروجی Serial از توابع چاپ مشابهی در Arduino استفاده میکنند.
LCD فقط برای نمایش متن نیست
نمایشگرهای LCD متنی علاوه بر نمایش نوشتههای ساده قابلیتهای دیگری نیز دارند. برای مثال میتوان متن را روی صفحه حرکت داد، بعضی نوشتهها را برجسته کرد و نمادها یا کاراکترهای خاص را روی صفحه نمایش داد.
همچنین امکان ساخت کاراکترهای سفارشی و گرافیکهای ساده بلوکی در LCDهای متنی وجود دارد. اما اگر به نمایش جزئیات گرافیکی بیشتری نیاز داشته باشید، باید از نمایشگرهای گرافیکی استفاده کنید. نمایشگرهای گرافیکی LCD که معمولاً با نام GLCD شناخته میشوند و نمایشگرهای LED گرافیکی نیز برای چنین کاربردهایی در دسترس هستند.
نکته مهم درباره اتصال نمایشگرهای گرافیکی
نمایشگرهای گرافیکی ممکن است نسبت به بسیاری از مدارهای Arduino سیمهای بیشتری برای اتصال داشته باشند. به همین دلیل یکی از رایجترین دلایل کارنکردن آنها، اشتباه در سیمکشی است. هنگام اتصال چنین نمایشگرهایی بهتر است تمام سیمها و پایهها را با دقت بررسی کنید. استفاده از یک مولتیمتر ساده برای بررسی ولتاژها، اتصالات و مقاومتها نیز میتواند در پیدا کردن مشکلات سیمکشی بسیار مفید باشد.
راهاندازی LCD متنی با آردوینو
فرض کنید یک LCD متنی بر پایه کنترلر استاندارد HD44780 یا یک کنترلر سازگار با آن دارید و میخواهید متن و مقادیر عددی را روی آن نمایش دهید. Arduino برای این کار کتابخانه LiquidCrystal را در اختیار ما قرار داده است. این کتابخانه برای راهاندازی LCDهایی که بر پایه HD44780 ساخته شدهاند استفاده میشود.
اتصالات موردنیاز LCD
برای راهاندازی نمایشگر باید پایههای تغذیه، داده و کنترل LCD به Arduino متصل شوند. همچنین برای تنظیم کنتراست صفحه به یک پتانسیومتر نیاز داریم. اگر نمایشگر دارای نور پسزمینه یا Backlight باشد، پایههای نور پسزمینه نیز باید متصل شوند و بسته به مشخصات نمایشگر ممکن است به یک مقاومت محدودکننده جریان نیاز داشته باشند.
مدار زیر نحوه اتصال متداول یک LCD متنی به Arduino را نشان میدهد.

قبل از انجام سیمکشی حتماً دیتاشیت LCD خود را بررسی کنید؛ زیرا محل قرارگیری یا شمارهگذاری پایهها ممکن است در برخی مدلها متفاوت باشد. LCD مورد استفاده در این مثال دارای 16 پایه است. مدلهایی که نور پسزمینه ندارند معمولاً 14 پایه دارند.
جدول اتصال پایههای LCD به Arduino
| پایه LCD | وظیفه | اتصال به Arduino |
|---|---|---|
| 1 | GND / Vss | GND |
| 2 | +5V / Vdd | 5V |
| 3 | Vo / Contrast | پتانسیومتر 10K |
| 4 | RS | 12 |
| 5 | R/W | GND |
| 6 | E | 11 |
| 7 | D0 | بدون اتصال |
| 8 | D1 | بدون اتصال |
| 9 | D2 | بدون اتصال |
| 10 | D3 | بدون اتصال |
| 11 | D4 | 5 |
| 12 | D5 | 4 |
| 13 | D6 | 3 |
| 14 | D7 | 2 |
| 15 | A / Anode | +5V |
| 16 | K / Cathode | GND |
چرا پایههای D0 تا D3 وصل نشدهاند؟
LCDهای مبتنی بر HD44780 را میتوان در حالت انتقال داده 4 بیتی یا 8 بیتی استفاده کرد. در این آموزش از حالت 4 بیتی استفاده میکنیم. در نتیجه فقط پایههای D4 تا D7 نمایشگر به Arduino متصل میشوند و پایههای D0 تا D3 بدون اتصال باقی میمانند.
مزیت این روش آن است که چهار پایه Arduino برای کاربردهای دیگر آزاد باقی میمانند. استفاده از حالت 8 بیتی از نظر تئوری سرعت بیشتری دارد، اما طبق توضیح کتاب این تفاوت در این کاربرد آنقدر قابلتوجه نیست که استفاده از چهار پایه اضافی Arduino را توجیه کند.
تنظیم کنتراست LCD با پتانسیومتر
برای تنظیم کنتراست صفحه به یک پتانسیومتر 10 کیلو اهم نیاز داریم. یک سر پتانسیومتر به GND و سر دیگر آن به 5V متصل میشود. پایه وسط پتانسیومتر نیز به پایه شماره 3 LCD یعنی Vo متصل میشود. اگر ولتاژ مناسب به این پایه اعمال نشود، ممکن است هیچ نوشتهای روی LCD دیده نشود.
اتصال تغذیه LCD
برای تغذیه نمایشگر، پایه شماره 1 LCD به GND و پایه شماره 2 به 5V Arduino متصل میشود.
اتصال نور پسزمینه LCD
بسیاری از LCDها دارای نور پسزمینه داخلی یا Backlight هستند. برای اینکه بدانید نور پسزمینه نمایشگر شما به مقاومت خارجی نیاز دارد یا خیر، باید دیتاشیت آن را بررسی کنید. بسیاری از مدلها برای جلوگیری از آسیبدیدن LEDهای نور پسزمینه به مقاومت محدودکننده جریان نیاز دارند.
در مدار کتاب از یک مقاومت 220 اهم استفاده شده است. نور پسزمینه دارای قطب مثبت و منفی است. پایه 15 یا A آند و پایه 16 یا K کاتد نور پسزمینه است.
اجرای مثال Hello World روی LCD
Arduino IDE یک مثال آماده برای آزمایش LCD در کتابخانه LiquidCrystal دارد. در Arduino IDE میتوانید از مسیر زیر به این مثال دسترسی پیدا کنید:
|
1 |
Examples → LiquidCrystal → HelloWorld |
کد زیر نسخهای از مثال Hello World است که برای یک LCD با 16 ستون و 2 سطر تنظیم شده است.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
/* * LiquidCrystal Library - Hello World * * Demonstrates the use of a 16 × 2 LCD display. */ #include <LiquidCrystal.h> const int numRows = 2; const int numCols = 16; LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(numCols, numRows); lcd.print("Hello, World!"); } void loop() { lcd.setCursor(0, 1); lcd.print(millis()/1000); } |
بررسی کد راهاندازی LCD
ابتدا کتابخانه LiquidCrystal به برنامه اضافه میشود:
|
1 |
#include <LiquidCrystal.h> |
سپس تعداد سطرها و ستونهای نمایشگر مشخص میشود:
|
1 2 |
const int numRows = 2; const int numCols = 16; |
در این مثال یک LCD 16×2 داریم؛ یعنی نمایشگر دارای دو سطر و 16 کاراکتر در هر سطر است.
معرفی پایههای LCD به کتابخانه LiquidCrystal
در خط زیر مشخص میکنیم که پایههای کنترلی و داده LCD به کدام پایههای Arduino متصل شدهاند:
|
1 |
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); |
مطابق مدار، پایههای RS و E و همچنین چهار خط داده D4 تا D7 به Arduino متصل شدهاند.
راهاندازی نمایشگر در setup
در تابع setup() ابتدا تعداد ستونها و سطرهای LCD به کتابخانه اعلام میشود:
|
1 |
lcd.begin(numCols, numRows); |
سپس عبارت Hello, World! روی اولین سطر LCD نوشته میشود:
|
1 |
lcd.print("Hello, World!"); |
نمایش زمان سپریشده روی سطر دوم
در تابع loop() ابتدا مکاننما به ستون صفر و سطر دوم منتقل میشود:
|
1 |
lcd.setCursor(0, 1); |
شمارهگذاری سطرها و ستونها در کتابخانه از صفر شروع میشود. بنابراین سطر شماره 1 در واقع دومین سطر LCD است. سپس تعداد ثانیههای سپریشده از زمان اجرای برنامه روی LCD چاپ میشود:
|
1 |
lcd.print(millis()/1000); |
تابع millis() مدتزمان سپریشده از شروع برنامه را بر حسب میلیثانیه برمیگرداند. با تقسیم این مقدار بر 1000، زمان بر حسب ثانیه نمایش داده میشود.
خروجی برنامه روی LCD
بعد از اجرای برنامه باید عبارت Hello, World! را روی سطر اول LCD مشاهده کنید. در سطر دوم نیز عددی نمایش داده میشود که تقریباً هر یک ثانیه یک واحد افزایش پیدا میکند.
اگر چیزی روی LCD نمایش داده نشد چه کنیم؟
اگر سیمکشی را بررسی کردهاید اما هنوز هیچ متنی روی نمایشگر دیده نمیشود، اولین موردی که باید بررسی کنید تنظیم کنتراست است. پتانسیومتر را بهآرامی بچرخانید. در یک سمت معمولاً کنتراست به بیشترین مقدار میرسد و باید بلوکهای مربوط به موقعیت کاراکترها روی نمایشگر دیده شوند. در سمت دیگر ممکن است صفحه کاملاً خالی به نظر برسد.
مقدار مناسب کنتراست میتواند به عواملی مانند زاویه دید و دمای محیط وابسته باشد؛ بنابراین پتانسیومتر را تا رسیدن به بهترین حالت تنظیم کنید. اگر در هیچ حالتی حتی بلوکهای پیکسلی نیز ظاهر نشدند، اتصالات و پایههایی را که LCD از طریق آنها کنترل میشود دوباره بررسی کنید.
کتاب تأکید میکند که بسیاری از مشکلات LCDها ناشی از اتصال اشتباه یا لحیمکاری نامناسب سیمها و هدرها است.
جمع بندی
در قسمت 60 آموزش آردوینو وارد فصل نمایشگرها شدیم و با LCDهای متنی مبتنی بر کنترلر HD44780 آشنا شدیم. دیدیم که چگونه نمایشگر را در حالت 4 بیتی به Arduino متصل کنیم، کنتراست آن را با یک پتانسیومتر 10K تنظیم کنیم و با استفاده از کتابخانه LiquidCrystal متن و اعداد را روی LCD نمایش دهیم.
همچنین مثال Hello World را بررسی کردیم که عبارت ثابت را روی سطر اول و تعداد ثانیههای سپریشده را روی سطر دوم نمایش میدهد. در قسمت بعدی آموزش، به سراغ قالببندی متن و تعیین محل نمایش نوشتهها روی LCD خواهیم رفت.
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.