กลับไปหน้ารวมไฟล์
countdown-crono-for-gym-ce9422.md

Introduction

บางทีเราก็ต้องการนาฬิกานับถอยหลังที่วนลูปนับเวลาเดิมซ้ำๆ หลายๆ รอบน่ะ

ตัวอย่างเช่น ถ้าเรากำลังออกกำลังกายในยิม แล้วอยาก dedicate เวลาให้แต่ละท่าทำละ 1 นาที พอนาฬิกานับถอยหลังจบ มันต้องส่งเสียงปลุก แล้วตัวจับเวลาก็ต้องรีเซ็ตกลับไปที่เวลาที่เราตั้งไว้ พร้อมเริ่มนับใหม่ได้ด้วยการกดปุ่มเดียว

เราอยากให้นาฬิกาตัวนี้ตั้งค่าได้ง่ายๆ ด้วย

การทำงานของนาฬิกาสำหรับฟิตเนส

เป้าหมายคือให้ทำแต่ละท่าออกกำลังกายในเวลาที่กำหนด ซึ่งนาฬิกามีฟังก์ชันเดียวเลยคือ COUNTDOWN

เป้าหมายรองๆ ลงมาคือ:

  • ต้องตั้งค่าได้ง่ายมากๆ จะได้โฟกัสกับท่าออกกำลังกายได้เต็มที่
  • ต้องหยุดและเริ่มใหม่ได้ง่ายมากๆ
  • ต้องให้เวลาเราเตรียมท่าเริ่มต้นก่อนเริ่มนับจริงได้

1 - เมื่อเปิดนาฬิกา มันจะตั้งไว้ที่ 00:00

2 - ทุกครั้งที่กด Reset มันจะกลับมาที่สถานะนี้

3 - กดปุ่ม +1 นาฬิกาจะเพิ่มเวลา 1 นาทีเข้าไปในตัวนับถอยหลังที่แสดงอยู่

4 - กดปุ่ม +5 จะเพิ่มเวลา 5 นาที

5 - กดปุ่ม +10 จะเพิ่มเวลา 10 นาที

6 - ต้องจำไว้ตอนเขียนโปรแกรมนะ ว่าเวลาสูงสุดคือ 99 นาที

7 - กดปุ่ม Start

  • ถ้ายังไม่ได้ตั้งเวลา จะได้ยินเสียงเตือน error
  • ถ้าตั้งเวลาแล้ว มันจะทำงานตามนี้
  • มันจะนับถอยหลังจาก 5 ลงไป 0 พร้อมเสียงบี๊บแบบ Formula One ทุกวินาที และเสียงดังขึ้นเมื่อถึง 0
  • จากนั้นจะเริ่มนับถอยหลังจริงตามเวลาที่แสดงบนจอ
  • เมื่อนับถอยหลังจบ จะมีเสียงปลุก
  • นาฬิกาจะรีเซ็ตกลับไปที่เวลาที่ตั้งไว้

8 - เมื่อกด Start ในสถานะต่างๆ:

  • NOT_SET : จะมีเสียง error
  • READY : จะเริ่มนับถอยหลัง
  • COUNTING : จะหยุดนับถอยหลัง
  • PAUSE : จะเริ่มนับถอยหลังต่อ

9 - เมื่อกดปุ่ม +1, +5 และ +10 ในสถานะต่างๆ:

  • NOT_SET : ตั้งค่านับถอยหลังเป็นค่าที่กด
  • READY : เพิ่มค่าลงไปในเวลานับถอยหลัง
  • COUNTING : ไม่มีผล
  • PAUSE : ไม่มีผล

10- เมื่อกดปุ่ม Reset ในสถานะต่างๆ:

  • NOT_SET : โปรแกรมถูกรีเซ็ต
  • READY : โปรแกรมถูกรีเซ็ต
  • COUNTING : การนับจบลง โดยไม่มีเสียงปลุกสุดท้าย และรีเซ็ตกลับไปที่เวลาที่ตั้งไว้
  • PAUSE : การนับจบลง โดยไม่มีเสียงปลุกสุดท้าย และรีเซ็ตกลับไปที่เวลาที่ตั้งไว้

First prototype

First prototype.

ใน prototype ตัวแรกนี้เรามีสามฟังก์ชันการทำงาน เราเอามาต่อรวมกันไว้ที่นี่หมดเลย แต่เราจะทดสอบแต่ละส่วนด้วยโปรแกรมแยกกันนะ ฟังก์ชันแรกคือเรื่องการแสดงผล เวลานับถอยหลังและข้อมูลอื่นๆ บนจอ 7 segments 4 หลัก ฟังก์ชันที่สองคือเรื่องปุ่มกด ที่จะใช้ควบคุม prototype และฟังก์ชันที่สามคือเรื่องเสียง ที่ prototype จะเล่นออกมา

Schema of the prototype.
การต่อสายจอแสดงผล

High-Intensity Training (HIIT) Chronometer

โปรเจคนี้คือตัวจับเวลาช่วง (Interval Timer) แบบโหดๆ ที่เห็นชัดเจนในทุกสภาพแสง เอาไว้จัดการลำดับการออกกำลังกายและช่วงพักฟื้นแบบอัตโนมัติ

  • Dual-Phase Timer Logic: ผู้ใช้สามารถตั้งค่าช่วง "Work" และ "Rest" ผ่านปุ่มกดได้เลย Arduino จะจัดการเปลี่ยนสถานะให้ พร้อมส่งเสียงบี๊บดัง 80dB ตอนเริ่มและจบแต่ละเซ็ต
  • High-Brightness Visualization: ใช้จอแสดงผล 7-Segment 4 หลัก ขนาดใหญ่ Firmware มีโหมด "Final 10-Second Countdown" ที่ให้ไฟกระพริบเร็วๆ เพื่อกระตุ้นนักกีฬา
  • One-Touch "Start/Pause" Hub: มีปุ่มใหญ่แบบตู้เกมตีได้เลย (Slap button) สำหรับเริ่มและหยุดจับเวลา ออกแบบมาให้จับถนัดมือแม้จะเหงื่อออกหรือใส่ถุงมือ

ทดสอบการทำงานของจอแสดงผล

แผนภาพต่อไปนี้จะแสดงการต่อทรานซิสเตอร์ทั้งสี่ตัวกับตัวต้านทาน (Resistor) ของมัน และขาใน Arduino ที่ต้องต่อเข้าไป โปรแกรมชื่อ "Display4Digits_Test.ino" ต้องถูกอัพโหลดลงบอร์ดเพื่อทดสอบว่าจอแสดงผลต่อถูกต้องแล้ว

โปรแกรมนี้จะทำการเปิด-ปิดทุก Segment ในทุก Digit แบบต่างๆ 3 รูปแบบ และสุดท้ายจะแสดงตัวเลข 0 ถึง 9 บนแต่ละหลัก

ถ้าทดสอบแล้วเวิร์ค ก็ไปต่อในส่วนถัดไปได้เลยจ้า

ต้องระวังไว้นิดนึงว่า จอแสดงผลมีหลายรุ่นมาก แต่ละรุ่นก็มีการจัดเรียงขา (Pin Configuration) และรายละเอียดเฉพาะตัวต่างกันไป ต้องปรับค่าขาในโปรแกรมทดสอบให้ตรงกับจอที่ใช้ ถึงจะรันได้ตามที่คาดหวังนะ

ผลลัพธ์การทดสอบจอแสดงผล

ทดสอบการทำงานของปุ่มกด

ทีนี้เราจะมาทดสอบกันว่าปุ่มทั้งสี่ปุ่มบนต้นแบบ (Prototype) ทำงานได้ดีมั้ย

ไหนๆ ก็มีจอแสดงผลทำงานอยู่แล้ว เราก็ใช้มันแสดงผลการทดสอบของเราสิ

เราตั้งชื่อปุ่มว่า "+1 button", "+5 button", "+10 button", "reset" และ "start"

เมื่อกดปุ่ม +1 จอจะแสดง "1111" และแสดง "5555" เมื่อกดปุ่ม +5 ตามตรรกะแล้ว ถ้ากดปุ่ม +10 จอจะแสดง "0000" ส่วนปุ่ม reset จะแสดง "3333" และปุ่ม start จะแสดง "8888"

  • +1 = 1111
  • +5 = 5555
  • +10 = 0000
  • Reset = 3333
  • Start = 8888

โค้ดตัวอย่างสำหรับการทดสอบนี้สามารถดูได้ในโปรเจคหลักเลยนะ

ทดสอบการทำงานของเสียง

เราต้องการเสียงอย่างน้อยสี่แบบที่แตกต่างกัน

  • End Count Sound สำหรับตอนที่การนับถอยหลังจบลง
  • Error Sound เมื่อเกิดข้อผิดพลาดหรือการทำงานที่ผิดปกติ
  • Go Sound ในช่วงนับถอยหลังสั้นๆ "Be Ready" เป็นเสียงสุดท้ายที่ตรงกับเวลา Zero พอดี
  • เสียง F1 ในตอนนับถอยหลังรอบที่แล้ว ทุกๆ วินาที

หลังจากที่เราลองกดปุ่มกันจนหนำใจแล้ว คราวนี้เราจะมาเซ็ตเสียงให้กับปุ่มแต่ละปุ่มกัน ตามนี้เลย:

  • ปุ่ม +1: เสียงนับถอยหลังจบ (End Count Sound)
  • ปุ่ม +5: เสียงเตือนเมื่อมีอะไรผิดพลาด (Error Sound)
  • ปุ่ม +10: เสียงสตาร์ท (Go Sound)
  • ปุ่ม Reset: เสียงรถ F1 นั่นแหละ (F1 Sound)

โค้ดสำหรับทดสอบส่วนนี้ก็ลองไปดูกันได้ อย่าลืมเซฟเก็บไว้ล่ะ

การประกอบ Shield

การประกอบโมดูลสำหรับปุ่มกดและจอแสดงผล

Shield พร้อมชิ้นส่วนทั้งหมดที่ประกอบเสร็จแล้ว

โชว์ของทั้งหมด ก่อนจะเอาไปประกอบเข้าด้วยกันเป็นชิ้นเดียว

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

apps:
  - "1x Arduino IDE"
author: "juanc_cilleruelo"
category: "Wearables, Health & Fitness"
components:
  - "101x Varios types of screws"
  - "1x Button 16mm"
  - "101x some metallic separators"
  - "1x soldering: tin/pb 60% 40%"
  - "4x Puss Buttons 12x12x7.3 with capsule."
  - "1x Arduino UNO"
  - "1x Speaker: 0.25W, 8 ohms"
  - "20x Jumper wires (generic)"
  - "2x General Purpose Transistor NPN"
  - "3x Placa PCB Doble Cara Prototipo FR-4"
  - "1x Generic Solder  (preferable JBC)"
  - "1x Wood Box to hold the whole project"
  - "1x Display 7 Segments 4 Digits common catode"
  - "1x Conector Pin 1 x 40 Pin 2.54mm Recto Una Fila PCB Hembra"
  - "8x Kit de resistencias 1/4W"
description: "นาฬิกานับถอยหลังแบบตั้งเวลาได้ง่ายๆ รีสตาร์ทเร็วตึงๆ พร้อมสัญญาณเตือนสุดจัดให้ วัยรุ่นฟิตเนสต้องมี!"
difficulty: "Easy"
documentationLinks: []
downloadableFiles:
  - "https://create.arduino.cc/editor/juanc_cilleruelo/482605e8-ad29-4ec5-a212-85aa746b812d/preview"
  - "https://create.arduino.cc/editor/juanc_cilleruelo/de792cf4-47b6-48d7-ac26-9d3113374667/preview"
  - "https://create.arduino.cc/editor/juanc_cilleruelo/8e9691f3-0924-4c96-8118-eb64dfc7ff19/preview"
  - "https://create.arduino.cc/editor/juanc_cilleruelo/de792cf4-47b6-48d7-ac26-9d3113374667/preview"
  - "https://create.arduino.cc/editor/juanc_cilleruelo/8e9691f3-0924-4c96-8118-eb64dfc7ff19/preview"
  - "https://create.arduino.cc/editor/juanc_cilleruelo/395e50ae-a7a6-41ef-9dbc-bbb78ec00954/preview"
  - "https://create.arduino.cc/editor/juanc_cilleruelo/482605e8-ad29-4ec5-a212-85aa746b812d/preview"
encryptedPayload: "U2FsdGVkX18QQdsKoMsmIKNndafaXr27kTZdCdIe9YgU0jqO7/WcUUCGVRHKQIE+AaiFya4UvHD9H9yVRiyJ3CA5nPu/sUq1rZUwQnmetZg="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/countdown-crono-for-gym-ce9422_cover.jpg"
lang: "en"
likes: 4
passwordHash: "620df982cbe32f219682bb0ce629c0021af9f5d5247f0d80cab789f3ac31a812"
price: 1120
seoDescription: "Arduino Countdown Crono for Gym. Easy to configure, quick Restart, and Alarm. The perfect timer for your fitness workouts."
tags:
  - "clocks"
  - "entertainment system"
  - "health"
title: "นาฬิกานับถอยหลังสำหรับฟิตเนส งานง่ายแต่หล่อ!"
tools: []
videoLinks:
  - "https://player.vimeo.com/video/183981215"
  - "https://player.vimeo.com/video/183998059"
  - "https://player.vimeo.com/video/184050635"
  - "https://player.vimeo.com/video/185031863"
  - "https://player.vimeo.com/video/185045085"
  - "https://player.vimeo.com/video/185113761"
  - "https://player.vimeo.com/video/185115656"
views: 7220