Introduction
เนื้อหาต่อไปนี้เคยถูกโพสต์ไว้ในบล็อกส่วนตัวของพี่มาก่อน
ที่บริษัท Delphi ในเมือง Gothenburg ที่พี่ทำงานอยู่ตอนนี้ พวกเราสร้างผลิตภัณฑ์เจ๋งๆ มากมายสำหรับอุตสาหกรรมยานยนต์ เพื่อจัดระเบียบกระบวนการพัฒนา พวกเราใช้ SCRUM และยึดถือตามหลักการ Agile ทุกเช้าเราจะมีการประชุมสั้นๆ เพื่อคุยกันว่าเราทำอะไรไปแล้วบ้างตั้งแต่ประชุมครั้งที่แล้ว เราวางแผนจะทำอะไรต่อไป และพูดถึงอุปสรรคที่เจอ การประชุมนี้หรือที่เรียกว่า "daily stand-up" นั้นควรจะสั้นและไม่ควรนานเกิน 10-15 นาที
แต่ทีมเรามีปัญหาอยู่นิดนึง: เพราะทีมเรามีแต่ Developer ที่ทั้งเก่งและไฟแรง พวกเราชอบคุยกันเรื่องงานที่ทำ รายละเอียดของงานที่ทำไปแล้ว หรือถกเถียงกันเรื่องเทคนิคต่างๆ บางครั้ง... ก็คุยกันนานไปหน่อย! ทำให้การประชุมยืดยาวและกินเวลาทำงานไปซะงั้น เพื่อแก้ปัญหานี้ พี่จึงขอเสนอ Scrumtato, อุปกรณ์ที่จะทำให้ daily stand-up ของเรากลับมา Agile อีกครั้ง!
The Agile Arbiter: Scrumtato คืออะไร?
Scrumtato คือฮาร์ดแวร์สุดสร้างสรรค์ที่ออกแบบมาเพื่อแก้ปัญหาโลกแตกในวงการเทค: การประชุม "Daily Stand-Up" ที่ยืดยาวจนลืมเวลา ในทีมที่เต็มไปด้วย Developer ไฟแรง การถกเถียงเรื่องเทคนิคอาจทำให้การประชุม 15 นาทีกลายเป็นชั่วโมงได้ง่ายๆ Scrumtato คือ ผู้คุมเวลาแบบ Agile ที่ทั้งสนุกและจริงจัง—เป็นแกดเจ็ตที่ได้แรงบันดาลใจจากเกม "Hot Potato" มันจะคอยกดดันน้องที่พูดยาวด้วยเสียงบี๊ปและการสั่นที่ถี่ขึ้นเรื่อยๆ บังคับให้อัพเดทงานแบบกระชับและตรงประเด็น
Part 1

แต่ไหนๆ แล้วก็เล่าย้อนไปตั้งแต่ต้นดีกว่า... เมื่อประมาณเดือนที่แล้ว พี่กำลังคิดหาแกดเจ็ตแบบพกพาเจ๋งๆ ที่ทำอะไรที่มีความหมายและใช้พลังงานจากแหล่งไฟเล็กๆ เช่น แบตเตอรี่แบบเหรียญ สุดท้ายพี่ก็ได้ไอเดียที่จะสร้างของเล่นที่ได้แรงบันดาลใจจากเกม Hot Potato ฟังก์ชันการทำงานจะง่ายมาก: ตัวจับเวลาจะนับถอยหลัง และส่งเสียงบี๊ปด้วยความถี่ที่สูงขึ้นเรื่อยๆ เมื่อเวลาใกล้หมด พอหมดเวลาแล้ว มันควรจะมีเสียงและแรงสั่นที่เป็นเอกลักษณ์เพื่อให้ดูเท่ขึ้น และเพื่อเพิ่มความตื่นเต้น ควรมี Accelerometer คอยตรวจจับว่าผู้เล่นถือลูกบอลไว้นานเกินไปหรือไม่ และเริ่มนับถอยหลังฉุกเฉินทันที ถ้าเกิดกรณีนั้น ผู้เล่นจะมีเวลาแค่ไม่กี่วินาทีในการส่งบอลต่อ ก่อนที่มันจะ "ระเบิด" ก่อนเวลา ไมโครคอนโทรลเลอร์อย่าง ATtiny85 ที่เราเชื่อใจได้ จะต้องอยู่ในโหมด Deep Sleep ให้มากที่สุดเพื่อประหยัดพลังงาน และทำให้แกดเจ็ตทำงานได้นานที่สุดด้วยแบตเตอรี่แบบเหรียญ นอกจากนี้ เปลือกทรงกลมที่พิมพ์จากเครื่อง 3D Printer จะช่วยปกป้องชิ้นส่วนอิเล็กทรอนิกส์และทำให้ตัวอุปกรณ์ดูน่าสนใจขึ้น เพราะสุดท้ายแล้วมันถูกออกแบบมาให้เด็กๆ ใช้เล่นนั่นเอง

Part 2
หลังจากออกแบบวงจรเสร็จ พี่ก็สั่งผลิต PCB กับบริการผลิต PCB ที่พี่ชอบใช้เวลาอยากได้บอร์ดเร็วๆ ในราคาประหยัด ไม่ถึงสัปดาห์บอร์ดก็มาส่งถึงมือผ่าน DHL พอดี ระหว่างรอ พี่ก็แชร์ไอเดียนี้กับทีมตอนพักดื่มกาแฟช่วงเช้า Jesper เพื่อนร่วมทีมคนนึง เสนอว่า เราน่าจะใช้เจ้าแกดเจ็ตนี้มาควบคุมเวลาในการประชุม stand-up ของเราแทน และนั่นคือที่มาของ Scrumtato (คำผสมระหว่าง SCRUM กับ Hot Potato) ไงล่ะ! จัดไปวัยรุ่น!

ไฟร์มแวร์หลายโหมด: ทั้งเครื่องมือและของเล่น
จากแพลตฟอร์มฮาร์ดแวร์ตัวเดียวกัน Scrumtato ของพี่รันโปรไฟล์ซอฟต์แวร์ได้สองแบบชัดเจนเลย:
- เครื่องมือ Scrum: นาฬิกานับถอยหลัง 1 นาที พร้อมเสียงบี๊บเตือนเป็นช่วงๆ ถ้านักพัฒนาเสร็จไม่ทันเวลา ตัวเครื่องจะสั่น "แบบระเบิด" โหมดนี้ถูกออกแบบมาให้ใช้หน่วยความจำน้อยสุด จนรันบน ATtiny25 ได้สบายๆ
- ของเล่น Hot Potato: เกมอินเทอร์แอคทีฟที่ใช้เซ็นเซอร์วัดความเอียง 3 แกน (ADXL335) ถ้ามีใครถือลูกบอลนานเกินไป มันจะเริ่ม "เดธเคานต์ดาวน์" ทันที โหมดนี้ต้องใช้ ATtiny85 เพราะต้องการหน่วยความจำเยอะกว่าและต้องประมวลผลทางคณิตศาสตร์เพิ่ม
Scrumtato คือวิธีของพี่ที่จะคุมนักพัฒนาไม่ให้คุยหรืออภิปรายกันยืดเยื้อตอนประชุมสแตนด์อัพประจำวัน วิธีใช้ง่ายมาก เริ่มด้วยการกดปุ่มที่ก้นของ Scrumtato แล้วจะได้ยินเสียงบี๊บสองครั้ง นักพัฒนามีเวลา 1 นาที (หรือตามที่ทีม SCRUM ตกลงกัน) ในการเล่าว่าทำอะไรไป จะทำอะไรต่อ และมีอุปสรรคอะไรไหม ทุกครั้งที่เวลาที่เหลือลดลงครึ่งหนึ่ง Scrumtato จะบี๊บหนึ่งครั้งเพื่อเตือนนักพัฒนาว่า "อย่าคุยยาว" อย่างที่คาดเดาได้ ความถี่ของเสียงบี๊บจะเพิ่มขึ้นเรื่อยๆ เพื่อกดดันว่าเวลาใกล้หมดแล้ว และ... นักพัฒนาคนนั้นด้วย! ถ้านักพัฒนาเล่าจบตามเวลา ก็กดปุ่มแล้วจะได้ยินเสียงบี๊บสามครั้ง แต่ถ้าเล่าไม่ทัน จะได้ยินเสียงบี๊บอีกแบบหนึ่ง พร้อมกับที่ลูกบอลสั่น
Part 3
และนั่นแหละน้อง ว่าทำไมจากฮาร์ดแวร์ชุดเดียวกัน เราจึงได้ไฟร์มแวร์ออกมาสองตัว คือเครื่องมือ Scrum กับของเล่น ตอนนี้ทั้งสองเคสยังแยกกันอยู่ แต่ถ้าจะเอามารวมกันก็ไม่น่ามีปัญหา เพราะลอจิกกับโค้ดคล้ายกันมาก ข้อดีของการแยกไว้คือ ไฟร์มแวร์เครื่องมือ Scrum สามารถรันบน ATtiny25 ที่ราคาถูกกว่าและมีแรมแค่ 2 KB ได้ ในขณะที่โหมดของเล่นต้องใช้อย่างน้อย ATtiny45 ที่มีแรม 4 KB ขึ้นไป

Part 4
วิศวะเพื่อประสิทธิภาพ: Deep Sleep กับ Watchdog
เพราะว่าเจ้าเครื่องนี้ใช้พลังงานจาก แบตเตอรี่ CR2032 แค่ก้อนเดียว การจัดการพลังงานเลยเป็นเรื่องที่เท่สุดในโปรเจกต์นี้:
- โหมดหลับลึก (Deep Sleep): ตอนที่ไม่งาน ATtiny85 กินกระแสน้อยกว่า $1\mu\text{A}$ เลยนะ ตัวมันจะตื่นก็ต่อเมื่อมีอินเตอร์รัพต์จากภายนอก (เช่น กดปุ่ม)
- จับเวลาด้วย Watchdog: เนื่องจากฟังก์ชัน
millis()ปกติของ Arduino มันไม่ทำงานตอนโหมดหลับ Scrumtato เลยใช้ Watchdog Timer มาจัดการเวลาแทน ทำให้ CPU ได้หลับสบายๆ ส่วนใหญ่ ช่วยยืดอายุแบตเตอรี่ไปได้หลายเดือนเลยทีเดียว - จัดสรรขา (Pin Management): ด้วยขา I/O ที่มีแค่ 5 ขาบน ATtiny85 ผู้สร้างเลยเลือกใช้ Accelerometer แบบอนาล็อก (แกน X) เพื่อประหยัดขาดิจิตอล แต่ยังตรวจจับการเคลื่อนไหวได้แม่นยำ
ในส่วนของซอฟต์แวร์ เรามีอยู่ 2 สถานะหลัก สถานะแรกคือโหมดหลับลึก (Deep Sleep) ซึ่งไมโครคอนโทรลเลอร์กินพลังงานน้อยมาก (ไม่ได้วัดเป๊ะๆ แต่น่าจะต่ำกว่า หรือประมาณ 1 uA) และสามารถถูกปลุกด้วยอินเตอร์รัพต์ (จากภายนอก) ได้ นี่คือสถานะที่ไมโครคอนโทรลเลอร์จะเข้าหลังจากจบเกมแต่ละเกม สถานะที่สองคือสถานะเล่นเกม ซึ่งเป็นที่ที่โค้ดหลักๆ ทำงาน และตัวไมโครคอนโทรลเลอร์เองก็ยังหลับอยู่เป็นส่วนใหญ่ แต่คราวนี้การหลับจะถูกขัดจังหวะโดย **Watchdog Timer** ซึ่งทำหน้าที่ควบคุมจังหวะการทำงานทั้งหมด ตัวอย่างเช่น ตอนที่เราตื่นขึ้นมา เราจะตรวจสอบว่าเวลาผ่านไปเท่าไหร่แล้ว หรือพูดง่ายๆ คือดูว่า Watchdog ปลุกเราขึ้นมากี่ครั้งแล้ว เพราะฟังก์ชัน `millis()` ที่เราคุ้นเคยมันให้ค่าที่ไม่ค่อยมีความหมายนัก เนื่องจากตัวไทเมอร์ที่มันอ้างอิงหยุดทำงานไปตอนที่ระบบหลับนั่นเอง เมื่อใช้เป็นของเล่น ในสถานะเล่นเกม เราจะจ่ายไฟให้ Accelerometer และอ่านค่าจากมันเพื่อประเมินว่าเกิดการ "ขยับ" ที่มากพอหรือไม่ ซึ่งบ่งบอกว่าลูกบอลกำลังถูกส่งต่อ ไม่ได้วางนิ่งๆ
ในส่วนของฮาร์ดแวร์ หรือก็คือ PCB การออกแบบค่อนข้างตรงไปตรงมา ความท้าทายหลักคือการทำให้บอร์ดเล็กที่สุดเท่าที่จะทำได้ และจัดการกับจำนวนขา I/O ที่มีอยู่อย่างจำกัด เพราะตระกูล ATTinyX5 มีแค่ 5 ขาเท่านั้น นอกจากนี้ ยังจำเป็นต้องมี Accelerometer ที่สามารถเปิด-ปิดได้ ดังนั้นเราจึงต้องจองขา I/O หนึ่งขาไว้สำหรับงานนี้ และเพื่อใช้ขาให้น้อยที่สุด ก็เลยเลือกใช้ Accelerometer แบบอนาล็อกที่ใช้ชิป ADXL335 (GY-61) การอ่านค่าจากแค่หนึ่งแกนโดยใช้เพียง 1 ขา ทำงานได้ดีอย่างน่าประหลาดใจ เมื่อคุณแค่ต้องการรู้ว่าลูกบอลถูกโยนไปให้ผู้เล่นคนอื่นหรือเปล่า ซึ่งต่างจาก I2C ที่อาจต้องใช้ถึง 2 ขา


ดีไซน์แบบทนทาน: ตัวเลือกการพิมพ์ 3D
เคสของ Scrumtato ออกแบบมาให้เหมาะกับสภาพแวดล้อมเฉพาะเจาะจง:
- รุ่น PLA: เป็นเคสแบบง่ายๆ ประกอบด้วยการกดประกบกัน เหมาะสำหรับใช้ในออฟฟิศ ดูโปรและพิมพ์ง่ายสุดๆ
- รุ่น ProFlex: เป็นดีไซน์พิเศษที่ใช้เส้นพลาสติกยืดหยุ่นได้ (ZYYX ProFlex) รุ่นนี้คือ "กันเด็กซน" ระดับเทพ ออกแบบมาให้ถูกโยนทิ้งขว้างและใช้งานหนักระหว่างเล่นเกม Hot Potato โดยใช้การประกอบแบบขันสกรูเพื่อความทนทานต่อแรงกระแทกสุดขั้ว
งานสุดท้าย ซึ่งใช้เวลามากที่สุด ก็คือการออกแบบและพิมพ์ 3D ตัวเปลือกหุ้มให้กับเจ้า Scrumtato นี่แหละ พิจารณาว่าอุปกรณ์นี้อาจจะโดนโยนไปมาเวลาใช้เป็นของเล่น วัสดุที่ใช้ก็ต้องทนต่อการกระแทกพื้นแรงๆ และปกป้องวงจรอิเล็กทรอนิกส์ข้างในให้ได้ เพื่อให้ได้ตามสเปคนี้ เราเลยเลือกใช้ เส้นพลาสติก proFlex จาก ZYYX มันเป็นวัสดุที่ใช้งานยากหน่อยแต่เจ๋งมาก ตัวอย่างเช่น ดีไซน์ที่พิมพ์ด้วย PLA ทั่วไป (พลาสติกแข็ง) ได้สวยเป๊ะ อาจจะพิมพ์ด้วยพลาสติกยืดหยุ่นไม่ได้เลย เราจึงจบด้วยการออกแบบสองแบบแยกกัน เพื่อให้เหมาะกับสถานการณ์การใช้งานที่ต่างกัน รุ่น PLA นั้นพิมพ์ง่ายกว่าและสองชิ้นส่วนก็แค่ "กด" เข้าหากันให้แน่น มันออกแบบมาสำหรับใช้ในออฟฟิศระหว่างประชุมสแตนด์อัพ มันอาจไม่แตกจากการกระแทกครั้งแรกหรอก แต่มันคงไม่ใช่ความคิดที่ดีถ้าจะโยนมันลงพื้นบ่อยๆ ส่วนรุ่นยืดหยุ่นนั้นพิมพ์ยากกว่าและต้องใช้ซัพพอร์ตเพื่อให้พิมพ์ออกมาได้ดี มันก็ประกอบจากสองชิ้นส่วนเช่นกัน แต่ชิ้นส่วนด้านล่างจะถูกขันสกรูเข้ากับด้านบน รุ่นยืดหยุ่นนี่... เอาไปทำอะไรเกือบทุกอย่างได้เลย! (จัดไปวัยรุ่น)




ตอนที่ 5
มาดูวิดีโอพวกเรากำลังเล่นเกม Hot Potato กัน ในคลิปจะเห็นโหมดนับถอยหลังเร็วที่ถูกกระตุ้นสองครั้งเพื่อ "ลงโทษ" เพราะเราส่งบอลไม่เร็วพอ (ห้ามช็อตนะตัวนี้) ส่วนวิดีโอที่สองจะแสดงให้เห็นว่าเมื่อมันระเบิดก่อนเวลาจะดูเป็นยังไง เสียงเป็นยังไง และรู้สึกยังไง
อนาคตแบบ Open Source
Scrumtato เป็นระบบนิเวศแบบโอเพ่นซอร์สที่ครบวงจรเลยนะน้อง ผู้สร้างเขามีวิสัยทัศน์สำหรับเวอร์ชันในอนาคต รวมถึงการเพิ่ม BLE (Bluetooth Low Energy) เพื่อส่งข้อมูลวิเคราะห์การประชุมไปยังสมาร์ทโฟนของ Scrum Master โดยตรงเลย ไม่ว่าพี่จะน้องจะเป็นนักพัฒนามืออาชีพที่อยากจัดระเบียบเวิร์กโฟลว์ หรือเป็นมือใหม่ที่สนใจการออกแบบ SMD แบบประหยัดพลังงาน Scrumtato นี่คือคลาสเรียนระดับมาสเตอร์สำหรับวิศวกรรมฝังตัวสมัยใหม่เลยล่ะ
แล้ว... อะไรต่อไปล่ะ? เอาเป็นว่าเริ่มต้นง่ายๆ ก็น่าจะเจ๋งถ้าลูกบอลมันสว่างขึ้นอีก ตอนนี้ LED แบบ SMD ที่อยู่บนบอร์ดดูเหมือนจะยังไม่เพียงพอนะ บางที LED ขนาด 5mm ปกติอาจจะเหมาะกว่า ต่อไปก็ควรหาวิธีทำให้เสียงออดดังขึ้น ตอนนี้ก็ไม่ได้แย่หรอกนะ แต่ถ้ามันดังขึ้นอีกนี่จะโคตรเจ๋งเลย และก็ปุ่มรีเซ็ตนี่ขาดไม่ได้แน่ๆ มีไว้มีประโยชน์เสมอ ในระยะยาว การเพิ่มความสามารถในการเชื่อมต่อนี่น่าสนใจมากและจะเพิ่มความสามารถในการใช้งานของ Scrumtato ขึ้นอย่างมากเลย เช่น การเพิ่มโมดูล BLE และรับข้อมูลวิเคราะห์เกี่ยวกับการประชุม stand-up บนสมาร์ทโฟนของ Scrum Master โชคดีที่โปรเจกต์นี้เป็นโอเพ่นซอร์สทั้งหมด ตั้งแต่ซอฟต์แวร์ไปจนถึง PCB และเคสที่พิมพ์จากเครื่อง 3D พริ้นเตอร์ เพราะฉะนั้นน้องสามารถมาร่วมวงและช่วยกันพัฒนาต่อได้เลย! :)
น้องจะพบทุกอย่างที่จำเป็นสำหรับการสร้างซ้ำและพัฒนาต่อได้ที่ GitHub repository ของโปรเจกต์นี้



ข้อมูล Frontmatter ดั้งเดิม
title: "Scrumtato: จัดการประชุมสแตนด์อัพให้ตึงๆ ไวไวอีกครั้ง!" description: "Scrumtato คือแกดเจ็ตเทพๆ ที่ใช้ ATtiny85 ควบคุม ไว้ช่วยให้พวกนักพัฒนาหัวร้อน(เกินไป) ไม่พูดกันยืดยาวจนเกินเวลาตอนประชุมสแตนด์อัพ งานง่ายแต่หล่อ วัยรุ่นวิศวะต้องจัดไป!" author: "platisd" category: "" tags: - "embedded" - "energy efficiency" - "toy" views: 2003 likes: 0 price: 699 difficulty: "Intermediate" components: - "1x ATtiny85" - "1x Buzzer" - "1x Soldering iron (generic)" - "1x General Purpose Transistor NPN" - "1x Scrumtato PCB" - "2x Resistor 10k ohm" - "1x LED (generic)" - "1x Angled tactile switch" - "1x SMD Vibration Motor" - "1x Resistor 221 ohm" - "1x Pushbutton switch 12mm" - "1x Coin Cell Battery CR2032" - "1x SparkFun Triple Axis Accelerometer Breakout - ADXL335" - "1x Resistor 1k ohm" - "1x Resistor 22.1 ohm" - "1x 3D Printer (generic)" tools: [] apps: - "1x Arduino IDE" downloadableFiles: - "https://github.com/platisd/scrumtato/tree/master/firmware" - "https://github.com/platisd/scrumtato/tree/master/firmware" documentationLinks: [] passwordHash: "81f27d3e6494df42f66efb17a89129a39ad000804bc5883bcb3c2ef91c859b3c" encryptedPayload: "U2FsdGVkX1878xQ9YoOEbOi9F5TMhtTXiLrTYa0owJ/IRn4zeQKJScVBrAsDfU4dv2BX/K13vJ1nSe5jbMjJNFg6zWqTPth9SbAev3OSA6w=" seoDescription: "Scrumtato: An ATtiny85 gadget to keep Daily Stand-Up meetings concise and Agile by limiting talk time for Developers." videoLinks: - "https://www.youtube.com/embed/Ymbw8KRV93A" - "https://www.youtube.com/embed/FF8F3XdmHtM" - "https://www.youtube.com/embed/nFmg0xUn-nY" - "https://www.youtube.com/embed/7J2yhwsqljs" heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/scrumtato-make-daily-stand-ups-agile-again-c9efec_cover.jpg" lang: "en"