กลับไปหน้ารวมไฟล์
project-on-tap-sensor-b498f4.md

ชื่อโปรเจกต์: โปรเจกต์เซนเซอร์เคาะ (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 ไว้สูงกว่านั้นนิดนึง จะได้ไม่ทำงานมั่วซั่วไงล่ะตัวเธอ

ข้อมูล Frontmatter ดั้งเดิม

title: "Project on tap sensor"
description: "Magical code"
author: "stt4236"
category: ""
tags:
  - "audio"
  - "communication"
  - "internet of things"
views: 2736
likes: 4
price: 1499
difficulty: "Intermediate"
components:
  - "1x Breadboard (generic)"
  - "1x tap module"
  - "1x Jumper wires (generic)"
  - "1x Arduino UNO"
  - "3x LED (generic)"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles: []
documentationLinks: []
passwordHash: "26cff26a455b560785513042dbb889a9b6b1648e3dd309d49ee998b34700d911"
encryptedPayload: "U2FsdGVkX19TjTxhUjWRrbnEj/QtS9pUYp7MYna0RXH0ciYCLW8whQNYNlUrbKsBy8jJvbRaUOI0Kdzoto/W9pTSl+qZz/8x9n14MSqIpA4="
seoDescription: "Build a tap Sensor project with Arduino featuring magical code for high-precision detection. Ideal for DIY electronics makers."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/project-on-tap-sensor-b498f4_cover.jpg"
lang: "th"