13 - מנורת LED

בפרויקט הזה נבנה נבנה מנורת LED שתידלק כשנגע בחומר מוליך כלשהו. כמו בפרויקט ה Servo נשתמש בספרייה חיצונית, אך הפעם לא אחת המובנת ב IDE של ה Arduino, אלא בספרייה שבן אדם פרטי כתב, בחור בשם פול בדג’ר, ושמה CapacitiveSensor.

קיבלות (Capacitance) זה מדד של כמה מטען חשמלי משהו יכול לאחסן. הספרייה בודקת את הקיבולת בעזרת 2 פינים של ה Arduino (אחד משדר ואחד קולט) שיהיו מחוברים לאוביקט מתכת כלשהו (כמו נייר אלומינימום). היא מודדת את הזמן שלוקח להם להיות באותו המצב. ככל שאנו מתקרבים לאובייקט, הגוף שלנו יספוג חלק מהמטען החשמלי, מה שישפיע על הפינים ויקח להם יותר זמן להיות באותו המצב.

 

הכנת הספרייה: נוריד את הספרייה מכאן, נפתח את קובץ ה zip ונלחץ את התקייה שנמצאת בתוכו לתיקיית ה IDE של הארדואינו. ב Ubuntu התקייה של ה Arduino נקראת sketchbook ובתוכה נמצאת תקייה בשם libraries, אליה נחלץ את תקיית הפרויקט. ב Windows, כברירת מחדל, תקיית ה Ardunio תיהיה בתוך Documents, ועליכם ליצור תקייה בשם libraries.

לאחר שחילצתם את התקייה, הפעילו מחדש את ה IDE של ה Arduino. לחצו עם File (בתפריט העליון) > ואז על Examples > משם ל CapacitiveSensor > ול libraries > בחרו ב CapacitiveSensor > ולבסוף ב CapacitiveSensorSkeatch. יפתח לכם חלון חדש ובו דוגמה (Demo Sketch), קמפלו אותה (ע”י לחיצה על V, כמו שאתם עושים כדי לבדוק שאין שגיאות בפרויקט). ואם הקימפול עבר בהצלחה (ללא שגיאות), התקנתם אותה באופן תקין (במידה והייתה שגיאה קפצו לקרוא את הפסקה האחרונה בסוף המאמר).

 

חיבור הרכיבים

נחבר ללוח המטריצה חוט מגשר מעמודת ה- (מינוס) לפין ה GND שב Arduino (בפרויקט הזה אנחנו לא צריכים לחבר חוט מגשר ל 5V כי אנו נקבל אותו ישירות מפין מס’ 4 של ה Arduino). נמקם על גבי לוח המטריצה נורת לד ונחבר את הקתודה (הרגל הקצרה) לאדמה בעזרת נגד 220Ω, ואת האנודה לפין הדיגיטלי מס’ 12.

נחבר 2 חוטים מגשרים לארדואינו, הראשון לפין הדיגיטלי מס’ 2 והשני למס’ 4, ואת הקצה השני שלהם נמקם על לוח המטריצה (במרחק אחד מהשני), בינהם נחבר נגד 1MΩ (ראשי תיבות: Megaohm). באותה השורה של החוט המגשר המגיע מפין מס’ 2 נחבר עוד חוט מגשר (אחרי הנגד) שלא יתחבר לשום דבר בקצהו השני (הוא יהיה חיישן המגע שלנו).
להלן סכמה ואיור להמחשה:

Wiring Sketch

 

הקוד

נתחיל בלייבא את ספריית ה CapacitiveSensor עם include וניצור מופע של מחלקה (בשם capSensor), כשאנו יוצרים את המופע של המחלקה אנו מעבירים לבנאי של הספריה את הפינים מהם הוא ישלח ויקבל את המידע, במקרה שלנו, פין מס’ 4 שולח את האות, ופין מס’ 2 קולט.

בנוסף, ניצור משתנה מסוג מספר שלם (int) בשם threshold שישמור לנו את הסף שבו המנורה תידלק (נכניס אליו את הערך 1,000). ומשתנה קבוע (const) מסוג מספר שלם (int) שישמר את מספר הפין שאליו נורת ה LED מחוברת (במקרה שלנו פין מס’ 12).

בפוקנציית ה ()setup:

נפתח חיבור למחשב, נבצע זאת עם הפונ’ ()Serial.begin, ונכניס לתוכה את הפרמטר 9600 (המהירות בו ה Arduino יתקשר, 9600 ביטים לשניה). לאחר מכן נגדיר את הפין שמחובר לנורת ה LED להיות במצב פלט.

בפונקציית ה ()loop:

בתוך ה loop ניצור משתנה בשם sensorValue מסוג long, שישמור את הערך שנקלוט מהחיישן. נקרא לפקודה capacitiveSensor (ממשתנה המופע), ונכניס לתוכה את הערך 30 (שמציין את מספר הדגימות שאנו רוצים לקרוא, אם נקרא מספר קטן מידי יתכן ונראה הרבה שינויים בחיישן, אך אם נקרא יותר מידי דגימות, אנחנו יכולים לגרום ללאג עקב הזמן הדרוש לקריאה מהחיישן), ואת התוצאה שהיא מחזירה נשמור ב sensorValue שיצרנו קודם לכן.

נדפיס לעצמנו את התוצאה ששמורה ב sensorValue. ונבדוק ע”י משפט if / else האם הערך שהתקבל מהחיישן גבוהה מהסף שקבענו בתחילת התוכנית, אם כן אז נדליק את הנורה, אם לא נכבה אותה. לבסוף, נוסיף דיילי קטן לפני שאנו מסיימים את פונ’ ה loop כדי לתת כמה מאיות השניה מהקריאה הבאה (על מנת שנספיק לראות את האור נדלק אם המצב ישתנה ונצטרך לכבות אותו אח”כ).

כך יראה הקוד הסופי:

#indluce <CapacitiveSensor.h>
CapacitiveSensor capSensor = CapacitiveSensor(4,2);
int threshold = 1000;
const int ledPin = 12;

void setup(){
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
}

void loop(){
    long sensorValue = capSensor.capacitiveSensor(30);
    Serial.println(sensorValue);
    if(sensorValue > threshold){
        digitalWrite(ledPin, HIGH);
    }else{
        digitalWrite(ledPin, LOW);
    }
    delay(10);
}

 

לסיכום

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

במידה ונתקלתם בבעיה כלשהי בעת קימפול הספרייה, להלן המדריך המלאה מאתר Arduino להתקנה של ספריות: http://arduino.cc/en/Guide/Libraries. בנוסף, שימו לב שכשאתם מחלצים את התיקייה מתוך ה zip היא מכילה תקייה ובתוכה ישנה כבר תיקייה בשם libraries, כנסו אליה וחלצו את 2 הפרויקטים משם אל תוך תקיית ה libraries הקיימת שלכם (שלא יהיה לכם מצב של תקייה בתוך תיקייה בתוך תקייה ורק אז הפרויקטים).