ชื่อโปรเจกต์: Simple fitness timer (เครื่องจับเวลาออกกำลังกายฉบับเด็กช่าง)
Story:
จัดไปวัยรุ่น! นี่คือเครื่องจับเวลาออกกำลังกายแบบง่ายๆ เอาไว้คุมจังหวะตอนยกเวทหรือทำ HIIT (High Intensity Interval Training) ให้เป๊ะเหมือนมีเทรนเนอร์ส่วนตัว
Hardware:
[Arduino](https://s.shopee.co.th/7fUgFAWSki) UNO (ตัวเก่งเจ้าเดิม)
[LCD](https://s.shopee.co.th/6AfsSPcAnb) shield พร้อมปุ่มกด - ของพี่ตัวนี้มันมีปัญหาเรื่องไฟ Backlight [1] พี่เลยถอด Pin 10 ที่มันกวนใจออกไปซะ
Stackable prototype shield - อันที่เห็นในรูปจริงๆ มันคือ Data logging shield นะ แต่พี่ไม่ได้ใช้ฟีเจอร์นาฬิกากับ SD card ของมันหรอก พอดีมี Piezo sounder บัดกรีค้างไว้อยู่แล้วเลยหยิบมาใช้แก้ขัด สะดวกดีน้อง
Piezo sounder ต่อเข้าที่ Pin 3
การประกอบก็แค่เอา Module มาเสียบซ้อนกันเหมือนเค้กนั่นแหละ งานนี้บัดกรีแค่ตัว Piezo sounder จุดเดียว จิ๊บๆ สู้งานนะน้อง
Software:
ตัว Software วิ่งตาม Loop พื้นฐานเลย
ส่วนเรื่องปุ่มกด พี่ใช้ระบบ Debounce ผ่าน Interrupt routine ที่เอามาจากไฟล์ของลุง Jack Ganssle [2] แต่มีลูกเล่นกวนๆ หน่อยคือ มันจะรับคำสั่ง "กด" ตอนที่เรา "ปล่อย" ปุ่ม (พอดีพี่เคยเอาไปใช้กับ Chorded keyboard มาก่อนน่ะ)
เสียงปี๊บๆ สร้างมาจาก PWM และใช้ delay() คุมจังหวะเวลาเอา
แล้วก็มี Function แยกต่างหากไว้คอย Update หน้าจอ [LCD](https://s.shopee.co.th/6AfsSPcAnb) ให้หล่อเท่ตลอดเวลา
Functioning (วิธีใช้งาน):
เปิดเครื่องดิรออะไร
กดปุ่ม Up เพื่อตั้งเวลาช่วงออกแรง (Work period)
กดปุ่ม Down เพื่อตั้งเวลาช่วงพัก (Rest period)
กดปุ่ม Select เพื่อเลือกว่าจะให้เครื่องสลับช่วง Work กับ Rest แบบ Auto ไหม
กดปุ่ม Left (เริ่มลุย) หรือ Right (เริ่มพัก) เพื่อเริ่มจับเวลาช่วงนั้นๆ
ในโหมดปกติ พอจบช่วงเวลามันจะมีเสียงปี๊บยาวเตือน แต่ถ้าเปิดโหมด Toggle เครื่องมันจะวนลูป Work ไป Rest หรือ Rest ไป Work ให้เองตามที่เรากดเริ่มตอนแรก
ส่วนที่ว่าทำไมต้องเริ่มด้วยช่วงพัก? ก็เพื่อให้แกมีเวลาเตรียมท่า เตรียมอุปกรณ์ให้พร้อมก่อนเริ่มลุยจริงไง จะได้ไม่ต้องรีบจนหน้ามืด
Limitations (ข้อจำกัด):
พี่สังเกตว่าปุ่มมันมีอาการ Lag บ้าง โดยเฉพาะตอนเพิ่งเปิดเครื่องใหม่ๆ น่าจะเป็นเพราะ Analog read มันต้องใช้เวลาตั้งตัวให้นิ่ง (Stabilize) นิดนึงนะ
References:
[1] [LCD](https://s.shopee.co.th/6AfsSPcAnb) shield problem page:
[2] Debouncing pdf:
EXPANDED TECHNICAL DETAILS (เจาะลึกแบบวิศวะ)
HIIT and Interval Training Hub
เครื่องจับเวลาตัวนี้ออกแบบมาให้ถึกทน เหมาะกับการพกพาไปใช้คุมจังหวะตอนทำ HIIT ด้วยสัญญาณเสียงและหน้าจอที่ชัดเจน
- Countdown Interval Logic: ตัว Arduino จะใช้ State machine ที่อ้างอิงจาก
millis()ในการวนลูปช่วง "Work" และ "Rest" โดยเราสามารถตั้งค่าเวลาได้ผ่าน Tactile buttons - High-Decibel Feedback: ใช้ Passive piezo buzzer ขับด้วยสัญญาณ PWM เพื่อสร้างโทนเสียง "เริ่ม" และ "หยุด" ที่ต่างกัน ถ้าใครเล่นในยิมเสียงดังๆ ก็โมเพิ่มให้มันสั่งงาน Strobe LED สว่างๆ เตือนแทนได้ หล่อเท่เลยงานนี้
Portability (การพกพา)
- LiPo Battery Powered: ใช้แบต LiPo 3.7V ก้อนเล็กๆ ผ่านวงจร Boost converter แปลงเป็น 5V ใน Code พี่เขียนระบบ "Deep Sleep" ไว้ให้มันปิดตัวเองอัตโนมัติถ้าลืมทิ้งไว้หลังออกกำลังกายเสร็จ ประหยัดแบตสุดๆ ห้ามช็อตนะตัวนี้!