
معرفی نمایشگر OLED و راه اندازی ماژول OLED با آردوینو
استفاده از یک نمایشگر در پروژههای الکترونیکی، به ویژه ماژولهای کوچک و پرکاربرد مانند OLED، رابط میان دنیای دیجیتال و کاربر را به شکلی ملموس و کارآمد فراهم میکند. این نمایشگرها این امکان را به شما میدهند تا دادهها و اطلاعات حیاتی سنسورها (مانند دما، رطوبت، فشار)، وضعیت سیستم، پیامهای هشدار یا حتی گرافیکهای ساده را مستقیماً و بدون نیاز به اتصال به کامپیوتر مشاهده کنید. این موضوع نه تنها در مرحله عیبیابی و توسعه پروژه سرعت شما را به طور چشمگیری افزایش میدهد، بلکه در محصول نهایی، حرفهایتر بودن و قابلیت استفاده آسانتر را به ارمغان میآورد.
در میان انواع نمایشگرها، ماژولهای OLED به دلیل وضوح و کنتراست بالا، زاویه دید عالی، مصرف انرژی بسیار پایین و همچنین اندازه فیزیکی کوچک، برای پروژههایی مانند رباتیک، ایستگاههای هواشناسی شخصی، دستگاههای اندازهگیری و گجتهای پوشیدنی ایدهآل هستند. راهاندازی این ماژولها با پلتفرم محبوبی مانند آردوینو نیز به لوجود کتابخانههای قدرتمند و گسترده، بسیار ساده و سریع صورت میگیرد و به شما این آزادی عمل را میدهد که تنها با چند خط کد ساده، توانایی نمایش متن و اشکال را به پروژه خود اضافه کنید و آن را از حالت یک جعبه سیاه خارج سازید.
مقایسه فناوری OLED و LCD
تفاوت اصلی در شیوه تولید تصویر است: در LCD از کریستال مایع استفاده میشود که در برابر یک نور پسزمینه (Backlight) قرار میگیرد، اما در OLED هر پیکسل به طور مستقل و بدون نیاز به نور پسزمینه، نور خود را ساطع میکند. این تفاوت اساسی، ویژگیهای متمایزی را برای هر فناوری به ارمغان میآورد.
جدول زیر خلاصهای از این تفاوتها را نشان میدهد:
ویژگی | OLED | LCD |
---|---|---|
کنتراست | بهترین (پیکسلهای خاموش، سیاه مطلق) | خوب (نور پسزمینه همیشه روشن است) |
مصرف انرژی | پایینتر (پیکسلهای مشکی خاموش میشوند) | بالاتر (نور پسزمینه همیشه روشن است) |
زمان پاسخگویی | بسیار سریع | کندتر |
زاویه دید | بسیار عالی | خوب (در مدلهای با فناوری IPS بهتر است) |
روشنایی کلی | خوب | بهترین (برای محیطهای پرنور مناسبتر) |
ساختار | نازکتر و سبکتر | ضخیمتر (به دلیل وجود لایه نور پسزمینه) |
برگشت تصویر (Burn-in) | آسیبپذیر در صورت نمایش تصاویر ثابت برای مدت طولانی | مقاومتر |
قیمت | معمولاً بالاتر | مقرون بهبهصرفهتر |
مقایسه و راهنمای انتخاب ماژولهای OLED پرکاربرد
با توجه به تنوع در اندازه، رنگ و رابط ارتباطی، انتخاب ماژول OLED مناسب به نیازهای خاص پروژه شما بستگی دارد. در زیر ویژگیهای کلیدی هر یک از ماژولهای معرفی شده را مقایسه کردهایم.
مقایسه فنی
ویژگی | ماژول OLED 0.96 دو رنگ زرد-آبی (I2C/SPI) | ماژول OLED 0.96 دو رنگ زرد-آبی (فقط SPI) | ماژول OLED 1.3 اینچ سفید (I2C) | ماژول OLED 0.91 اینچ تک رنگ (I2C) |
---|---|---|---|---|
اندازه و رزولوشن | ۰.۹۶ اینچ – ۱۲۸x64 پیکسل | ۰.۹۶ اینچ – ۱۲۸x64 پیکسل | ۱.۳ اینچ – ۱۲۸x64 پیکسل | ۰.۹۱ اینچ – ۱۲۸x32 پیکسل |
رنگ و کنتراست | دو بخش رنگی (زرد و آبی)، کنتراست خوب | دو بخش رنگی (زرد و آبی)، کنتراست خوب | تک رنگ سفید، کنتراست عالی | تک رنگ سفید یا آبی، کنتراست خوب |
رابط ارتباطی | انعطافپذیر: هم I2C و هم SPI | سرعت بالا: فقط SPI | اتصال ساده: فقط I2C | اتصال ساده: فقط I2C |
مصرف پایههای آردوینو | I2C: فقط ۲ پایه | ۴ پایه یا بیشتر | I2C: فقط ۲ پایه | I2C: فقط ۲ پایه |
مصرف انرژی | بسیار پایین | بسیار پایین | پایین | بسیار پایین (پیکسلهای کمتر) |
کاربردهای معمول | نمایش اطلاعات دو دسته (مثلاً وضعیت و مقدار)، گجتها | پروژههایی با نیاز به بروزرسانی سریع صفحه | خوانایی عالی از فاصله دور، پروژههایی با فضای بیشتر | پروژههای بسیار فشرده و کممصرف |
راهنمای انتخاب: کدام ماژول برای پروژه من مناسبتر است؟
- ماژول OLED 0.96 دو رنگ زرد-آبی (I2C/SPI):
- انتخاب ایدهآل برای: افرادی که میخواهند انعطافپذیری داشته باشند. اگر تعداد پایههای میکروکنترلر شما محدود است، از رابط I2C استفاده کنید. اگر بعداً به سرعت بالاتری نیاز پیدا کردید، میتوانید به راحتی به SPI سوئیچ کنید. همچنین برای پروژههایی که میخواهید اطلاعات را بر اساس اهمیت تفکیک رنگ کنید (مثلاً هشدارها به رنگ زرد و دادههای عادی به رنگ آبی) عالی است.
- ماژول OLED 0.96 دو رنگ زرد-آبی (فقط SPI):
- انتخاب ایدهآل برای: پروژههای پیشرفتهتری که نیاز به بروزرسانی بسیار سریع صفحه دارند. مثلاً برای نمایش انیمیشنهای نسبتاً سریع یا تغییرات مداوم و پی در پی دادهها. این گزینه به پایههای بیشتری از میکروکنترلر نیاز دارد.
- ماژول OLED 1.3 اینچ سفید (I2C):
- انتخاب ایدهآل برای: پروژههایی که خوانایی و اندازه بزرگتر اولویت اصلی است. این ماژول برای ایستگاههای هواشناسی رومیزی، نمایشگرهای اطلاعاتی کوچک یا هر پروژهای که از فاصله کمی دورتر دیده میشود، بهترین گزینه است. اتصال I2C نیز راهاندازی آن را بسیار ساده میکند.
- ماژول OLED 0.91 اینچ تک رنگ (I2C):
- انتخاب ایدهآل برای: پروژههای بسیار کمحجم و فوقالعاده کممصرف. اگر فضای فیزیکی پروژه شما بسیار محدود است (مانند گجتهای پوشیدنی کوچک) یا به حداقل کردن مصرف انرژی اهمیت میدهید، این ماژول به دلیل ابعاد فشرده و تعداد پیکسلهای کمتر، گزینه بهینهای است.
جمعبندی نهایی:
- برای انعطافپذیری و تفکیک رنگ ساده: مدل ۰.۹۶ دو رنگ با قابلیت I2C/SPI را انتخاب کنید.
- برای سرعت بالا: مدل ۰.۹۶ دو رنگ با رابط SPI را در نظر بگیرید.
- برای بزرگتر بودن و خوانایی بهتر: مدل ۱.۳ اینچی سفید بهترین تجربه کاربری را ارائه میدهد.
- برای صرفهجویی حداکثری در فضا و انرژی: مدل ۰.۹۱ اینچی تک رنگ گزینه نهایی و ایدهآلی است.
مقایسه چیپهای درایور SSD1306، SH1106 و SSD1315
این تراشهها برای کنترل صفحه نمایشهای OLED کوچک و گرافیکی استفاده میشوند.
SSD1306
- حافظه رم: ۱۲۸x64 پیکسل.
- حالتهای آدرسدهی: از چندین حالت اسکن (افقی، عمودی و صفحه) پشتیبانی میکند.
- قابلیت اسکرول سختافزاری: دارای قابلیتهای سختافزاری برای اسکرول کردن خودکار صفحه است.
- دسترسی به حافظه: امکان خواندن حافظه نمایش از طریق رابط I2C را ندارد.
- منبعشناسی: کتابخانهها و منابع آموزشی بسیار گستردهای برای این درایور وجود دارد.
SH1106
- حافظه رم: ۱۳۲x64 پیکسل. این تراشه صفحه ۱۲۸x64 پیکسل را در وسط این فضای ۱۳۲ پیکسلی قرار میدهد که معمولاً نیاز به جابهجایی (Shift) 2 پیکسلی در کد دارد.
- حالتهای آدرسدهی: فقط از حالت آدرسدهی “صفحه” (Page Mode) پشتیبانی میکند. این مهمترین تفاوت در کدنویسی است.
- قابلیت اسکرول سختافزاری: ندارد.
- دسترسی به حافظه: امکان خواندن محتوای حافظه نمایش از طریق رابط I2C را فراهم میکند که برای پیادهسازی ویژگیهایی مانند مکاننمای معکوس مفید است.
کتابخانههای معروف آردوینو برای راه اندازی ماژول های OLED
برای راهاندازی این ماژولها در آردوینو، کتابخانههای متعددی توسعه داده شده است:
- کتابخانه Adafruit SSD1306: این کتابخانه، معروفترین و پراستفادهترین کتابخانه برای درایور SSD1306 است و همراه کتابخانه Adafruit GFX ارائه میشود که شامل توابع گرافیکی بسیار متنوعی برای ترسیم اشکال، نمایش متن و تصاویر میشود. اگرچه برای SSD1306 طراحی شده، اما با اعمال تغییراتی (مانند استفاده از کتابخانههای اصلاحشده) میتوان از آن برای SH1106 نیز استفاده کرد.
- کتابخانه Adafruit SH1106: یک نسخه اصلاحشده از کتابخانه اصلی Adafruit است که به طور خاص برای پشتیبانی از درایور SH1106 адаپته شده است.
- کتابخانه U8g2 (Universal 8bit Graphics Library): یک کتابخانه بسیار قدرتمند و سازگار که از طیف وسیعی از نمایشگرها، از جمله SSD1306 و SH1106 پشتیبانی میکند. این کتابخانه برای پروژههایی که ممکن است در آینده نوع نمایشگر تغییر کند، گزینه بسیار مناسبی است.
- کتابخانه OLED SSD1306 – SH1106 (اثر Dury): این کتابخانه به طور همزمان از هر دو درایور SSD1306 و SH1106 پشتیبانی میکند و قابلیتهای مفیدی مانند عملکرد در حالت ترمینال (صفحه مجازی) و پشتیبانی از تابع
printf
را ارائه میدهد.
نصب کتابخانه Adafruit SSD1306
نحوه اتصال ماژول OLED به آردوینو
برنامه نمونه با آردوینو
کد زیر یک برنامه ساده برای نمایش متن و یک شکل هندسی پایه بر روی یک ماژول OLED با درایور SSD1306 است. این کد بر اساس کتابخانه Adafruit نوشته شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
// شامل کردن کتابخانه های لازم #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // تعریف اندازه صفحه نمایش #define SCREEN_WIDTH 128 // عرض بر حسب پیکسل #define SCREEN_HEIGHT 64 // ارتفاع بر حسب پیکسل // تعریف آدرس I2C و پین ریست #define OLED_RESET -1 // اگر از پین ریست جداگانه استفاده نمی کنید -1 بگذارید #define SCREEN_ADDRESS 0x3C // آدرس I2C ماژول (ممکن است 0x3D باشد) // ساخت شیء از کلاس نمایشگر Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { Serial.begin(9600); // مقداردهی اولیه نمایشگر if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("مشکل در تخصیص حافظه برای SSD1306")); while(1); // در این حلقه بینهایت بمان } // پاک کردن بافر نمایشگر display.clearDisplay(); // نمایش یک پیام خوشامدگویی display.setTextSize(1); // اندازه قلم display.setTextColor(WHITE); // رنگ قلم display.setCursor(0, 0); // موقعیت شروع متن display.println(F("سلام به دنیای")); display.setTextSize(2); display.setCursor(0, 20); display.println(F("OLED!")); display.setTextSize(1); display.setCursor(0, 50); display.println(F("www.example.com")); // رسم یک دایره display.drawCircle(100, 35, 15, WHITE); // ارسال همه چیز به صفحه نمایش display.display(); delay(2000); } void loop() { // در این مثال، محتوای نمایشگر ثابت است. // میتوانید در این قسمت کدهای پویا بنویسید. } |
توضیح برنامه نمونه
- شامل کردن کتابخانهها: کتابخانههای لازم برای ارتباط I2C، توابع گرافیکی و درایور نمایشگر فراخوانی میشوند.
- تعریف مشخصات: ابعاد نمایشگر، آدرس I2C و پین ریست تعریف میشود. آدرس رایج برای این ماژولها
0x3C
است. - مقداردهی اولیه (Setup):
- ارتباط سریال برای عیبیابی راهاندازی میشود.
- با دستور
display.begin()
ارتباط با نمایشگر برقرار میشود. اگر موفقیتآمیز نباشد، یک پیخطا چاپ شده و برنامه متوقف میشود. - نمایشگر با
clearDisplay()
پاک میشود.
- ترسیم روی بافر:
- تمام عملیات رسم و نوشتن ابتدا در یک حافظه موقت (بافر) انجام میشود و تا زمانی که تابع
display()
فراخوانی نشود، روی صفحه نمایش داده نمیشود. - با توابعی مانند
setTextSize
،setCursor
وprintln
متن در موقعیتهای مختلف نوشته میشود. - با تابع
drawCircle
یک دایره رسم میشود.
- تمام عملیات رسم و نوشتن ابتدا در یک حافظه موقت (بافر) انجام میشود و تا زمانی که تابع
- نمایش نهایی: با فراخوانی
display.display()
، تمامی محتویات بافر بر روی صفحه نمایش فیزیکی ارسال میشود.
اگر نمایشگر شما با این کد کار نکرد، موارد زیر را بررسی کنید:
- سیمکشی: اطمینان حاصل کنید سیمهای SDA و SCL به درستی به میکروکنترلر متصل شدهاند.
- آدرس I2C: آدرس ماژول خود را بررسی کنید (ممکن است
0x3D
باشد). - درایور: اگر نمایشگر شما از درایور SH1106 استفاده میکند، باید از کتابخانه مخصوص SH1106 یا کتابخانه U8g2 استفاده کنید.