ไม่ต้องเจาะถัง SemLab CLS-24BP ตรวจน้ำผ่านผนัง แล้วส่งสถานะด้วย ESP-NOW
ถ้าอยากรู้ว่าน้ำขึ้นมาถึงระดับที่กำหนดหรือยัง ปกติเราอาจนึกถึง Float Switch หรือ Sensor ที่ต้องสัมผัสน้ำโดยตรง แต่โปรเจกต์นี้เลือกอีกทาง: ติด Sensor ไว้ด้านนอกถัง แล้วตรวจของเหลวผ่านผนังโดยไม่ต้องเจาะถังเลย
ระบบใช้ SemLab CLS-24BP เป็น Contactless Capacitive Sensor และใช้ ESP32 สองตัวส่งสถานะระหว่างกันผ่าน ESP-NOW โดยไม่ต้องมี Wi-Fi Router เป็นตัวกลาง สำหรับการสื่อสารหลักของระบบ
- CLS-24BP ตรวจ Liquid Presence ผ่านผนังโดยไม่สัมผัสน้ำ
- Source ระบุรองรับ Glass, Plastic และ Ceramic ได้ถึงประมาณ 20 mm
- Supply 5–24V และใช้ Open-collector Output
- NPN = LOW เมื่อตรวจพบของเหลว
- PNP = HIGH เมื่อตรวจพบของเหลว
- ESP32 Transmitter ส่งสถานะทุกประมาณ 1 วินาที
- ESP-NOW ใช้ Broadcast ใน Code ตัวอย่าง
- Sensor 1 ตัวตรวจได้เพียง 1 ระดับ ไม่ใช่ Continuous Level
Project นี้ทำอะไร?
ระบบมี ESP32 สองฝั่ง: ฝั่ง Transmitter อยู่กับถังน้ำ และฝั่ง Receiver อยู่ที่จุดแสดงผล
Data Flow
Receiver ใน Demo ต่อกับ Laptop และแสดงผลผ่าน Serial Monitor
SemLab CLS-24BP คืออะไร?
Sensor ใช้หลัก Capacitive / Charge-transfer Sensing เพื่อตรวจการเปลี่ยนแปลงทางไฟฟ้า เมื่อมีของเหลวอยู่หลังผนังภาชนะ
Official Repository ระบุ Specification หลัก:
| Parameter | ข้อมูล |
|---|---|
| Operating Voltage | 5–24V DC |
| Output | Open-collector NPN / PNP |
| Response Time | ≤800 ms |
| Wall Thickness | ≤20 mm ตาม Source |
| Sensitivity | ปรับด้วย Trimpot |
| Protection | Bare PCB = IP00 |
Sensor 1 ตัวไม่ได้วัดน้ำเป็นเปอร์เซ็นต์
จุดนี้ต้องเข้าใจก่อน: CLS-24BP ในระบบนี้ทำหน้าที่เป็น Point-level Detector
หมายความว่า Sensor ตอบคำถามว่า:
Sensor ตัวเดียวจึงไม่ได้ให้ค่า:
- 35%
- 62%
- ระดับน้ำเป็น cm
- จำนวนลิตร
ถ้าต้องการ Full / Half / Low ต้องใช้ Sensor หลายตัว ติดไว้คนละระดับ
Pinout และ NPN / PNP
| Pin | Function |
|---|---|
| VIN | Power 5–24V |
| MODE | Floating = NPN / GND = PNP |
| OUT | Digital transistor output |
| GND | System Ground |
| Mode | Liquid Detected | No Liquid |
|---|---|---|
| NPN | LOW | HIGH / pulled toward VIN |
| PNP | HIGH | LOW |
บทความนี้ใช้ Main Article และ Official SemLab Hardware Repository เป็นหลัก: NPN = Active-Low, PNP = Active-High
อุปกรณ์ที่ใช้
| Component | Quantity |
|---|---|
| SemLab CLS-24BP | 1 |
| ESP32 Development Board | 2 |
| 3.7V LiPo | 1 |
| 5V Boost Converter | 1 |
| Slide Switch | 1 |
| Jumper Wires | ตามต้องการ |
Architecture ของระบบ Wireless Water Monitoring
Transmitter → Receiver
Digital State
ESP32 TX
Serial Monitor
Circuit / Wiring ของ Project
Main Source ระบุว่า:
- CLS-24BP OUT → GPIO13
- MODE → Floating เพื่อใช้ NPN
- LiPo 3.7V → 5V Boost Converter
- 5V ใช้จ่าย ESP32 และ CLS-24BP
- Receiver เป็น ESP32 ที่ต่อกับ Laptop
เพื่อรักษารายละเอียด Wiring ตามต้นฉบับ ผมไม่วาด Pin Connection เพิ่มเอง
จุดสำคัญ: 5V Sensor Output กับ ESP32 GPIO
Main Project ต่อ OUT ของ CLS-24BP เข้ากับ GPIO13 โดยตรง
แต่ Official Sensor Repository ระบุว่าใน NPN Mode เมื่อ Output ไม่ Active OUT สามารถอยู่ที่ระดับ HIGH ไปทาง VIN
บทความนี้จะไม่สร้าง Voltage Divider หรือ Level Shifter เพิ่มขึ้นเอง เพราะ Main Project ไม่ได้ให้วงจรดังกล่าว
ก่อนประกอบจริง ให้ตรวจ Schematic ของ Sensor และ Electrical Specification ของ ESP32 Board รุ่นที่ใช้อยู่
ESP-NOW ทำงานอย่างไร?
ESP-NOW ทำให้ ESP32 สื่อสารกับ ESP32 อีกตัว โดยไม่ต้องใช้ Wi-Fi Router เป็นตัวกลางใน Data Path นี้
Transmitter ทำงานตาม Flow:
- ตั้ง
WIFI_STA - Initialize ESP-NOW
- Register Peer
- อ่าน GPIO13
- สร้าง Boolean
liquidDetected - ส่ง Packet
- รอประมาณ 1 วินาทีแล้วส่งใหม่
Code ใช้:
FF:FF:FF:FF:FF:FF
ซึ่งเป็น Broadcast Address ไม่ใช่ MAC Address เฉพาะของ Receiver
ผู้สร้างบอกเพียงว่า ในการ Demo ไม่เห็น Delay ชัดเจน จึงไม่ควรเรียกว่า Zero Latency แบบข้อเท็จจริง
Transmitter Code
const int SensePin = 13;
uint8_t broadcastAddress[] = {
0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF
};
typedef struct struct_message {
bool liquidDetected;
} struct_message;
struct_message myData;
void loop() {
bool currentState = !digitalRead(SensePin);
myData.liquidDetected = currentState;
esp_now_send(
broadcastAddress,
(uint8_t *) &myData,
sizeof(myData)
);
delay(1000);
}
การใช้ ! เกิดจาก Project ใช้ NPN Mode ซึ่ง Sensor เป็น LOW เมื่อพบของเหลว
Receiver Code
void OnDataRecv(
const esp_now_recv_info *info,
const uint8_t *data,
int len
) {
memcpy(
&incomingData,
data,
sizeof(incomingData)
);
if (incomingData.liquidDetected) {
Serial.println("Received: Liquid Detected");
} else {
Serial.println("Received: No Liquid Available");
}
}
Testing: Sensor ตรวจน้ำผ่านผนังภาชนะจริง
ใน NPN Mode:
- น้ำยังไม่ถึง Sensor → OUT เป็น HIGH
- น้ำขึ้นถึง Sensor → OUT ลง LOW
ESP32 ฝั่ง TX กลับ Logic ด้วย !digitalRead() ก่อนส่งไปยัง Receiver
ถ้าต้องการ Full / Half / Empty ต้องใช้หลาย Sensor
Source ระบุชัดว่า ต้องใช้ Sensor หนึ่งตัวต่อหนึ่งระดับ
| Sensor Position | ตัวอย่างสถานะ |
|---|---|
| ด้านบน | Full |
| ตรงกลาง | Half |
| ด้านล่าง | Low / Empty Threshold |
ไม่ใช่ Continuous Level Measurement แบบ 0–100%
Troubleshooting จาก Source
| อาการ | สาเหตุที่ควรตรวจ |
|---|---|
| LED ไม่ติด | Power, Polarity, Supply ต่ำกว่า 5V, Sensitivity |
| Output Flicker | Air Gap, Supply Noise, Turbulence |
| Reading กลับด้าน | MODE และ Code Logic ไม่ตรงกัน |
| Receiver ไม่ได้ข้อมูล | ESP-NOW Init, WIFI_STA หรือระยะระหว่าง Board |
Open-source Hardware: CAD / Gerber / Firmware
Official SemLab Repository เปิดไฟล์ของ CLS-24BP ไว้หลายส่วน:
- Firmware
- Schematic
- PCB Design
- BOM
- Gerber
- Pick & Place
- STEP / OBJ / MTL Enclosure CAD
สามารถส่งไฟล์ CAD ให้ทีม GlobalByte ช่วยประเมินบริการพิมพ์ 3D ได้ โดย Source ไม่ได้ให้ Print Settings จึงต้องประเมินตามไฟล์และเครื่องจริง
ดู Contactless Water Sensor ทำงานจริง
Source / Code / Documentation
FAQ
1. Sensor ต้องโดนน้ำไหม?
ไม่ ตัว Sensor ถูกติดอยู่นอกภาชนะ และตรวจของเหลวผ่านผนัง
2. ผนังหนาได้เท่าไร?
Source ระบุสูงสุดประมาณ 20 mm สำหรับวัสดุที่เหมาะสม
3. ตรวจผ่านถังโลหะได้ไหม?
Source ไม่ได้แนะนำถังโลหะ และระบุ Use Case หลักเป็นวัสดุ non-metal
4. Sensor 1 ตัวรู้ระดับน้ำเป็นเปอร์เซ็นต์ไหม?
ไม่ Sensor หนึ่งตัวเป็น Point-level Detector
5. NPN Mode คืออะไร?
MODE Floating และ OUT เป็น LOW เมื่อ Sensor ตรวจพบของเหลว
6. PNP Mode คืออะไร?
MODE ต่อ GND และ OUT เป็น HIGH เมื่อตรวจพบของเหลว
7. ทำไม Code ใช้ !digitalRead()?
เพราะ Project ใช้ NPN Mode ซึ่ง Active-Low
8. ESP-NOW ต้องมี Router ไหม?
Direct ESP-NOW Communication ใน Project นี้ไม่ต้องใช้ Router เป็นตัวกลาง
9. Project ส่งข้อมูลบ่อยแค่ไหน?
Code ใช้ delay(1000) จึงส่งประมาณทุก 1 วินาที
10. FF:FF:FF:FF:FF:FF คืออะไร?
เป็น Broadcast Address ไม่ใช่ MAC เฉพาะของ Receiver
11. ESP-NOW เปิด Encryption ไหม?
Code ตัวอย่างตั้ง peerInfo.encrypt = false
12. ESP-NOW ส่งได้ไกลเท่าไร?
Source ไม่ได้ให้ Range Benchmark ของ Build นี้
13. Battery ใช้ได้นานเท่าไร?
Source ไม่ได้ระบุ LiPo Capacity หรือ Runtime
14. Sensor กันน้ำไหม?
Bare PCB ถูกระบุเป็น IP00 และต้องพึ่ง Enclosure หากใช้ในสภาพแวดล้อมที่มีน้ำหรือความชื้น
15. ต่อ Pump ได้เลยไหม?
Source พูดถึงการขยายไป Relay แต่ไม่ได้ให้ Pump Wiring หรือ Load Specification
16. มีไฟล์ CAD ไหม?
มี CAD Enclosure ใน Official SemLab Repository
ไม่สัมผัสน้ำ ไม่ต้องเดินสายสัญญาณยาว และขยายหลายระดับได้
จุดเด่นของ Project นี้ คือการแยก Sensor ออกจากของเหลว และแยก Transmitter ออกจาก Receiver ด้วย ESP-NOW
สำหรับงานที่ต้องรู้เพียงว่า น้ำขึ้นมาถึงจุดหนึ่งแล้วหรือยัง CLS-24BP เป็นแนวคิดที่ตรงกับโจทย์มาก เพราะสามารถติดภายนอกผนัง และปรับ Sensitivity ได้
แต่ต้องเข้าใจข้อจำกัด: Sensor หนึ่งตัวไม่ได้ให้ Continuous Level และ Wiring ระหว่าง Sensor 5V กับ ESP32 GPIO ควรตรวจ Logic Level อย่างละเอียดก่อนประกอบจริง
References / แหล่งข้อมูลต้นฉบับ
กำลังทำ ESP32, ESP-NOW หรือ Sensor Monitoring Project?
หากกำลังเลือก ESP32, Development Board, Sensor หรือ Module สำหรับ Wireless Monitoring Project สามารถสอบถามทีม GlobalByte เรื่อง Hardware ที่เหมาะกับ Requirement ได้