חיבורי ה-I/O של הארדואינו, דיגיטליים ואנלוגיים

הארדואינו הוא לוח פיתוח נפוץ שנמצא בשימוש אצל חובבים ומקצוענים כאחד. הלוח מאפשר למשתמשים בו לפתח מערכות אלקטרוניות המבוקרות בעזרת מיקרובקר, בקלות יחסית. בארדואינו ישנו מגוון של מבואות ומוצאים (Input/Output), מסוגים שונים ולמטרות שונות. מאמר זה סוקר את סוגי ה-I/O השונים, שמציע הלוח.


כניסות ויציאות בארדואינו

בארדואינו קיים מספר רב יחסית של פינים, שיכולים לתפקד כמבוא (Input) או כמוצא (Output). בז'רגון המקצועי פינים מסוג זה מכונים "מבוא/מוצא לשימוש כללי" (General Purpose Input Output, להלן GPIO). החלוקה הבסיסית של המבואות והמוצאים, היא לשתי קבוצות: "דיגטליים" ו-"אנלוגיים". לרוב קווי ה-I/O הדיגטליים מסומנים על-גבי הלוח, בעזרת מספרים (למשל 13, או 20) והקווים האנלוגיים מסומנים באות "A" ואחריה מספר (למשל A1).

הפינים הדיגיטליים, משמשים כמבוא או מוצא של רמות לוגיות "גבוהה" או "נמוכה"  (Hi או Low בהתאמה). כלומר פין דיגיטלי יכול להיות באחד משני מצבים: "1" או "0" לוגי בלבד.

פינים אנלוגיים משמשים לעבודה עם מתחים שנעים בין 0V לבין מתח העבודה של הארדואינו (לאו דווקא 0V או VCC, כמו בדיגיטלי)

 

קווי ה-I/O הדיגיטליים

השימוש הבסיסי בקווי ה-I/O הדיגיטליים, הוא לכתיבה או קריאה של רמות לוגיות (Hi או Lo). הארדואינו תומך במצב עבודה נוסף, שנקרא PWM ומאפשר להוציא אות דיגיטלי שמתנדנד בתדר קבוע, אך עם Duty Cycle בהתאם לבחירת המשתמש (ה-Duty Cycle נקבע בתוכנה שנטענת אל הארדואינו).

קווים שנקבעו לתפקד כמבוא (Input), הם בעלי עכבת גבוהה (High-impedance) כדי שלא להעמיס את המעגל שמחובר אליהם.

אם היישום שרץ בארדואינו משתמש בתקשורת טורית, הפינים שמסומנים בספרות 0 ו-1 אינם יכולים לשמש כ-GPIO,  כי אלו הקווים של הכניסה והיציאה של ה-UART.

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

 

 

קווי ה-I/O האנלוגיים

הכניסות האנלוגיות של הארדואינו, מחוברות לממיר ADC פנימי. המשתמש יכול להכניס מתח אנלוגי כלשהו, בין 0V ל-VCC והארדואינו ימיר אותו לערך דיגיטלי מייצג.

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

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

 

עבודה עם GPIO

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

נהוג לאתחל את מצב העבודה של פיני GPIO, באזור ה-setup של התוכנה. הפקודה ()pinMode קובעת האם הפין עומד לשמש לקלט (INPUT) או לפלט (OUTPUT).

אם לדוגמה מעוניינים להשתמש בפין 13 בתור מוצא דיגיטלי ובפין A0 בתור מבוא אנלוגי, הפונקציה ()setup עשויה להראות כך:

void setup()

{

      pinMode(13, OUTPUT);

      pinMode(A0, INPUT);

}

כדי להוציא רמה לוגית מסוימת (HIGH או LOW) אל פין דיגיטלי, יש להשתמש בפונקציה ()digitalWrite. כדי לקרוא מצב של כניסה דיגיטלית (HIGH או LOW), יש להשתמש בפונקציה ()digitalRead. לדוגמה:

 

#define PUSH_BUTTON 12

int counter = 0;

void loop()

{

     digitalWrite(13, HIGH);

     delay(1000);

     if (digitalRead(PUSH_BUTTON)==HIGH)

            counter++;

     digitalWrite(13, LOW);

     delay(1000);

}

התוכנית לעיל תוציא רמה "1" לוגי אל פין 13, תמתין שניה אחת ואז תוציא "0" לוגי אל פין 13, תמתין שניה אחת וחוזר חלילה.

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

כדי לבצע קריאה מפין אנלוגי (המרה מאנלוגי לדיגיטלי) יש להשתמש בפקודה ()analogRead.

לדוגמה, השורה הבאה, מבצעת קריאה ממבוא אנלוגי ושומרת את הייצוג הדיגיטלי של המתח במבוא זה, במשתנה שנקרא V_level:

V_level = analogRead(A1);

כדי לבצע כתיבה של פין המוגדר כ-PWM, יש להשתמש בפקודה: ()analogWrite:

לדוגמה, הפקודה הבאה תוציא אות PWM בעל Duty cycle של כ-50% אל פין 3:

analogWrite(3, 128);

שימו לב, יש להגדיר את פין 3 בתור OUTPUT, בטרם השימוש בו להוצאת אות PWM.

 

כוחו של ה-GPIO

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


 

תקועים עם פרויקט בארדואינו וצריכים עזרה? צרו קשר