สารบัญ:

การบันทึกข้อมูลแบบเรียลไทม์ MPU-6050/A0 ด้วย Arduino และ Android: 7 ขั้นตอน (พร้อมรูปภาพ)
การบันทึกข้อมูลแบบเรียลไทม์ MPU-6050/A0 ด้วย Arduino และ Android: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การบันทึกข้อมูลแบบเรียลไทม์ MPU-6050/A0 ด้วย Arduino และ Android: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การบันทึกข้อมูลแบบเรียลไทม์ MPU-6050/A0 ด้วย Arduino และ Android: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: MPU6050 DMP 6-axis Fusion running on Arduino!!! 2024, พฤศจิกายน
Anonim
เรียลไทม์ MPU-6050/A0 การบันทึกข้อมูลด้วย Arduino และ Android
เรียลไทม์ MPU-6050/A0 การบันทึกข้อมูลด้วย Arduino และ Android

ฉันสนใจที่จะใช้ Arduino สำหรับการเรียนรู้ของเครื่อง ในขั้นแรก ฉันต้องการสร้างการแสดงข้อมูลแบบเรียลไทม์ (หรือใกล้เคียงกัน) และตัวบันทึกด้วยอุปกรณ์ Android ฉันต้องการเก็บข้อมูลมาตรความเร่งจาก MPU-6050 ดังนั้นฉันจึงออกแบบบิลด์เพื่อใช้ HC-05 ที่ 115200 บอด ด้วยการกำหนดค่านี้ ข้อมูล 4 ช่องสามารถส่งข้อมูลได้ 250 ตัวอย่างต่อวินาที

บิลด์มีไม่กี่ขั้นตอน:

  • สร้างโล่หรือเขียงหั่นขนม
  • โปรแกรม Arduino
  • โหลดแอพ Android จาก Google Play หรือแยก GitHub แล้วคอมไพล์เอง
  • เชื่อมต่อ MPU-6050 กับสิ่งที่น่าสนใจที่สั่นสะเทือน (ฉันใช้รถ R/C)
  • ใช้อุปกรณ์ Android เพื่อเชื่อมต่อกับ Arduino
  • พล็อตข้อมูลบันทึกถ้าสนใจ
  • นำเข้าไปยัง Python (หรือแพลตฟอร์มอื่น) เพื่อใช้งานต่อไป

มาเริ่มกันเลย!

ขั้นตอนที่ 1: สร้างโล่/เขียงหั่นขนม

สร้างโล่/เขียงหั่นขนม
สร้างโล่/เขียงหั่นขนม
สร้างโล่/เขียงหั่นขนม
สร้างโล่/เขียงหั่นขนม

นี่คือแผนภาพการเดินสายไฟสำหรับ Arduino, HC-05 และ MPU-6050 นอกจาก MPU-6050 แล้ว ฉันยังมีอินพุตแบบอะนาล็อก A0 ที่ต่อกับเซ็นเซอร์วัดแสงเพื่อแสดงว่า ADC ทำงานอยู่ สามารถนำสัญญาณ 0-5 โวลต์เข้าสู่ A0 ADC ได้ นี่คือส่วนประกอบที่ฉันใช้ในการสร้าง:

  • Arduino Uno
  • HC-05 (HC-06 ควรใช้งานได้เช่นกัน แต่งานสร้างของฉันใช้กับ HC-05)
  • MPU-6050
  • โฟโต้รีซีสเตอร์ Sparkfun
  • ตัวต้านทาน 10kOhm (น้ำตาล-ดำ-ส้ม)

โมดูลบลูทูธ HC-05 ส่วนใหญ่มีค่าเริ่มต้นเป็น 9600 บอด เพื่อให้ส่งข้อมูลได้สำเร็จ คุณจะต้องตั้งโปรแกรมใหม่ด้วยอัตรารับส่งข้อมูล 115200 มีคำสั่ง HC-05/HC-06 AT ที่ดีที่อธิบายวิธีการทำ

ขั้นตอนที่ 2: ตั้งโปรแกรม Arduino

โปรแกรม Arduino
โปรแกรม Arduino
โปรแกรม Arduino
โปรแกรม Arduino

ฉันใช้ Arduino IDE รีลีส 1.6.7 เพื่อตั้งโปรแกรม Arduino สามารถดาวน์โหลดรหัสได้จากลิงก์ในขั้นตอนนี้หรือจาก repo GitHub ฉันได้รวมสามเวอร์ชัน: Firmware125.ino เป็นเวอร์ชัน 125 เฮิรตซ์ Firmware250.ino เป็นเวอร์ชัน 250 เฮิรตซ์ และ Firmware500.ino เป็นเวอร์ชัน 500 เฮิรตซ์ เพื่อให้ Arduino หมุนรอบที่ 500 เฮิรตซ์ จะไม่มีการรวบรวม A0 ADC

เฟิร์มแวร์มีนาฬิกาบนพิน 9 ที่ฉันใช้ตรวจสอบเวลา การติดตามแสดงรอบเวลา 4 มิลลิวินาที (เทียบเท่า 1/250 เฮิรตซ์) ฉันพบว่าหากมีปัญหาการเชื่อมโยงแบบอนุกรม เวลาจะไม่เท่ากัน

รหัส Arduino ใช้การปิดบังบิตเพื่อเพิ่มหมายเลขช่องสัญญาณให้กับแต่ละแพ็กเก็ต เนื่องจากบางครั้งตัวอย่างจะส่งผ่าน Bluetooth ฉันใช้สามบิตที่สำคัญที่สุดในการจัดเก็บหมายเลขช่อง สำหรับจำนวนเต็มที่ลงนามแล้ว บิตที่สำคัญที่สุด (MSB) จะถูกสงวนไว้สำหรับเครื่องหมาย เนื่องจากฉันต้องการใช้ MSB สำหรับที่อยู่ของฉัน แทนที่จะใช้เครื่องหมายของจำนวนเต็ม ฉันจึงต้องแปลงค่ามาตรความเร่งที่ลงนามทั้งหมดให้เป็นจำนวนเต็มที่ไม่ได้ลงนาม ฉันทำได้โดยเพิ่ม 32768 ให้กับแต่ละค่า (จำนวน MPU accelerometer ADC คือ +32768 ถึง -32768) และแปลงเป็นจำนวนเต็มที่ไม่ได้ลงนาม:

(int ที่ไม่ได้ลงนาม)((long)iAccelData+32767);

หมายเลขช่องสัญญาณจะเหมือนกันสำหรับมาตรความเร่งแต่ละตัวและพอร์ต A0 เพื่อให้สามารถตรวจพบแพ็กเก็ตที่ตกหล่นได้หากหมายเลขช่องสัญญาณไม่เป็นระเบียบ สำหรับแพ็กเก็ตที่มาจาก Bluetooth บน Arduino รูปแบบไบนารีคือ (สัญญาณเป็นการขยับบิต):

(บิตที่อยู่ xacc 3 = 0x00, ไม่ได้ลงนาม 13 บิต) (บิตที่อยู่ yacc 3 = 0x01, ไม่ได้ลงชื่อ 13 บิต) (บิตที่อยู่ zacc 3 = 0x02, ไม่ได้ลงชื่อ 13 บิต) (บิตที่อยู่ 3 รายการ = 0x03, iadc13bit ไม่ได้ลงชื่อ)

(บิตที่อยู่ xacc 3 = 0x00, ไม่ได้ลงนาม 13 บิต) (บิตที่อยู่ yacc 3 = 0x01, ไม่ได้ลงชื่อ 13 บิต) (บิตที่อยู่ zacc 3 = 0x02, ไม่ได้ลงนาม 13 บิต) (บิตที่อยู่ 3 รายการ = 0x03, iadc13bit ไม่ได้ลงนาม) (บิตที่อยู่ xacc 3 = 0x00, 13 บิตที่ไม่ได้ลงนาม) (yacc 3 บิตที่อยู่ = 0x01, ไม่ได้ลงชื่อ 13 บิต) (บิตที่อยู่ zacc 3 = 0x02, ไม่ได้ลงนาม 13 บิต) (3 บิตที่อยู่ = 0x03, iadc13 บิตไม่ได้ลงนาม) …

หากใช้อย่างอื่นที่ไม่ใช่แอป Accel Plot Android เพื่ออ่านข้อมูล Bluetooth ต่อไปนี้เป็นขั้นตอนในการแยกที่อยู่ (ฉันกำลังใช้ชื่อตัวแปรจากไฟล์ Accel Plot Bluetooth.java จาก GitHub repo):

- อ่านใน int ที่ไม่ได้ลงนาม 16 อัน

- แยกไบต์สูงและบันทึกเป็น btHigh

- แยกไบต์ต่ำและบันทึกเป็น btLow

- ดึงที่อยู่จาก btHigh โดยใช้: (btHigh >> 5) & 0x07. คำสั่งนี้เลื่อน btHigh 5 บิตไปทางขวา โดยย้ายบิตแอดเดรสสามบิตไปยังรีจิสเตอร์สามตัวที่ต่ำที่สุด เครื่องหมาย & เป็นตรรกะและบังคับบิต 4 และสูงกว่าให้เป็นศูนย์ และสามบิตสุดท้ายตรงกับบิตที่อยู่ ผลลัพธ์ของข้อความนี้คือที่อยู่ของคุณ

คุณไม่ต้องกังวลกับการแยกที่อยู่หากคุณใช้ Accel Plot

ขั้นตอนที่ 3: โหลดแอป Android จาก Google Play หรือแยก GitHub

โหลดแอพ Android จาก Google Play หรือแยก GitHub
โหลดแอพ Android จาก Google Play หรือแยก GitHub

คุณมีตัวเลือกสองทางในการโหลดแอป Android บนอุปกรณ์ของคุณ หากคุณต้องการหลีกเลี่ยงการเข้ารหัส คุณสามารถค้นหา "Accel Plot" และแอปควรปรากฏใน Google Play Store ทำตามคำแนะนำของร้านค้าสำหรับการติดตั้ง

ความปรารถนาของฉันกับ Instructable นี้คือการสนับสนุนให้ผู้อื่นสร้างโครงการ ดังนั้นฉันจึงได้เผยแพร่รหัสใน GitHub repo คุณควรจะสามารถแยกสาขา สร้าง และแก้ไขได้ตามที่เห็นสมควร ฉันเผยแพร่รหัสภายใต้ใบอนุญาต MIT ดังนั้นขอให้สนุก!

ขั้นตอนที่ 4: เชื่อมต่อกับ Arduino กับสิ่งที่น่าสนใจ (ฉันใช้รถ R/C)

เชื่อมต่อกับ Arduino กับสิ่งที่น่าสนใจ (ฉันใช้รถ R/C)
เชื่อมต่อกับ Arduino กับสิ่งที่น่าสนใจ (ฉันใช้รถ R/C)

ฉันต้องการใช้อุปกรณ์นี้ในการตรวจจับพื้นผิวถนนในที่สุด ดังนั้นฉันจึงคิดว่ารถยนต์ที่มีการควบคุมระยะไกล (R/C) ขนาดเล็กน่าจะเหมาะสม ฉันคิดว่ามันจะช่วยในขั้นตอนต่อไปหากอัตราเร่งสามารถอยู่กับบางสิ่งที่เคลื่อนไหวหรือสั่นสะเทือน

ขั้นตอนที่ 5: ใช้อุปกรณ์ Android เพื่อเชื่อมต่อกับ Arduino

ใช้อุปกรณ์ Android เพื่อเชื่อมต่อกับ Arduino
ใช้อุปกรณ์ Android เพื่อเชื่อมต่อกับ Arduino
ใช้อุปกรณ์ Android เพื่อเชื่อมต่อกับ Arduino
ใช้อุปกรณ์ Android เพื่อเชื่อมต่อกับ Arduino
ใช้อุปกรณ์ Android เพื่อเชื่อมต่อกับ Arduino
ใช้อุปกรณ์ Android เพื่อเชื่อมต่อกับ Arduino

หากคุณยังไม่ได้จับคู่ คุณจะต้องจับคู่ HC-05 กับอุปกรณ์ Android ของคุณก่อน ฉันเชื่อว่าในอุปกรณ์ส่วนใหญ่ คุณสามารถทำได้โดยไปที่การตั้งค่า พินเริ่มต้นสำหรับอุปกรณ์ HC-05 ส่วนใหญ่จะเป็น 1234 หรือ 1111

เปิดแอป AccelPlot บนอุปกรณ์ Android เมื่อแอปเปิดขึ้น และก่อนที่คุณจะเชื่อมต่อกับ HC-05 คุณสามารถเปลี่ยนอัตราการสุ่มตัวอย่าง (ซึ่งกำหนดไว้ในรหัส Arduino) มาตรวัดความเร่ง (ตั้งค่าในรหัส Arduino ด้วย) และจำนวนตัวอย่างที่จะบันทึก

เมื่อทำการตั้งค่าเหล่านี้แล้วให้คลิกที่ปุ่ม "เชื่อมต่อ" ควรเรียกอุปกรณ์ Bluetooth และอุปกรณ์ของคุณควรอยู่ในรายการ เลือกและเมื่อรหัสสร้างการเชื่อมต่อแล้ว คุณจะเห็นข้อความ "เชื่อมต่อแล้ว" ป๊อปอัป

ใช้ปุ่มลูกศรย้อนกลับเพื่อกลับไปยัง Accel Plot แตะปุ่ม "เริ่มสตรีม" เพื่อแสดงข้อมูลจากอุปกรณ์ HC-05 คุณควรมีปุ่มที่ใช้บันทึกข้อมูลหรือเล่นเนื้อหาที่มีการปรับความถี่ผ่านแจ็คเสียง

ขั้นตอนที่ 6: รับและพล็อตข้อมูล

Image
Image
นำเข้าไปยัง Python (หรือแพลตฟอร์มอื่นๆ) เพื่อการใช้งานเพิ่มเติม
นำเข้าไปยัง Python (หรือแพลตฟอร์มอื่นๆ) เพื่อการใช้งานเพิ่มเติม

ควรเปิดใช้งานปุ่ม "เริ่มสตรีม" แตะเพื่อเริ่มสตรีมข้อมูลไปยังหน้าจอ

ปุ่ม "บันทึกข้อมูล" จะเปิดใช้งานด้วย แตะเพื่อเก็บข้อมูล

Accel Plot ยังมีตัวเลือกในการส่งสัญญาณที่มอดูเลตบนช่องสัญญาณเสียง 2 ช่องสัญญาณในแอป Accel Plot หมายถึงช่องสัญญาณซ้ายและขวาของแจ็คสัญญาณเสียงออกบนอุปกรณ์ Android สิ่งนี้มีประโยชน์หากคุณต้องการนำข้อมูล MPU-6050 มาไว้ในระบบบันทึกข้อมูลแยกต่างหาก เช่น National Instruments

วิดีโอแสดงตัวอย่างระบบการเก็บข้อมูลบนรถ R/C

ขั้นตอนที่ 7: นำเข้าไปยัง Python (หรือแพลตฟอร์มอื่นๆ) เพื่อการใช้งานเพิ่มเติม

นำเข้าไปยัง Python (หรือแพลตฟอร์มอื่นๆ) เพื่อการใช้งานเพิ่มเติม
นำเข้าไปยัง Python (หรือแพลตฟอร์มอื่นๆ) เพื่อการใช้งานเพิ่มเติม

ไฟล์จะถูกบันทึกลงในอุปกรณ์ Android ไฟล์จะถูกเก็บไว้ในไดเรกทอรี "AccelPlot" สำหรับ Android API 18 และเก่ากว่า รหัสจะวางไฟล์.dat ไว้ในโฟลเดอร์ "\Tablet\Documents\AccelPlot" สำหรับ API 19 (KitKat 4.4) และสูงกว่า ฉันมีปัญหากับอุปกรณ์ Android บางตัวที่แสดงไฟล์เมื่อเชื่อมต่อผ่าน USB ในบางกรณี ฉันต้องรีบูตอุปกรณ์ Android เพื่อให้แสดง ไม่แน่ใจว่าเป็นเพราะเหตุใด แต่ควรมีสี่ไฟล์ หนึ่งไฟล์สำหรับแต่ละช่อง สามารถคัดลอกไปยังไดเร็กทอรีท้องถิ่นสำหรับงานเพิ่มเติม

ฉันใช้ Anaconda/Python 2.7 เพื่อเปิดไฟล์และแสดงข้อมูล ไฟล์ "ExploratoryAnalysis.ipynb" มีไฟล์ IPython Notebook ที่จะเปิดไฟล์ข้อมูลทั้งหมดและพล็อตข้อมูลตัวอย่าง ไฟล์ตัวอย่างจะรวมอยู่ใน GitHub repo ข้อมูลจะถูกบันทึกเป็น 4 ไบต์ขนาดใหญ่ ('>f') ดังนั้นโปรแกรมวิเคราะห์ใด ๆ ควรจะสามารถเปิดได้

ฉันได้รวมไฟล์ที่ง่ายกว่าที่เรียกว่า "ReadDataFiles.ipynb" ซึ่งแสดงวิธีการอ่านในไฟล์เดียวตามชื่อ

แนะนำ: