ชื่อโปรเจกต์: โปรเจกต์เซนเซอร์เคาะ (Tap Sensor) ฉบับวัยรุ่นสร้างตัว
const int buttonPin = 3; // ขา Pin ที่เอาไว้เสียบกับปุ่ม (ห้ามเสียบผิดนะน้อง)
const int led1 = 12;
const int led2 = 11;
const int led3 = 10;
const int led4 = 9;
// พวกนี้คือขา LED ที่เราจะสั่งให้สว่างโชว์ความเท่
// ตัวแปร (Variables) ที่จะมีการเปลี่ยนแปลงค่า:
int buttonCounter = 0;
int buttonState = 0; // สถานะปัจจุบันของปุ่ม
int lastButtonState = 0; // สถานะล่าสุดของปุ่ม (เอาไว้เช็คว่าโดนกดหรือยัง)
void setup() {
// เซ็ตขาปุ่มเป็น INPUT เตรียมรับแรงกระแทก:
pinMode(buttonPin, INPUT);
// เซ็ตขา LED ทั้ง 4 เป็น OUTPUT ให้หมด จัดไปวัยรุ่น:
pinMode(led1, OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
// เปิด Serial communication ไว้ดู Log สวยๆ ที่ความเร็ว 9600:
Serial.begin(9600);
}
void loop() {
// อ่านค่าจากปุ่มมาเก็บไว้ใน buttonState:
buttonState = digitalRead(buttonPin);
// เช็คหน่อยซิว่าสถานะปุ่มเปลี่ยนไปจากรอบที่แล้วหรือเปล่า
if (buttonState != lastButtonState) {
// ถ้าสถานะเปลี่ยน ก็ลุยเลย! เพิ่มตัวนับไป 1
if (buttonState == HIGH) {
// ถ้าสถานะปัจจุบันเป็น HIGH แสดงว่าปุ่มโดนกด
// จาก Off กลายเป็น On เรียบร้อย:
buttonCounter++;
Serial.println("on");
Serial.print("จัดไป! กดไปแล้ว: ");
Serial.println(buttonCounter);
}
else {
// ถ้าเป็น LOW แสดงว่าปล่อยปุ่มแล้ว
// จาก On กลับไปเป็น Off:
Serial.println("off");
}
}
// บันทึกสถานะปัจจุบันเก็บไว้เป็นสถานะล่าสุด เอาไว้ใช้เช็คใน Loop รอบหน้า
lastButtonState = buttonState;
// สูตรเด็ด! ใช้ Modulo เช็คเศษ ถ้าหาร 2 ลงตัว (เลขคู่) ให้ LED ติดยกแผง
// เพื่อเช็คการนับจำนวนครั้งที่กดแบบหล่อๆ
if (buttonCounter % 2 == 0) {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
} else {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
}
รายละเอียดทางเทคนิคเพิ่มเติม (อ่านซะจะได้ไม่งง)
ระบบตรวจจับแรงสั่นสะเทือนจากการเคาะ
โปรเจกต์นี้จะพาไปลองของกับเซนเซอร์ "เคาะ" หรือ Tap sensor เพื่อสร้างอินเตอร์เฟซแบบไร้สัมผัส ใช้แรงสั่นสะเทือนคุมเครื่องใช้ไฟฟ้าในบ้านกันน้อง
- การตรวจจับแรงสั่นสะเทือนด้วย Piezo (Piezoelectric Vibration Sensing): เราจะใช้ Piezo element มาเป็น Analog input เวลาเราเคาะโต๊ะปุ๊บ เจ้า Piezo จะปั่นแรงดันไฟพุ่งขึ้นมา ($V_{out}$) แล้วส่งให้ Arduino สุ่มวัดค่าด้วย ADC พร้อมกับใส่ "Signal Threshold" เพื่อกรอง Noise หรือแรงสั่นสะเทือนกากๆ รอบข้างทิ้งไป
- ระบบสลับสถานะ (Toggle State Machine): พี่เขียนโปรแกรมให้การเคาะ 1 ครั้ง ไปสลับค่า "State" ในซอฟต์แวร์ ซึ่งค่านี้จะไปสั่งงาน 5V Relay อีกที ทีนี้เราก็เปิด-ปิดโคมไฟหรือพัดลมได้ง่ายๆ แค่เคาะโต๊ะเบาๆ ก็พอ สู้งานนะน้อง!
การปรับจูนความไว (Sensitivity Calibration)
- ระบบหักลบค่าเริ่มต้นอัตโนมัติ (Automatic Baseline Nulling): มีฟีเจอร์ "Self-Calibration" ตอนเริ่มทำงานด้วยนะ โดย Arduino จะสแกนดูว่าในห้องมีแรงสั่นสะเทือนพื้นฐานเท่าไหร่ (เช่น สั่นจากพัดลมคอมพิวเตอร์ข้างๆ) แล้วมันจะตั้งค่า Trigger ไว้สูงกว่านั้นนิดนึง จะได้ไม่ทำงานมั่วซั่วไงล่ะตัวเธอ