آردوینو آموزش آردوینو مدارهای الکترونیک پروژه های آردوینو

آموزش Debouncing یا نویزگیری کلید آردوینو بخش اول

آموزش Debouncing یا نویزگیری در Arduino
نوشته شده توسط علیرضا قربانی

به نام خدا. در این مطلب از آموزش Arduino قصد آموزش Debouncing یا نویزگیری کلید آردوینو بخش اول و کیپد‌ها را داریم. در ادامه آموزش با مرجع  تخصصی آردوینو ، دیجی‌اسپارک همراه باشید.

برای اتصال کلید‌ها در ساده‌ترین حالت اگر تعداد کلیدها کم باشد، این امکان وجود دارد که تعداد محدودی کلید را مطابق شکل زیر به آردوینو یا میکروکنترلر متصل کنیم، که دراین حالت باید PULL UP داخلی توسط برنامه نویسی فعال شود.

آموزش Debouncing یا نویزگیری کلید

مدار ساده‌ی اتصال دکمه به آردوینو

در مدار بالا اگر کلیدی فشار داده شود مقدار ۰ به ورودی اعمل می‌شود و اگر کلید در حالت آزاد باشد (فشرده نشود )، مقدار ۱ به ورودی اعمال می‌شود. در مواردی که نویز زیاد می‌باشد توصیه می‌شود که ازمقاومت PULL UP خارجی نیز استفاده شود و فقط به PULL UP داخلی اکتفا نکنیم. برای مقاومت PULL UP خارجی می‌توان از مقاومتی بین ۲٫۲ کیلو اهم تا ۴٫۷ کیلو اهم استفاده کرد. همانند شکل زیر:

آموزش Debouncing یا نویگز کیری کلید در Arduino

مدار مقاومت PULL UP خارجی

فرض کنید یک توپ پینگ پونگ را به بالا پرتاب می‌کنیم، هنگامی که توپ از بالا به زمین می‌خورد و دوباره بالا می‌رود و این عملیات (نوسان) بار‌ها و بارها تکرار می‌شود تا اینکه توپ کاملا به زمین بنشیند و به حالت پایدار برسد. کنتاکت‌های مکانیکی ( کلید ) هم رفتاری شبیه این توپ دارند، و با هر بار اشاره با آن‌ها چندین بار عمل قطع و وصل انجام می‌شود و شکل موجی شبیه شکل زیر ایجاد می‌شود:

آموزش Debouncing یا نویزگیری کیپد Arduino

شکل موج نوسانات هنگام فشرده شدن کلید

به علت سرعت زیاد آردوینو  و وجود این نوسانات، ممکن است هنگامی که ورودی کلید را بخوانیم، چندین بار عمل صفر و یک انجام شود و باعث اختلال در برنامه می‌شود. به عملیاتی که باعث حذف نوسانات و نویزها شود اصطلاحا Debouncing می‌گویند. برای عملیات Debouncing می‌توان از روش‌های برنامه‌نویسی یا قطعات سخت افزاری استفاده کرد. که در این بخش قصد آموزش روش برنامه نویسی برای عملیات Debouncing را داریم. شیوه‌ی برنامه نویسی این گونه است که وضعیت ورودی آروینو ( وضعیت دکمه ) را در یک دوره زمانی کوتاه دو بار بررسی می‌کنیم. بدون انجام عمل Debounce یک بار فشردن کلید می‌تواند در کد به صورت چندبار فشردن تشخیص داده شود.

برنامه

در برنامه پین متصل به دکمه را در وضعیت پول آپ قرار داده ایم. با هر بار فشار دادن دکمه وضعیت LED تغییر می‌کند.

const int buttonPin = 8;    // شماره پینی که دکمه به آن متصل است
const int ledPin = 12;      // شماره پینی که ال ای دی به آن متصل است

// متغیر های زیر در طول برنامه تغییر می کنند
int ledState = HIGH;         //وضعیت کنونی ال ای دی قبل از شروع برنامه
int buttonState;            // مقداری که از وردودی آردوینو که به دکمه متصل است در این متغیر ریخته می شود
int lastButtonState = HIGH;   // وضعیت پیشین دکمه


long lastDebounceTime = 0;  // مقدار آخرین زماتی که دکمه تحریک شده است
long debounceDelay = 50;    // مقدار زمان مورد نیاز برای عملیات نویز گیری یا دیبانسینگ

void setup ()
  {
  //مشخص کردن وضعیت ال ای دی و دکمه
  pinMode (buttonPin, INPUT_PULLUP);
  pinMode (ledPin, OUTPUT);

  digitalWrite (ledPin, ledState);
  }

void loop ()
  {
  //مقدار دکمه در متغیر ریخته می شود
  int reading = digitalRead (buttonPin);

  // چک کردن این که آیا دکمه فشار داده شده است
  // هنگام فشرده شدن دکمه ، وضعیت وروودی از ۱ منطقی به صفر منطقی تغییر می کند



  if ( reading != lastButtonState ) {
    // ریست کردن مقدار آخرین زمانی که دکمه تحریک شده است
    lastDebounceTime = millis ();
    }

  if ( (millis () - lastDebounceTime) > debounceDelay ) {
    //زمانی که پس از فشار داده شدن دکمه ۵۰ میلی ثانیه بگذرد وارد این شرط می شود

    // اگر وضعیت دکمه تغییر کرده باشد
    if ( reading != buttonState ) {
      buttonState = reading;

      // وضعیت ال ای دی هنگامی که  کلید به وضعیت صفر منطقی تغییر کرده باشد ، تغییر میکند
      if ( buttonState == LOW ) {
        ledState = !ledState;
        }
      }
    }

  // set the LED:
  digitalWrite (ledPin, ledState);

  // مقدار خوانده شده از دکمه برای تکرار حلقه ذخیره می شود
  lastButtonState = reading;
  }

در بخش بعدی از آموزش به آموزش استفاده از کتابخانه Debounce برای عملیات نویز گیری خواهیم پرداخت. آموزش دی بانسینگ کلید در آردوینو بخش دوم در ادامه ویدیوی این آموزش را ببنید.

 

 

درباره نویسنده

علیرضا قربانی

علیرضا قربانی هستم دانشجوی مهندسی پزشکی. چیزهای خیلی زیادی رو در دنیا دوست دارم. یک گیک هستم و یشه گفت یک هکر. نه به معنی دزدی پسورد و ایمیل مردم. به معنی عشق به دونستن و عشق به تحقیق درباره خیلی از چیزهایی که می بینم و می‌شنوم. اگر بخوام علاقه‌مندی‌ درجه یکم رو نام ببرم میتونم بگم برنامه نویسی و بعد از اون امبدد سیستم ها.

تبادل نظر و رفع عیب با ثبت دیدگاه

۷ دیدگاه