ESP32 Touch Sensor – zastosowanie, kod Arduino, schemat podłączenia

Pytanie

ESP32 touch do czego służy przykład kodu schemat

Odpowiedź Sztucznej Inteligencji


Bezpośrednia odpowiedź na pytanie

  • ESP32 ma wbudowane pojemnościowe czujniki dotykowe (Touch Sensor), które pozwalają wykrywać dotknięcie lub zbliżenie palca do elektrody bez użycia mechanicznych przycisków.
  • Stosuje się je m.in. do przycisków dotykowych, sliderów, wybudzania z Deep-Sleep i detekcji poziomu cieczy.
  • Przykładowy kod (Arduino i ESP-IDF) oraz uproszczony schemat znajdują się poniżej.

Szczegółowa analiza problemu

1. Budowa i zasada działania

  1. Każdy pin „Tn” (T0…T9 w klasycznym ESP32-D0WD) tworzy z podłączoną elektrodą kondensator \(C_\text{pad}\).
  2. Moduł Touch-Sensor mierzy czas ładowania/rozładowania tego kondensatora do ustalonego progu napięcia (metoda CTMU).
  3. Dotknięcie palcem dodaje równoległą pojemność \(C_\text{finger}\approx 30!÷!200\;\text{pF}\), wydłużając czas i obniżając wartość zwracaną przez touchRead().
  4. Porównując tę wartość z kalibrowanym progiem otrzymujemy informację o dotyku lub zbliżeniu.

2. Dostępne linie dotykowe

ESP32 wariant Liczba czujników GPIO (T0…Tn) Uwagi
ESP32 (D0/D2) 10 4 0 2 15 13 12 14 27 33 32 Najpopularniejsza wersja
ESP32-S2/S3 14 1…14 Dodatkowe piny, identyczna logika
ESP32-C3 Brak czujników dotykowych

3. Typowe zastosowania

  • Zamiennik przycisków i paneli HMI (szkło, pleksi).
  • Slider/pokrętło kapacytancyjne (regulacja jasności, głośności).
  • Wybudzanie z Deep-Sleep: touchSleepWakeUpEnable(pin, threshold).
  • Czujniki poziomu cieczy, wilgotności powierzchni.
  • Detekcja zbliżenia dłoni (bezdotykowe uruchamianie).

Aktualne informacje i trendy

  • Nowe rodziny ESP32-S2/S3 udostępniają do 14 czujników, a ESP-IDF 5.x oferuje zaawansowany sterownik TouchSensor v3 z lepszym filtrowaniem IIR i kompensacją temperaturową.
  • Coraz częściej łączy się czujniki dotykowe z BLE-Mesh i Matter do sterowania urządzeniami IoT bez ruchomych części.
  • W branży smart-home rośnie popularność szklanych paneli opartych na ESP32, które spełniają wymagania norm IEC 61000-4-6 (EMC) dzięki poprawnemu ekranowaniu padów.

Wspierające wyjaśnienia i detale

  1. Wartość zwracana przez touchRead(pin) to liczba cykli ładowania; typowo:
    • bez dotyku: 60 ÷ 150, • dotyk: 5 ÷ 40 (zależnie od PCB i środowiska).
  2. Próg (threshold) powinien być o ok. 10–20 jedn. mniejszy od uśrednionego odczytu „bez dotyku”.
  3. Filtracja programowa: średnia ruchoma 4-8 próbek, histereza 5 jedn.
  4. Elektroda: miedź na PCB, folia Al, taśma Cu; rekomendowana powierzchnia 2–5 cm², przerwa do pola GND ≥ 0,3 mm, od spodu „guard-ring” GND.

Aspekty etyczne i prawne

  • Urządzenia użytkowe muszą spełniać normy bezpieczeństwa dotykowego (IEC 62368-1) i EMC.
  • Projektując panele wodoodporne należy zadbać o separację galwaniczną jeśli pada dotykowego można dotknąć z wilgotnymi dłońmi.
  • W aplikacjach medycznych obowiązują dodatkowe normy (ISO 80601-2-61 i pokrewne).

Praktyczne wskazówki

  1. Projekt PCB: unikać długich (>30 cm) nieekranowanych przewodów; jeśli konieczne – użyć kabla koncentrycznego, żyłę sygnałową zakończyć rezystorem 1 MΩ do GND (minimalizuje antenowanie).
  2. Kalibracja w polu: uruchomić urządzenie, zebrać 100 próbek w idle, ustawić próg = min(wartości) – 10 %.
  3. Deep-Sleep: przed przejściem w sen włączyć touch_pad_filter_start() z odświeżaniem 500 ms; pobór ≤ 25 µA.
  4. Diagnostyka: esp_touch_pad_status_read() (ESP-IDF) zwraca błędy kalibracji.
  5. Odporność na ESD: dioda TVS 5 V pomiędzy pad a GND przy długich złączach metalowych.

Ewentualne zastrzeżenia lub uwagi dodatkowe

  • Silne pole E-M, zwłaszcza zasilacze impulsowe ~200 kHz, może powodować fałszywe detekcje – pomóc może „shield pad” sterowany z GPIO wyjściowym o tym samym przebiegu jak pad czujnika (boot-strapped shield).
  • Piny T1 (GPIO0) i T2 (GPIO2) to piny „strapping” – na niektórych płytkach mają rezystory 10 kΩ do GND/VCC; może to wymagać zmian hardware.
  • ESP32-C3 nie posiada linii Touch – należy użyć zewnętrznych układów (np. AT42QT1010, AZ-Touch).

Sugestie dalszych badań

  • Analiza bibliotek esp32-touch (PlatformIO) – implementacja filtrów IIR i detekcji gestów.
  • Integracja czujników dotykowych z FreeRTOS-LVGL do tworzenia kompletnych GUI.
  • Badania wpływu temperatury na czułość pojemnościowych czujników (kompensacja za pomocą NTC).
  • Porównanie z samodzielnymi kontrolerami (Microchip CAP12xx, Cypress CapSense) pod względem stabilności i poboru mocy.

Przykłady kodu

A. Arduino IDE – proste odczyty

#include <Arduino.h>
constexpr uint8_t TOUCH_PIN = T0;   // GPIO 4
constexpr uint8_t LED_PIN   = 2;    // wbudowana dioda
uint16_t threshold;
void setup() {
  Serial.begin(115200);
  pinMode(LED_PIN, OUTPUT);
  // Kalibracja – 50 pomiarów bez dotyku
  uint32_t sum = 0;
  for (int i=0;i<50;i++) { sum += touchRead(TOUCH_PIN); delay(20); }
  threshold = (sum/50) - 5;   // 5 jednostek zapasu
  Serial.printf("Ustawiony próg: %u\n", threshold);
}
void loop() {
  uint16_t val = touchRead(TOUCH_PIN);
  Serial.println(val);
  digitalWrite(LED_PIN, val < threshold);
  delay(100);
}

B. ESP-IDF (v5.x) – wybudzanie z Deep-Sleep

#include "esp_sleep.h"
#include "driver/touch_pad.h"
void app_main(void)
{
    touch_pad_init();
    touch_pad_config(TOUCH_PAD_NUM4, 0);          // T4 = GPIO13
    touch_pad_filter_start(10);
    uint16_t touch_value;
    touch_pad_read_filtered(TOUCH_PAD_NUM4, &touch_value);
    uint16_t threshold = touch_value * 0.8;       // 20 % poniżej tła
    esp_sleep_enable_touchpad_wakeup();
    touch_pad_set_thresh(TOUCH_PAD_NUM4, threshold);
    printf("Przechodzę w Deep-Sleep, próg=%d\n", threshold);
    esp_deep_sleep_start();
}

Schemat połączeń (jedno pole dotykowe + LED)

                 ┌──────────────────── ESP32 DevKit ────────────────────┐
                 │                                                      │
Płytka dotykowa─●│ GPIO4 / T0                                            │
                 │                                                      │
             LED │ Anoda ──┬─220 Ω──● GPIO2                             │
                 │         │        │                                   │
                 │      Katoda   ───┴── GND                             │
                 │                                                      │
GND ─────────────┴─────────────────────────────── GND                   │
                 └───────────────────────────────────────────────────────┘

Krótkie podsumowanie

ESP32 oferuje sprzętowy, pojemnościowy system detekcji dotyku na dedykowanych pinach T0–T9. Umożliwia to tworzenie trwałych, estetycznych interfejsów bez ruchomych części oraz wybudzanie mikrokontrolera z głębokiego uśpienia. Implementacja jest prosta – wystarczy elektroda podłączona do odpowiedniego GPIO oraz kilka linii kodu (touchRead() lub API ESP-IDF). Kluczowe jest poprawne ekranowanie i kalibracja progu, co zapewnia stabilną pracę nawet w trudnych warunkach EMC.

Oceń odpowiedź:

Zadaj dodatkowe pytanie Sztucznej Inteligencji

Czekaj (1min)...
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.