نحوه استفاده از پین های لمسی ESP32

نحوه استفاده از پین های لمسی ESP32

استفاده از پین های لمسی ESP32٬ که یک برد توسعه عالی برای پروژه‌های هوشمند اینترنت اشیا (IoT) است این امکان را به شما خواهد داد تا با اضافه کردن قابلیت لمسی به مدارات خود را هوشمندتر کنید٬ چرا که ماژول ESP32  شامل 10 پین GPIO  لمسی خازنی است و شما می‌توانید از این پین‌ها برای ارتقاء پروژه‌هایی که یک کلید ساده مکانیکی بر روی آن ها تعبیه شده استفاده کنید.


شاید این نکته برای شما مهم باشد که ما دراین پروژه از کدام مدل ماژول برد ESP32 در حل مثال خود استفاده خواهیم نمود٬ لذا لازم به بیان است برد درنظر گرفته شده٬ ماژول ESP-WROOM-32 دارای وای فای و بلوتوث 30 پایه با مبدل CP2102 می باشد و شما می توانید با توجه به امکانات موردنیاز پروژه های خود و بررسی دیتاشیت این محصول اقدام به خرید و به کارگیری آن نمایید.


ESP32 چگونه لمس یک انگشت را تشخیص می دهد؟

پیش از راه اندازی پین های Touch یک ماژول ESP32 بهتر است نحوه تشخیص لمس یک انگشت در این ماژول را بدانید. این قطعه از خواص الکتریکی موجود در بدن انسان به عنوان ورودی استفاده می‌کند. هنگامی که پین ​​حسگر لمسی توسط انگشت لمس می‌شود، یک بار الکتریکی کوچک در نقطه اتصال جذب می‌شود. این اتفاق باعث ایجاد تغییر در ظرفیت خازنی و در نتیجه سیگنال آنالوگ می‌شود. سپس دو ADC متوالی تقریبی (SAR ADC)، این سیگنال آنالوگ را به اعداد دیجیتال تبدیل می‌کنند.

 ADC های SAR از یک مقایسه‌گر برای مقایسه ولتاژ ورودی و خروجی یک مبدل داخلی دیجیتال به آنالوگ، استفاده می‌کنند.

آموزش مرتبط

تشخیص لمس در ESP32، توسط کمک پردازنده ULP مدیریت می‌شود. بنابراین می‌توان از این پین‌های لمسی برای بیدار کردن ESP32 از خواب عمیق نیز استفاده کرد. کمک پردازنده‌ی (Ultra-Low-Power coprocessor)ULP یک نوع پردازنده کم مصرف است که به عنوان یک واحد پردازشی تکمیلی در معماری یک پردازنده اصلی استفاده می‌شود. این نوع پردازنده‌ها برای انجام وظایفی که نیاز به مصرف کم انرژی دارند، استفاده می‌شوند و معمولا برای افزایش عمر باتری و بهبود عملکرد دستگاه‌های هوشمند و قابل حمل استفاده می‌شوند

معرفی پین های Touch ماژول ESP32:

این ماژول دارای 10 پین ورودی و خروجی لمسی خازنی است. هنگامی که یک بار خازنی (مانند پوست انسان) در مجاورت GPIO باشد، ESP32 تغییر در ظرفیت خازنی را تشخیص می‌دهد.

اگر چه ESP32 در مجموع دارای 10 پین حسگر لمسی خازنی (GPIO) است، اما تنها 9 عدد از 30 پین در پین‌هدرهای دو طرف برد توسعهESP32  قابل دسترس هستند.

معرفی پین های لمسی ماژول ESP32

نحوه دریافت داده از سنسور لمسی در IDE:

خواندن داده های دریافتی از حسگر لمسی ESP32 بسیار ساده است. برای این کار کافی است در Arduino IDE، از تابع touchRead() استفاده ‌کنید. این تابع٬ شماره پین ورودی و خروجی​​ (GPIO) را که می‌خواهید بخوانید، به عنوان آرگومان می‌پذیرد.

touchRead(GPIOPin);

ایجاد اتصالات سخت افزاری:

اکنون که با چگونگی تشخیص لمس انگشت (بار خازنی) بصورت تئوری آشنا شده اید زمان آن سیده است تا با انجام یک مثال عملی نحوه استفاده از پین های لمسی ESP32 را آموزش ببینیم:

ابتدا لازم داریم یک سیم را به حسگر لمسی شماره0 (Touch #0) یا همان پایه GPIO شماره 4 وصل کنیم و سپس کد آماده شده در بخش بعد را در IDE سیستم خود آپلود نمایید. شما می توانید هر جسم رسانایی مانند فویل آلومینیومی، پوشش رسانا، رنگ رسانا و غیره را به این پین وصل کنید و آن را به یک پد لمسی تبدیل کنید.

استفاده از پین های لمسی ESP32 جهت تغییر میزان بار خازنی پایه

کد نمونه

بیایید با استفاده از مثالی از کتابخانه ببینیم که چگونه کار می کند. Arduino IDE خود را باز کنید و به مسیرFile > Examples > ESP32 > Touch  بروید. سپس برنامه TouchRead را باز کنید .

این مثال به سادگی پین لمسی 0 را می خواند و نتیجه را روی نمایشگر سریال نشان می دهد.

// ESP32 Touch Test
// Just test touch pin - Touch0 is T0 which is on GPIO 4.

void setup() {
  Serial.begin(115200);
  delay(1000); // give me time to bring up serial monitor
  Serial.println("ESP32 Touch Test");
}

void loop() {
  Serial.print("Touch: ");
  Serial.println(touchRead(4));  // get touch value on GPIO 4
  delay(1000);
}
تغییر مقدار متغییر Touch به عدد ۳ در زمان استفاده از پین های لمسی ESP32

نحوه عملکرد کد:

ابتدا لازم است ذکر کنیم که این برنامه بسیار ساده است. ما در تابع ()setup، قصد داریم در گام اول ارتباط سریال با رایانه را برقرار کنیم:

Serial.begin(115200);

سپس درحلقه ()loop از تابع touchRead() استفاده می کنیم و پایه ای را که می خواهیم بخوانیم به عنوان آرگومان ارسال می‌کنیم. در اینجا تصمیم داریم پین شماره 4 را بخوانیم. (همچنین می توانید شماره سنسور لمسی T0 را ارسال کنید.)

 Serial.println(touchRead(4));

بیایید به سرعت پروژه‌ای ایجاد کنیم تا نشان دهیم که چگونه می‌توان از پین‌های لمسی ESP32 برای کنترل دستگاه‌ها استفاده کرد. در این مثال، قصد داریم یک LED ساده که با لمس روشن می شود را بسازیم.

دانستنیالبته این پروژه را می توان گسترش داد به پروژه‌های دیگر ازجمله باز کردن درها، رله‌های سوئیچی، روشنایی‌ یا هر چیز دیگری که فکرش را بکنید.

پیدا کردن آستانه تشخیص بار

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

وقتی کد قبلی را اجرا می‌کنید، قرائت های نزدیک به مقادیر زیر را در مانیتور سریال خواهید دید:

  • وقتی پین را لمس می کنید  (~3)
  • وقتی پین را لمس نمی کنید (~71)

بر اساس مقادیر، می‌توانیم آستانه‌ای را تعیین کنیم، به طوری که وقتی مقدار خوانده شده از مقدار آستانه کمتر شد ، LED تغییر وضعیت دهد. احتمالا 30 مقدار آستانه خوبی در این مورد باشد.

نحوه سیم کشی ماژول ESP32 جهت استفاده از پین های لمسی برای خاموش و روشن نمودن ال ای دی

نمونه کد:

در این مرحله بایستی کد زیر را در ESP32 خود آپلود کنید. بعد از آن هر بار که سیم را لمس می کنید، باید تغییر وضعیت LED را ببینید. به طوری که با یک بار لمس پین، LED روی برد روشن می‌شود و با لمس مجدد آن خاموش می‌شود. طبق این کد ال ای دی به پایه شماره 2 ماژول esp32 متصل شده است.

// set pin numbers
const int touchPin = 4;
const int ledPin = 2;

const int threshold = 30;  // set the threshold

int ledState = LOW;         // the current state of the output pin
int touchState;             // the current reading from the input pin
int lastTouchState = LOW;   // the previous reading from the input pin

unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  pinMode(ledPin, OUTPUT);

  // set initial LED state
  digitalWrite(ledPin, ledState);
}

void loop() {
  // read the state of the pin
  int reading = touchRead(touchPin);

  // binarize touch reading for easy operation
  if (reading < threshold) {
    reading = HIGH;
  } else{
    reading = LOW;
  }
  
  // If the pin is touched:
  if (reading != lastTouchState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer than the debounce
    // delay, so take it as the actual current state:

    // if the touch state has changed:
    if (reading != touchState) {
      touchState = reading;

      // only toggle the LED if the new touch state is HIGH
      if (touchState == HIGH) {
        ledState = !ledState;
      }
    }
  }

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

  // save the reading. Next time through the loop, it'll be the lastTouchState:
  lastTouchState = reading;
}

مقالات مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات