תוכן עניינים:

מתגי ארדואינו וגלגל האגודל: 9 שלבים
מתגי ארדואינו וגלגל האגודל: 9 שלבים

וִידֵאוֹ: מתגי ארדואינו וגלגל האגודל: 9 שלבים

וִידֵאוֹ: מתגי ארדואינו וגלגל האגודל: 9 שלבים
וִידֵאוֹ: Lesson 1: What is Arduino? Types of Arduino Boards and SunFounder Kit | SunFounder Robojax 2024, יולי
Anonim
מתגי ארדואינו וגלגל האגודל
מתגי ארדואינו וגלגל האגודל

במאמר זה אנו בוחנים את השימוש במתגי גלגלת דחיפה/גלגל אצבע עם מערכות ה- Arduino שלנו. להלן כמה דוגמאות שמקורן ב- PMD Way.

שלב 1:

תמונה
תמונה

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

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

שלב 2:

תמונה
תמונה

יש לנו משותף משמאל, ואז אנשי קשר עבור 1, 2, 4 ו- 8. אם אתה מפעיל מתח קטן (נניח 5V) למשותף, ניתן למדוד את ערך המתג על ידי הוספת ערכי אנשי הקשר הנמצאים ב- מצב גבוה. לדוגמה, אם תבחר 3 - אנשי הקשר 1 ו -2 יהיו במתח המשותף. הערכים בין אפס לתשע יכולים להיות מיוצגים ככאלה בטבלה.

שלב 3:

תמונה
תמונה

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

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

שלב 4:

עכשיו זה עניין פשוט לחבר את היציאות המסומנות 1, 2, 4 ו -8 (למשל) לפינים הדיגיטליים 8, 9, 10 ו -11. חבר את 5V לנקודת המתג 'C', ו- GND ל- … GND. לאחר מכן, עלינו לקבל סקיצה שיכולה לקרוא את התשומות ולהמיר את פלט ה- BCD לעשרוני. שקול את המערכון הבא:

/ * משתמש במגן תצוגה מספרי SAA1064 https://www.gravitech.us/7segmentshield.html משתמש במסך טורי אם אין לך את מגן SAA1064 */ #כלול "Wire.h" #define q1 8 #define q2 9 # הגדר q4 10 #define q8 11 הגדרת חלל () {Serial.begin (9600); Wire.begin (); // הצטרף לאוטובוס i2c (כתובת אופציונלית למאסטר) עיכוב (500); pinMode (q1, INPUT); // גלגל האגודל '1' pinMode (q2, INPUT); // גלגל האגודל '2' pinMode (q4, INPUT); // גלגל האגודל '4' pinMode (q8, INPUT); // thumbwheel '8'} void dispSAA1064 (int Count) // שולח 'מספר' שלם למגן Gravitech SAA1064 {const int lookup [10] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; int אלפים, מאות, עשרות, בסיס; שידור Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); Wire.endTransmission (); שידור Wire.beginTransmission (0x38); Wire.write (1); אלפים = ספירה/1000; מאות = (ספירה- (אלפי*1000))/100; עשרות = (ספירה-((אלפי*1000)+(מאות*100)))/10; בסיס = ספירה-((אלפי*1000)+(מאות*100)+(עשרות*10)); Wire.write (חיפוש [בסיס]); Wire.write (חיפוש [עשרות]); Wire.write (חיפוש [מאות]); Wire.write (חיפוש [אלפי]); Wire.endTransmission (); עיכוב (10); } int readSwitch () {int total = 0; אם (digitalRead (q1) == HIGH) {סה"כ+= 1; } if (digitalRead (q2) == HIGH) {סה"כ+= 2; } if (digitalRead (q4) == HIGH) {סה"כ+= 4; } אם (digitalRead (q8) == HIGH) {סה"כ+= 8; } סך ההחזר; } לולאת חלל () {dispSAA1064 (readSwitch ()); // שולח ערך מתג לתצוגת מגן Serial.println (readSwitch ()); // שולח את ערך המתג לתיבת הצג הסדרתי}

הפונקציה readSwitch () היא המפתח. הוא מחשב את ערך המתג על ידי הוספת הייצוג המספרי של כל פלט מתג ומחזיר את התוצאה כתוצאה מכך. בדוגמה זו השתמשנו במגן תצוגה מספרי הנשלט על ידי ה- NXP SAA1064.

שלב 5:

Image
Image

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

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

שלב 6:

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

אז הנה לכם. האם באמת היית משתמש באלה בפרויקט? עבור ספרה אחת - כן. לארבע? כנראה שלא-אולי יהיה קל יותר להשתמש בלוח מקשים בן 12 ספרות. יש רעיון…

שלב 7: מתגים מרובים

תמונה
תמונה

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

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

כאשר המתג היה מחובר ישירות ל- Arduino, קראנו את הסטטוס של כל סיכה כדי לקבוע את ערך המתג. אנו נעשה זאת שוב, בקנה מידה גדול יותר באמצעות MCP23017. שקול את התרשים pinout:

שלב 8:

יש לנו 16 פינים, המאפשרים לחבר ארבעה מתגים. כלל הציבור עבור כל מתג עדיין מתחבר ל- 5V, ולכל איש קשר של מתג יש עדיין נגד משיכה של 10k ל- GND. לאחר מכן אנו מחברים את 1, 2, 4, 8 סיכות הספרה אחת ל- GPBA0 ~ 3; ספרה שתיים 1, 2, 4, 8 ל- GPA4 ~ 7; ספרה שלוש 1, 2, 4, 8 עד GPB0 ~ 3 וספרה ארבע 1, 2, 4, 8 עד GPB4 ~ 7.

עכשיו איך אנו קוראים את המתגים? כל החוטים האלה עשויים לגרום לך לחשוב שזה קשה, אבל הסקיצה היא פשוטה למדי. כאשר אנו קוראים את הערך של GPBA ו- B, מוחזר בייט אחד עבור כל בנק, כאשר הסיבית המשמעותית ביותר היא הראשונה. כל ארבע סיביות יתאימו להגדרת המתג המחובר לסיכות הקלט/פלט התואמות. לדוגמה, אם נבקש את הנתונים עבור שני בנקים IO והמתגים מוגדרים ל- 1 2 3 4 - בנק A יחזיר 0010 0001 ובנק B יחזיר 0100 0011.

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

כדי להפריד את הערך למתג שלוש, אנו משתמשים בתרכובת bitwise & - מה שמשאיר את הערך של מתג שלוש. התמונה מציגה פירוט של ערכי המתג הבינארי - היא מציגה את הערכים הגולמיים של GPIOA ו- B, ואז את הערך הבינארי של כל ספרה ואת הערך העשרוני.

שלב 9:

אז בואו נראה את מערכון ההדגמה:

/ * דוגמה 40a-קראו ארבעה מתגי BCD גלגל דחיפה באמצעות MCP23017, הצג בתצוגת LED SAA1064/4 ספרות בת 7 מקטעים */// סיכות MCP23017 15 ~ 17 ל- GND, כתובת אוטובוס I2C היא 0x20 // כתובת אוטובוס SAA1064 I2C 0x38 # כלול "Wire.h" // להגדרות ספרות LED int ספרות [16] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111, 119, 124, 57, 94, 121, 113 }; בת GPIOA, GPIOB, dig1, dig2, dig3, dig4; void initSAA1064 () {// setup 0x38 Wire.beginTransmission (0x38); Wire.write (0); Wire.write (B01000111); // פלט 12mA, ללא כיבוי ספרות Wire.endTransmission (); } הגדרת void () {Serial.begin (9600); Wire.begin (); // הפעלת initSAA1064 () של אוטובוס I2C; } לולאת void () {// קראו את התשומות של בנק A Wire.beginTransmission (0x20); Wire.write (0x12); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOA = Wire.read (); // בייט זה מכיל את נתוני המתג לספרות 1 ו -2 // קרא את תשומות הבנק B Wire.beginTransmission (0x20); Wire.write (0x13); Wire.endTransmission (); Wire.requestFrom (0x20, 1); GPIOB = Wire.read (); // בית זה מכיל את נתוני המתג לספרות 3 ו -4 // ערך חילוץ לכל מתג // dig1 LHS, dig4 RHS dig4 = GPIOB >> 4; dig3 = GPIOB & B00001111; dig2 = GPIOA >> 4; dig1 = GPIOA & B00001111; // שלח את כל נתוני ה- GPIO והמתג האינדיבידואלים לצג הסדרתי // לשם איתור באגים ועניין Serial.print ("GPIOA ="); Serial.println (GPIOA, BIN); Serial.print ("GPIOB ="); Serial.println (GPIOB, BIN); Serial.println (); Serial.print ("ספרה 1 ="); Serial.println (dig1, BIN); Serial.print ("ספרה 2 ="); Serial.println (dig2, BIN); Serial.print ("ספרה 3 ="); Serial.println (dig3, BIN); Serial.print ("ספרה 4 ="); Serial.println (dig4, BIN); Serial.println (); Serial.print ("ספרה 1 ="); Serial.println (dig1, DEC); Serial.print ("ספרה 2 ="); Serial.println (dig2, DEC); Serial.print ("ספרה 3 ="); Serial.println (dig3, DEC); Serial.print ("ספרה 4 ="); Serial.println (dig4, DEC); Serial.println (); // שלח ערך מתג לתצוגת LED באמצעות SAA1064 Wire.beginTransmission (0x38); Wire.write (1); Wire.write (ספרות [dig4]); Wire.write (ספרות [dig3]); Wire.write (ספרות [dig2]); Wire.write (ספרות [dig1]); Wire.endTransmission (); עיכוב (10); עיכוב (1000); }

וללא המאמינים … הדגמת וידאו.

אז הנה לכם. ארבע ספרות במקום אחת, ומעל אוטובוס I2C המשמר סיכות קלט/פלט דיגיטליות של Arduino. בעזרת שמונה MCP23017 תוכל לקרוא 32 ספרות בבת אחת. תהנה עם זה!

ניתן להזמין מתגי BCD וגם עשרוני בגדלים שונים מ- PMD Way, עם משלוח חינם לכל רחבי העולם.

את הפוסט הזה הביאה לכם pmdway.com - הכל ליצרנים ולחובבי האלקטרוניקה, עם משלוח חינם לכל רחבי העולם.

מוּמלָץ: