آموزش ESP32آموزش اینترنت اشیا

آموزش استفاده از تاچ خازنی برد ESP32

برد توسعه‌ ESP32 یک گزینه عالی برای ایجاد پروژه‌ های هوشمند اینترنت اشیا (IoT) است. افزودن قابلیت لمسی به این پروژه‌ها، آنها را حتی هوشمند تر میکند. ESP32 دارای 10 پین GPIO با قابلیت حس لمسی خازنی است که میتوان از آنها برای ارتقای پروژه‌ های مبتنی بر دکمه فشاری ساده یا ایجاد سوئیچ‌ های نوری، سازهای موسیقی یا سطوح تعاملی سفارشی استفاده کرد.

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

نحوه عملکرد تاچ لمسی خازنی در ESP32

تاچ لمسی در ESP32 توسط واحد پردازش کم‌ مصرف (ULP coprocessor) مدیریت میشود. این پین‌های لمسی حتی میتوانند برای بیدار کردن ESP32 از حالت خواب عمیق استفاده شوند.

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

پین‌های لمسی ESP32

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

پین‌های لمسی ESP32

خواندن سنسور لمسی بسیار ساده است. در نرم افزار آردوینو، از تابع touchRead() استفاده میشود که شماره پین GPIO مورد نظر را به عنوان آرگومان می‌پذیرد.

touchRead(GPIOPin);

اتصال سخت‌ افزاری برای تاچ خازنی

بیایید یک مثال عملی را بررسی کنیم. یک سیم به پین Touch #0 (GPIO #4) متصل کنید. نکته جالب این است که میتوانید هر شیء رسانایی مانند فویل آلومینیومی، پارچه رسانا یا رنگ رسانا را به این پین وصل کنید و آن را به یک پد لمسی تبدیل کنید.

اتصال سخت‌ افزاری برای تاچ خازنی

کد نمونه خواندن پین لمسی ESP32

در این مثال، مقدار پین لمسی 0 (GPIO #4) خوانده شده و نتیجه روی مانیتور سریال نمایش داده میشود.

// ESP32 Touch Test
// تست پین لمسی - Touch0 مربوط به GPIO 4 است.

void setup() {
  Serial.begin(115200);
  delay(1000); // زمان برای راه‌اندازی مانیتور سریال
  Serial.println("ESP32 Touch Test");
}

void loop() {
  Serial.print("Touch: ");
  Serial.println(touchRead(4));  // خواندن مقدار لمسی از GPIO 4
  delay(1000);
}

پس از آپلود کد، مانیتور سریال را با نرخ Baud rate 115200 باز کنید و دکمه EN روی ESP32 را فشار دهید. حالا سیم را لمس کنید و ببینید چگونه به لمس واکنش نشان میدهد.

کد نمونه خواندن پین لمسی ESP32

  1. در تابع setup()، ارتباط سریال با کامپیوتر راه‌اندازی میشود.
    Serial.begin(115200);
  2. در تابع loop()، از تابع touchRead() برای خواندن مقدار پین GPIO #4 استفاده میشود.
    Serial.println(touchRead(4));

پروژه عملی: LED فعال‌شونده با لمس

بیایید یک پروژه ساده ایجاد کنیم که در آن با لمس یک پین لمسی، یک LED روشن یا خاموش شود. این پروژه را میتوان برای کنترل دستگاه‌هایی مانند در ها، رله‌ ها یا چراغ‌ ها گسترش داد.

مطلب پیشنهادی:  تصویربرداری دوربین حرارتی با برد ESP32

یافتن آستانه (Threshold)

قبل از شروع، باید مقادیر خوانده شده از ESP32 را بررسی کنید. مقادیر زیر را در مانیتور سریال مشاهده خواهید کرد:

  • هنگام لمس پین: حدود 3
  • هنگام عدم لمس پین: حدود 71

با توجه به این مقادیر، میتوان یک آستانه (مثلاً 30) تعیین کرد تا زمانی که مقدار خوانده شده از آستانه کمتر شد، LED تغییر حالت دهد.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

در این کد، هر بار که پین لمسی لمس شود، LED روشن یا خاموش میشود.

const int touchPin = 4;  // پین لمسی (GPIO #4)
const int ledPin = 2;    // پین LED (GPIO #2)

const int threshold = 30;  // آستانه

int ledState = LOW;         // وضعیت فعلی LED
int touchState;             // وضعیت فعلی پین لمسی
int lastTouchState = LOW;   // وضعیت قبلی پین لمسی

unsigned long lastDebounceTime = 0;  // زمان آخرین تغییر حالت
unsigned long debounceDelay = 50;    // تاخیر برای جلوگیری از نویز

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

  // تنظیم وضعیت اولیه LED
  digitalWrite(ledPin, ledState);
}

void loop() {
  // خواندن وضعیت پین لمسی
  int reading = touchRead(touchPin);

  // تبدیل مقدار آنالوگ به دیجیتال
  if (reading < threshold) {
    reading = HIGH;
  } else {
    reading = LOW;
  }
  
  // اگر پین لمس شد:
  if (reading != lastTouchState) {
    lastDebounceTime = millis();  // ریست تایمر
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // اگر وضعیت تغییر کرده باشد:
    if (reading != touchState) {
      touchState = reading;

      // تغییر حالت LED فقط اگر وضعیت جدید HIGH باشد
      if (touchState == HIGH) {
        ledState = !ledState;
      }
    }
  }

  // اعمال وضعیت جدید به LED
  digitalWrite(ledPin, ledState);

  // ذخیره وضعیت فعلی برای استفاده در چرخه بعدی
  lastTouchState = reading;
}

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

4 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

برای ارسال تصاویر از انجمن سایت استفاده کنید.

سوالات فنی را در انجمن سایت مطرح کنید تا در مسابقه شرکت کنید. ورود به انجمن

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

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