כאשר עובדים עם פרויקטים של ארדואינו הכרוכים בכפתורים או מתגים פיזיים, מפתחי אתגר אחד נפוצים מתמודדים מתמודדים עם קפיצות מתג. מתג קפץ יכול להוביל למספר טריגרים לא מכוונים, ולגרום להתנהגות לא תקינה בפרויקטים שלך. בפוסט בבלוג זה, נתעמק מה הקפיצה של Switch, מדוע זה בעייתי ונחקור שיטות אפקטיביות כדי לחבר מתגים, להבטיח קריאות קלט אמינות ומדויקות ביישומי Arduino שלך.
הבנת מתג הקפצה
מתגים מכניים, כגון כפתורי כפתור, נמצאים בשימוש נרחב בפרויקטים של ארדואינו לתשומות משתמשים. עם זאת, מתגים אלה לא תמיד מייצרים ושוברים קשר באופן נקי כאשר הם נלחצים או שוחררים. במקום זאת, הם נוטים "להקפיץ", תוך שהם מייצרים ולשבור את הקשר במהירות מספר פעמים לפני שהם מתמקמים. תופעה זו ידועה בשם מתג מקפץ.
כאשר מתג מקפץ, הארדואינו עשוי לפרש אותו ככמה מהיר או משחררים מהיר, מה שמוביל להתנהגויות לא מכוונות כמו הבזקי LED מרובים, תנועות מנוע לא שגרתיות או קריאות לא שגרתיות מחיישנים. Debouning הוא תהליך סינון האותות המהירים והלא מכוונים הללו כדי להבטיח שכל פעולה פיזית תואמת אות קלט יחיד ונקי.
שיטות למתגי מתגים
ישנן שתי שיטות עיקריות לניתוק מתגים: חומרי חומרה והפסקת תוכנה. לכל שיטה היתרונות שלה ומקרי השימוש שלה, ולפעמים הם אפילו משולבים לתוצאות מיטביות.
1. חומרה חומרת
חומרי חומרה חומרה כוללת שימוש ברכיבים פיזיים כדי לייצב את אות המתג. גישות החומרה הנפוצות ביותר משתמשות בנגדים, קבלים או ICS DebUnce מתמחים.
RC (Capator-Capacitor) Debouning
מעגל RC יכול להחליק את המעברים המהירים הנגרמים כתוצאה מקפיץ מתגים. כך תוכלו להגדיר את זה:
/* RC Debounce Circuit */
const int buttonPin = 2; // Button connected to digital pin 2
const int ledPin = 13; // LED connected to digital pin 13
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
בהגדרה זו, נגדי וקבל מחוברים בסדרה עם הכפתור. כאשר לוחצים על הכפתור, הקבל מטען, מחליק את המתח ומונע תנודות מהירות העלולות לגרום למפעילים שווא.
2. תוכנה מתבצעת
Software Debouning מטופל בקוד Arduino שלך על ידי יישום היגיון המסנן את השינויים המהירים באות הנגרם כתוצאה מקפיץ מתגים. שיטה זו גמישה ואינה דורשת רכיבי חומרה נוספים.
דוגמה לתוכנה
להלן דוגמה פשוטה כיצד ליישם תוכנה המתפתלת ב- Arduino:
const int buttonPin = 2; // Button connected to digital pin 2
const int ledPin = 13; // LED connected to digital pin 13
int buttonState; // Current state of the button
int lastButtonState = LOW; // Previous state of the button
unsigned long lastDebounceTime = 0; // Last time the button state changed
unsigned long debounceDelay = 50; // Debounce time in milliseconds
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
digitalWrite(ledPin, !digitalRead(ledPin));
}
}
}
lastButtonState = reading;
}
בקוד זה:
- התוכנית קוראת את המצב הנוכחי של הכפתור.
- אם המדינה השתנתה מהקריאה האחרונה, היא מאפסת את טיימר DebUnce.
- רק אם המדינה נותרה עקבית במשך זמן רב יותר מאשר עיכוב DebUnce (50 אלפיות השנייה במקרה זה) האם התוכנית מקבלת את המדינה החדשה כתוקף ופעולה עליה.
3. שימוש בספריות לצמצום
לקבלת פרויקטים מורכבים יותר או לפשט את Debouning, אתה יכול להשתמש בספריות ייעודיות כמו לִקְפּוֹץ סִפְרִיָה. ספריות מטפלות בהיגיון DebUnce, ומאפשרות לך להתמקד בהיבטים אחרים של הפרויקט שלך.
דוגמה באמצעות ספריית Bounce
ראשית, התקן את ספריית Bounce באמצעות מנהל הספרייה של ארדואינו. לאחר מכן, השתמש בקוד הבא:
#include
const int buttonPin = 2;
const int ledPin = 13;
Bounce debouncer = Bounce();
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
debouncer.attach(buttonPin);
debouncer.interval(25); // Debounce interval in milliseconds
}
void loop() {
debouncer.update();
if (debouncer.fell()) { // When button is pressed
digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
}
}
גישה זו מפשטת את ההיגיון של DebUnce, מה שהופך את הקוד שלך לנקי יותר וניתן לתחזוקה יותר.
בחירת שיטת ההדבקה הנכונה
הבחירה בין חומרה לבין תוכנה של Debounting תלויה בצרכים ובאילוצים הספציפיים שלך:
- חומרי חומרה: אידיאלי לפרויקטים שבהם ברצונך למזער את התקורה של תוכנה או כשאתה עובד עם מתגים מרובים. זה מבטיח שהאותות יהיו נקיים לפני שהם מגיעים לבקר המיקרו.
- תוכנת Debounting: גמישים וחסכוניים יותר, במיוחד לפרויקטים פשוטים עם כמה כפתורים. זה מאפשר לך להתאים את תזמון ה- DebUnce בקלות באמצעות קוד.
- Debouning מבוסס ספריה: הכי טוב לפרויקטים מורכבים או כאשר ברצונך לחסוך זמן ולהימנע מהמציאת הגלגל מחדש. הספריות מציעות פתרונות DebUnce חזקים ונבדקים.
שיטות עבודה מומלצות למתגי Debounting
- השתמש בנגדים משיכה או נשלפים: ודא שתשומות הכפתור שלך נמצאות במצב ידוע על ידי שימוש בנגדים משיכה או נשלפים. זה מונע תשומות צפות, הפחתת רעש ומפעילים שווא.
- תזמון DebUnce עקבי: בין אם משתמשים בחומרה או בתוכנה, שמור על מרווחי DebUnce עקביים כדי להבטיח ביצועים אמינים על פני כפתורים ותנאים שונים.
- שלב שיטות במידת הצורך: עבור יישומים רגישים ביותר, שקול לשלב הן חומרה ותוכנה המפגינה כדי להשיג את האמינות הגבוהה ביותר.
מַסְקָנָה
מתגי Debouning הוא צעד מכריע בפיתוח פרויקטים אמינים של Arduino המערבים תשומות משתמשים. בין אם תבחרו בפתרונות חומרה, אלגוריתמי תוכנה או מנוף ספריות קיימות, יישום מנגנוני DebUnce יעילים יחסוך לכם מהתסכול של התמודדות עם טריגרים שווא והתנהגויות לא שגרתיות. על ידי הבנת העקרונות של מתג הקפצה ויישום טכניקות ההתייחסות המתאימות, אתה יכול לשפר את הביצועים והאמינות של יצירות ארדואינו שלך.