- חומרים נדרשים
- איך מקודד סיבובי עובד?
- סוגי מקודד סיבובי
- KY-040 מקודד סיבובי Pinout ותיאור
- תרשים מעגל מקודד סיבובי Arduino
- תכנות את Arduino למקודד סיבובי
- עבודה של מקודד סיבובי עם Arduino
אנקודר הוא מכשיר קלט שעוזר למשתמש אינטראקציה עם מערכת. זה נראה יותר כמו פוטנציומטר רדיו אבל הוא מוציא רכבת פולסים שהופכת את היישום שלו לייחודי. כאשר מסתובב הכפתור של המקודד הוא מסתובב בצורה של צעדים קטנים שעוזרים להשתמש בו לבקרת מנוע צעד / סרוו, ניווט ברצף של תפריט והגדלת / הקטנת ערך המספר ועוד.
במאמר זה נלמד על הסוגים השונים של מקודדי סיבוב וכיצד הם פועלים. אנו גם נתממשק אותו עם Arduino ונשלוט בערך שלם על ידי סיבוב המקודד ונציג את ערכו על גבי מסך LCD * 16 * 2. בסוף מדריך זה יהיה לכם נוח להשתמש במקודד סיבובי לפרויקטים שלכם. אז בואו נתחיל…
חומרים נדרשים
- מקודד סיבובי (KY-040)
- ארדואינו UNO
- 16 * 2 LCD אלפאנומרי
- פוטנציומטר 10k
- קרש לחם
- חוטי חיבור
איך מקודד סיבובי עובד?
מקודד סיבובי הוא מתמר אלקטרומכני, כלומר ממיר תנועות מכניות לפולסים אלקטרוניים. הוא מורכב מכפתור שכאשר מסובב ינוע צעד אחר צעד וייצר רצף של רכבות דופק עם רוחב שהוגדר מראש לכל שלב. ישנם סוגים רבים של מקודדים שלכל אחד מהם יש מנגנון עבודה משלו, נלמד על הסוגים מאוחר יותר, אך לעת עתה הבה נתמקד רק בקודן ה- Incremental KY040 מכיוון שאנו משתמשים בו לצורך ההדרכה שלנו.
המבנה המכני הפנימי של המקודד מוצג להלן. זה בעצם מורכב מדיסק עגול (צבע אפור) עם רפידות מוליכות (צבע נחושת) המונחות על גבי דיסק עגול זה. רפידות מוליכות אלה ממוקמות במרחק שווה כמוצג להלן. סיכות הפלט קבועות על גבי דיסק עגול זה, באופן שכאשר הכפתור מסתובב, הרפידות המוליכות באות במגע עם סיכות הפלט. כאן יש שני סיכות פלט, פלט A ופלט B כפי שמוצג באיור למטה.
צורת גל הפלט המיוצרת על ידי סיכת הפלט A ופלט B מוצגת בצבע כחול וירוק בהתאמה. כאשר הרפידה המוליכה נמצאת ישירות מתחת לסיכה היא הולכת לגובה וכתוצאה מכך היא בזמן וכשהכרית המוליכה מתרחקת הסיכה נמוכה וכתוצאה מכך זמן ההפסקה של צורת הגל המוצגת לעיל. כעת, אם נספור את מספר הפולסים נוכל לקבוע כמה צעדים קודן הועבר.
כעת עשויה להתעורר השאלה מדוע אנו זקוקים לשני אותות דופק כאשר אחד מספיק כדי לספור את מספר הצעדים שננקטו בזמן סיבוב הכפתור. הסיבה לכך היא שאנחנו צריכים לזהות לאיזה כיוון סובב הכפתור. אם תסתכל על שני הפולסים אתה יכול להבחין כי שניהם מחוץ ל 90 ° מהשלב. מכאן שכאשר הידית מסתובבת עם כיוון השעון, תפוקת A תחל גבוה ראשונה וכאשר הכפתור מסתובב נגד כיוון השעון, פלט B יעלה גבוה קודם.
סוגי מקודד סיבובי
ישנם סוגים רבים של מקודדים סיבוביים בשוק המעצב יכול לבחור אחד על פי היישום שלו. הסוגים הנפוצים ביותר מפורטים להלן
- מקודד מצטבר
- מקודד מוחלט
- מקודד מגנטי
- מקודד אופטי
- מקודד לייזר
מקודדים אלה מסווגים על פי אות הפלט וטכנולוגיית החישה, המקודד המצטבר והמקודדים המוחלטים מסווגים על פי אות הפלט והמקודד המגנטי, האופטי והלייזר מסווגים על בסיס טכנולוגיית חישה. Encoder המשמש כאן הוא סוג מקודד מצטבר.
KY-040 מקודד סיבובי Pinout ותיאור
הפינים של המקודד הסיבובי מסוג KY-040 מוצגים להלן
שני הפינים הראשונים (קרקע ו- Vcc) משמשים להפעלת המקודד, בדרך כלל משתמשים באספקת 5 וולט. מלבד סיבוב הכפתור בכיוון השעון ולא נגד כיוון השעון, לקודן יש גם מתג (פעיל נמוך) שניתן ללחוץ עליו על ידי לחיצה על הכפתור פנימה. האות ממתג זה מתקבל דרך סיכה 3 (מתג). לבסוף יש לו שני סיכות פלט המייצרות את צורות הגל כפי שכבר דובר לעיל. עכשיו בואו ללמוד כיצד לממשק אותו עם Arduino.
תרשים מעגל מקודד סיבובי Arduino
תרשים המעגל השלם עבור ממשק מקודד סיבובי עם Arduino מוצג בתמונה למטה
למקודד הסיבובי יש 5 פינים לפי הסדר המופיע בתווית למעלה. שני הפינים הראשונים הם קרקע ו- Vcc המחובר לקרקע וסיכה + 5V של הארדואינו. המתג של המקודד מחובר לסיכה דיגיטלית D10 והוא נמשך גם גבוה למרות נגד 1k. שני סיכות הפלט מחוברות ל- D9 ו- D8 בהתאמה.
כדי להציג את ערך המשתנה שיוגדל או יופחת על ידי סיבוב המקודד הסיבובי אנו זקוקים למודול תצוגה. זו המשמשת כאן זמינה בדרך כלל תצוגת LCD מספרית 16 * 2 אלפא. חיברנו את התצוגה שתופעל במצב 4 סיביות והפעלנו אותה באמצעות סיכה + 5V של Arduino. פוטנציומטר משמש לכוונון הניגודיות של תצוגת ה- LCD. אם אתה רוצה לדעת יותר על ממשק תצוגת LCD עם Arduino, לחץ על הקישור. ניתן לבנות את המעגל השלם על גבי לוח לחם, אני נראה משהו כזה למטה ברגע שכל החיבורים נעשו.
תכנות את Arduino למקודד סיבובי
זה די קל וישר קדימה לתכנת את לוח Arduino לממשק מקודד סיבובי אליו אם הייתם מבינים את עקרון העבודה של מקודד סיבובי. עלינו פשוט לקרוא את מספר הדופק כדי לקבוע כמה סיבובים שעשה המקודד ולבדוק איזו דופק התחיל גבוה כדי למצוא לאיזה כיוון סיבב את המקודד. במדריך זה אנו נציג את המספר המוגדל או יורד בשורה הראשונה של ה- LCD ואת כיוון המקודד בשורה השנייה. תוכנית מלאה עבור עושה את אותו הדבר ניתן למצוא בתחתית הדף הזה עם וידאו הפגנה, היא אינה דורשת כל ספריה. עכשיו, בואו נחלק את התוכנית לגושים קטנים כדי להבין את העבודה.
מכיוון שהשתמשנו בתצוגת LCD, אנו כוללים את ספריית הגבישים הנוזלים אשר כברירת מחדל קיימת ב- Arduino IDE. לאחר מכן אנו מגדירים סיכות לחיבור LCD עם Arduino. לבסוף אנו מאותחלים את תצוגת ה- LCD על הפינים האלה.
#לִכלוֹל
לאחר מכן בתוך פונקציית ההתקנה , אנו מציגים הודעת היכרות על גבי מסך ה- LCD, ואז ממתינים 2 שניות כדי שההודעה תהיה קריאה על ידי המשתמש. זאת על מנת להבטיח כי ה- LCD פועל כהלכה.
lcd.print ("מקודד סיבובי"); // שורת הודעות מבוא 1 lcd.setCursor (0, 1); lcd.print ("עם Arduino"); // עיכוב קו הודעה 2 מבוא (2000); lcd.clear ();
למקודד הסיבובי יש שלוש סיכות פלט שיהוו סיכות INPUT עבור הארדואינו. שלושת הפינים האלה הם המתג, פלט A ופלט B בהתאמה. אלה מוצהרים כקלט באמצעות פונקציית pinMode כמוצג להלן.
// pinMode הצהרת מצב סיכה (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
בתוך פונקציית הגדרת הריק , אנו קוראים את מצב פלט סיכה כדי לבדוק את המצב האחרון של הסיכה. לאחר מכן נשתמש במידע זה כדי להשוות לערך החדש כדי לבדוק איזה סיכה (פלט A או פלט B) הגיע גבוה.
Previous_Output = digitalRead (Encoder_OuputA); // קרא את הערך המוצא של פלט א '
לבסוף בתוך פונקציית הלולאה הראשית, עלינו להשוות את הערך של פלט A ופלט B עם הפלט הקודם כדי לבדוק איזו מהן תחילה גבוהה. ניתן לעשות זאת על ידי פשוט להשוות את ערך התפוקה הנוכחית של A ו- B עם התפוקה הקודמת כפי שמוצג להלן.
אם (digitalRead (Encoder_OuputA)! = פלט הקודם) { if (digitalRead (Encoder_OuputB)! = פלט הקודם) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("בכיוון השעון"); }
בקוד לעיל השני אם התנאי מתבצע אם פלט B השתנה מהפלט הקודם. במקרה זה הערך של משתנה המקודד מוגדל ו- LCD מציג שהמקודד מסובב בכיוון השעון . באופן דומה, אם זה אם התנאי נכשל, במצב אחר הבא אנו מקטינים את המשתנה ומציגים שהמקודד מסובב בכיוון נגד כיוון השעון . הקוד עבור אותו מוצג להלן.
אחרת { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("נגד כיוון השעון"); } }
לבסוף, בסוף הלולאה הראשית עלינו לעדכן את ערך הפלט הקודם בערך הפלט הנוכחי, כך שניתן יהיה לחזור על הלולאה באותו הגיון. הקוד הבא עושה את אותו הדבר
Previous_Output = digitalRead (Encoder_OuputA);
דבר אופציונלי נוסף הוא לבדוק אם מתג המקודד נלחץ. ניתן לפקח על כך על ידי בדיקת סיכת המתג בקודן הסיבובי. סיכה זו היא סיכה פעילה נמוכה, כלומר היא תישאר נמוכה כאשר לוחצים על הכפתור. אם לא נלחץ, הסיכה נשארת גבוהה, השתמשנו גם בנגיעה כלפי מעלה כדי לוודא שהשהיה גבוהה כאשר לא נלחץ על המתג וכך נמנע ממצב של נקודה צפה.
אם (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("מתג לחוץ"); }
עבודה של מקודד סיבובי עם Arduino
לאחר שהחומרה והקוד מוכנים, פשוט העלה את הקוד ללוח Arduino והפעל את לוח Arduino. אתה יכול להפעיל אותו באמצעות כבל ה- USB או להשתמש במתאם 12V. כאשר מופעל על LCD להציג את הודעת המבוא ואז להתרוקן. כעת סובב את המקודד הסיבובי ועליך לראות שהערך מתחיל מצטמצם או מוריד על סמך הכיוון שאתה מסתובב. השורה השנייה תראה לך אם מקודד מסתובב בכיוון השעון או נגד כיוון השעון. התמונה למטה מראה את אותו הדבר
גם כאשר לוחצים על הכפתור, השורה השנייה תציג את לחיצה על הכפתור. את העבודה המלאה תוכלו למצוא בסרטון למטה. זו רק תוכנית לדוגמא כדי לממש את המקודד עם Arduino ולבדוק אם זה עובד כצפוי. ברגע שתגיע לכאן אתה אמור להיות מסוגל להשתמש בקודן לכל אחד מהפרויקטים שלך ולתכנת בהתאם.
מקווה שהבנת את ההדרכה והדברים עבדו כפי שהם אמורים. אם יש לך בעיות השתמש בסעיף ההערות או בפורומים לקבלת עזרה טכנית.