วิธีการสลับ debounce อย่างถูกต้องเพื่อหลีกเลี่ยงทริกเกอร์เท็จใน Arduino

เมื่อทำงานกับโครงการ Arduino ที่เกี่ยวข้องกับปุ่มหรือสวิตช์ทางกายภาพผู้พัฒนาความท้าทายทั่วไปหนึ่งคนต้องเผชิญกับสวิตช์ตีกลับ การสลับการตีกลับอาจนำไปสู่ทริกเกอร์ที่ไม่ได้ตั้งใจหลายครั้งทำให้เกิดพฤติกรรมที่ไม่แน่นอนในโครงการของคุณ ในโพสต์บล็อกนี้เราจะเจาะลึกว่าสวิตช์ตีกลับคืออะไรทำไมมันถึงมีปัญหาและสำรวจวิธีการที่มีประสิทธิภาพในการสลับการเดบิวต์ทำให้มั่นใจได้ว่าการอ่านอินพุตที่เชื่อถือได้และแม่นยำในแอปพลิเคชัน Arduino ของคุณ

ทำความเข้าใจสวิตช์ตีกลับ

สวิตช์เชิงกลเช่นปุ่มกดใช้กันอย่างแพร่หลายในโครงการ Arduino สำหรับอินพุตของผู้ใช้ อย่างไรก็ตามสวิตช์เหล่านี้ไม่ได้ทำและทำลายการติดต่ออย่างหมดจดเมื่อกดหรือปล่อยออกมา แต่พวกเขามักจะ "ตีกลับ" อย่างรวดเร็วและทำลายการเชื่อมต่อหลายครั้งก่อนที่จะตกตะกอน ปรากฏการณ์นี้เรียกว่าสวิตช์ตีกลับ

เมื่อสวิตช์ตีกลับ Arduino อาจตีความได้ว่าเป็นการกดอย่างรวดเร็วหรือการเผยแพร่หลายครั้งซึ่งนำไปสู่พฤติกรรมที่ไม่ได้ตั้งใจเช่นแฟลช LED หลายตัวการเคลื่อนไหวของมอเตอร์ที่ไม่แน่นอนหรือการอ่านที่ไม่แน่นอนจากเซ็นเซอร์ Debouncing เป็นกระบวนการของการกรองสัญญาณที่รวดเร็วและไม่ได้ตั้งใจเหล่านี้เพื่อให้แน่ใจว่าการกระทำทางกายภาพแต่ละครั้งสอดคล้องกับสัญญาณอินพุตที่สะอาด

วิธีการสวิตช์ debounce

มีสองวิธีหลักในการสลับ debounce: การ debouncing ฮาร์ดแวร์และซอฟต์แวร์ debouncing แต่ละวิธีมีข้อดีและกรณีการใช้งานและบางครั้งก็รวมกันเพื่อผลลัพธ์ที่ดีที่สุด

1. ฮาร์ดแวร์ debouncing

ฮาร์ดแวร์ debouncing เกี่ยวข้องกับการใช้ส่วนประกอบทางกายภาพเพื่อทำให้สัญญาณสวิตช์เสถียร วิธีการฮาร์ดแวร์ที่พบมากที่สุดใช้ตัวต้านทานตัวเก็บประจุหรือ ICS debounce พิเศษ

RC (ตัวต้านทานตัวกระตุ้น) debouncing

วงจร 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. ซอฟต์แวร์ debouncing

การ debouncing ซอฟต์แวร์ได้รับการจัดการในรหัส Arduino ของคุณโดยใช้ตรรกะที่กรองการเปลี่ยนแปลงอย่างรวดเร็วของสัญญาณที่เกิดจากการตีกลับ วิธีนี้มีความยืดหยุ่นและไม่ต้องการส่วนประกอบฮาร์ดแวร์เพิ่มเติม

ตัวอย่างของซอฟต์แวร์ debouncing

นี่คือตัวอย่างง่ายๆของวิธีการใช้งานซอฟต์แวร์ debouncing ใน 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;
}

ในรหัสนี้:

  • โปรแกรมอ่านสถานะปัจจุบันของปุ่ม
  • หากรัฐเปลี่ยนไปจากการอ่านครั้งล่าสุดมันจะรีเซ็ตตัวจับเวลา debounce
  • เฉพาะในกรณีที่รัฐยังคงสอดคล้องกันนานกว่าความล่าช้า debounce (50 มิลลิวินาทีในกรณีนี้) โปรแกรมจะยอมรับรัฐใหม่ว่าถูกต้องและดำเนินการกับมัน

3. การใช้ไลบรารีสำหรับ debouncing

สำหรับโครงการที่ซับซ้อนมากขึ้นหรือเพื่อลดความซับซ้อนของ debouncing คุณสามารถใช้ห้องสมุดเฉพาะเช่น การตีกลับ ห้องสมุด. ห้องสมุดจัดการตรรกะ debounce ช่วยให้คุณมุ่งเน้นไปที่ด้านอื่น ๆ ของโครงการของคุณ

ตัวอย่างการใช้ไลบรารีตีกลับ

ก่อนอื่นให้ติดตั้งไลบรารีตีกลับผ่านตัวจัดการห้องสมุด Arduino จากนั้นใช้รหัสต่อไปนี้:


#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
  }
}

วิธีการนี้ทำให้ตรรกะ debounce ง่ายขึ้นทำให้การทำความสะอาดรหัสของคุณและบำรุงรักษาได้มากขึ้น

การเลือกวิธีการ debouncing ที่ถูกต้อง

ตัวเลือกระหว่างฮาร์ดแวร์และซอฟต์แวร์ debouncing ขึ้นอยู่กับความต้องการและข้อ จำกัด เฉพาะของคุณ:

  • ฮาร์ดแวร์ debouncing: เหมาะสำหรับโครงการที่คุณต้องการลดค่าใช้จ่ายซอฟต์แวร์หรือเมื่อทำงานกับสวิตช์หลายตัว ช่วยให้มั่นใจได้ว่าสัญญาณนั้นสะอาดก่อนที่จะไปถึงไมโครคอนโทรลเลอร์
  • ซอฟต์แวร์ debouncing: มีความยืดหยุ่นและคุ้มค่ามากขึ้นโดยเฉพาะอย่างยิ่งสำหรับโครงการง่าย ๆ ที่มีปุ่มไม่กี่ปุ่ม ช่วยให้คุณสามารถปรับเวลา debounce ได้อย่างง่ายดายผ่านรหัส
  • Debouncing ตามห้องสมุด: ดีที่สุดสำหรับโครงการที่ซับซ้อนหรือเมื่อคุณต้องการประหยัดเวลาและหลีกเลี่ยงการสร้างวงล้อใหม่ ห้องสมุดนำเสนอโซลูชันการทัศนศึกษาที่แข็งแกร่งและทดสอบ

แนวทางปฏิบัติที่ดีที่สุดสำหรับสวิตช์ debouncing

  • ใช้ตัวต้านทานแบบดึงขึ้นหรือดึงลง: ตรวจสอบให้แน่ใจว่าอินพุตปุ่มของคุณอยู่ในสถานะที่รู้จักโดยใช้ตัวต้านทานแบบดึงขึ้นหรือแบบดึงลง สิ่งนี้จะช่วยป้องกันอินพุตลอยลดเสียงรบกวนและทริกเกอร์เท็จ
  • เวลา debounce ที่สอดคล้องกัน: ไม่ว่าจะใช้ฮาร์ดแวร์หรือซอฟต์แวร์ debouncing รักษาช่วงเวลาการ debounce ที่สอดคล้องกันเพื่อให้แน่ใจว่าประสิทธิภาพที่เชื่อถือได้ในปุ่มและเงื่อนไขที่แตกต่างกัน
  • รวมวิธีการหากจำเป็น: สำหรับแอพพลิเคชั่นที่มีความอ่อนไหวสูงให้พิจารณาการรวมทั้งฮาร์ดแวร์และซอฟต์แวร์ debouncing เพื่อให้ได้ความน่าเชื่อถือสูงสุด

บทสรุป

สวิตช์ Debouncing เป็นขั้นตอนสำคัญในการพัฒนาโครงการ Arduino ที่เชื่อถือได้ซึ่งเกี่ยวข้องกับอินพุตของผู้ใช้ ไม่ว่าคุณจะเลือกโซลูชันฮาร์ดแวร์อัลกอริทึมซอฟต์แวร์หรือการใช้ประโยชน์จากห้องสมุดที่มีอยู่การใช้กลไกการ debounce ที่มีประสิทธิภาพจะช่วยให้คุณประหยัดจากความคับข้องใจในการจัดการกับทริกเกอร์เท็จและพฤติกรรมที่ผิดปกติ โดยการทำความเข้าใจหลักการของการสลับการตีกลับและใช้เทคนิคการ debouncing ที่เหมาะสมคุณสามารถเพิ่มประสิทธิภาพและความน่าเชื่อถือของการสร้างสรรค์ Arduino ของคุณ

แสดงความคิดเห็น

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.