71
IOT : Internet of Thing (ESP32) / Re: การเรียนรู้ครั้งที่ 8 [Basic ESP32] การใช้งานสวิตช์สัมผัส
« กระทู้ล่าสุด โดย admin เมื่อ มิถุนายน 05, 2019, 01:35:32 PM »วงจรที่ใช้ทดลอง

ตัวอย่างโปรแกรม [1] อ่านค่าจากขาสวิตช์สัมผัสแล้วแสดงผลทันที
เขียนโปรแกรมอ่านค่าจากขาสวิตช์สัมผัสแล้วแสดงผลค่าที่อ่านได้ผ่านทางพอร์ตอนุกรมแสดงผลบน Serial monitor ทันที
สังเกตค่าที่อ่านได้

เนื่องจากค่าที่อ่านได้แสดงผลเป็นตัวเลขมีการแกว่งทำให้การวิเคราะห์ยาก ทำการเป็นการดูเป็นแบบกราฟแทน โดยดำเนินการตามรูป

สังเกตุค่าที่อ่านได้ จะเห็นว่ามีค่าที่แกว่งอยู่หากนำไปใช้งานโดยตรงจะทำให้โปรแกรมควบคุมงานทำงานผิดพลาดได้ จากรูปเป็นค่าในขณะที่ไม่มีการสัมผัส

ทดลองสัมผัสที่ตัวโลหะที่ขาสวิตช์สัมผัส ผลที่ได้เป็นดังรูป

เมื่อทดลองใช้ตัวเก็บประจุค่า 22pF ทำการกรองสัญญาณ ผลที่ได้ค่าจะลดลงแต่การแกว่งยังมีเหมือนเดิม

ตัวอย่างโปรแกรม [2] อ่านค่าจากขาสวิตช์สัมผัสจำนวนมากแล้วทำการเฉลี่ยก่อนใช้งาน
เขียนโปรแกรมอ่านค่าจากขาสวิตช์สัมผัส โดยอ่านค่าจำนวนมากแล้วทำการเฉลี่ยค่าที่อ่านได้ก่อนนำค่าที่ได้ไปแสดงผล ในตัวอย่างนี้ใช้วิธีการอ่าน 100 ครั้งโดยแต่ละครั้งของการอ่านจะห่างกัน 10 ไมโครวินาที
ผลที่ได้เป็นดังรูป

ตัวอย่างโปรแกรม [3] อ่านค่าจากขาสวิตช์สัมผัสแล้วไปควบคุมการทำงานของ LED
เขียนโปรแกรมอ่านค่าจากขาสวิตช์สัมผัสเพิ่มเติมจากตัวอย่างที่ 2 โดยให้ควบคุมการติดดับของ LED ใช้การตรวจสอบค่าเฉลี่ยของค่าที่อ่านจากสวิตช์สัมผัสหากต่ำกว่า 60 แสดงว่ามีการสัมผัสสวิตช์ (ดูจากกราฟผลการทดลองข้างต้น)
ผลการรันจากโค้ดตัวอย่าง [3]
https://www.youtube.com/v/fWiqIRqg2O0

ตัวอย่างโปรแกรม [1] อ่านค่าจากขาสวิตช์สัมผัสแล้วแสดงผลทันที
เขียนโปรแกรมอ่านค่าจากขาสวิตช์สัมผัสแล้วแสดงผลค่าที่อ่านได้ผ่านทางพอร์ตอนุกรมแสดงผลบน Serial monitor ทันที
โค๊ด: [Select]
void setup()
{
Serial.begin(115200);
delay(1000);
}
void loop()
{
Serial.println(touchRead(T0));
delay(100);
}

เนื่องจากค่าที่อ่านได้แสดงผลเป็นตัวเลขมีการแกว่งทำให้การวิเคราะห์ยาก ทำการเป็นการดูเป็นแบบกราฟแทน โดยดำเนินการตามรูป

สังเกตุค่าที่อ่านได้ จะเห็นว่ามีค่าที่แกว่งอยู่หากนำไปใช้งานโดยตรงจะทำให้โปรแกรมควบคุมงานทำงานผิดพลาดได้ จากรูปเป็นค่าในขณะที่ไม่มีการสัมผัส

ทดลองสัมผัสที่ตัวโลหะที่ขาสวิตช์สัมผัส ผลที่ได้เป็นดังรูป

เมื่อทดลองใช้ตัวเก็บประจุค่า 22pF ทำการกรองสัญญาณ ผลที่ได้ค่าจะลดลงแต่การแกว่งยังมีเหมือนเดิม

ตัวอย่างโปรแกรม [2] อ่านค่าจากขาสวิตช์สัมผัสจำนวนมากแล้วทำการเฉลี่ยก่อนใช้งาน
เขียนโปรแกรมอ่านค่าจากขาสวิตช์สัมผัส โดยอ่านค่าจำนวนมากแล้วทำการเฉลี่ยค่าที่อ่านได้ก่อนนำค่าที่ได้ไปแสดงผล ในตัวอย่างนี้ใช้วิธีการอ่าน 100 ครั้งโดยแต่ละครั้งของการอ่านจะห่างกัน 10 ไมโครวินาที
โค๊ด: [Select]
int touchValue = 0;
void setup()
{
Serial.begin(115200);
}
void loop()
{
for (byte i = 0; i < 100; i++)
{
touchValue += touchRead(T0);
delayMicroseconds(10);
}
touchValue/=100;
Serial.println(touchValue);
delay(50);
}

ตัวอย่างโปรแกรม [3] อ่านค่าจากขาสวิตช์สัมผัสแล้วไปควบคุมการทำงานของ LED
เขียนโปรแกรมอ่านค่าจากขาสวิตช์สัมผัสเพิ่มเติมจากตัวอย่างที่ 2 โดยให้ควบคุมการติดดับของ LED ใช้การตรวจสอบค่าเฉลี่ยของค่าที่อ่านจากสวิตช์สัมผัสหากต่ำกว่า 60 แสดงว่ามีการสัมผัสสวิตช์ (ดูจากกราฟผลการทดลองข้างต้น)
โค๊ด: [Select]
#define LED 27
int touchValue = 0;
void setup()
{
Serial.begin(115200);
pinMode(LED, OUTPUT);
}
void loop()
{
for (byte i = 0; i < 100; i++)
{
touchValue += touchRead(T0);
delayMicroseconds(10);
}
touchValue /= 100;
digitalWrite(LED, touchValue < 60 ? 1 : 0);
Serial.println(touchValue);
delay(50);
}