انیمیشن چشم برای نمایشگر OLED کد آردوینو
محتویات
امروزه نمایشگر های OLED در زمینه های مختلف استفاده میشوند. حتما خیلی از ربات ها را دیده اید که از چشم های انیمیشنی استفاده میکنند که جذاب آن ها را چند برابر کرده است. در این مقاله شما یاد میگیرید چطور یک چشم کارتونی و جذاب برای ربات یا سایر پروژه های خود با استفاده از آردوینو و نمایشگر اولد بسازید.
در فیلم زیر تعدادی از انیمیشن های موجود را میتوانید مشاهده کنید.
مدار چشم انیمیشنی ربات
شما برای این پروژه به قطعات خاصی احتیاج ندارید و حتما هم نیاز نیست که از برد آردوینو استفاده کنید. شما میتوانید از سایر برد ها مانند STM32 یا ESP32 و … هم استفاده کنید.
نمایشگر OLED SSD1306 از ارتباط I2C استفاده میکند بنابراین به سادگی مشابه تصویر زیر اتصالات را بین آردوینو و این نمایشگر برقرار کنید.
OLED | Arduino UNO |
GND | GND |
VDD | 3V3 |
SCK | A5 |
SDA | A4 |
حتما از تغذیه 3.3 ولت برد استفاده کنید. ولتاژ 5 ولت میتواند به نمایشگر شما آسیب جدی وارد کند!
انیمیشن های با این روش ها قابل اجرا هست که در این مقاله به عنوان نمونه چند مورد را نمایش میدهیم. جزئیات هر روش را در انتهای هر روش مشاهده کنید.
روش 1: انیمیشن چشم Intellar در صفحه نمایش OLED
این یکی از محبوب ترین انیمیشن های چشم است که در ربات های مختلف استفاده شده است. این انیمیشن 3 حالت چشم (عادی، خواب، لبخند) را ارائه میکند که برای پروژه های مختلف قابل استفاده است.
void draw_eyes(bool update = true) { display.clearDisplay(); //draw from center int x = int(left_eye_x - left_eye_width / 2); int y = int(left_eye_y - left_eye_height / 2); display.fillRoundRect(x, y, left_eye_width, left_eye_height, ref_corner_radius, SSD1306_WHITE); x = int(right_eye_x - right_eye_width / 2); y = int(right_eye_y - right_eye_height / 2); display.fillRoundRect(x, y, right_eye_width, right_eye_height, ref_corner_radius, SSD1306_WHITE); if (update) { display.display(); } }
اکنون بیایید عملکردهای موجود برای تغییر شکل چشم را مورد بحث قرار دهیم:
- “center_eyes” – حرکت چشم ها به وسط صفحه
- “blink” -چشمک زدن
- “sleep” – خوابیدن
- “wakeup” – بیدار شدن
- “happy_eye” – لبخند
- “saccade” – تغییر موقعیت چشم
- “move_right_big_eye” – نگاه کردن به سمت راست
- “move_left_big_eye” – نگاه کردن به سمت چپ
حالت های گفته شده به شکل زیر قابل اجرا هستند:
void center_eyes(bool update = true) ; void blink(int speed = 12) ; void sleep() ; void wakeup() ; void happy_eye() ; void saccade(int direction_x, int direction_y) ; void move_right_big_eye() ; void move_left_big_eye() ; void move_big_eye(int direction) ;
برای مشاهده مستندات این روش وارد لینک زیر شوید:
https://www.intellar.ca/blog/animated-eye-oled
روش 2: چشم متحرک ساده SpiderMaf
این مورد امکانات زیادی دارد و حتی مردمک هم دارد و میتواند حالت های چهره مختلف را نمایش بدهد. همچنین اندازه چشم قابل تنظیم است.
در زیر متغیرهایی وجود دارد که بر اساس نیاز قابل ویرایش هستند.
#define EYE 16 // radius in pixel #define PUPIL 7 // radius in pixel #define TICK 500 // 500 ms #define EXR 35 // X axis Horizontal position of Right Eye #define EXL 95 // X axis Horizontal position of Left Eye int vpos = 32;// Y axis - vertical position
حالا بیایید توابع موجود را بررسی کنیم:
- “drawEyes”: ترسیم چشم ها
- “displayTick”: تاخیر
- “Left”: نگاه کردن به چپ
- “Right”: نگاه کردن به راست
- – “Up”: نگاه کردن به بالا
- – “Down”: نگاه کردن به پایین
- – “lookLeft”: نگاه به چپ و برگشت به وسط
- – “lookRight”: نگاه به راست و برگشت به وسط
- – “Confuse”: نگاه گیج
- – “Eyeblink”: چشمک زدن
برای مشاهده مستندات این روش وارد لینک گیت هاب زیر شوید:
https://www.youtube.com/watch?v=B5KUGCaN9Jo
روش 3: چشم مستطیلی
این مورد توسط عبدالسلام عبود ایجاد شده است. این فرد از این انیمیشن برای چشم ربات خود استفاده کرده است. این ربات چشم مستطیلی دارد و حالت های بیشتری را شامل میشود همچنین از نمایشگر های مختلفی نیز پشتیبانی میکند. همچنین شامل توابعی برای حالات بیشتری مانند غمگین، ناراحت، تعجب، خوشحال، زیبا، عصبانی، و مشکوک است.
توابع موجود عبارتند از:
- “blink”
- “normal”
- “sad”
- “upset”
- “wonder”
- “happy”
- “cute”
- “angry”
- “suspicious”
- “close”
این توابع صرفا برای نمایش انیمیشن های مربوطه استفاده می شوند.
void close() ; void normal() ; void blink(int time) ; void sad() ; void upset() ; void wonder() ; void happy() ; void cute() ; void angry() ; void suspicious() ;
علاوه بر این، توابعی به نام های زیر وجود دارد:
- “downeye”
- “righteye”
- “lefteye”
- “upeye”
این توابع انیمیشن را نشان می دهد سپس چشم ها را به حالت اول برمیگرداند.
void downeye(); void righteye(); void lefteye(); void upeye();
برای مشاهده مستندات این روش وارد لینک گیت هاب زیر شوید:
https://github.com/AbdulsalamAbbod/Akno
روش 4: پکیج حرکت چشم ها با قابلیت زیاد
این پکیج توسط Mr.Vinny ایجاد شده است. شما میتواند مشابه با روش دوره آموزش آردوینو، تصاویر مختلف را تبدیل به کد کنید و در صفحه نمایش بدهید.
کد زیر را فقط به عنوان مثال در نظر بگیرید. تمام کد قرار داده نشده و “…” قرار دادیم تا کد کوتاه تر شود.
static const unsigned char PROGMEM image_data_EYES_FRONTarray[] = {...};
کد زیر تصویر را در نمایشگر نشان میدهد. بله به همین سادگی!
// Displays EYES_FRONT on the screen display.drawBitmap(0, 0, image_data_EYES_FRONTarray, 128, 64, 1); display.display();
برای مشاهده مستندات این روش وارد لینک گیت هاب زیر شوید:
https://github.com/Vin-X-Mod/OLED-Moving-Eyes-Arduino/tree/main
نتیجه گیری
انتخاب از بین این روش ها صرفاً به ترجیح شخصی کاربر و نیازهای پروژه بستگی دارد. در اینجا به صورت تفکیک شده توضیح میدهم:
- اگر سفارشیسازی، سادگی، سبکی و ویژگیهای اولیه را ترجیح میدهید، گزینه 2 توسط SpiderMaf برای شما مناسبتر است.
- اگر ویژگیهای بیشتر، سفارشیسازی کمتر و سبکترین جایگزین را ترجیح میدهید، گزینه 3 توسط عبدالسلام عبود ایدهآل خواهد بود.
- اگر قصد دارید رابط کاربری (UI) خود را طراحی کنید، گزینه 4 توسط Vinny راه حلی است.
- اگر میخواهید چشمها با حالتهای اولیه و طراحی سبک وزن در همه جهات حرکت کنند، گزینه 1 Intellar مناسب خواهد بود.
سلام وقت بخیر
تمام آموزش های کد نویسی با برنامه اتمل استودیو است؟
سلام عزیز
خیر بستگی به دسته بندی دارد فقط مطالب دسته ای وی آر غالبا با اتمل استودیو هستند. برای یادگیری برنامه نویسی در اتمل استودیو دوره آموزش avr را مشاهده کنید.
سلام ببخشید این پیام را اشتباه فرستادم
سلام مهندس
ممنون از سایت خوبتون
بنده کاری را که گفتید انجام دادم مشکلم حل شد دیگه هر ۳ ثانیه چشمک میزنه و با هاش تماس برقرار کردم و پیام هم میده ممنون که راهنماییم کردید متشکرم