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

محتویات
برد توسعه ESP32 یک گزینه عالی برای ایجاد پروژه های هوشمند اینترنت اشیا (IoT) است. افزودن قابلیت لمسی به این پروژهها، آنها را حتی هوشمند تر میکند. ESP32 دارای 10 پین GPIO با قابلیت حس لمسی خازنی است که میتوان از آنها برای ارتقای پروژه های مبتنی بر دکمه فشاری ساده یا ایجاد سوئیچ های نوری، سازهای موسیقی یا سطوح تعاملی سفارشی استفاده کرد.
در این مقاله، نحوه کار با این پینهای لمسی و استفاده از آنها در پروژهها را یاد خواهیم گرفت.
نحوه عملکرد تاچ لمسی خازنی در ESP32
تاچ لمسی در ESP32 توسط واحد پردازش کم مصرف (ULP coprocessor) مدیریت میشود. این پینهای لمسی حتی میتوانند برای بیدار کردن ESP32 از حالت خواب عمیق استفاده شوند.
ESP32 از ویژگیهای الکتریکی بدن انسان به عنوان ورودی استفاده میکند. هنگامی که یک پین لمسی با انگشت لمس میشود، یک بار الکتریکی کوچک به نقطه تماس جذب میشود. این تغییر در ظرفیت خازنی، یک سیگنال آنالوگ ایجاد میکند که توسط دو مبدل آنالوگ به دیجیتال (SAR ADC) به یک عدد دیجیتال تبدیل میشود.
پینهای لمسی ESP32
ESP32 دارای 10 پین GPIO با قابلیت حس لمسی خازنی است. هنگامی که یک بار خازنی (مانند پوست انسان) در مجاورت این پینها قرار میگیرد، ESP32 تغییر در ظرفیت خازنی را تشخیص میدهد. اگرچه ESP32 در مجموع 10 پین لمسی دارد، اما تنها 9 پین از آنها به هدرهای پین در دو طرف برد توسعه 30 پین 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 را فشار دهید. حالا سیم را لمس کنید و ببینید چگونه به لمس واکنش نشان میدهد.
- در تابع
setup()
، ارتباط سریال با کامپیوتر راهاندازی میشود.Serial.begin(115200);
- در تابع
loop()
، از تابعtouchRead()
برای خواندن مقدار پین GPIO #4 استفاده میشود.Serial.println(touchRead(4));
پروژه عملی: LED فعالشونده با لمس
بیایید یک پروژه ساده ایجاد کنیم که در آن با لمس یک پین لمسی، یک LED روشن یا خاموش شود. این پروژه را میتوان برای کنترل دستگاههایی مانند در ها، رله ها یا چراغ ها گسترش داد.
یافتن آستانه (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 و پین های لمسی آن گزینه ای عالی هستند!