در این آموزش قصد راهاندازی نوعی lcd TFT با درایور St7789 را داریم که در نتیجه آن قادر خواهیم یک انیمیشن جالب را نمایش دهیم که شبیه سازی عملکرد چشم انسان است البته در مسیر اجرا به شما آموزش خواهم داد چگونه نوع انیمیشن چشم را تغییر دهیم. در این پروژه برای راهاندازی نمیشگر TFT از برد Wemos با تراشه ESP8266 استفاده خواهیم کرد، نمایشگر استفاده شده از نوع TFT با ابعاد ۲۴۰*۲۴۰ که بدلیل تمام رنگ بودن، به زیبایی پروژه کمک زیادی میکند. برای راهاندازی و نمایش موارد گرافیکی از کتابخانه TFT-eSPI استفاده خواهیم کرد که البته تغییراتی نیز در کتابخانه ایجاد خواهیم کرد تا برای استفاده برای یرد ESP8266 مناسب باشد. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
نمایشگر LCD 240×۲۴۰ TFT
در پروژه چشم انسان از ال سی دی TFT که مخفف “Thin Film Transistor” است استفاده میکنیم. صفحه نمایش TFT LCD رنگی، دارای ترانزیستورهایی است که از فیلمهای نازک سیلیکون آمورف روی شیشه رسوب کرده اند. این به عنوان یک شیر کنترل برای ایجاد ولتاژ مناسب بر روی کریستال های مایع برای زیر پیکسل های جداگانه عمل می کند. به همین دلیل صفحه نمایش TFT LCD را نمایشگر Active Matrix نیز می نامند. این صفحه نمایش ۱٫۵۴ اینچی دارای ۲۴۰×۲۴۰ پیکسل، ۱۶ بیتی تمام رنگ است و یک نمایشگر IPS است، بنابراین رنگ تا ۸۰ درجه از محور در هر جهت عالی به نظر می رسد. این LCD از درایور ST7789 استفاده میکند.
برد Wemos ویموس
برد Wemos یکی از پرطرافدار ترین برد هایی است که در زمینه iot مورد استفاده قرار میگیرد، یکی از مزیت های این برد نسبت به برد هایی مانند Node MCU اندازه کوچک آن می باشد تراشه وای فای مورد استفاده در این برد ESP8266 می باشد. از دیگر مزیت های این برد وجود شیلد های مختلفی برای این برد می باشد، که انجام هر پروژه ای را برای کاربر بسیار آسان و لذت بخش می کند، شیلد هایی از جمله شیلد باتری، multi sensor ، DHT22 ، رله ، oled تعداد بسیار زیادی شیلد برای این برد توسعه داده شده که در نتیجه تجربه خوبی از iot برای شما به جا خواهد گذاشت.
مقاومت وابسته به نور یا LDR
مخفف Light Dependent Resistor یا Photoresistor است که یک قطعه الکترونیکی منفعل یا پسیو است، در واقع یک مقاومت است که مقدار مقاومتی آن وابسته به شدت نور متفاوت است. LDR یک مقاومتی است که از یک نیمه هادی با مقاومت بالا ساخته شده است که فوتون ها را جذب می کند و بر اساس کمیت و فرکانس فوتون های جذب شده، مواد نیمه هادی به الکترون های مقید انرژی کافی می دهد تا هدایت شوند. الکترون های آزاد حاصل الکتریسیته بوجود آمده را هدایت می کنند و در نتیجه مقاومت در برابر نور را کاهش می دهند. در کل تعداد این الکترون ها به فرکانس فوتون ها موجود وابسته است. میزان مقاومت LDR در تاریکی بسیار زیاد است، که تقریبا تا ۱MΩنیز خواهد رسید، اما وقتی نوری روی LDR بیفتد، مقاومت به چند KΩ کاهش می یابدالبته این مقدار وابسته به مدل مقومت نوری نیز بستگی دارد.
توضیح تکمیلی چشم انسان
در این پروژه با استفاده از برد ESP8266 نمایشگر ST7789 را با هدف نمایش انیمیشن مورد نظر راهاندازی خواهیم کرد و ههمچنین قادر خواهیم بود نوع انیمیشن چشم را تغییر دهیم و در ادامه اب اضافه کرد یک مقاومت نوری به مدار نوع انیمیشن را طبیعی تر خواهیم کرد به این صورت که با مقاومت نوری میزان نور محیط اندازه گیری میشود و در ادامه نسبت به این مقدار مردمک چشم در مدت زمان مشخص با توجه به تغییرات نوری تغییر خواهد کرد. از این پروژه میتوان برای مواردی که نیاز به شخصی سازی ربات است بهره برد.
وسایل مورد نیاز
مقاومت وابسته به نور LDR
نصب و راهاندازی کتابخانه چشم انسان
در این پروژه برای راهاندازی نمایشگر از کتابخانه TFT-eSPI استفاده میکنیم، البته در ادامه برای امکان اتصال نمایشگر به برد ESP8266 باید تغییراتی در کتابخانه با جایگزین کردن یکی از فایل ها در پوشه اصلی کنیم. در این مرحله مطابق مراحل زیر برای نصب اولیه کتابخانه پیش بروید. ابتدا در نرم افزار Arduino IDE اقدام به نصب کتابخانه مرجع سنسور های TFT-eSPI می کنیم. مراحل زیر را دنبال کنید:
- این مسیر را دنبال کنید Sketch > Include Library > Manage Libraries
- کلمه TFT-eSPI را جستجو کنید.
- کتابخانه را نصب کنید.
در ادامه برای تنظیم صفحه نمایش، باید User_Setup.h را در داخل کتابخانه اصلاح کنیم.
- به مسیر نصب کتابخانه بروید در مسیر Documents/Arduino/libraries.
- فایل User_Setup.h از این لینک دانلود و جایگزین فایل موجود همنام با این فایل کنید.
اتصالات و راهاندازی
در این پروژه از یک TFT LCD یا پرتوکل ارتباطی SPI استفاده کردیم که از پین های D0, D1,D5 ,D7 در برد Wemos استفاده خواهد کرد، همچنین از یک مقاومت وابسته به نور استفاده خواهیم کرد که مقادیر این مقاومت توسط پین آنالوگ به دیجیتال A0 اندازهگیری میشود. اتصالات را مطابق جدول و شماتیک زیر برقرار کنید.
- شماتیک اتصالات نمایشگر TFT lcd و برد Wemos
تا به این مرحله توانستیم انیمیشن چشم را در نمایشگر به تصویر بکشیم، حالا یک قدوم جلوتر میرویم و با استفاده از یک مقاومت نوری و مردمک چشم را با توجه به شرایط نوری محیطی کنترل کنیم تا در شرایط مختلف مردمک چشم تغییر حالات دهد، یعنی در زمان که نور کم باشد مردمک چشم باز شده و در شرایطی که نور زیادی تشخیص داده شود مردمک کوچک تر خواهد شد. در این مدار اضافه شده از دو نوع مقاومت استفاده کردیم که یک نوع مقاومت معمولی است و دیگری یک مقاومت وابسته به نور یا LDR که به پایه A0 در برد Wemos متصل خواهد شد.
در این بخش به کد های این پروژه رسیدیم که دارای چند بخش مختلف است، در واقع از چندین برگه مختلف برای فانکشن های مختلف تعریف شده که که تنها صفحه اول را در این قسمت مشاهده می کنید. کد کامل را از صفحه گیت هاب من در این لینک دانلود کنید.
//اضافه کردن کتابخانه ها #include <SPI.h> #include <TFT_eSPI.h> TFT_eSPI tft; // برای استفاده از دو عدد صفحه نمایش // بافر برای رندر کردن هر پیکسل #define BUFFER_SIZE 1024 // 128 به ۱۰۲۴ #ifdef USE_DMA #define BUFFERS 2 #else #define BUFFERS 1 #endif uint16_t pbuffer[BUFFERS][BUFFER_SIZE]; // رندر کردن پیکسل bool dmaBuf = 0; // DMA بافر // This struct is populated in config.h typedef struct { int8_t select; int8_t wink; uint8_t rotation; int16_t xposition; } eyeInfo_t; #include "config.h" extern void user_setup(void); extern void user_loop(void); #define SCREEN_X_START 0 #define SCREEN_X_END SCREEN_WIDTH // عرض چشم ها #define SCREEN_Y_START 0 #define SCREEN_Y_END SCREEN_HEIGHT // ارتفاع نمایشی چشم // مقادیری برای کنترل پلک زدن #define NOBLINK 0 #define ENBLINK 1 #define DEBLINK 2 typedef struct { uint8_t state; uint32_t duration; uint32_t startTime; } eyeBlink; struct { int16_t tft_cs; eyeBlink blink; int16_t xposition; } eye[NUM_EYES]; uint32_t startTime; void setup(void) { Serial.begin(115200); Serial.println("Starting"); #if defined(DISPLAY_BACKLIGHT) && (DISPLAY_BACKLIGHT >= 0) Serial.println("Backlight turned off"); pinMode(DISPLAY_BACKLIGHT, OUTPUT); digitalWrite(DISPLAY_BACKLIGHT, LOW); #endif user_setup(); initEyes(); Serial.println("Initialising displays"); tft.init(); #ifdef USE_DMA tft.initDMA(); #endif digitalWrite(eye[0].tft_cs, HIGH); if (NUM_EYES > 1) digitalWrite(eye[1].tft_cs, HIGH); for (uint8_t e = 0; e < NUM_EYES; e++) { digitalWrite(eye[e].tft_cs, LOW); tft.setRotation(eyeInfo[e].rotation); tft.fillScreen(TFT_BLACK); digitalWrite(eye[e].tft_cs, HIGH); } #if defined(DISPLAY_BACKLIGHT) && (DISPLAY_BACKLIGHT >= 0) Serial.println("Backlight now on!"); analogWrite(DISPLAY_BACKLIGHT, BACKLIGHT_MAX); #endif startTime = millis(); } void loop() { updateEye(); }
جمع بندی
در این آموزش به کمک برد ESP8266 اقدام به رندر کردن و نمایش یک انیمیشن در نمایشگر ST7789 کردیم، در مواردی که از این نوع از پروژه در اینترنت وجود همواره باری رندر تصاویر از برد های قوی مانند Teency استفاده میشود که من با تغییراتی که در کتابخانه و کد دادم، موفق به اجرای این پروژه در این تراشه محبوب یعنی ESP8266 شدم، از این پروژه میتوان برای ظاهر ربات های انسان نما استفاده کرد، این پروژه قابلیت های مختلفی برای کنترل حرکت چشم در اختیار ما خواهد گذاشت که در صورت استقبال از این آموزش این موارد نیز آموزش داده خواهد شد.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام و عرض خسته نباشید موقع کامپایل کد به م این ارورو میده ایراد کار کجاس for (uint8_t e = 0; e < NUM_EYES; e++) {
با سلام، از چه بردی برای اجرای پروژه استفاده میکنید؟
سلام خسته نباشید
ببخشید میشه یه همچین پروژه ای با یه همچین کیفیتی رو با شیلد lcd tft 2.4 inch پیاده سازی کرد
با سلام، من این پروژه را با شیلد ها تست نکردم متاسفانه.
سلام مجدد
برای این پروژه میخوام از lcd همراه با تاچ استفاده کنم
شما چه نوع lcd پیشنهاد می کنید تا از دانشجو کیت سفارش بدم
با سلام، با توجه به اطلاعات گذشته من فکر میکنم این پروژه با درایور های ST7735 هم سازگاری دارد، اما برای اطمینان حتما اطلاعات کتابخانه را مطالعه کنید.
سلام
میشه با یه برد ۲ تا صفحه نمایش رو کنترل کرد؟
و اگر اینو برام اماده بفرستین کمن نصبش کنم هزینش چجوریه؟
اگر تونستین یه شماره تماسی چیزی بدین کمن توضیح بدم چی میخام
ممنون
با سلام
بنده تست نکردم، احتمالا میشه شما انجام بدید و نتیجه را اعلام کنید.
کاش یه راهی پیشنهاد میدادید برای ارتباط باهاتون
با سلام
از آنجایی که پروژه اجرا نمیکنیم و فقط راهنمایی در خصوص پروژههای اجرا شده در سایت فراهم است میتوانید از بخش نظرات اقدام کنید.