كيفية تصحيح التبديل بشكل صحيح لتجنب المشغلات الخاطئة في Arduino

عند العمل مع مشاريع Arduino التي تنطوي على أزرار أو مفاتيح مادية ، يتعامل مطورو التحدي الشائع مع كذاب التبديل. يمكن أن يؤدي كذاب التبديل إلى مشغلات متعددة غير مقصودة ، مما يسبب سلوكًا غير منتظم في مشاريعك. في منشور المدونة هذا ، سنتعرض لترتيب التبديل ، ولماذا هو مشكلة ، واستكشاف طرق فعالة لتصريح المفاتيح ، وضمان قراءات إدخال موثوقة ودقيقة في تطبيقات Arduino الخاصة بك.

فهم مفتاح الارتداد

يتم استخدام المفاتيح الميكانيكية ، مثل بوتيونات الدفع ، على نطاق واسع في مشاريع Arduino لمدخلات المستخدم. ومع ذلك ، لا تقوم هذه المفاتيح دائمًا بالتواصل بشكل نظيف عند الضغط عليها أو إطلاقها. بدلاً من ذلك ، يميلون إلى "الارتداد" ، وهو يصنع الاتصال بسرعة وكسره عدة مرات قبل الاستقرار. تُعرف هذه الظاهرة باسم كذاب التبديل.

عندما يرتد التبديل ، قد يفسر Arduino على أنه مكابس أو إصدارات سريعة متعددة ، مما يؤدي إلى سلوكيات غير مقصودة مثل وميض LED متعددة ، أو حركات حركية غير منتظمة ، أو قراءات غير منتظمة من أجهزة الاستشعار. Debouncing هي عملية تصفية هذه الإشارات السريعة وغير المقصودة لضمان أن كل إجراء بدني يتوافق مع إشارة إدخال واحدة ونظيفة.

طرق لتبديل التبديل

هناك طريقتان أساسيتان لتبديل Debounce: Debusting Hardware و Software Debusting. كل طريقة لها مزاياها وحالات الاستخدام ، وفي بعض الأحيان يتم دمجها حتى للحصول على النتائج المثلى.

1. الأجهزة debusting

يتضمن Debusting Hardware استخدام المكونات المادية لتحقيق الاستقرار في إشارة التبديل. تستخدم أساليب الأجهزة الأكثر شيوعًا المقاومات أو المكثفات أو ICS المتخصصة.

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. البرمجيات debusting

يتم التعامل مع البرمجيات في رمز 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;
}

في هذا الرمز:

  • يقرأ البرنامج الوضع الحالي للزر.
  • إذا تغيرت الدولة من القراءة الأخيرة ، فإنها تعيد ضبط مؤقت Debonce.
  • فقط إذا بقيت الدولة متسقة لفترة أطول من تأخير Debounce (50 ميلي ثانية في هذه الحالة) ، فإن البرنامج يقبل الدولة الجديدة على أنها صالحة وتصرف عليها.

3. استخدام المكتبات للتراجع

لمشاريع أكثر تعقيدًا أو لتبسيط التصحيح ، يمكنك استخدام مكتبات مخصصة مثل ترتد مكتبة. تعالج المكتبات منطق 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 ، مما يجعل منظف الرمز الخاص بك وأكثر قابلية للصيانة.

اختيار طريقة التعبير الصحيحة

يعتمد الاختيار بين الأجهزة والبرمجيات على احتياجاتك وقيودك المحددة:

  • تصوير الأجهزة: مثالي للمشاريع التي تريد تقليلها إلى الحد الأدنى من البرامج أو عند العمل مع مفاتيح متعددة. إنه يضمن أن تكون الإشارات نظيفة قبل وصولها إلى متحكم.
  • برمجيات التصوير: أكثر مرونة وفعالة من حيث التكلفة ، خاصة بالنسبة للمشاريع البسيطة مع بعض الأزرار. يتيح لك ضبط توقيت Debounce بسهولة من خلال الكود.
  • Debusting المستندة إلى المكتبة: من الأفضل للمشاريع المعقدة أو عندما تريد توفير الوقت وتجنب إعادة اختراع العجلة. تقدم المكتبات حلول Debounce قوية واختبارها.

أفضل الممارسات لمفاتيح التعبير

  • استخدم المقاومات السحب أو المنسدلة: تأكد من أن مدخلات الزر الخاصة بك في حالة معروفة باستخدام المقاومات السحب أو المنسدلة. هذا يمنع المدخلات العائمة ، وتقليل الضوضاء والمشغلات الخاطئة.
  • التوقيت المتسق لتوقيت: سواء أكان استخدام الأجهزة أو البرمجيات ، حافظ على فترات Debounce متسقة لضمان أداء موثوق به عبر أزرار وشروط مختلفة.
  • الجمع بين الأساليب إذا لزم الأمر: بالنسبة للتطبيقات الحساسة للغاية ، فكر في الجمع بين كل من الأجهزة والبرامج التي تحددها لتحقيق أعلى الموثوقية.

خاتمة

تعتبر مفاتيح Debouncing Switches خطوة حاسمة في تطوير مشاريع Arduino الموثوقة التي تتضمن مدخلات المستخدم. سواء كنت تختار حلول الأجهزة أو خوارزميات البرامج أو الاستفادة من المكتبات الحالية ، فإن تنفيذ آليات Debounce الفعالة سيوفر لك من إحباط التعامل مع المشغلات الخاطئة والسلوكيات الخاطئة. من خلال فهم مبادئ كذاب التبديل وتطبيق تقنيات التصديات المناسبة ، يمكنك تعزيز أداء وموثوقية إبداعات 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.