آموزش آردوینوپروژه های آردوینو

انیمیشن چشم برای نمایشگر 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();
  }
}

اکنون بیایید عملکردهای موجود برای تغییر شکل چشم را مورد بحث قرار دهیم:

  1. “center_eyes” – حرکت چشم ها به وسط صفحه
  2. “blink” -چشمک زدن
  3. “sleep” – خوابیدن
  4. “wakeup” – بیدار شدن
  5. “happy_eye” – لبخند
  6. “saccade” – تغییر موقعیت چشم
  7. “move_right_big_eye” – نگاه کردن به سمت راست
  8.  “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

حالا بیایید توابع موجود را بررسی کنیم:

  1. “drawEyes”: ترسیم چشم ها
  2. “displayTick”: تاخیر
  3. “Left”: نگاه کردن به چپ
  4. “Right”: نگاه کردن به راست
  5.  – “Up”: نگاه کردن به بالا
  6.  – “Down”: نگاه کردن به پایین
  7. – “lookLeft”: نگاه به چپ و برگشت به وسط
  8. – “lookRight”: نگاه به راست و برگشت به وسط
  9.  – “Confuse”: نگاه گیج
  10.  – “Eyeblink”: چشمک زدن

برای مشاهده مستندات این روش وارد لینک گیت هاب زیر شوید:

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
https://www.youtube.com/watch?v=B5KUGCaN9Jo

روش 3: چشم مستطیلی

این مورد توسط عبدالسلام عبود ایجاد شده است. این فرد از این انیمیشن برای چشم ربات خود استفاده کرده است. این ربات چشم مستطیلی دارد و حالت های بیشتری را شامل میشود همچنین از نمایشگر های مختلفی نیز پشتیبانی میکند. همچنین شامل توابعی برای حالات بیشتری مانند غمگین، ناراحت، تعجب، خوشحال، زیبا، عصبانی، و مشکوک است.

توابع موجود عبارتند از:

  1. “blink”
  2.  “normal”
  3. “sad”
  4.  “upset”
  5.  “wonder”
  6. “happy”
  7. “cute”
  8. “angry”
  9.  “suspicious”
  10. “close”

این توابع صرفا برای نمایش انیمیشن های مربوطه استفاده می شوند.

void close() ;
void normal() ;
void blink(int time) ;
void sad() ;
void upset() ;
void wonder() ;
void happy() ;
void cute() ;
void angry() ;
void suspicious() ;

علاوه بر این، توابعی به نام های زیر وجود دارد:

  1. “downeye”
  2. “righteye”
  3. “lefteye”
  4. “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 مناسب خواهد بود.
4.5 (4 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *