มาทำสวิตช์ไฟระบบสัมผัส (Capacitive Touch) ด้วย ESP32-C6 กันครับ

30 เมษายน 2569

ในบทความนี้ คุณจะได้เรียนรู้วิธีการสร้างสวิตช์เปิด-ปิดไฟที่ไม่ต้องใช้การกดปุ่มทางกล (Mechanical Switch) แต่ใช้การตรวจจับประจุไฟฟ้าจากปลายนิ้ว (Capacitive Touch) โดยใช้บอร์ดรุ่นใหม่ล่าสุดอย่าง ESP32-C6 ซึ่งรองรับเทคโนโลยีล้ำสมัยอย่าง Wi-Fi 6 และ Matter ในอนาคต

มาทำสวิตช์ไฟระบบสัมผัส (Capacitive Touch) ด้วย ESP32-C6 กันครับ

อุปกรณ์ที่ต้องใช้

  1. ESP32-C6 DevKit: บอร์ดไมโครคอนโทรลเลอร์ตัวแรง รองรับ Wi-Fi 6 และ Matter
  2. Capacitive Touch Sensor (TTP223): โมดูลสัมผัส
  3. Relay Module 1 Channel: สำหรับตัดต่อวงจรไฟ 220V
  4. Logic Level Shifter 8-bit: ตัวแปลงระดับสัญญาณ (เนื่องจาก ESP32 ทำงานที่ 3.3V แต่ Relay บางรุ่นต้องการ 5V เพื่อความเสถียร)
  5. Power Supply 5V: สำหรับเลี้ยงระบบ

การต่อวงจรแบบละเอียด (Schematic & Wiring)

การต่อ Logic Level Shifter จะมี 2 ฝั่ง คือ LV (Low Voltage) สำหรับฝั่ง 3.3V และ HV (High Voltage) สำหรับฝั่ง 5V

มาทำสวิตช์ไฟระบบสัมผัส (Capacitive Touch) ด้วย ESP32-C6 กันครับ

 

1. การต่อฝั่ง Power (ไฟเลี้ยง)

  • แหล่งจ่าย 5V: ต่อเข้าขา 5V ของ ESP32 และขา HV ของ Shifter รวมถึง VCC ของ Relay

  • แหล่งจ่าย 3.3V: ต่อจากขา 3V3 ของ ESP32 ไปที่ขา VCC ของ Touch Sensor และขา LV ของ Shifter

  • GND: ต้องต่อ Ground ทุกตัวรวมกัน (Common Ground)

2. การต่อสัญญาณ (Signal)

  • Touch Sensor (Input):

    • ขา SIG -> ต่อเข้า GPIO 1 ของ ESP32-C6

  • Relay (Output) ผ่าน Shifter:

    • ESP32 GPIO 2 -> ต่อเข้าขา A1 (ฝั่ง LV) ของ Shifter

    • ขา B1 (ฝั่ง HV) ของ Shifter -> ต่อเข้าขา IN ของ Relay

การเขียนโค้ด (The Code)

ก่อนอัปโหลดโค้ด ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งบอร์ด ESP32 ใน Arduino IDE เรียบร้อยแล้ว

มาทำสวิตช์ไฟระบบสัมผัส (Capacitive Touch) ด้วย ESP32-C6 กันครับ

โค้ดตัวอย่าง

Arduino
1#define RELAY_PIN 7
2#define TOUCH_PIN 20
3
4bool relayState = false;
5bool lastTouchState = LOW;
6
7void setup() {
8  pinMode(RELAY_PIN, OUTPUT);
9  pinMode(TOUCH_PIN, INPUT);
10
11  digitalWrite(RELAY_PIN, HIGH); 
12
13  Serial.begin(115200);
14}
15
16void loop() {
17
18  bool touchState = digitalRead(TOUCH_PIN);
19
20  if (touchState == HIGH && lastTouchState == LOW) {
21    relayState = !relayState; 
22
23    if (relayState) {
24      digitalWrite(RELAY_PIN, LOW);
25      Serial.println("Relay ON");
26    } else {
27      digitalWrite(RELAY_PIN, HIGH);
28      Serial.println("Relay OFF");
29    }
30
31    delay(200); 
32  }
33
34  lastTouchState = touchState;
35}


ทำความเข้าใจโค้ด

1. การประกาศตัวแปรและการกำหนดขา (Configuration)

ส่วนนี้คือการบอกให้ ESP32-C6 รู้ว่าเราเชื่อมต่ออุปกรณ์ไว้ที่ช่องไหน และเตรียมพื้นที่ในหน่วยความจำเพื่อเก็บสถานะต่างๆ

Arduino
1#define RELAY_PIN 7
2#define TOUCH_PIN 20    
3
4bool relayState = false;
5bool lastTouchState = LOW; 

ทำไมต้องมี lastTouchState?: เพราะเราต้องการตรวจจับ "จังหวะที่เริ่มแตะ" (Transition) ไม่ใช่แค่การ "แตะค้างไว้" ครับ

2. ฟังก์ชัน Setup (Initial Configuration)

ทำงานเพียงครั้งเดียวเมื่อเปิดเครื่องหรือกดปุ่ม Reset

Arduino
1void setup() {
2  pinMode(RELAY_PIN, OUTPUT);
3  pinMode(TOUCH_PIN, INPUT);
4
5  digitalWrite(RELAY_PIN, HIGH); 
6
7  Serial.begin(115200);
8}

4. ส่วนหัวใจหลัก: Loop และ State Change Detection

ในส่วนนี้โปรแกรมจะทำงานวนลูปไปเรื่อยๆ หลายล้านครั้งต่อวินาที เพื่อคอยเช็คว่า "นิ้วมาแตะหรือยัง?"

การตรวจจับการสัมผัส (The Trigger)

Arduino
1void loop() {
2  bool touchState = digitalRead(TOUCH_PIN);
3
4  if (touchState == HIGH && lastTouchState == LOW) {
5    relayState = !relayState;

การสั่งการตามสถานะ (The Action)

Arduino
1if (relayState) {
2      digitalWrite(RELAY_PIN, LOW); 
3      Serial.println("Relay ON");
4    } else {
5      digitalWrite(RELAY_PIN, HIGH); 
6      Serial.println("Relay OFF");
7    }
8
9    delay(200);
10  }

การบันทึกสถานะ (Memory Update)

Arduino
1lastTouchState = touchState;
2}

Schematic

 

 

มาทำสวิตช์ไฟระบบสัมผัส (Capacitive Touch) ด้วย ESP32-C6 กันครับ

 

เขียนแบบ 3D ด้วย Fusion 360

มาทำสวิตช์ไฟระบบสัมผัส (Capacitive Touch) ด้วย ESP32-C6 กันครับ

 

ทดสอบ

มาทำสวิตช์ไฟระบบสัมผัส (Capacitive Touch) ด้วย ESP32-C6 กันครับ