תוכן עניינים:
- שלב 1: מקודדים רוטרי בפנים
- שלב 2: אומללות שגורמת לרבים כאב אמיתי
- שלב 3: פתרון מכונת מדינה סופית (FSM)
- שלב 4: קוד ארדואינו
- שלב 5: אינטגרציה ללא רבב
וִידֵאוֹ: פתרון שלם סיבובי Arduino: 5 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
מקודדים רוטרי הם ידיות בקרה ניתנות לסיבוב לפרויקטים אלקטרוניים, המשמשות לעתים קרובות עם בקרי מיקרו משפחת Arduino. ניתן להשתמש בהם כדי לכוונן פרמטרים, לנווט בתפריטים, להזיז אובייקטים על המסך, לקבוע ערכים מכל סוג שהוא. הם תחליפים נפוצים לפוטנציומטרים, מכיוון שניתן לסובב אותם בצורה מדויקת יותר ואינסופית, הם מעלים או מורידים ערך נפרד אחד בכל פעם, ולעתים קרובות משולבים עם מתג הניתן לדחיפה עבור פונקציות מסוג בחירה. הם מגיעים בכל הצורות והגדלים, אך קשה להתממשק לטווח המחירים הנמוך ביותר כפי שמוסבר להלן.
ישנם אינספור מאמרים אודות פרטי העבודה ומצבי השימוש של מקודדים רוטרי, וקודי דוגמה וספריות רבות על אופן השימוש בהם. הבעיה היחידה היא שאף אחד מהם לא עובד במדויק ב -100% עם טווח המחירים הנמוך ביותר של מודולים סיבוביים סיניים.
שלב 1: מקודדים רוטרי בפנים
החלק הסיבובי של המקודד כולל שלושה סיכות (ועוד שניים לחלק המתג האופציונלי). האחד הוא נקודה משותפת (GND שחור), השניים האחרים נועדו לקביעת כיוון כאשר הכפתור מסתובב (הם נקראים לעתים קרובות CLK כחול ו- DT אדום). שני אלה מחוברים לסיכת קלט PULLUP של המיקרו -בקר, מה שהופך את הרמה HIGH לקריאת ברירת המחדל שלהם. כאשר הכפתור מופנה קדימה (או עם כיוון השעון), תחילה CLK הכחול יורד לרמה נמוכה, ואז DT אדום עוקב. אם מתקדמים הלאה, CLK הכחול עולה בחזרה ל- HIGH, ואז כאשר תיקון ה- GND הנפוץ עוזב את שני סיכות החיבור, ה- DT האדום עולה גם הוא ל- HIGH. ובכך משלימים סימן FWD מלא אחד (או עם כיוון השעון). כך גם בכיוון BWD השני (או נגד כיוון השעון), אך כעת אדום נופל ראשון, וכחול עולה אחורה אחורה כפי שמוצג בשתי התמונות ברמה בהתאמה.
שלב 2: אומללות שגורמת לרבים כאב אמיתי
בעיה נפוצה עבור חובבי Arduino, שמודולי מקודד רוטרי זולים מקפיצים שינויים נוספים ברמות הפלט, וגורמים לקריאות ספירת כיוונים נוספות וטעות. זה מונע ספירה ללא רבב ואינו מאפשר לשלב מודולים אלה בפרויקטים סיבוביים מדויקים. הקפצות נוספות אלה נגרמות כתוצאה מהתנועות המכניות של הטלאים מעל סיכות החיבור, ואפילו החלת קבלים נוספים לא יכולה לחסל אותן לחלוטין. הקפצות יכולות להופיע בכל מקום במחזורי הקרציות המלאים, ומודגמות על ידי תרחישי חיים אמיתיים בתמונות.
שלב 3: פתרון מכונת מדינה סופית (FSM)
התמונה מציגה את מרחב המצב המלא של שינויי הרמה האפשריים עבור שני הסיכות (כחול CLK ואדום DT), הן עבור הקפצות נכונות ושקריות. בהתבסס על מכשיר מצב זה ניתן לתכנת פתרון מלא שתמיד עובד במדויק במאת האחוזים. מכיוון שאין צורך בעיכובי סינון בפתרון זה, הוא גם המהיר ביותר האפשרי. יתרון נוסף בהפרדת שטח המצב של הסיכות ממצב העבודה הוא שאפשר ליישם מצבי סקר או להפריע כרצונו. סקרים או הפרעות יכולים לזהות שינויי רמות בסיכות ושגרה נפרדת תחשב את המצב החדש על סמך המצב הנוכחי ואירועים בפועל של שינויי רמות.
שלב 4: קוד ארדואינו
הקוד שלהלן סופר את קרציות FWD ו- BWD על הצג הטורי ומשלב גם את פונקציית המתג האופציונלית.
// פיטר צ'סורגיי 2019-04-10
// סיכות של המיפוי הרוטרי ליציאות Arduino
#הגדר SW 21 #הגדר CLK 22 #הגדר DT 23
// הערך הנוכחי והקודם של המונה מכוונן על ידי הסיבוב
int curVal = 0; int prevVal = 0;
// שבע מצבים של FSM (מכונת מצב סופית)
#הגדר IDLE_11 0 #הגדר SCLK_01 1 #הגדר SCLK_00 2 #הגדר SCLK_10 3 #הגדר SDT_10 4 #הגדר SDT_00 5 #הגדר SDT_01 6 int state = IDLE_11;
הגדרת בטל () {
Serial.begin (250000); Serial.println ("התחל …"); // רמה גבוהה תהיה ברירת המחדל עבור כל הסיכות pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // הן CLK והן DT יפעילו הפרעות לכל שינויי הרמה attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
לולאת חלל () {
// טיפול במתג האופציונלי המשולב בכמה מקודדים סיבוביים אם (digitalRead (SW) == LOW) {Serial.println ("לחץ"); בעוד (! digitalRead (SW)); } // כל שינוי בערך הנגדי מוצג ב- Serial Monitor אם (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// מעברי מכונת מדינה לשינויים ברמת CLK
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; אחרת אם (מצב == SCLK_10) מצב = SCLK_00; אחרת אם (מצב == SDT_10) מצב = SDT_00; } אחר {if (state == SCLK_01) state = IDLE_11; אחרת אם (מצב == SCLK_00) מצב = SCLK_10; אחרת אם (מצב == SDT_00) מצב = SDT_10; אחרת אם (state == SDT_01) {state = IDLE_11; curVal--; }}}
// מעברי מכונת מדינה לשינויים ברמת DT
void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; אחרת אם (מצב == SDT_01) מצב = SDT_00; אחרת אם (מצב == SCLK_01) מצב = SCLK_00; } אחר {if (state == SDT_10) state = IDLE_11; אחרת אם (מצב == SDT_00) מצב = SDT_01; אחרת אם (מצב == SCLK_00) מצב = SCLK_01; אחרת אם (state == SCLK_10) {state = IDLE_11; curVal ++; }}}
שלב 5: אינטגרציה ללא רבב
אתה יכול לבדוק בסרטון המצורף שפתרון FSM עובד בצורה מדויקת ומהירה גם במקרה של מקודדים סיבוביים לטווח נמוך עם אפקטים של הקפצה ספורדית.
מוּמלָץ:
למידה עצמית רובוט סרטן מבוך פרוטוטייפ 1 סטטוס שלם: 11 שלבים
למידה עצמית רובוט סרטן מבוך פרוטוטייפ 1 סטטוס לא שלם: כתב ויתור !!: היי, אני מתנצל על התמונות העלובות, אוסיף הוראות ותרשימים נוספים בהמשך (ופרטים יותר ספציפיים. לא תיעדתי את התהליך (במקום זה פשוט עשיתי סרטון זמן לשגות). גם ההנחיה הזו לא שלמה, כפי שעשיתי
שיר גשום (לא שלם): 10 שלבים
שיר גשום (לא שלם): היינו מעוניינים לקבל תגובה חיובית על ידי התמקדות רבה יותר בצליל בסביבה שבה אנשים יורדים גשם באותו צליל. עם זאת, לא יורד גשם בכל פעם שאתה רוצה להבטיח שאתה מרוכז. לכן, המטרה היא תשלום
מדפסת תלת מימד תהליך שלם שלם: 31 שלבים
מדפסת תלת מימד תהליך מלא של DIY: מאמר זה יגיד לך כיצד לעשות מדפסת תלת מימד , אתה לא יכול לפספס את זה, אז אנא קרא אותו בעיון
לוחות מעגלים מודפסים - תהליך שלם: 14 שלבים (עם תמונות)
לוחות מודפסים - תהליך שלם: להלן מתואר התהליך שבו אני יוצר מעגלים למחשב אישי לשימוש חד פעמי ואב טיפוס. הוא כתוב לאדם שיצר לוחות משלו בעבר ומכיר את התהליך הכללי. ייתכן שכל הצעדים שלי אינם פועלים
תפריט Arduino ב- Nokia 5110 Lcd באמצעות מקודד סיבובי: 6 שלבים (עם תמונות)
תפריט Arduino ב- Nokia 5110 Lcd באמצעות מקודד רוטרי: חברים יקרים ברוכים הבאים להדרכה נוספת! בסרטון זה אנו הולכים ללמוד כיצד לבנות את התפריט שלנו לתצוגת LCD 5110 הפופולרית, על מנת להפוך את הפרויקטים שלנו לידידותיים יותר ויכולים יותר. בואו נתחיל! זהו הפרויקט