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

מקודד רוטרי - להבין ולהשתמש בו (Arduino/בקר אחר): 3 שלבים
מקודד רוטרי - להבין ולהשתמש בו (Arduino/בקר אחר): 3 שלבים

וִידֵאוֹ: מקודד רוטרי - להבין ולהשתמש בו (Arduino/בקר אחר): 3 שלבים

וִידֵאוֹ: מקודד רוטרי - להבין ולהשתמש בו (Arduino/בקר אחר): 3 שלבים
וִידֵאוֹ: מיחזור מקודד רוטרי של גלגל גלילה של עכבר ובדיקתו עם Arduino Nano 2024, נוֹבֶמבֶּר
Anonim
מקודד רוטרי - להבין ולהשתמש בו (Arduino/בקר אחר)
מקודד רוטרי - להבין ולהשתמש בו (Arduino/בקר אחר)

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

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

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

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

שלב 1: הבנת נתוני הפלט

הבנת נתוני הפלט
הבנת נתוני הפלט

כפי שאתה יכול לראות כאשר צפן המקודד מתחיל להסתובב עם כיוון השעון, פלט A יורד תחילה ל- LOW ויציאה B עוקבת אחריו. בכיוון השעון הפעולה מסתובבת הפוכה.

עכשיו רק נצטרך ליישם זאת על בקר ה- µController שלנו (השתמשתי ב- Arduino Nano).

שלב 2: בנה את המעגל

בנה את המעגל
בנה את המעגל
בנה את המעגל
בנה את המעגל

כפי שתיארתי לפני הפלט יוצרים צלעות גבוהות ונמוכות. כדי לקבל HIGH נקי בסיכת הנתונים A ו- B של הבקר µ עלינו להוסיף נגדי משיכה. סיכה C הנפוצה הולכת ישר לקרקע עבור האגף הנמוך.

כדי לקבל מידע על המתג הפנימי (כפתור לחיצה) נשתמש בשני הפינים האחרים. אחד מהם עובר ל- VCC והשני לסיכת נתונים של בקר ה- µC. עלינו להוסיף הנגד נפתח לסיכת הנתונים כדי לקבל LOW נקי.

כמו כן, ניתן להשתמש בנגדים פנימיים של Pull-Up ו- Pull-Down של בקר ה- µ שלך!

במקרה שלי ה- pinout נראה כך:

  • +3, 3V => +3, 3V (Arduino) (אפשר גם +5V)
  • GND => GND (Arduino)
  • A => Pin10
  • ב =>

    פִּין

    11

  • C => GND
  • SW =>

    פִּין

    12

שלב 3: כתיבת הקוד

int pinA = 10; // מתג פנימי A pin pinB = 11; // מתג פנימי B int pinSW = 12; // switch (מקודד לחוץ) int encoderPosCount = 0; // מתחיל מאפס, שנה אם אתה רוצה

int positionval;

bool switchval; int mrotateLast; int mrotate;

הגדרת בטל () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); עיכוב (50); }

לולאת חלל () {readencoder (); if (readwitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); אם (mrotate! = mrotateLast) {// הכפתור מסתובב אם (digitalRead (pinB)! = mrotate) {// מתג A השתנה תחילה -> מסתובב עם השעון encoderPosCount ++; Serial.println ("הסתובב עם כיוון השעון"); } אחר {// מתג B שונה תחילה-> מסתובב מקודד נגד כיוון השעון PosCount--; Serial.println ("הסתובב נגד כיוון השעון"); }

Serial.print ("מיקום מקודד:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; return encoderPosCount; } bool readwitch () {

אם נלחץ על מתג (digitalRead (pinSW)! = 0) {//

בעוד (digitalRead (pinSW)! = 0) {} // מתג נלחץ כרגע switchval = 1; } אחר {switchval = 0;} // מתג הוא switchval return ללא לחץ; }

עכשיו אתה יכול לסובב את המקודד והמשתנה encoderPosCount יספור אם תסובב עם כיוון השעון ותספור לאחור אם תסובב נגד כיוון השעון.

זהו זה! פשוט ושימושי.

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

אני אעלה גם פרויקט LED שבו השתמשתי במקודד כדי להגדיר את בהירות הלדים שלי.

מוּמלָץ: