שילוב של ארדואינו עם מצלמה נשמע כמו בסיס מעולה למגוון עצום של פרויקטים, אך לרוע המזל, החומרה של הארדואינו ממש לא בנויה לנפחים ולקצבי המידע הדרושים להתעסקות משמעותית עם תמונות. לבעיה הזו קיימים מספר פתרונות חלקיים, כל אחד מהם עם יתרונות וחסרונות משלו. בפוסט זה אציג אחד מהפתרונות הללו – מצלמה בחיבור טורי עם שבב VC0706 וספריית קוד ייעודית של Adafruit.
מה זה עושה
מודול המצלמה הזה, שעולה כ-$40 לפני משלוח, יכול לשמש כמצלמה עצמאית לווידאו בזמן אמת (NTSC, מונוכרום). מה שמעניין יותר, לפחות מבחינת השילוב עם מיקרו-בקרים, הוא שהמודול מסוגל גם לצלם סטילס בצבע ברזולוציה של עד 640 על 480 פיקסלים, לשמור את התמונה האחרונה בזיכרון פנימי בפורמט jpeg – ולהעביר את נתוני התמונה הזו לפי דרישה בחיבור TTL טורי, או במונחי ארדואינו – Serial. בנוסף, המצלמה מזהה תנועה ומרימה "דגל" שאפשר לקרוא גם כן באמצעות החיבור הטורי.
למה זה טוב
כל זה לא באמת עוזר למי שרוצה לשלב יכולת צילום בפרוייקטים עצמאיים (Stand-alone), מכיוון שלארדואינו אין מספיק זיכרון וכוח עיבוד כדי לפענח את פורמט jpeg ולעשות משהו שימושי עם התמונות הללו. לכל היותר, הוא יכול לאחסן אותן על כרטיס SD שייאסף וייקרא במחשב במועד מאוחר יותר.
במקרה של המצלמה הזו, מוטב לחשוב על הארדואינו כמתווך חכם בינה לבין המחשב, לדוגמה ב"מערכת אבטחה" תוצרת בית, או ברובוט שמצלם את השטח, מעביר את המידע לעיבוד במחשב ומקבל בחזרה פקודות פעולה מתאימות.
חסרונות
איכות הצילום במצלמה הזו בינונית עד נמוכה בכל הפרמטרים: התמונות לא חדות, העדשה (אני מניח) גורמת לעיוות מסוים, והצבעים איומים ונוראים. חלק מבעיית הצבע נובעת מרגישות יתר לאור תת-אדום, ואפשר כנראה להשיג תוצאות טובות קצת יותר עם פילטר מתאים. עדיין, המצלמה הזאת לחלוטין לא מתאימה ליישום של, נניח, מיון סוכריות צבעוניות.
תמונה שצולמה בחדר שמואר באור יום (לא ישיר) בלבד. המשטח במציאות לבן כמעט לגמרי.
כברירת מחדל, המצלמה מעבירה את הנתונים ב-Serial בקצב של 38,400 ביטים לשניה, והדבר מתבצע ב"חבילות" של 32 בייט בכל פעם. בתיאוריה אפשר להגדיל את שני הפרמטרים הללו, אך התיעוד בקוד הספריה ובאתר Adafruit מזהיר מפני חוסר יציבות ואפילו פגיעה פוטנציאלית בשבב המצלמה. במילים אחרות, אתם לא רוצים לנסות משחקים כאלה עם מצלמה שעולה ארבעים דולר. אם לוקחים בחשבון שתמונה טיפוסית "שוקלת" כמה עשרות קילובייט, יוצא שזמן השידור של תמונה אחת יכול להתארך לעשרים שניות ואף יותר, בהתאם לרזולוציה ולרמת הדחיסה (על חשבון האיכות כמובן).
כפי שציינתי בפוסט קודם, קצב השידור הנ"ל אולי איטי, אך הוא בכל זאת מהיר מדי עבור ספריית SoftwareSerial של ארדואינו, כך שמעשית חייבים לקרוא את המידע באמצעות Serial חומרה כזה או אחר.
שימו לב, המודול מקבל מתח של 5V, אבל התקשורת הסריאלית מתבצעת דווקא ב-3.3V, מה שמחייב להעביר את קו התקשורת מהארדואינו למצלמה (זה שנכנס ל-RX של מודול המצלמה) דרך מחלק מתח מתאים.
יתרונות
כידוע, אני לא חסיד גדול של ספריות קוד לארדואינו – אבל אם אין ברירה, עדיף שאלה יהיו ספריות של Adafruit: הן כתובות טוב, עם הערות ודוגמאות טובות, ועושות את העבודה. גם במקרה הזה הספריה מספקת גישה נוחה לפונקציות השימושיות של המצלמה, וזה חוסך כמובן המון התעסקות. הבעיה היחידה שנתקלתי בה בינתיים היא, כאמור, הניסיון הכושל של הספריה להשתמש ב-SoftwareSerial עבור לוחות ארדואינו אונו.
נקודה נוספת לטובת המצלמה הזו: היא עובדת לא רע גם בתנאי תאורה עלובים. האיכות, כפי שאתם יכולים לראות למטה, לא משתווה לזו שמתקבלת באור – ועדיין אפשר להבחין יפה בפרטים, בחשכה יחסית שהיתה מעיקה גם על מצלמות כיס דיגיטליות.
לסיכום
מודול המצלמה מבוסס VC0706 הוא צעצוע נחמד עם כמה שימושים מעניינים, אבל התמורה לא מצדיקה את תג המחיר. שווה להשקיע רק אם תהיה הנחה ענקית, או אם אתם מודעים לחסרונות ובכל זאת זה בדיוק מה שאתם צריכים לפרויקט חשוב.
כבר עדיף raspberry pi אם רוצים להתעסק עם מצלמה ועיבוד תמונה, לא?
ברוב המקרים, כן.