יום שישי, 26 בדצמבר 2025

פרצוף רובוטי עם מעקב מצלמה - M5Stack Core2 + M5Camera F

 מבוא - על הפרויקט בקצרה... 

הפרויקט יוצר פרצוף רובוטי אינטראקטיבי עם עיניים שעוקבות אחרי תנועה! הפרצוף מוצג על מסך M5Stack Core2 ויכול לעקוב אחרי:

  • מגע על המסך - העיניים עוקבות אחרי האצבע שלך
  • תנועה מול מצלמה - באמצעות M5Camera F עם זיהוי תנועה

התוצאה? רובוט חמוד שממצמץ, מחייך כשרואה תנועה, ועוקב אחריך עם העיניים שלו!



למה זה טוב?

  • ✨ אינטראקציה טבעית ואינטואיטיבית
  • 🔧 שילוב מעולה של חומרה ותוכנה
  • 🎨 בסיס טוב לפרויקטים מתקדמים יותר

רשימת חומרים (BOM)

רכיבתיאורמחיר משוער
M5Stack Core2מיקרו בקר ESP32 עם מסך מגע 2" (320x240) ורמקול מובנה~$40
M5Camera Fמצלמה fisheye (150°) עם ESP32 + PSRAM מובנה~$15
כבל USB-Cלהעלאת קוד ולחשמלכלול בדרך כלל


רקע טכני

M5Stack Core2

  • מעבד: ESP32 (dual-core, 240MHz)
  • מסך: 2" IPS LCD (320x240) עם מגע קיבולי
  • זיכרון: 16MB Flash, 8MB PSRAM
  • חיבוריות: WiFi, Bluetooth
  • נוסף: רמקול, מיקרופון, IMU, RTC, ו-Grove ports


M5Camera F

  • מעבד: ESP32 נפרד (4MB Flash + 4MB PSRAM)
  • מצלמה: OV2640 2MP עדשת fisheye (150° FOV)
  • רזולוציה: עד 1600x1200, אנחנו נשתמש ב-160x120 כדי לקבל מהירות גבוהה יותר
  • חיבוריות: WiFi מובנה, יכול לשדר וידאו או לעבד תמונות
  • חשוב: ל M5Camera F יש לוח ESP32 נפרד! צריך לתכנת אותו בקוד נפרד מה-Core2!



איך זה עובד?

התמונה מציגה תרשים זרימה טכנולוגי תחת הכותרת: "פרויקט פרצוף רובוטי אינטראקטיבי – מעקב תנועה ומגע". התרשים מחולק לשני רכיבי חומרה עיקריים המתקשרים ביניהם:  בצד שמאל - M5Camera F: רכיב המצלמה המבצע תהליך תלת-שלבי:  צילום  זיהוי תנועה  חישוב מרכז  בצד ימין - M5Stack Core2: רכיב הבקר והתצוגה הכולל:  עיניים רובוטיות (תצוגה גרפית)  מיצמוץ רובוטי  מסך מגע  תהליך העבודה: במרכז התרשים מופיע הסבר המקשר בין הרכיבים: "גם קלט מגע וגם קלט מצלמה מעובדים על ידי ה-Core2 כדי להזיז את האישונים".  התוצאה: חצים משני הרכיבים מובילים לתיבה תחתונה המסכמת את הפעולה: "תנועת עיניים = מעקב", בליווי אייקון של עיניים זזות.


M5Camera F מצלמת, מזהה תנועה, ושולחת קואורדינטות. Core2 מקבל את הקואורדינטות ומזיז את האישונים בהתאם.


הכנת סביבת העבודה

התקנת Arduino IDE

  1. הורד Arduino IDE מ- https://www.arduino.cc/en/software

    • גרסה מומלצת: 1.8.x או 2.x
  2. התקן תמיכה ב-ESP32:

    • פתח: File → Preferences
    • ב-"Additional Board Manager URLs" הוסף:

           
    • כנס ל Tools → Board → Boards Manager 
    • חפש "esp32" והתקן "esp32 by Espressif Systems" 
    • גרסה מומלצת: 2.0.17 (גרסה יציבה)

 
        3. התקן ספריות נדרשות:

  • עבור Core2:

    • Tools → Manage Libraries
    • התקן:
      • M5Unified (גרסה 0.1.16+)
      • M5GFX
      • ArduinoJson (גרסה 7.x)

    עבור המצלמה:

    • ספריית esp_camera מגיעה עם ESP32 board package

  • שלב 1: פרצוף רובוטי בסיסי (Core2)

    נתחיל עם פרצוף פשוט שעובד עם מגע.

    הגדרות Board

    Tools →
    
      Board: "M5Stack-Core2"
      Upload Speed: 115200
      Partition Scheme: "Default 4MB with spiffs"
      Core Debug Level: "None"
      PSRAM: "Enabled"
    

    הקוד המלא


      
    

    בדיקה ראשונית

    1. העלה את הקוד ל-Core2
    2. אמור להופיע פרצוף על המסך
    3. גע במסך עם האצבע - העיניים אמורות לעקוב אחר האצבע!
    4. שחרר - הפרצוף אמור להראות "פה ישר" ולמצמץ


    אם זה עובד - מעולה! עוברים לשלב הבא!


    שלב 2: הפעלת המצלמה

    הגדרות Board למצלמה

    Tools →
      Board: "AI Thinker ESP32-CAM"
      Upload Speed: 115200
      Flash Frequency: 80MHz
      Partition Scheme: "Huge APP (3MB No OTA/1MB SPIFFS)"
    

    חשוב מאוד: ה-Board צריך להיות "AI Thinker ESP32-CAM"!

    קוד בדיקה - שידור וידאו פשוט

    הקוד רק בודק שהמצלמה עובדת:

    בדיקה

    1. העלה את הקוד למצלמה
    2. פתח Serial Monitor (115200 baud)
    3. המסך הסריאלי אמור להציג: "Camera OK!" + כתובת WiFi
    4. באמצעות הטלפון הנייד:
      • התחבר ל-WiFi: "M5CAM-Video"
      • סיסמה: 12345678
      • פתח דפדפן: http://192.168.4.1
    5. אתה אמור לראות וידאו חי מהמצלמה! 📹

    אם אתה רואה וידאו - המצלמה עובדת!


    שלב 3: Motion Detection במצלמה

    עכשיו נוסיף זיהוי תנועה. המצלמה תשווה בין פריימים ותשלח קואורדינטות של אזורים שהשתנו.

    הקוד המלא - Motion Detection

    הסבר על האלגוריתם

    איך Motion Detection עובד?

    1. צילום פריים נוכחי (160x120 פיקסלים בגרייסקייל)
    2. השוואה לפריים הקודם - לכל פיקסל, בודק אם השתנה מעל הסף (threshold)
    3. ספירת שינויים - אם יש מספיק פיקסלים ששונו (>40) → תנועה זוהתה!
    4. חישוב מרכז התנועה - ממוצע של כל הפיקסלים ששונו
    5. המרה לקואורדינטות מסך - 160x120 → 320x240

    למה גרייסקייל ולא צבע?

    • מהיר פי 3!
    • פחות זיכרון
    • מספיק לזיהוי תנועה

    בדיקה

    1. העלה קוד למצלמה
    2. התחבר ל-WiFi: "M5CAM-Motion"
    3. פתח בדפדפן את הכתובת: http://192.168.4.1
    4. צור תנועה מול המצלמה - אתה אמור לראות "Motion: YES!" והקואורדינטות משתנות!

    שלב 4: חיבור הכל ביחד!

    עכשיו נשלב את המצלמה עם הפרצוף ב-Core2.

    הקוד המלא - Core2 + Camera Tracking

    #include <M5Unified.h>
    
    

    איך זה עובד?

    1. Core2 מתחבר ל-WiFi של המצלמה. 
    2. כל 150ms ה - Core2 שולח GET request ל-http://192.168.4.1/motion
    3. מקבל JSON עם קואורדינטות: {"x": 120, "y": 80, "motion": true}
    4. אם יש תנועה - העיניים עוקבות!
    5. גם המגע עובד - יש עדיפות בקוד למגע אם נוגעים במסך



    פתרון בעיות נפוצות

    בעיה: Core2 מציג מסך שחור

    פתרון:

    • ודא ש-Board נבחר נכון: "M5Stack-Core2"
    • בדוק שספריית M5Unified מותקנת (גרסה 0.1.16+)

    בעיה: המצלמה לא מתאתחלת ("Camera init failed")

    גורמים אפשריים:

    1. Board שגוי:

      • ודא: "AI Thinker ESP32-CAM" (לא M5UnitCAM!)
    2. Partition Scheme:

      • שנה ל-"Huge APP (3MB No OTA/1MB SPIFFS)"
    3. פינים לא נכונים:

      • יש כמה גרסאות של M5Camera
      • הקוד שלנו מתאים ל-Model B (הנפוץ)

    בעיה: Core2 לא מתחבר למצלמה

    בדיקות:

    1. ודא שהמצלמה רצה:

      • בטלפון, חפש WiFi "M5CAM-Motion"
      • התחבר וגלוש ל-http://192.168.4.1
      • אמור לראות דף עם Motion detector
    2. ודא ששם WiFi תואם:

      • בקוד המצלמה: const char* ssid = "M5CAM-Motion";
      • בקוד Core2: const char* ssid = "M5CAM-Motion";
      • חייבים להיות זהים!

    בעיה: העיניים לא עוקבות חלק

    פתרון:

    • הגדל את steps בפונקציה lookAt() ל-12 או 16
    • הקטן delay ל-15ms

    בעיה: רגישות מדי / פחות מדי

    במצלמה, שנה:

    int threshold = 35;  // הגדל = פחות רגיש
    if (changed_count > 40) {  // הגדל = פחות רגיש
    

    בעיה: Y הפוך (למטה = למעלה)

    במצלמה, ודא:

    motion_y = map(motion_y, 0, 120, 240, 0);  // 240, 0 (לא 0, 240!)
    

    שאלות ותשובות

    ש: האם חייבים שני התקני ESP32 נפרדים?

    ת: כן! M5Camera F היא ESP32 נפרד עם מצלמה. Core2 הוא ESP32 נוסף עם מסך. הם מתקשרים דרך WiFi.

    ש: אפשר להשתמש במצלמה אחרת?

    ת: כן, אבל הפינים ישתנו. ESP32-CAM של AiThinker דורש שינוי פינים. המדריך הזה מתאים ל-M5Camera F.

    ש: למה לא משתמשים בחיבור קווי (UART/I2C)?

    ת: אפשר! אבל WiFi פשוט יותר - לא צריך חיווט, ואפשר למקם את המצלמה רחוק מה-Core2.

    ש: כמה מהיר זה?

    ת: ~6-10 FPS (תלוי ברשת WiFi). מספיק למעקב חלק!

    ש: האם זה צורך הרבה חשמל?

    ת: כן. Core2 + מצלמה ביחד צורכים ~500mA. מומלץ חשמל USB טוב או סוללה חזקה.

    ש: אפשר להוסיף עוד תכונות?

    ת: בהחלט!

    • זיהוי פנים (במקום motion detection)
    • מעקב אחרי צבע מסוים
    • הקלטת וידאו
    • שליחת התראות
    • שליטה ברובוט/רחפן

    ש: למה גרייסקייל ולא צבע?

    ת: גרייסקייל מהיר פי 3 ודורש פחות זיכרון. מספיק לזיהוי תנועה!

    ש: איך מכווננים רגישות?

    ת: במצלמה:

    • threshold - ערך גבוה = פחות רגיש
    • changed_count - מספר גבוה = צריך יותר שינויים




    סיכום והמשך פיתוח

    מה בנינו?

    ✅ פרצוף רובוטי אינטראקטיבי עם עיניים חיות
    ✅ מעקב אחרי מגע על המסך
    ✅ מעקב אחרי תנועה מול מצלמה
    ✅ מצמוץ אוטומטי ואנימציות
    ✅ שני מצבי אינטראקציה במקביל

    רעיונות להמשך

    🎯 שדרוגים טכניים:

    • Face Detection (במקום motion) - זיהוי אמיתי של פנים
    • מעקב אחרי צבע (למשל כדור אדום)
    • הוספת קול - הפרצוף "מדבר"
    • חיבור לסרוו מנועים - הפרצוף זז פיזית!

    🤖 פרויקטים מתקדמים:

    • רובוט חברתי שמגיב לרגשות
    • מערכת אבטחה עם התראות
    • עוזר וירטואלי עם זיהוי דיבור
    • משחק אינטראקטיבי לילדים

    תודות

    פרויקט זה פותח בתהליך פיתוח מרתק שכלל המון ניסויים וטעיות (בעיקר עם הגדרות Board! 😅).

    תודה מיוחדת לקהילת M5Stack, למפתחי הספריות, ולכל מי שתורם לקוד פתוח.

    תודה כמובן לקלוד שכתב את הקודים השונים והסכים ללכת איתי לאורך הדרך גם כאשר הוא כמעט התייאש... תודה לקלוד גם על הסבלנות בכתיבת המדריך המקיף! 

    זכרו: הדרך לפרויקט מוצלח היא להתחיל פשוט, לבדוק כל שלב, ולא לוותר! 💪


    הצלחת לבנות את הפרויקט? שתף תמונות וסרטונים! 📸🎥

    יש שאלות? כתוב תגובה ואשמח לעזור! 💬


    אין תגובות:

    הוסף רשומת תגובה

    הערות? הארות? יש לך משהו חשוב לספר לכולם? שאלות?

    נשמח לשמוע!

    (התגובה תפורסם בהקדם בכפוף לאישור מערכת מייקינג)