Hướng dẫn code mpu 6050 với msp năm 2024

Về LED ma trận, mình thấy trên diễn đàn cũng đã có rất nhiều bài viết. Để tiếp tục chuỗi bài về B.A.M, mình sẽ chia sẻ các bạn cách để Bicolor Led Matrix có thể hiển thị 256 màu riêng biệt với phương pháp B.A.M – 4 bit, tất nhiên nếu mắt người có thể phân biệt được sự khác biệt này...

tuenhi.n2012 gửi vào Thứ hai, 4 Tháng 11, 2019 - 16:22

  • Xem thêm về KẾT NỐI PROFIBUS-DP GIỮA ARDUINO VÀ PLC
  • 21844 lượt xem

Hôm nay, tôi xin chia sẻ cách Arduino giao tiếp với PLC thông qua kết nối Profibus-DP. Với kết quả đạt được, chúng ta có thể thực hiện một số dự án IoT hoặc IIoT với sự kết hợp giữa PLC và Arduino cộng với các SHIELD mở rộng của của Arduino với chi phí thấp.

Dưới đây là một số thử nghiệm mà tôi đã áp dụng giao tiếp Profibus-DP cho Arduino Mega 2560 + PLC Siemens S7-300

Tham gia Group Facebook để trao đổi nhanh hơn với BQT và các tác giả!

Hướng dẫn code mpu 6050 với msp năm 2024

Liên hệ Mr. Khánh 097.276.8491 để được tư vấn triển khai các dự án IoT

Liên hệ Mr. Đạt ZN 037.3998.468 tư vấn đồ án môn học

Liên hệ Mr. Thân 097.111.3732 để tư vấn thiết kế PCB chất lượng cao 2-40 lớp

Chia sẻ tình yêu với

Hướng dẫn code mpu 6050 với msp năm 2024
Arduino
Hướng dẫn code mpu 6050 với msp năm 2024

Hãy trở thành thành viên của Cộng đồng Arudino Việt Nam để mở khóa chức năng này.

Bạn ơi

Cùng đăng nhập vào Cộng đồng Arduino Việt Nam để mở hết các chức năng của Cộng đồng nhé.

Hello, I've interfaced the msp430 with the mpu6050, but my code stops running when it hits the line with the comment "PROBLEM LINE". If anyone has any ideas as to why the code doesnt continue when it hits that line, that would be very helpful.

Các bạn sử dụng điện thoại ắt hẳn đã từng chơi qua những game như đua xe, lắc banh… mà trong đó, các bạn phải nghiêng, xoay điện thoại phải không? Làm sao điện thoại có thể biết chính nó bị nghiêng hay xoay về hướng nào? Câu trả lời là dựa vào cảm biến gia tốc.

Trong bài học này, chúng ta sẽ cùng tìm hiểu về cảm biến gia tốc, góc nghiêng và một phương thức giao tiếp mới là I2C.

Kiến thức mới

IMU

IMU (Inertial Measurement Unit) là một con chip để đo những chuyển động như đã giới thiệu ở trên. Một module IMU thường gồm 2 loại cảm biến: cảm biến gia tốc (Accelerometer) và cảm biến quay (Gyroscope).

Accelerometer (gọi tắt là accel): như tên gọi của nó, accel đơn giản là một cảm biến đo gia tốc của chính nó. Thông thường, một cảm biến accel sẽ có 3 trục xyz tương ứng với 3 chiều không gian, giúp ta biết được module đang bị nghiêng về hướng nào (trục x và y) hoặc đang bị lật hay úp (trục z). Gyroscope (gọi tắt là gyro): đo tốc độ quay của nó quanh một trục. Tương tự với cảm biến gia tốc, thông thường, gyro sẽ có 3 trục xyz.

Lưu ý: gyro chỉ đo tốc độ quay chứ không đo trực tiếp góc quay, nên khi bạn quay module một góc nào đó rồi dừng, giá trị của gyro sẽ tăng lên rồi hạ xuống về 0.

Trên board xController đã tích hợp sẵn một module IMU tên là

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

0.

Giao tiếp I2C

Ở các bài trước, chúng ta đã tìm hiểu về các loại tín hiệu đơn giản là

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

1 và

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

2. Tuy nhiên, để mạch điều khiển có thể làm việc được với các thiết bị phức tạp, chúng cần sử dụng các chuẩn giao tiếp phức tạp hơn. Một trong số đó là giao tiếp I2C (

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

  1. rất phổ biến mà

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

0 cũng sử dụng.

Giao tiếp I2C chia thiết bị làm 2 loại:

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

5 (điều phối toàn bộ cách thức giao tiếp và truyền dữ liệu, ví dụ xController) và

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

6 (các cảm biến, module nối với chip điều khiển).

Có thể có nhiều kênh I2C trong một hệ thống, gọi là I2C bus. Mỗi I2C bus sử dụng hai đường truyền tín hiệu:

Một đường xung nhịp đồng hồ (

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

  1. chỉ do thiết bị Master phát đi. Một đường truyền dữ liệu ( Serial.print("AccelX: "); Serial.print(mpu.getAccX());
  2. theo 2 hướng.

Nhiều thiết bị có thể được kết nối vào cùng một bus I2C, tuy nhiên điều này sẽ không gây xung đột bởi mỗi thiết bị đều được nhận diện bởi một địa chỉ I2C duy nhất.

Thiết bị cần sử dụng

Hướng dẫn code mpu 6050 với msp năm 2024

Viết chương trình

Mở phần mềm Arduino IDE.

Nếu bạn chưa cài đặt thư viện cho xController thì tham khảo bài học số 4 để tải và cài đặt thư viện vào Arduino IDE.

Copy đoạn code sau, click vào nút

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

9 để kiểm tra lỗi chương trình. Sau khi biên dịch không báo lỗi, bạn có thể nạp đoạn code vào board.

Bạn cũng có thể mở chương trình mẫu tương tự bằng cách vào

tmp = map(mpu.getAccY(), -16384, 16384, -90, 90); Serial.print(" AccelY: "); Serial.print(mpu.getAccY()); tmp = map(mpu.getAccZ(), -16384, 16384, -90, 90); Serial.print(" AccelZ: "); Serial.print(mpu.getAccZ());

0, chọn chương trình

tmp = map(mpu.getAccY(), -16384, 16384, -90, 90); Serial.print(" AccelY: "); Serial.print(mpu.getAccY()); tmp = map(mpu.getAccZ(), -16384, 16384, -90, 90); Serial.print(" AccelZ: "); Serial.print(mpu.getAccZ());

1.

include "mpu6050.h"

MPU6050 mpu; float tmp; void setup(){ Serial.begin(115200); mpu.begin(); } void loop(){ tmp = map(mpu.getAccX(), -16384, 16384, -90, 90); Serial.print(" AccelX: "); Serial.print(mpu.getAccX()); tmp = map(mpu.getAccY(), -16384, 16384, -90, 90); Serial.print(" AccelY: "); Serial.print(mpu.getAccY()); tmp = map(mpu.getAccZ(), -16384, 16384, -90, 90); Serial.print(" AccelZ: "); Serial.print(mpu.getAccZ()); Serial.print(" GyroX: "); Serial.print(mpu.getGyroX()); Serial.print(" GyroY: "); Serial.print(mpu.getGyroY()); Serial.print(" GyroZ: "); Serial.print(mpu.getGyroZ()); Serial.println(" "); delay(500); }

Giải thích chương trình

Chương trình trên liên tục đọc và in ra giá trị tất cả các trục xyz của cảm biến gia tốc và cảm biến quay. Sau khi chạy chương trình, bạn hãy mở cửa sổ Serial để quan sát kết quả đọc được.

Khai báo thư viện để làm việc với mpu6050.

Tạo biến để lưu giá trị đọc được từ cảm biến MPU6050.

Serial.print("AccelX: "); Serial.print(mpu.getAccX());

Đọc giá trị trục X của cảm biến gia tốc. Do cảm biến gia tốc trả về giá trị từ

tmp = map(mpu.getAccY(), -16384, 16384, -90, 90); Serial.print(" AccelY: "); Serial.print(mpu.getAccY()); tmp = map(mpu.getAccZ(), -16384, 16384, -90, 90); Serial.print(" AccelZ: "); Serial.print(mpu.getAccZ());

2 nên ta dùng hàm

tmp = map(mpu.getAccY(), -16384, 16384, -90, 90); Serial.print(" AccelY: "); Serial.print(mpu.getAccY()); tmp = map(mpu.getAccZ(), -16384, 16384, -90, 90); Serial.print(" AccelZ: "); Serial.print(mpu.getAccZ());

3 để chuyển sang dải giá trị góc từ

tmp = map(mpu.getAccY(), -16384, 16384, -90, 90); Serial.print(" AccelY: "); Serial.print(mpu.getAccY()); tmp = map(mpu.getAccZ(), -16384, 16384, -90, 90); Serial.print(" AccelZ: "); Serial.print(mpu.getAccZ());

4 (để dễ hiểu hơn). Sau đó, dùng hàm

tmp = map(mpu.getAccY(), -16384, 16384, -90, 90); Serial.print(" AccelY: "); Serial.print(mpu.getAccY()); tmp = map(mpu.getAccZ(), -16384, 16384, -90, 90); Serial.print(" AccelZ: "); Serial.print(mpu.getAccZ());

5 để in ra giá trị này.