![ทำ Nike FuelBand! จัดเรียงของ ... : 5 ขั้นตอน ทำ Nike FuelBand! จัดเรียงของ ... : 5 ขั้นตอน](https://img.gwsigeps.com/img/circuits/make-a-nike-fuelband-sort-of.-4.jpg)
สารบัญ:
- วัสดุ:
- ขั้นตอนที่ 1: เดินสาย Accelerometer
- ขั้นตอนที่ 2: ต่อสายแฟลช
- ขั้นตอนที่ 3: การประกอบขั้นสุดท้าย
- ขั้นตอนที่ 4: อัปโหลดซอฟต์แวร์
- ขั้นตอนที่ 5: การรวบรวมข้อมูลและการปิดความคิด
ย้อนกลับไปในเดือนตุลาคมปี 2012 ฉันได้รับรางวัล Nike FuelBand ระหว่างการหาทุนที่โรงยิม CrossFit ของฉัน * ฉันเข้าสู่การรวบรวมข้อมูลจริงๆฉันตื่นเต้นที่มีตัวบันทึกกิจกรรมตลอด 24 ชั่วโมง ฉันไม่รู้ว่า FuelBand ทำงานอย่างไร ฉันไม่เห็นโพรบ galvanometer ใด ๆ (perspriation), IR LEDs (อัตราการเต้นของหัวใจ) หรือความยืดหยุ่นที่ จำกัด (ความดันโลหิต) ใด ๆ ดังนั้นชัดเจนว่ามันไม่ได้อ่านค่าไบโอเมตริกซ์ เนื่องจากฉันค่อนข้างทันสมัยเกี่ยวกับเทคโนโลยีเซ็นเซอร์ทั่วไปจึงเหลือเพียงเครื่องวัดความเร่งและไจโรสโคป หากฉันไม่มีอะไรโปรดส่งอีเมล!
ฉันสังเกตได้ทันทีสิ่งแรกที่ทุกคนสังเกตเห็นมากที่สุดคือยิ่งคุณเขย่าแถบน้ำมันมากเท่าไหร่ก็ยิ่งทำให้การวัดของ NikeFuel เพิ่มมากขึ้นเท่านั้น เห็นได้ชัดว่านี่ไม่ใช่การวัดที่ซับซ้อนและการใช้ตัวชี้วัด NikeFuel ตามอำเภอใจดูเหมือนจะบ่งบอกถึงสิ่งนี้ ฉันตระหนักถึงข้อ จำกัด ของ telemetry ที่สวมใส่ได้ดังนั้นฉันจึงดูผลิตภัณฑ์นี้ไม่ได้เป็นอุปกรณ์วิทยาศาสตร์ที่ออกแบบมาเพื่อวัดค่าใช้จ่ายแคลอรี่หรือ VO2max ถึงทศนิยม 5 ตำแหน่ง แต่เป็นวิธีการออกกำลังกายเชิงปริมาณและเป็นกลไกในการพัฒนากิจวัตรประจำวันสำหรับผู้ที่ต้องการ เขยิบพิเศษนั่น
สิ่งนี้ทำให้ฉันคิดว่าฉันจะรวบรวมตัวชี้วัดที่มีรายละเอียดเกี่ยวกับการออกกำลังกายของฉันได้อย่างไร ฉันสร้างเซ็นเซอร์ที่แตกต่างกันประมาณเจ็ดตัวที่ฉันสามารถสร้างซึ่งจะไม่เป็นการรบกวนและสร้างเพียงข้อมูลการเคลื่อนไหวเพียงอย่างเดียว แต่ก่อนอื่นฉันต้องสร้างแพลตฟอร์มที่สวมใส่ได้จริงด้วยอุปกรณ์ตรวจจับความเคลื่อนไหวพื้นฐาน
คำแนะนำนี้ใช้ 3D accelerometer ที่ติดตั้งกับ Arduino Uno, หน่วยความจำแฟลชสำหรับบันทึกข้อมูลและส่วนต่อประสานผู้ใช้ที่ค่อนข้างหยาบเพื่อควบคุมการปรับเทียบการบันทึกและการจัดการไฟล์ ทั้งหมดนี้อยู่ในแพ็คเกจติดข้อมือเล็ก ๆ (ฉันชอบ Uno เพราะขนาดของมัน, ตัวป้องกันต้นแบบให้พื้นที่มากกว่าอุปกรณ์ขนาดเล็ก)
รายการวัสดุ:
Arduino Uno
www.sparkfun.com/products/11021
SparkFun 3D Acceleromtoer (และบางส่วนมีการหยุดหมุดเพื่อประสาน)
www.sparkfun.com/products/10955
DFRobot แผงปุ่มกดจอแอลซีดี
http: //www.dfrobot.com/index.php เส้นทาง = สินค้า / โปร …
DFRobot Uno Prototype Board
http: //www.dfrobot.com/index.php เส้นทาง = สินค้า / โปร …
ไดโอดซีเนอร์ 3.3V 5x
SPST Slide Switch
8mbit W2Q80 WinBond Flash Chip
สกรูสองตัวขนาด 1/2 นิ้วและสกรู 8 ตัวที่เหมาะสมกับ Uno footprint
ปริมาณขนาดเล็กของเส้นลวดแข็ง 20ga
เวลโคร
ที่ใส่แบตเตอรี่ 4xAAA
แบตเตอรี่ 4xAAA
เทปพันท่อ
* น่าเสียดายที่สุนัขของฉันถูกเพื่อนสุนัขดูดไว้ไม่กี่สัปดาห์ต่อมา น่าเสียดายที่มันไม่รอดจากการเดินทางผ่านทางเดินอาหารของสุนัขไม่ใช่ว่าถ้ามันรอดชีวิตมาได้ฉันก็ยังอยากจะใช้มัน
วัสดุ:
ขั้นตอนที่ 1: เดินสาย Accelerometer
เลือกจุดบนโล่และประสานส่วนหัว 8 พินลง วางเซ็นเซอร์ 3D ไว้บนส่วนหัวแล้วบัดกรีลงไปด้วย ตรวจสอบให้แน่ใจว่าคุณออกจากห้องเพียงพอที่จะบัดกรีชิปแฟลชในขั้นตอนถัดไป
เซ็นเซอร์มีแปดพิน สองสำหรับพลังงานและพื้นดิน หนึ่งทำให้อุปกรณ์เข้าสู่โหมดสลี สามคือเอาต์พุตอะนาล็อก X, Y และ Z และสองอันสุดท้ายคือการกำหนดค่าโหมด
ตัวเลือกโหมดอนุญาตให้คุณปรับความไวของอุปกรณ์เป็น 1.5g (00), 2g (01), 4g (10) หรือ 6g (11) ฉันเลือกใช้ 1.5 กรัมและสูงกว่าคะแนนนั้นเพียงเล็กน้อยเท่านั้น ข้อเสียของที่นี่คือความเที่ยงตรงที่ละเอียดเมื่อเทียบกับช่วงไดนามิก
สาย VCC ถึง 5V, กราวด์ถึงกราวด์, กราวด์กราวด์ (เพื่อให้อุปกรณ์เปิดอยู่เสมอ) และทั้งสองพินการกำหนดค่าไปที่กราวด์ วางหมุด X, Y และ Z เข้ากับขาอะนาล็อก 1, 2 และ 3 ตามลำดับ
ขั้นตอนที่ 2: ต่อสายแฟลช
มีจุดบนกระดานที่มีตำแหน่งสำหรับการจัดวางแบบจุ่มใช้ประโยชน์จากจุดเชื่อมต่อเหล่านั้นเพื่อความสะดวกในการเชื่อมต่อ
สำหรับชิปแฟลช, WP # (ป้องกันการเขียน), HOLD #, และ VCC ไปที่ราง 5V โดยตรง เชื่อมต่อพวกเขาเข้ากับรางรถไฟด้วยไดโอดซีเนอร์ในไบแอสแบบย้อนกลับสู่พื้นดินเพื่อให้ 5V ถูกจับไปที่ 3.3V ชิพเป็น 3.3V เท่านั้นดังนั้นเราจำเป็นต้องป้องกันอินพุตที่ขับเคลื่อนด้วย 5V คุณจะวาง 3.3V Zeners ในแนวขนานกับพื้นบน CLK, DI, DO และ CS (เลือกชิป) ฉันลืมเพิ่มตัวต้านทานโหลดขนาดเล็กลงอย่างสมบูรณ์ในวงจร แต่ทุกอย่างทำงานได้ดี ฉันจะทำสิ่งนี้อีกครั้งฉันจะทำอย่างถูกต้องเช่นนี้: http: //hades.mech.northwestern.edu/images/7/74/Zen …
ไลบรารี SPI ต้องการการกำหนดพินต่อไปนี้
SPI MOSI (Master Out / Slave In) ไปที่ Flash pin DI (data in); shield pin 11 ไปที่ DIP pin 5
SPI MISO (Master In / Slave Out) ไปที่ Flash pin DO (data out); shield pin 12 ไปที่ DIP pin 2
SPI SCK (นาฬิกา) ไปที่ Flash pin CLK (นาฬิกา); shield pin 13 ไปที่ DIP pin 6
SPI SS (เลือก) ไปที่ Flash pin CS # (เลือกชิป); ชิลด์พิน 10 ไปที่ DIP pin 1
* ฉันใช้ CS # เพื่อ pin 3 ฉันไม่รู้ว่าทำไม แต่ให้สังเกต #define ในรหัสถ้าคุณเปลี่ยนสิ่งนี้
ขั้นตอนที่ 3: การประกอบขั้นสุดท้าย
อีกไม่กี่ขั้นตอนต่อไปนี้จะค่อนข้างเฉพาะกิจ
ขั้นแรกเลเยอร์เทปพันท่อเพื่อทำเป็นสายรัดข้อมือ (หรือหาวงกว้างขนาด 3 "ที่พอดีกับข้อมือของคุณ) แนบ velcro บางอย่างเพื่อป้องกันไม่ให้สายรัดข้อมือ spiff หลุด
เจาะรูเล็ก ๆ สี่รูในวงดนตรีที่ตรงกับรูเสียบ Uno ของ Arduino Uno ขันน็อตสแตนเลสเข้ากับสายรัดข้อมือและเข้าสู่ Uno
แซนด์วิชบอร์ดต้นแบบที่มีหน่วยความจำแฟลชและมาตรวัดความเร่งที่อยู่ด้านบนของ Uno
ติดโล่แผงปุ่มกด LCD ที่ด้านบน
กาวเทปหรือติดแบตเตอรี่ในแถบข้อมือ ฉันใช้กอริลลากาว สิ่งนั้นยอดเยี่ยมมาก
ประสานสวิตช์ในซีรีย์ด้วยเอาท์พุทสาย V + สีแดงของคลิปแบตเตอรี่และประสานเอาท์พุทของสายนั้นไปยังขา VIN บนแผงป้องกันจอแสดงผล บัดกรีสายกราวด์ / สีดำจากคลิปแบตเตอรี่เข้ากับขา GND บนแผงป้องกันหน้าจอ
ใส่แบตเตอรี่
เปิดสวิตช์เพื่อให้แน่ใจว่า LED ทั้งหมดในทุกองค์ประกอบในสแต็คสว่างขึ้น
ขั้นตอนที่ 4: อัปโหลดซอฟต์แวร์
ซอฟต์แวร์มีฟังก์ชันหลักสามประการ:A. แสดงผู้ใช้ด้วย UI พื้นฐานเพื่อเลือกว่าจะ:
- แสดงการอ่าน X, Y, Z
- บันทึกการอ่าน X, Y, Z
- ลบชิปแฟลช
- แสดงจำนวนหน้า 256 ไบต์ที่เขียนไปยังชิปแฟลช
C. เขียนข้อมูลไปยัง Flash
รหัสจำนวนมากมีไว้สำหรับ UI มันเป็นกระบวนการที่สนุกที่จะเรียนรู้วิธีใช้ห้องสมุด LCD ที่มาพร้อมกับเกราะป้องกัน ปุ่มหกปุ่มบนตัวป้องกันจะส่งแรงดันไฟฟ้าอะนาล็อกไปยังอนาล็อก 0 พินของ Uno นี่เป็นทางเลือกที่ลื่นไหลในการกดปุ่มกด (ถ้าคุณไม่รู้ว่าทำไมมันถึงท้าทายคุณจะต้องซักวัน!) รหัสควบคุมนั้นไม่ยากเลยที่จะนำคุณไปรอบ ๆ วนรอบขึ้น / ลงผ่านตัวเลือกเมนูเลือกขวาและรีเซ็ตเพียงรีบูต Arduino ง่ายจริงๆ
โหมดแสดงผล
ในโหมดการแสดงผลสตริงจะถูกส่งไปยัง LCD พร้อมการอ่านค่า X, Y และ Z ในหน่วยมิลลิวินาที แปลง() ฟังก์ชั่นปรับการอ่านจาก 0-5V ถึง gs เนื่องจาก 0g ถูกกำหนดเป็น 1.65V โดยผู้ผลิตและความน่าเชื่อถือของอะนาล็อก Arduino รวมตั้งแต่ 0-5V มีการวัด 1024 ครั้งเพิ่มขึ้น 1024 สมการคือ 5V / 1024 * X - 1.65V = g
โหมดบันทึก
ในโหมดบันทึกจอแสดงผลไม่ได้รับการอัพเดต แต่ข้อมูลดิบแบบอะนาล็อกจะถูกเขียนไปยังหน่วยความจำแฟลชโดยใช้คลาสตัวจัดการเพจ ทุกครั้งที่ 256 ไบต์ถูกส่งไปยังชั้นเรียนมันจะทำการเขียนหน้าออกไปยังอุปกรณ์แฟลชและแลกเปลี่ยนในบัฟเฟอร์ใหม่ คลาสนี้เป็นการปรับปรุงรหัสก่อนหน้าของฉันในเครื่องวัดความเร็วลมที่สั่งการได้
โหมดลบ
โหมดลบเพียงลบชิปแฟลช
โหมดแสดงเพจที่ใช้
หน้าที่ใช้แสดงจำนวนหน้าในอุปกรณ์แฟลช เนื่องจากไบต์แรกของทุกหน้าถูกตั้งค่าเป็น 0 เสมอรหัสสามารถส่งต่อไปยังหน้าใหม่ที่รวดเร็วหลังจากรีเซ็ต วิธีนี้ช่วยให้คุณสามารถเปิดและปิดอุปกรณ์และยังคงเขียนต่อไปจากที่ค้างไว้
* หมายเหตุ: นอกจากไลบรารีหลักของ Arduino (สำหรับสิ่งต่างๆเช่น SPI และ digitalWrite ()) คุณจะต้องใช้ไลบรารีปุ่มกด LCD มันมีอยู่ในเว็บไซต์ DFRobot
** หมายเหตุ # 2: ฉันไม่ได้อธิบายวิธีการดาวน์โหลดข้อมูลออกจากชิปแฟลช ที่มาในการสอนอื่น ฉันมีบอร์ดเฉพาะที่มีการเชื่อมต่อ USB ที่อ่านข้อมูลจากชิปนี้ สักวันฉันจะย้ายไปที่การ์ด SD และทำให้ชีวิตของฉันง่ายขึ้น
ขั้นตอนที่ 5: การรวบรวมข้อมูลและการปิดความคิด
ณ จุดนี้ฉันกระตือรือร้นที่จะเห็นรูปแบบการเร่งความเร็วที่แตกต่างจากการเคลื่อนไหวที่หลากหลาย ฉันทราบดีว่าค่าสเกลาร์เดี่ยว (ขนาดของเวกเตอร์ 3 มิติของการเร่งความเร็ว) นั้นไม่เพียงพอที่จะตรวจสอบข้อมูลตำแหน่งที่เป็นประโยชน์ใด ๆ แต่การก้าวไปข้างหน้าของตัวเองทำให้เป็นการยากที่จะเรียนรู้และก้าวหน้า
ฉันจับสลัม FuelBand สลัมของฉันและไปที่โรงยิม
ฉันทำการเคลื่อนไหวพื้นฐานสามครั้ง:
a) 135 # back squat - วางบาร์เบลเหนือใบไหล่ใต้กระดูกสันหลังส่วนคอรักษาแกนกลางให้แน่นและหลังตรงหมอบลงจนกระทั่งสะโพกพับผ่านระนาบหัวเข่าขับเข่าขึ้นและสะโพก ไปข้างหน้าและยืนขึ้น ทำซ้ำ
b) 20 # wall-ball - ยืน 1-2 'จากกำแพงหันหน้าไปทางนั้นถือความสูงของหน้าอกยา 20 # หมอบลงจนรอยพับสะโพกผ่านใต้เข่า; ขับรถขึ้นไปและที่ด้านบนของการเคลื่อนไหวเพิ่มแรงกระตุ้นของลูกบอลโดยใช้แขนเพื่อโยนมันที่เป้าหมายสูง 10 'บนผนัง; ในขณะที่ลูกบอลกลับมาให้ดำเนินการเคลื่อนไหวย้อนกลับเพื่อรับลูกบอล; ทำซ้ำ
c) 95 # olympic ฉก - โอ้นี่มันซับซ้อนเกินไปลองดูสิ
แต่ละการเคลื่อนไหวเกี่ยวข้องกับการเคลื่อนไหวของแขนและลำตัว แต่น้ำหนักนั้นแตกต่างกันอย่างมีนัยสำคัญ ฉันสงสัยว่าการเร่งความเร็วเพียงอย่างเดียวไม่สามารถเป็นตัวบ่งชี้ของการยกขึ้น แต่ฉันต้องการเห็นตัวเอง
ฉันรวบรวมข้อมูลสำหรับการทำซ้ำหลายครั้งในแต่ละการเคลื่อนไหว ฉันประมวลผลข้อมูลเพื่อสร้างขนาดเท่ากับสแควร์รูทของผลรวมของกำลังสองของการเร่งความเร็วของแต่ละแกน เช่น mag = sqrt (x ^ 2 + y ^ 2 + z ^ 2) ฉันวางแผนผลลัพธ์และทำให้ข้อมูลเรียบขึ้นด้วยค่าเฉลี่ยที่รันอยู่ โปรดทราบว่าแม้ว่าแกนใดแกนหนึ่งอาจเกิน 1.5 กรัม แต่ฉันไม่เคยเกิน 1 กรัมพร้อมกันในเซ็นเซอร์สองตัวหรือมากกว่าดังนั้นขนาดจึงค่อนข้างต่ำเสมอ ฉันพูดแบบนี้เพราะในตอนแรกฉันคิดว่าข้อมูลผิดพลาดเมื่อขนาดนั้นน้อยกว่าแรงโน้มถ่วง !!!
มันดูเท่ห์ดี การเคลื่อนไหวแบบผสมที่ซับซ้อนของการเคลื่อนไหวนั้นถูกบอกใบ้โดยการเร่งความเร็วโดยรวมที่วัดที่ข้อมือ ฉันสามารถเห็นขั้นตอนการเคลื่อนไหวที่เร็วและช้าได้อย่างชัดเจนโดยเฉพาะอย่างยิ่งแรงฉุดกระชากของระเบิด ความสงสัยของฉันถูกต้องมันเป็นไปไม่ได้ที่จะสังเกตเห็นความแตกต่างอย่างมากในการออกแรงระหว่างการเคลื่อนไหวหนึ่งครั้ง (การนั่งพับเพียบ) ซึ่งมีน้ำหนักประมาณ 1,000 ปอนด์ในขณะที่อีกการเคลื่อนไหว (Wallball) เคลื่อนไหวเพียง 200 ปอนด์ เห็นได้ชัดว่าค่าความเร่งเพียงอย่างเดียวนั้นไม่เพียงพอที่จะให้การวัดความพยายามที่เพียงพอ แต่กระบวนการทั้งหมดนี้ทำให้ฉันพัฒนาแพลตฟอร์มที่ฉันสามารถขยายได้ด้วยเซ็นเซอร์ใหม่ ฉันสามารถเห็นเซ็นเซอร์หลายตัวโดยใช้ตำแหน่งที่ไม่ได้ใช้งาน / พักผ่อนจากนั้นสร้างการเคลื่อนไหวโดยรวมใหม่ แต่ก็ยังไม่สามารถรับน้ำหนักได้ แต่ฉันมีความคิดเพิ่มเติม …
คอยติดตามและขอให้โชคดี! ฉันหวังว่าสิ่งนี้จะเป็นแรงบันดาลใจให้คุณปรับปรุงการออกกำลังกายทางไกล!