برای ما نام نمادین نوکیا5110 باید یادآور خاطرات گوشی های تلفن همراه بزرگ و بیقوارهای باشد که در سالهای دهه 1990 بسیار محبوب بودند؛ مدل 5110 با صفحه نمایش گرافیکی که عملکرد آن به عنوان یک صفحهی نمایش برای موبایل ها ، به قدر کافی خوب بود. این صفحه نمایشگر قادر بود همه چیز را از کاراکتر های الفبایی تا تصاویر گرافیکی ساده نمایش دهد که این تمام آن چیزی بود که یک تلفن همراه به آن نیازمند بود. اما همانطور که دنیا تغییر کرد و تکنولوژی های جدید صفحات لمسی با شعاع نور وارد صحنه و جایگزین تکنولوژی های قبلی شدند ، این صفحات نمایش قدیمی دیگر مورد استفاده قرار نمیگیرند. با این حال جای امیدواری است که آن ها میتوانند در برخی از وسایل الکترونیکی به کار آیند؛ در جایی که گرافیکی که میخواهیم نمایش دهیم گرافیکی ساده است و ما نمی خواهیم برای نمایش آن از نمایشگرهای السیدی بزرگ و پیشرفته استفاده و مبلغ زیادی هزینه کنیم . در ادامه با میکرودیزاینر الکترونیک باشید تا اتصال السیدی گرافیکی نوکیا 5110 به آردوینو را باهم یادگیریم.
مقاله کمکی : آموزش آردوینو
بنابراین، در این آموزش، ما میخواهیم یاد بگیریم که – به عنوان یکی از کاربردها- چگونه السیدی گرافیکی نوکیا5110 را به برد آردوینو متصل کرده و آن را راه بیندازیم.
این السیدی، پیکسل های سیاه و سفید با ابعاد 48*84 دارد. تصاویر نشان داده با این پیکسلها ممکن است خسته کننده به نظر برسند اما با این حال میتوانند تصوایر گرافیکی تمیز و مرتبی را برای پروژه شما نمایش دهند. هم چنین میتوانند با میکروکنترلر هایی مانند آردوینو به آسانی کنترل شوند. بنابراین بیایید شروع کنیم…
آنچه نیاز داریم :
- برد آردوینو ( هر نسخهای)
- نمایشگر نوکیا 5110
- سیم های رابط (سیم برد بردی)
ماژول السیدی گرافیکی نوکیا 5110:
دو نوع از این السیدی های گرافیکی در بازار موجود است. یکی با پایه های لحیم کاری شده در بالا و پایین صفحه نمایشگر و دیگری با پایه های لحیم کاری شده، تنها در قسمت پایینی صفحه نمایشگر. مدلی که ما در اینجا استفاده میکنیم از نوع دوم خواهد بود که پایه های اتصال آن تنها در پایین نمایشگر قرار دارند. هر دو نوع این ماژول کارکرد یکسانی دارند و و بنابراین اتصالات در هردوی آنها به یک شیوه است . بنابراین با صرف نظر از نوع ماژول، می توانید دستورالعمل را دنبال کنید.
همانطور که قبلا گفته شد، السیدی گرافیکی نوکیا 5110 ، در هر ردیف افقی دارای 84 پیکسل و در هر ردیف عمودی دارای 48 پیکسل است. ابعاد کلی این قطعه نمایشگر 1.72’ *1.72’ است . از طریق 6 پین از پین های ورودی این ماژول میتوانیم آن را با روش ارتباطی SPI به هر میکروکنترلری متصل کنیم. آیسی کنترلر نمایشگر Philips PCD8544 است که دیتاشیت آن را می توانید در این ⇓ لینک ببینید.
با این حال، اگر شما از آردوینو استفاده می کنید، جای نگرانی در مورد دیتاشیت وجود نخواهد داشت چرا که کتابخانه های آماده ای وجود دارند که میتوانید آن ها را دانلود و استفاده کنید .
ماژولی که ما در اینجا استفاده می کنیم در تصویر زیر نشان داده شده است:
طرح مدار
طرح کامل مدار برای اتصال السیدی گرافیکی نوکیا 5110 با برد آردوینو به شکل زیر است:
ماژول نمایشگردر مجموع 8 پین دارد که برای برقراری ارتباط SPI با آردوینو استفاده میشوند ( 6 پین برای SPI و 2 پین برای Gnd و Vcc) . این ماژول از طریق پین پاور 3.3 V برد آردوینو تغذیه میشود. دقت داشته باشید که این ماژول روی 3.3 V منطقی کار می کند و لذا لازم نیست که پین Vcc را هم با 5 V تامین کنید. با اینکه السیدی روی 3.3 V منطقی کار می کند و آردوینو روی 5 Vمنطقی، من در اینجا پین نمایشگر را به طور مستقیم به آردوینو متصل کردهام، چرا که متوجه شده ام تنها در این حالت است که ال سی دی من به درستی کار می کند. اگر نیاز شد شما میتوانید از یک مبدل ولتاژ 5 V به 3.3 V به عنوان واسطه اتصال مابین دو برد استفاده کنید. اما برای من، بدون وجود مبدل کار می کند.
مقاله مرتبط : راه اندازی SPI در آردوینو
اتصالات بسیار ساده و مستقیم هستند و براحتی می توانید آنها را برقرار کنید . زمانی که از عهده آنها برآمدید مدار شما باید طرحی مشابه آنچه که در تصویر زیر می بینید ، داشته باشد.
برنامه ریزی و راه اندازی آردوینو
اکنون با دنبال کردن مراحل زیر، برد آردوینو را برای نمایشگر گرافیکی نوکیا 5110 برنامه ریزی کنید. در این مراحل فرض شده است که شما از قبل Arduino IDE را نصب کرده و با طرز کار آن آشنایی دارید.
مرحله 1
Arduino IDE را روی کامپیوتر خود باز کرده و بعد از متصل کردن برد آردوینو به کامپیوتر، از منوی tools ، برد مناسب را انتخاب کنید.
مرحله 2
اینجاکلیک کنید تا کتابخانه نمایشگر نوکیا 5110 را که از کتابخانه های Adafruit از مخزن GitHub است، دانلود کنید.
مرحله 3
زمانی که فایل زیپ فوق دانلود شد، مسیر زیر رادنبال کنید:
Sketch -> Include Library -> Add .ZIP library
و محلی را که فایل زیپ در آنجا دانلود شده است پیدا کنید.
نکته : شاید شما مجبور باشید فایل هسته Adafruit GFX Graphics را که گرافیک نوشته ها و اشکال هندسی را در خود دارد نیز دانلود کنید. می توانید آن را از اینجا
بگیرید و در جایی نصب کنید.
مرحله 4
برنامه مثال زده شده در خود نرم افزار را از مسیر زیر باز کنید:
File -> Examples -> Adafruit PCD Nokia 5110 LCD Library -> pcdtest
و روی upload کلیک کنید.
مرحله 5
زمانی که برنامه بارگذاری شد،دکمهی reset روی برد آردوینو را فشار دهید که در این صورت باید برنامه ی مثال را ببینید که تمام انمیشین های موجود در ویدئویی که در انتهای این آموزش قرار دارد را نشان میدهد.
شما می توانید کد برنامه ی مثال زده شده را بخوانید تا کاربرد توابع مختلفی را که می توانند انواع طرح های گرافیکی را بر صفحه نمایش السیدی ایجاد کنند، متوجه شوید. اما اجازه دهید که حالا یک قدم فراتر رویم و تلاش کنیم که یک لوگو را بر صفحه نمایش نشان دهیم.
ابتدا تصویر مورد نیاز لوگو را با نرم افزاری مانند paint باز کرده و ابعاد آن را تغییر می دهیم. میدانیم ماکسیمم سایزی که می توانیم در این نمایشگرمان نشان دهیم، 48* 84 است.
بعد از تغییر سایز عکس آن را با پسوند( bitmap black and white) و از طریق گزینه save as ، در جایی ذخیره می کنیم.
برای نمایش دادن تصویر به عنوان یک bitmap در صفحه نمایش السیدی، ما به نرم افزاری نیاز داریم که بتواند تصویر با پسوند bitmap را به کد تبدیل کند . این نرم افزار را می توانید از اینجا ⇓ دانلود کنید. .
زمانی که دانلود شد آن را unzip کنید و بر روی BitmapEncoder کلیک کنید تا نرم افزار راه اندازی شود. تصویری که با فرمت bitmap ذخیره کردیم را در نرم افزار باز میکنیم تا آرایه ی مقادیر کد شده را به ما بدهد. شما می توانید به طور مستقیم این کد ها را کپی کرده و در قسمت آرایهی کد آردوینو خود paste کنید. مقادیر نشان داده شده توسط نرم افزار برای لوگوی انتخابی در تصویر زیر نشان داده شده است.
همانطور که میبینید، آرایه با مقادیر 48 , 48 آغاز شده است. این ابعاد تصویر ماست. آرایه ما در کد آردوینو نباید شامل این دو عدد باشد ، بنابراین آنها را حذف می کنیم و از بقیه آرایه در کد خود استفاده می کنیم. (برنامه کامل به عنوان مرجع در انتهای صفحه داده شده است.) آرایه به شکل زیر خواهد بود.
خروجی عکس بصورت کد
کد اول static const unsigned char PROGMEM Logo[] = {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000, B00000000,B00000000,B00001111,B11111000,B00000000,B00000000, B00000000,B00000000,B00001111,B11111111,B00000000,B00000000, B00000000,B00000011,B00011111,B11111111,B11000000,B00000000, B00000000,B00001110,B00111110,B00111111,B11110000,B00000000, B00000000,B00111110,B00111110,B10000000,B01111100,B00000000, B00000000,B01111100,B01111100,B11000000,B00111110,B00000000, B00000000,B11111100,B01111110,B00000000,B00001111,B00000000, B00000001,B11111000,B11111111,B00111111,B10000111,B10000000, B00000011,B11111000,B11111111,B11111111,B11000011,B11000000, B00000111,B11110001,B11111111,B11111111,B11100000,B11100000, B00000111,B11100001,B11111111,B11100011,B11111000,B01100000, B00000000,B00000011,B11100000,B00001001,B11111100,B00000000, B00000000,B00000111,B11100000,B00011001,B11111110,B00000000, B00000000,B00000111,B11000000,B00000001,B11111111,B10000000, B00011111,B11111111,B11000111,B11100011,B11111111,B11111000, B00111111,B11111111,B10001111,B11111111,B11111111,B11111100, B00111111,B11111111,B00011111,B11111111,B11111111,B11111100, B00111111,B11111111,B00011111,B11111111,B11111111,B11111100, B00111111,B11111110,B00111111,B00111111,B11111111,B11111110, B01111111,B11111110,B00111110,B00000000,B01111111,B11111100, B01111111,B11111100,B01111100,B11000000,B00000000,B00000000, B01111111,B11111100,B01111110,B10000000,B00000000,B00000000, B00000000,B00000000,B11111110,B00111111,B11111111,B11111110, B00000000,B00000001,B11111111,B11111111,B11111111,B11111110, B01111111,B11111111,B11111111,B11111111,B11111111,B11111110, B01111111,B11111111,B11111111,B11111111,B11111111,B11111110, B01111111,B11111111,B11000111,B11111111,B11111111,B11111110, B00111111,B11111111,B10000011,B11111110,B00000000,B00000000, B00111111,B11111111,B10110011,B11111000,B00000000,B00000000, B00111111,B11111111,B10000001,B11100000,B00000000,B00000000, B00111111,B11111111,B11000000,B10000001,B11111111,B11111100, B00000000,B00011111,B11111000,B00000111,B11111111,B11111000, B00000000,B00000111,B11111110,B00011111,B11111111,B11111000, B00000000,B00000001,B11111111,B01111111,B11111111,B11110000, B00001111,B11100000,B11111111,B11111111,B11111111,B11110000, B00000111,B11111000,B00001111,B11111111,B11000000,B00000000, B00000011,B11111100,B00100111,B11111111,B00000000,B00000000, B00000011,B11111111,B00110111,B11111100,B00000000,B00000000, B00000001,B11111111,B10000111,B11011000,B00111111,B10000000, B00000000,B11111111,B11001111,B10000000,B11111111,B00000000, B00000000,B01111111,B11111111,B10110001,B11111110,B00000000, B00000000,B00011111,B11111111,B10110111,B11111100,B00000000, B00000000,B00001111,B11111111,B10000111,B11110000,B00000000, B00000000,B00000011,B11111111,B11111111,B11000000,B00000000, B00000000,B00000000,B11111111,B11111111,B00000000,B00000000, B00000000,B00000000,B00001111,B11110000,B00000000,B00000000, B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};
حال برای نمایش این تصویر bitmap ، ما به کدهای زیر نیا زداریم که داده ی قبلی از روی صفحه نمایش پاک شده و تصویر bitmap به جای آن نوشته شود.
display.clearDisplay(); display.drawBitmap(20, 0, Logo, 48, 48, 1); display.display();
خط display.drawBitmap(20, 0, Logo, 48, 48, 1); در کد ، مکان دقیق، ابعاد و رنگ تصویر را طبق فرمت زیر مشخص می کنند:
display.drawBitmap (X_Position, Y_Position, Name of Array, length of image, breadth of image);
طول و عرض تصویر می توانند به ترتیب از روی دو عدد نخست آرایه همان طور که قبلا توضیح داده شد، بدست آیند.
زمانی که کد اجرا می شود میبینیم که مانند تصویر زیر، تصویرbitmap مان بر روی صفحه نمایشگر نمایش داده می شود.
شما همچنین می توانید یک جمله ساده را مانند تصویر زیر به نمایش درآورید.
امیدوارم که این آموزش را به خوبی فراگرفته باشید و بتوانید آردوینو و نمایشگر نوکیا 5110 خودتان را داشته باشید. با در آستین داشتن این نمایشگر گرافیکی، شما می توانید پروژه های زیادی را که در آن ها نیاز به جزییات گرافیکی کمتر وجود داشته باشد، ایجاد کنید. تمام مراحل کار را می توانید در ویدئو زیر داشته باشید. در صورتی که برای راه اندازی این پروژه با هرگونه مشکلی مواجه شدید ، می توانید مشکل خود را از طریق کامنت در زیر همین مطلب آموزشی و یا ارسال در فروم ها ، مطرح کنید.
ویدئو :
کد کامل پروژه
کد کامل پروژهاتصال السیدی گرافیکی نوکیا 5110 به آردوینو:
// Nokia5110_logo // This program is a demo of how to display logo. // You can also see how to use invert(). // web: http://www.circuitstoday.com/ // It is assumed that the LCD module is connected to // the following pins // RST - Pin 3 // CE - Pin 4 // DC - Pin 5 // DIN - Pin 6 // CLK - Pin 7 #include <Nokia5110.h> Nokia5110 glcd(3,4,5,6,7); /*You can create your own logo by generating an array of your logo_image using any image_to_hex_code_convrter*/ const char CircuitsTodayLogo [504] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf8, 0x7c, 0x7c, 0x3e, 0x1c, 0x8c, 0xc8, 0xc0, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1c, 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xe7, 0xe3, 0xc3, 0x89, 0x98, 0x3c, 0x3e, 0x1e, 0x0f, 0x0f, 0x8f, 0x9f, 0xff, 0xfd, 0xf8, 0xf0, 0xf8, 0xfc, 0x7c, 0x3c, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3e, 0x7c, 0x3e, 0x1f, 0x1f, 0x0f, 0x07, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xfc, 0xfc, 0xce, 0x86, 0x06, 0x07, 0x06, 0x86, 0x86, 0x84, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x66, 0x66, 0xf6, 0xfe, 0xbc, 0x18, 0x00, 0x30, 0xfc, 0xfc, 0xce, 0x86, 0x06, 0x07, 0x06, 0x86, 0x86, 0x84, 0x00, 0x00, 0x7e, 0xfe, 0xfe, 0x80, 0x00, 0x00, 0x80, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x06, 0x06, 0x06, 0xfe, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x80, 0x9e, 0x9e, 0x3e, 0x37, 0xb6, 0xf6, 0xe0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x63, 0x63, 0xe3, 0xe3, 0xe1, 0x61, 0x61, 0x60, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x80, 0xc0, 0xc3, 0xe3, 0x63, 0x60, 0x60, 0xe0, 0xc1, 0xc3, 0x03, 0x02, 0x00, 0x00, 0x01, 0x01, 0x03, 0xe3, 0xe3, 0xe3, 0xe1, 0x61, 0x60, 0xe0, 0xc0, 0xc0, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0xc0, 0xe0, 0xe0, 0xe3, 0xe3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x23, 0x60, 0xe0, 0xe0, 0xc0, 0x00, 0x81, 0xc1, 0xe3, 0x63, 0x23, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x1f, 0x18, 0x18, 0x10, 0x18, 0x1c, 0x1f, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x18, 0x18, 0x1c, 0x1f, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1e, 0x1f, 0x0f, 0x0c, 0x0d, 0x0f, 0x1f, 0x1e, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x1f, 0x1f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; void setup() { glcd.Initialize_LCD(); } void loop() { glcd.Invert(true); //for inverting display glcd.allClear(); glcd.logoDisp(CircuitsTodayLogo); delay(3000); glcd.allClear(); glcd.Invert(false); glcd.logoDisp(CircuitsTodayLogo); delay(3000); }
سوال
شما از این LCD در چه پروژه هایی استفاده کردید ؟
به نظر شما مزایا و معایب این نمایشگر چی هست ؟
در قسمت نظرات مطرح کنید.
امیدوارم که از آموزش اتصال السیدی گرافیکی نوکیا 5110 به آردوینو لذت برده باشید.
منبع : circuitdigest
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام
بسیار عالی و آموزنده بود.
برایم پرسش پیش آمد که آیا میشه رابط با اینترفیسی درست کرد که بتونیم از ال سی دی های جدید موبایل که روزلوشن بالاتری مثلا 480 در 800 دارند استفاده کنیم ؟
منظورم استفاده از ال سی دی های بدون استفاده تعمیرگاه های موبایل است ، برخی از این نمایشگر ها حتی نوی آن قیمت بسیار مناسب در حدود 40-50 هزار تومن قابل تهیه می باشند .
سلام، آقا مهران
از تمامی نمایشگر های موجود در بازار میتوان استفاده کرد به شرط اینکه دارای شرایط باشند.
اول اینکه یک دیتاشیت از خود ال_سی_دی موجود باشد.
دوم اینکه یک دیتاشیت از کنترلر روی ال_سی_دی باشد و توضیحات کامل نحوه ارتباط به زبان انگلیسی (نه چینی) باشد.
سومی اپشنال است ولی خیلی خوب میشه اگر بشه اینکه کنترلر روی ال_سی_دی یک کنترلر موجود در بازار باشد یا برد های درایور ال_سی_دی را بشه باهاش مچ کرد.
الان ال_سی_دی های ارزان در بازار زیاد شدن و چون ماژون نیستن قیمت ارزانتری دارند…
سلام ایا میشه در این نمایشگر ها از حروف فارسی استفاده کرد
سلام، بصورت پیش فرض این قابلیت را نداره ولی شما میتوانید براش فونت طراحی کنید. لایبری آن را در مسیر لایبری های آردوینو باز کنید و میتونید داخل سورسش را ببینید و مثل اون یک سری فونت طراحی کنید. طراحی فونت هم کار پیچیده ای نیست یکسری نرم افزار ها هست که شما شکل حروف را میکشید و خروجی کد میده براتون.
سلام. من برد رو وصل کردم اوکیه. فقط اون قسمت دوم رو متوجه نشدم. که چجوری خودمون تصویر خروجی میگیریم و روی LCD نشون میدیم. میشه یکم بیشتر توضیح بدید. مرسی
سلام.من وقتی کد برنامه رو دیدم چندا کد HEXهم داخلش بود.اگه ما
بخواییم چیزی رو روی ال سی دی نمایش بدیم باید در قسمت کد های هگزا کد HEXتصویر مون رو بنویسیم؟
سلام، یکسری نرم افزار هستن که عکس را به هگز تبدیل میکنن. مثلا فک کنم BMP2Hex سرچ کنی میان.