ทำ Nike FuelBand! จัดเรียงของ ... : 5 ขั้นตอน

ทำ Nike FuelBand! จัดเรียงของ ... : 5 ขั้นตอน

สารบัญ:

Anonim

ย้อนกลับไปในเดือนตุลาคมปี 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 พื้นฐานเพื่อเลือกว่าจะ:

  1. แสดงการอ่าน X, Y, Z
  2. บันทึกการอ่าน X, Y, Z
  3. ลบชิปแฟลช
  4. แสดงจำนวนหน้า 256 ไบต์ที่เขียนไปยังชิปแฟลช
B. อ่านมาตรความเร่งอย่างเร็วที่สุด

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 ปอนด์ เห็นได้ชัดว่าค่าความเร่งเพียงอย่างเดียวนั้นไม่เพียงพอที่จะให้การวัดความพยายามที่เพียงพอ แต่กระบวนการทั้งหมดนี้ทำให้ฉันพัฒนาแพลตฟอร์มที่ฉันสามารถขยายได้ด้วยเซ็นเซอร์ใหม่ ฉันสามารถเห็นเซ็นเซอร์หลายตัวโดยใช้ตำแหน่งที่ไม่ได้ใช้งาน / พักผ่อนจากนั้นสร้างการเคลื่อนไหวโดยรวมใหม่ แต่ก็ยังไม่สามารถรับน้ำหนักได้ แต่ฉันมีความคิดเพิ่มเติม …

คอยติดตามและขอให้โชคดี! ฉันหวังว่าสิ่งนี้จะเป็นแรงบันดาลใจให้คุณปรับปรุงการออกกำลังกายทางไกล!