Serial Plotter: גרפים בסיסיים לארדואינו

אחת הבשורות המעניינות בגרסה 1.6.6 של סביבת הפיתוח של ארדואינו היא Serial Plotter – כלי להצגה גרפית בסיסית של מידע. בפוסט זה אתאר בקצרה מה ה-Serial Plotter עושה ואיך משתמשים בו.

ה-Serial Plotter החדש בפעולה
ה-Serial Plotter החדש בפעולה

כמו ה-Serial Monitor הוותיק והמוכר, גם ה-Serial Plotter מספק רק פונקציונליות מינימלית, והוא מאד לא גמיש. כמובן, פשטות כזו היא חלק מסוד ההצלחה של ארדואינו באופן כללי, ומי שזקוק לכלים מורכבים יותר ימצא אותם במקומות אחרים.

כדי להגיע לפלוטר הסריאלי, נבחר בתפריט Tools->Serial Plotter (או מקשי הקיצור Ctrl+Shift+L במערכת ההפעלה Windows). כמו המוניטור, גם הפלוטר ייפתח רק אם יש ארדואינו (או מקור סריאלי אחר) שמחובר למחשב.

פתיחת הפלוטר הסריאלי
פתיחת הפלוטר הסריאלי

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

הגרף מופק ממספרים ש-(1) מגיעים כטקסט*, (2) אין לפניהם או אחריהם טקסט או סימנים גרפיים אחרים, ו-(3) שמסתיימים בתווי השורה החדשה המקובלים (אלה שנשלחים אוטומטית בסיום הפקודה Serial.println). כלומר, אם ורק אם הפלוטר "רואה" שורה של טקסט, שמכילה אך ורק מספר חוקי (כולל מספרים עם נקודה עשרונית), הוא יוסיף את המספר לגרף. אחרת הוא מתעלם מהקלט. אפשר, אם כי כמובן לא מומלץ, להוסיף לפני ואחרי המספר תווים שאינם גרפיים – קודי ASCII מספר 0 עד 32 כולל. הגרף עצמו הוא בצבע כחול, והנקודות מחוברות ביניהן.

* כאשר מעבירים משתנה מספרי כפרמטר לפונקציה Serial.print או Serial.println, הוא נשלח אוטומטית לפלט הסריאלי בפורמט טקסט מתאים.

ציר X של הגרף אינו מצויר ואינו מתחשב בשום צורה בזמן שעובר בין מספר למספר. הוא מציין אך ורק את סדר המספרים שהגיעו, משמאל לימין, ורוחבו 500 יחידות. כשמותחים את חלון הפלוטר, הגרף נמתח ויזואלית בהתאם אך כמות היחידות בציר לא משתנה. אם מגיעים יותר מ-500 מספרים, הגרף "זז" ומציג רק את ה-500 האחרונים. לא ניתן לגלול לאחור.

ציר Y נקבע ומתעדכן אוטומטית בהתאם לערכי המספרים שמגיעים, כדי להציג את מלוא הטווח ועוד "מרווח ביטחון" גדול. הוא יכול לכלול מספרים שליליים.

הנה הקוד – לא יעיל במיוחד – שמצייר גל סינוס "קלאסי" (לא כמו בתמונה למעלה, שם הכפלתי את j כדי לקבל גרף צפוף יותר):

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (int j = 0; j < 360; j++) {
   Serial.println(sin(j * (PI / 180)));
  }
}

כל האמור לעיל הוא על סמך ניסויים שערכתי, בלי לקרוא (בינתיים) את קוד המקור של הפלוטר. אם יש לכם הערות/תיקונים, אשמח לשמוע בתגובות.

נ.ב. מספר משתמשים כבר דיווחו על תקלות מסוימות בגרסה 1.6.6 של סביבת הפיתוח (עבודה עם namespace ונושאים מתקדמים-יחסית אחרים). ראו הוזהרתם…

להרשמה
הודע לי על
3 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

נראה כמו פיצ'ר נחמד, אך כמו שציינת הוא חסר גמישות..

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

תודה על הפוסט..

אני מסכים איתך לגבי "שבירת המסגרת" הכיוון בהחלט חיובי..

ולגבי "הצעות השיפור",
המפתחים מושכים לכיוון פונקציונליות פשוטה, המגיבים מושכים לכיוון תוספות רבות שיסרבלו..
אולי זה יתאזן בסופו של דבר איפשהו באמצע עם תוספות שימושיות- אך פשוטות..
ימים יגידו ☺