Mục lục:

Ghi dữ liệu MPU-6050 / A0 theo thời gian thực với Arduino và Android: 7 bước (có hình ảnh)
Ghi dữ liệu MPU-6050 / A0 theo thời gian thực với Arduino và Android: 7 bước (có hình ảnh)

Video: Ghi dữ liệu MPU-6050 / A0 theo thời gian thực với Arduino và Android: 7 bước (có hình ảnh)

Video: Ghi dữ liệu MPU-6050 / A0 theo thời gian thực với Arduino và Android: 7 bước (có hình ảnh)
Video: Bài 8. Giao tiếp Arduino với cảm biến góc la bàn số MPU6050 2024, Tháng mười một
Anonim
Ghi dữ liệu MPU-6050 / A0 theo thời gian thực với Arduino và Android
Ghi dữ liệu MPU-6050 / A0 theo thời gian thực với Arduino và Android

Tôi đã quan tâm đến việc sử dụng Arduino để học máy. Bước đầu tiên, tôi muốn xây dựng trình ghi và hiển thị dữ liệu theo thời gian thực (hoặc khá gần với nó) với thiết bị Android. Tôi muốn thu thập dữ liệu gia tốc kế từ MPU-6050 nên tôi đã thiết kế bản dựng để sử dụng HC-05 ở 115200 baud. Với cấu hình này, 4 kênh dữ liệu có thể được truyền với tốc độ 250 mẫu mỗi giây.

Quá trình xây dựng có một vài bước:

  • Xây dựng lá chắn hoặc breadboard
  • Lập trình Arduino
  • Tải ứng dụng Android từ Google Play hoặc phân nhánh GitHub và tự biên dịch
  • Kết nối MPU-6050 với thứ gì đó rung động thú vị (tôi đã sử dụng ô tô R / C)
  • Sử dụng thiết bị Android để kết nối với Arduino
  • Vẽ dữ liệu, lưu nếu quan tâm
  • Nhập vào Python (hoặc nền tảng khác) để sử dụng thêm

Bắt đầu nào!

Bước 1: Xây dựng Shield / breadboard

Xây dựng Shield / breadboard
Xây dựng Shield / breadboard
Xây dựng Shield / breadboard
Xây dựng Shield / breadboard

Đây là sơ đồ đấu dây cho Arduino, HC-05 và MPU-6050. Ngoài MPU-6050, tôi có đầu vào tương tự A0 được kết nối với cảm biến ánh sáng để cho biết ADC đang hoạt động. Bất kỳ tín hiệu 0-5 volt nào cũng có thể được đưa vào A0 ADC. Đây là những thành phần tôi đã sử dụng cho bản dựng:

  • Arduino Uno
  • HC-05 (HC-06 cũng nên hoạt động, nhưng bản dựng của tôi là HC-05)
  • MPU-6050
  • Điện trở quang Sparkfun
  • Điện trở 10kOhm (nâu-đen-cam)

Hầu hết các mô-đun Bluetooth HC-05 mặc định là 9600 baud. Để dữ liệu được truyền thành công, bạn sẽ cần phải lập trình lại nó với tốc độ 115200 baud. Có một Hướng dẫn Lệnh HC-05 / HC-06 AT tốt giải thích cách thực hiện.

Bước 2: Lập trình Arduino

Lập trình Arduino
Lập trình Arduino
Lập trình Arduino
Lập trình Arduino

Tôi đã sử dụng phiên bản Arduino IDE 1.6.7 để lập trình Arduino. Mã có thể được tải xuống từ các liên kết trong bước này hoặc từ repo GitHub. Tôi đã bao gồm ba phiên bản: Firmware125.ino là phiên bản 125 hertz, Firmware250.ino là phiên bản 250 hertz và Firmware500.ino là phiên bản 500 hertz. Để Arduino quay vòng ở 500 hertz, ADC A0 không được thu thập.

Phần sụn bao gồm một đồng hồ ra trên Pin 9 mà tôi đã sử dụng để kiểm tra thời gian. Dấu vết cho thấy thời gian chu kỳ là 4 ms (tương đương 1/250 hertz). Tôi nhận thấy rằng nếu có vấn đề liên kết nối tiếp, thời gian sẽ không đồng nhất.

Mã Arduino sử dụng mặt nạ bit để thêm số kênh vào mỗi gói vì các mẫu đôi khi rơi qua Bluetooth. Tôi sử dụng ba bit quan trọng nhất để lưu trữ số kênh. Đối với các số nguyên có dấu, bit quan trọng nhất (MSB) được dành riêng cho dấu. Vì tôi muốn sử dụng MSB cho địa chỉ của mình, thay vì dấu của số nguyên, nên tôi phải chuyển đổi tất cả các giá trị gia tốc kế có dấu thành số nguyên không dấu. Tôi thực hiện việc này bằng cách thêm 32768 vào từng giá trị (số lượng ADC của gia tốc kế MPU là +32768 đến -32768) và truyền dưới dạng số nguyên không dấu:

(unsigned int) ((long) iAccelData + 32767);

Số kênh giống nhau đối với mỗi gia tốc kế và cổng A0 để có thể phát hiện gói tin bị rơi nếu số kênh không theo thứ tự. Đối với các gói đến từ Bluetooth trên Arduino, mẫu nhị phân là (các dấu hiệu cho thấy sự thay đổi theo từng bit):

(xacc 3 bit địa chỉ = 0x00, 13 bit không dấu) (yacc 3 bit địa chỉ = 0x01, 13 bit không dấu) (zacc 3 bit địa chỉ = 0x02, 13 bit không dấu) (3 bit địa chỉ = 0x03, iadc13bit không dấu)

(xacc 3 bit địa chỉ = 0x00, 13 bit không dấu) (yacc 3 bit địa chỉ = 0x01, 13 bit không dấu) (zacc 3 bit địa chỉ = 0x02, 13 bit không dấu) (3 bit địa chỉ = 0x03, iadc13bit không dấu) (xacc 3 bit địa chỉ = 0x00, 13 bit không dấu) (yacc 3 bit địa chỉ = 0x01, 13 bit không dấu) (zacc 3 bit địa chỉ = 0x02, 13 bit không dấu) (3 bit địa chỉ = 0x03, iadc13 bit không dấu)…

Nếu bạn đang sử dụng thứ gì đó không phải là ứng dụng Accel Plot Android để đọc dữ liệu Bluetooth, thì đây là các bước để trích xuất địa chỉ (Tôi đang sử dụng các tên biến từ tệp Accel Plot Bluetooth.java từ repo GitHub):

- Đọc trong 16 int không dấu

- Giải nén byte cao và lưu vào btHigh.

- Giải nén byte thấp và lưu vào btLow.

- Lấy địa chỉ từ btHigh bằng: (btHigh >> 5) & 0x07. Câu lệnh này dịch chuyển btCao 5 bit sang bên phải, di chuyển ba bit địa chỉ đến ba thanh ghi thấp nhất. Dấu & là một AND logic buộc các bit 4 trở lên bằng 0 và ba bit cuối cùng khớp với các bit địa chỉ. Kết quả của tuyên bố này là địa chỉ của bạn.

Bạn không phải lo lắng về việc trích xuất địa chỉ nếu bạn đang sử dụng Accel Plot.

Bước 3: Tải ứng dụng Android từ Google Play hoặc Nhánh GitHub

Tải ứng dụng Android từ Google Play hoặc Nhánh GitHub
Tải ứng dụng Android từ Google Play hoặc Nhánh GitHub

Bạn có một số lựa chọn để tải ứng dụng Android trên thiết bị của mình. Nếu bạn muốn tránh mã hóa, bạn có thể tìm kiếm "Accel Plot" và ứng dụng sẽ xuất hiện trong cửa hàng Google Play. Làm theo hướng dẫn của cửa hàng để cài đặt.

Mong muốn của tôi với Có thể hướng dẫn này thực sự là khuyến khích những người khác xây dựng các dự án vì vậy tôi cũng đã xuất bản mã trong một repo GitHub. Bạn sẽ có thể phân nhánh, xây dựng và sửa đổi nó khi bạn thấy phù hợp. Tôi đã xuất bản mã theo Giấy phép MIT vì vậy hãy vui vẻ!

Bước 4: Kết nối với Arduino để có thứ gì đó thú vị (Tôi đã sử dụng xe R / C)

Kết nối với Arduino để có thứ gì đó thú vị (Tôi đã sử dụng xe R / C)
Kết nối với Arduino để có thứ gì đó thú vị (Tôi đã sử dụng xe R / C)

Cuối cùng, tôi muốn sử dụng thiết bị để phát hiện mặt đường nên tôi nghĩ rằng một chiếc ô tô nhỏ (R / C) được điều khiển từ xa sẽ thích hợp. Tôi nghĩ rằng nó sẽ hữu ích trong bước tiếp theo nếu các điểm nhấn có thể nằm trên một thứ gì đó di chuyển hoặc rung.

Bước 5: Sử dụng thiết bị Android để kết nối với Arduino

Sử dụng Thiết bị Android để kết nối với Arduino
Sử dụng Thiết bị Android để kết nối với Arduino
Sử dụng Thiết bị Android để kết nối với Arduino
Sử dụng Thiết bị Android để kết nối với Arduino
Sử dụng Thiết bị Android để kết nối với Arduino
Sử dụng Thiết bị Android để kết nối với Arduino

Nếu bạn chưa làm như vậy, trước tiên bạn cần ghép nối HC-05 với thiết bị Android của mình. Tôi tin rằng trên hầu hết các thiết bị, bạn có thể thực hiện việc này bằng cách đi tới cài đặt. Pin mặc định cho hầu hết các thiết bị HC-05 sẽ là 1234 hoặc 1111.

Mở ứng dụng AccelPlot trên thiết bị Android. Khi ứng dụng mở ra và trước khi kết nối với HC-05, bạn có thể thay đổi tốc độ lấy mẫu (tỷ lệ này được đặt trong mã Arduino), thang đo gia tốc (cũng được đặt trong mã Arduino) và số lượng mẫu sẽ được lưu.

Sau khi các cài đặt này được thực hiện, hãy nhấp vào nút "Kết nối". Nó sẽ hiển thị các thiết bị Bluetooth và thiết bị của bạn sẽ được liệt kê. Chọn nó và sau khi mã thiết lập kết nối, bạn sẽ thấy một bánh mì nướng "Đã kết nối" bật lên.

Sử dụng nút mũi tên quay lại để quay lại Cốt truyện. Nhấn vào nút "Start Stream" để hiển thị dữ liệu từ thiết bị HC-05. Bạn cũng nên có các nút có sẵn để lưu dữ liệu hoặc phát nội dung được điều chỉnh tần số thông qua giắc cắm âm thanh.

Bước 6: Thu thập và vẽ sơ đồ dữ liệu

Image
Image
Nhập vào Python (hoặc Nền tảng khác) để sử dụng thêm
Nhập vào Python (hoặc Nền tảng khác) để sử dụng thêm

Nút "Bắt đầu phát trực tiếp" sẽ được bật. Nhấn vào nó để bắt đầu truyền dữ liệu ra màn hình.

Nút "Lưu dữ liệu" cũng sẽ được bật, hãy nhấn vào nút đó để lưu trữ dữ liệu.

Accel Plot cũng bao gồm một tùy chọn để xuất ra tín hiệu đã được điều chế trên các kênh âm thanh. 2 kênh trong ứng dụng Accel Plot đề cập đến các kênh bên trái và bên phải của giắc cắm ra âm thanh trên thiết bị Android. Điều này rất hữu ích nếu bạn muốn đưa dữ liệu MPU-6050 vào một hệ thống ghi dữ liệu riêng biệt, như National Instruments.

Video cho thấy một ví dụ về hệ thống thu thập dữ liệu trên một chiếc ô tô R / C.

Bước 7: Nhập vào Python (hoặc Nền tảng khác) để sử dụng thêm

Nhập vào Python (hoặc Nền tảng khác) để sử dụng thêm
Nhập vào Python (hoặc Nền tảng khác) để sử dụng thêm

Các tệp được lưu vào thiết bị Android. Các tệp sẽ được lưu trữ trong thư mục "AccelPlot" dành cho Android API 18 trở lên. Mã đặt các tệp.dat vào thư mục "\ Tablet / Documents / AccelPlot" cho API 19 (KitKat 4.4) trở lên. Tôi đã gặp sự cố với một số thiết bị Android hiển thị tệp khi được kết nối qua USB. Trong một số trường hợp, tôi đã phải khởi động lại thiết bị Android để chúng hiển thị. Không chắc tại sao lại như vậy, nhưng phải có bốn tệp, một tệp cho mỗi kênh. Chúng có thể được sao chép vào một thư mục cục bộ để làm việc bổ sung.

Tôi đã sử dụng Anaconda / Python 2.7 để mở tệp và hiển thị dữ liệu. Tệp "ExploratoryAnalysis.ipynb" có tệp IPython Notebook sẽ mở tất cả các tệp dữ liệu và vẽ biểu đồ dữ liệu mẫu. Các tệp mẫu được bao gồm trong repo GitHub. Dữ liệu được lưu dưới dạng float 4 byte big-endian ('> f') nên bất kỳ chương trình phân tích nào cũng có thể mở chúng.

Tôi cũng đã bao gồm một tệp đơn giản hơn có tên "ReadDataFiles.ipynb" hiển thị cách đọc trong một tệp theo tên.

Đề xuất: