กลับไปหน้ารวมไฟล์
pushup-counter-helps-with-stay-at-home-training-cec1a3.md

title: "Push-Up Counter: ยกระดับการวิดพื้นด้วยระบบนับจำนวนอัตโนมัติ"

ในช่วงเวลาที่เราต้องใช้เวลาอยู่ที่บ้านมากขึ้น การออกกำลังกายกลายเป็นกิจกรรมสำคัญเพื่อรักษาฟิตเนสของร่างกาย แต่ปัญหาที่หลายคนเจอเหมือนกันคือ "การลืมนับจำนวนครั้ง" หรือการเสียสมาธิระหว่างทำเซตหนักๆ นี่คือแรงบันดาลใจในการสร้าง Push-Up Counter เครื่องช่วยนับจำนวนครั้งการวิดพื้นอัจฉริยะที่ใช้เซนเซอร์อัลตราโซนิกในการตรวจจับความเคลื่อนไหว พร้อมการแสดงผลแบบ Real-time และระบบแจ้งเตือนเมื่อทำครบเป้าหมาย

แนวคิดและหลักการทำงาน

โปรเจคนี้ถูกออกแบบมาให้เป็นอุปกรณ์วางบนพื้นภายใต้ตำแหน่งหน้าอกหรือหน้าผากของผู้ใช้งาน โดยใช้หลักการวัดระยะทางด้วยคลื่นเสียงเพื่อตรวจสอบว่าผู้ใช้งานย่อตัวลงมาใกล้พื้นมากพอที่จะนับเป็น 1 ครั้ง (Push-up rep) หรือไม่ โดยมีฟีเจอร์หลักดังนี้:

  • Visual Feedback: ใช้ RGB LED แสดงสถานะระยะห่าง เพื่อช่วยเช็คฟอร์มการวิดพื้น
  • LCD Display: แสดงจำนวนครั้งที่ทำได้จริงบนหน้าจอ 16x2
  • Audio Notification: ส่งเสียงสัญญาณเตือนทุกๆ 10 ครั้ง เพื่อสร้างแรงจูงใจ
  • Anti-Double Counting: ระบบ Logic ที่ป้องกันการนับซ้ำหากค้างตัวอยู่ในระยะต่ำนานเกินไป

รายละเอียดอุปกรณ์และบทบาทในเชิงวิศวกรรม

  1. Arduino Board: รับหน้าที่เป็นหน่วยประมวลผลกลาง คอยอ่านค่าจากเซนเซอร์และสั่งการ Output ต่างๆ
  2. Ultrasonic Sensor (HC-SR04): หัวใจหลักของระบบ ทำงานโดยการส่งคลื่นเสียงความถี่สูงออกไปและวัดระยะเวลาที่คลื่นสะท้อนกลับมา เพื่อคำนวณเป็นระยะห่าง (Distance) หน่วยเป็นเซนติเมตร
  3. LCD 16x2 (I2C หรือ Parallel): ใช้แสดงผลข้อความ "Push Ups:" และตัวเลขสะสม
  4. RGB LED: ทำหน้าที่เป็นตัวบอกระยะ (Indicator)
    • สีแดง: ระยะห่างมากกว่า 20 ซม. (ยังอยู่ในท่าเตรียม)
    • สีม่วง (Magenta): ระยะห่างระหว่าง 10 - 20 ซม. (กำลังย่อตัวลงมา)
    • สีน้ำเงิน: ระยะห่างน้อยกว่า 10 ซม. (เข้าสู่จุดนับคะแนน)
  5. Passive Buzzer: อุปกรณ์สร้างเสียงแจ้งเตือนเมื่อทำครบทุกๆ 10 ครั้ง
  6. Push Button: ปุ่มสำหรับ Reset ค่าการนับกลับไปเป็นศูนย์เพื่อเริ่มเซตใหม่

วิเคราะห์เจาะลึก Source Code

หัวใจของโปรเจคนี้อยู่ที่การจัดการ Logic ในส่วนของ loop() ซึ่งมีการจัดการที่น่าสนใจดังนี้:

1. การคำนวณระยะทางที่แม่นยำ

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;

ในโค้ดนี้ใช้สูตรการคำนวณระยะทางจากความเร็วเสียงที่ 340 เมตร/วินาที (หรือ 0.034 ซม./ไมโครวินาที) และหารด้วย 2 เพราะเป็นการเดินทางแบบไป-กลับ

2. ระบบไฟสถานะแบบผสมสี

ผู้พัฒนาใช้การควบคุมขา Digital สองขา (RED และ BLUE) เพื่อสร้างสีผสม:

  • เมื่อ distance <= 20 ขา BLUE จะ HIGH เสมอ
  • ถ้า distance > 20 ขา RED จะ HIGH ทำให้เห็นเป็นสีแดง
  • ถ้าอยู่ระหว่าง 10-20 ซม. ทั้ง RED และ BLUE จะ HIGH ผลลัพธ์คือ สีม่วง (Magenta)
  • ถ้าต่ำกว่า 10 ซม. RED จะถูกสั่ง LOW เหลือเพียงสีน้ำเงิน ซึ่งเป็นจุดยืนยันว่า "นับคะแนน"

3. การแก้ปัญหาการนับซ้ำ (State Handling)

นี่คือส่วนที่สำคัญที่สุดในเชิงวิศวกรรมซอฟต์แวร์:

while (distance <= 10) { 
    // วนลูปตรวจสอบระยะซ้ำๆ ตราบเท่าที่ผู้ใช้งานยังไม่ดันตัวขึ้น
    // ... code วัดระยะซ้ำ ...
    delay(100);
}

การใช้ while loop ครอบไว้หลังจากนับแต้มเพิ่ม (i++) จะทำให้โปรแกรม "หยุดรอ" ตราบใดที่ตัวผู้ใช้งานยังอยู่ใกล้เซนเซอร์ (น้อยกว่า 10 ซม.) โปรแกรมจะไม่นับแต้มต่อไปจนกว่าจะมีการดันตัวขึ้นไปพ้นระยะที่กำหนด วิธีนี้ช่วยตัดปัญหาการนับเลขรัวๆ ในการลงไปค้างเพียงครั้งเดียว

4. ระบบแจ้งเตือน Milestone

if (i == (10 * y) && x == (1 * y)) {
    tone(b, 146.8); // เล่นเสียงทำนองแจ้งเตือน
    // ...
    x++; y++;
}

มีการใช้ตัวแปร y เป็นตัวคูณเพื่อตรวจสอบว่าจำนวนครั้งลงท้ายด้วย 10 หรือไม่ (10, 20, 30...) และสั่งให้ Buzzer เล่นทำนองสั้นๆ เพื่อให้ผู้ใช้งานทราบผลโดยไม่ต้องก้มลงมามองหน้าจอ


วิธีการใช้งาน

  1. เชื่อมต่อวงจรตาม Pin ที่ระบุใน Code (เช่น LCD ต่อขา 6, 7, 2, 3, 4, 5)
  2. วางอุปกรณ์ไว้บนพื้นในตำแหน่งที่ตรงกับหน้าผากหรือหน้าอกขณะย่อตัวลงสุด
  3. กดปุ่ม Reset เพื่อเริ่มนับจาก 0
  4. เริ่มทำการวิดพื้น โดยสังเกตไฟ LED:
    • สีแดง: เตรียมพร้อม
    • สีม่วง: ลงมาครึ่งทาง
    • สีน้ำเงิน: นับคะแนน! (จะได้ยินเสียง Buzzer ทุกๆ 10 ครั้ง)

โปรเจคนี้เป็นตัวอย่างที่ดีเยี่ยมสำหรับการประยุกต์ใช้เซนเซอร์พื้นฐานในการแก้ปัญหาจริง (Real-world problem) และด้วยโครงสร้างโค้ดที่เข้าใจง่าย เหมาะอย่างยิ่งสำหรับผู้ที่เริ่มต้นศึกษา Arduino เพื่อพัฒนาไปสู่โปรเจค IoT ที่ซับซ้อนยิ่งขึ้นในอนาคต


หากคุณมีข้อสงสัยหรือต้องการปรับปรุงฟีเจอร์ เช่น การเก็บสถิติผ่านแอปพลิเคชันหรือการเพิ่มความแม่นยำด้วย Filter ทางคณิตศาสตร์ สามารถแลกเปลี่ยนความเห็นกันได้ครับ!

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

title: "Pushup Counter, helps with stay-at-home training!"
description: "This simple arduino project counts every push up you do and displays it on an LCD. It also provides visual and auditory support."
author: "glerumkyle"
category: "Wearables, Health & Fitness"
tags:
  - "sport"
  - "pushups"
  - "corona virus"
  - "ultrasonic sensor"
  - "training"
  - "rgb"
  - "lcd"
views: 11258
likes: 7
price: 1499
difficulty: "Easy"
components:
  - "1x Alphanumeric LCD, 16 x 2"
  - "1x Buzzer, Piezo"
  - "1x Resistor 1k ohm"
  - "1x RGB Diffused Common Cathode"
  - "1x Male/Female Jumper Wires"
  - "1x Resistor 10k ohm"
  - "1x Jumper wires (generic)"
  - "1x Arduino UNO"
  - "1x Ultrasonic Sensor - HC-SR04 (Generic)"
  - "1x Resistor 220 ohm"
  - "1x Button"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/0ffeced2-6e1e-4c03-bcda-96a1e6fa8640.ino"
  - "https://projects.arduinocontent.cc/0ffeced2-6e1e-4c03-bcda-96a1e6fa8640.ino"
documentationLinks: []
passwordHash: "c1f74fae73babf7b70e525823371337dfea8e9422ea3017b6a9440e572b586f8"
encryptedPayload: "U2FsdGVkX18mVEpi6haIDm9LR+WeaqUtiDDq3aNsH8OR1Q1Fqndt8NaENlQ1YdDrO163dLALLNi3xwpuxn3ybLNh+XeJMCwqylgMZy253l0="
seoDescription: "Build an Arduino Pushup Counter with LCD display, visual, and auditory support for effective stay-at-home training tracking."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/pushup-counter-helps-with-stay-at-home-training-cec1a3_cover.jpg"
lang: "en"