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

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

โปรเจกต์นี้เป็นสวิตช์เปิด-ปิดไฟแบบไม่ต้องกดปุ่ม แค่เอานิ้วแตะก็สั่งงานได้ ใช้โมดูล TTP223 เป็นตัวรับสัมผัส ESP32-C6 เป็นสมอง แล้วสั่ง Relay ตัดต่อไฟ 220V อีกที จุดที่ต้องระวังคือ ESP32 ใช้ไฟ 3.3V แต่ Relay ส่วนใหญ่อยากได้สัญญาณ 5V เลยต้องมี Logic Level Shifter มาคั่นกลาง

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

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

1. ESP32-C6 DevKit Shopeeซื้อเลยบน Shopee 

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

2. Capacitive Touch Sensor (TTP223): โมดูลสัมผัส Shopeeซื้อเลยบน Shopee

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

3. Relay Module 1 Channel: สำหรับตัดต่อวงจรไฟ 220V Shopeeซื้อเลยบน Shopee

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

4. Logic Level Shifter 8-bit: ตัวแปลงระดับสัญญาณ (เนื่องจาก ESP32 ทำงานที่ 3.3V แต่ Relay บางรุ่นต้องการ 5V เพื่อความเสถียร) Shopeeซื้อเลยบน Shopee

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

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

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

ส่วนแรก ต่อ ESP32 ไปยัง Touch Sensor

ESP32 C6
Touch Sensor
3.3V
VCC
20
SIG
GND
GND

ส่วนสอง ต่อ ESP32 กับ Level Shifter

ESP32 C6
Level Shifter
3.3V
LV
5V
HV
GND
GND
7
LV1

ส่วนที่สาม ต่อ Relay กับ Level Shifter

Relay
Level Shifter
In
HV1

ส่วนที่สี่ ต่อไฟเลี้ยงให้ Relay ผ่าน ESP32

Relay
ESP32 C6
VCC
5V
GND
GND

3. เขียนโค้ด (The Code)

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

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}

 

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

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

ส่วนนี้เป็นการประกาศตัวแปรต่างที่จำเป็น เช่น การกำหนด Pin ต่างๆ ที่ใช้

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

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

2. ฟังก์ชัน Setup

ส่วนนี้จะเป็นการตั้งค่า Pin ต่างๆ และ Serial ไว้พร้อมไช้งาน

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}

ต้องสั่ง digitalWrite(RELAY_PIN, HIGH);  ก่อนเพราะ Relay เป็น Active Low เราอย่างให้ตอนเริ่มรีเลย์ไม่ทำงาน ทำให้ต้องสั่ง High ไว้ก่อน

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

ส่วนนี้จะเริ่มจากการตรวจจับการเปลี่ยนแปลงระหว่างสถานะของปุ่มไร้สัมผัสถ้ามีการสัมผัสเมื่อไหร่จะเปลี่ยนตัวแปร relayState เป็นตรงข้าม (ถ้าเปิดอยู่ให้ปิด แต่ถ้าปิดอยู่ให้เปิด)

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

ต้องเช็คตัวแปร lastTouchState ด้วยเพื่อให้โค้ดชุดนี้ทำงานเฉพาะจังหวะแรกที่มีการกดปุ่มเท่านั้นไม่ใช่ทำงานตลอด

จากนั้นเราจะต้องใช้ตัวแปร relayState มาใช้เปิดปิดรีเลย์จริงๆด้วนคำสั่ง digitalWrite

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    delay(200);
9}

จุดสุดท้ายที่คนชอบลืมเราจะต้องบันทึกค่าของ สถานะปุ่มไว้ด้วยเพื่อใช้เช็คกับลูปถัดไป

Arduino
1lastTouchState = touchState;

5. ต่อวงจรลงบอร์ดไข่ปลา

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

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

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

7. ทดสอบการทำงาน

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