Mục lục:

Cấp độ tinh thần kỹ thuật số dựa trên Arduino & MPU6050: 3 bước
Cấp độ tinh thần kỹ thuật số dựa trên Arduino & MPU6050: 3 bước

Video: Cấp độ tinh thần kỹ thuật số dựa trên Arduino & MPU6050: 3 bước

Video: Cấp độ tinh thần kỹ thuật số dựa trên Arduino & MPU6050: 3 bước
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
Image
Image
Mạch
Mạch

Chào mừng bạn đến với tài liệu hướng dẫn đầu tiên của tôi! Tôi hy vọng rằng bạn tìm thấy nó thông tin. Xin vui lòng để lại phản hồi cho dù tích cực hay tiêu cực.

Dự án này là tạo ra một cấp độ tinh thần kỹ thuật số dựa trên arduino & MPU6050. Trong khi thiết kế và mã đã hoàn thành là của tôi, khái niệm ban đầu và phần lớn mã mà tôi đã làm việc từ đó không phải như vậy. Tôi không đạo văn, vì vậy tôi rất vui khi được ghi công cho những người mà tôi đã xây dựng ý tưởng. Hai người chính mà tôi muốn gửi lời cảm ơn là Paul McWhorter của YouTuber và DroneBot Workshop. Tôi bao gồm các liên kết đến chúng trong PDF liên kết hữu ích trên youtube của tôi. Cũng xin gửi lời cảm ơn tới EEEBLEast vì video thông tin của anh ấy về cách sử dụng MPU6050, bao gồm cả việc thiết lập và đọc từ mô-đun mà không cần thư viện bên ngoài (liên kết của anh ấy nằm trong cùng một tệp PDF).

Dự án tôi đã sản xuất, hoạt động 'như hiện tại' và chính xác như cổ tích, chắc chắn lên đến 45% theo cả hai hướng. Bạn có thể sử dụng nó đúng như những gì tôi đã thiết kế, hoặc bạn có thể điều chỉnh nó theo sở thích của riêng mình. Bạn càng tinh ý hơn sẽ nhận thấy rằng dự án của tôi trông gần giống với dự án do xưởng DroneBot sản xuất, nhưng hãy yên tâm, có sự khác biệt đáng kể, đặc biệt là khi nói đến mã để tính toán các góc, cộng với cơ sở lưu trữ các giá trị hiệu chuẩn trong Eeprom!

Một số tính năng để kích thích sự thèm ăn của bạn:

Góc độ cao và góc cuộn có sẵn trong phạm vi 0,1 độ.

Tự động phát hiện hướng của đơn vị con quay hồi chuyển (ngang hoặc dọc)

Hiệu chuẩn đầy đủ với kết quả được lưu trữ tự động vào eeprom

Chỉ báo LED từ -2 đến +2 độ (có thể thay đổi trong mã)

Chỉ báo âm thanh bổ sung về mức độ (có thể được bật / tắt khi đang bay)

Mạch điện nhỏ gọn yêu cầu các thành phần tối thiểu

Bắt đầu nào.

Quân nhu

Dự án này (nguyên trạng) sử dụng các mục sau:

1 x Arduino nano (của tôi là bản sao)

1 x mô-đun con quay hồi chuyển / gia tốc kế MPU6050

1 x LCD - 16 x 2 + kết nối I2C

1 x Nhấn để thực hiện chuyển đổi

1 x bộ rung Piezo

1 x đèn LED xanh lục

2 x đèn LED màu vàng

2 x đèn LED đỏ

Điện trở 5 x 220 ohm

Nhiều loại cáp jumper

Breadboard

Nguồn cung cấp (tôi đã sử dụng pin dự phòng 5v USB, khi không kết nối với PC của tôi, nhưng bạn có thể sử dụng pin được kết nối thích hợp)

Bước 1: Mạch

Mạch
Mạch
Mạch
Mạch

Giả sử bạn có tất cả các thành phần, bạn sẽ cần xây dựng breadboard của mình.

Tôi hiển thị thiết lập của mình dưới dạng hướng dẫn, nhưng các kết nối như sau:

Chân D2 của Arduino kết nối với 1 bên của công tắc đẩy. Mặt còn lại của công tắc đẩy kết nối với mặt đất

Chân D3 của Arduino kết nối với 1 bên của điện trở 220 ohm. Mặt khác của điện trở kết nối với thông báo của đèn LED màu đỏ. Cathode của đèn LED đỏ nối đất.

Chân D4 của Arduino kết nối với 1 bên của điện trở 220 ohm. Mặt khác của điện trở kết nối với thông báo của đèn LED màu vàng. Cathode của đèn LED màu vàng tiếp đất.

Chân D5 của Arduino kết nối với 1 bên của điện trở 220 ohm. Mặt khác của điện trở kết nối với thông báo của đèn LED màu xanh lá cây. Cathode của đèn LED màu xanh lá cây được nối đất.

Chân D6 của Arduino kết nối với 1 bên của điện trở 220 ohm. Mặt khác của điện trở kết nối với thông báo của đèn LED màu vàng. Cathode của đèn LED màu vàng tiếp đất.

Chân D7 của Arduino kết nối với 1 bên của điện trở 220 ohm. Mặt khác của điện trở kết nối với thông báo của đèn LED màu đỏ. Cathode của đèn LED đỏ nối đất.

Chân Arduino D8 kết nối với một bên của bộ rung Piezo. Mặt khác của buzzer kết nối với mặt đất.

Chân A4 của Arduino kết nối với chân SDA trên MPU6050 VÀ màn hình LCD.

Chân Arduino A5 kết nối với chân SCL trên MPU6050 VÀ màn hình LCD

Nguồn 5v và Gnd cho MPU6050 và LCD đến từ các chân Arduino Nano 5v và GND tương ứng.

Sau khi hoàn tất, nó sẽ tương tự như thiết lập của tôi được hiển thị. Tôi đặt blu tak dưới MPU6050 để ngăn nó di chuyển và cũng trên màn hình LCD để giữ nó ở cạnh của breadboard.

Bước 2: Mã

Mã đính kèm là mã tôi đã sử dụng cho dự án này. Thư viện duy nhất mà bạn có thể gặp sự cố là

Thư viện LiquidCrystal_I2C.h khi tôi nhập thư viện này khi lần đầu tiên tôi bắt đầu làm việc với màn hình LCD. Thật không may, có một số thư viện sử dụng cùng một câu lệnh #include, nhưng hơi khác một chút. Nếu bạn gặp sự cố với màn hình của mình, hãy tìm một mã LCD khác phù hợp với bạn và thay đổi mã cho phù hợp. Nó chỉ có thể là thiết lập khác nhau. Tất cả các lệnh 'in' sẽ hoạt động giống nhau.

Tất cả mã đã được nhận xét và giả sử tôi đã làm đúng, cũng sẽ có một video giải thích mọi thứ, nhưng đây là một số điểm cần lưu ý:

Màn hình LCD LiquidCrystal_I2C (0x27, 16, 2);

Đoạn mã trên là thiết lập cho màn hình LCD của tôi. Nếu thư viện của bạn khác, bạn có thể cần phải thay đổi không chỉ thư viện của mình mà còn cả dòng này.

{lcd.setCursor (0, 1); lcd.print ("Ngang!"); định hướng = NGANG; // Đọc dữ liệu acc thô và con quay hồi chuyển từ MPU-6050 1000 lần for (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Thêm phần bù gyro x vào biến gyro_x_cal gyro_x_cal + = gyro_x; // Thêm phần bù hồi chuyển y vào biến gyro_y_cal gyro_y_cal + = gyro_y; // Thêm phần bù con quay hồi chuyển z vào biến gyro_z_cal gyro_z_cal + = gyro_z; // Thêm phần bù acc x vào biến acc_x_cal acc_x_cal + = acc_x; // Thêm phần bù acc y vào biến acc_y_cal acc_y_cal + = acc_y; } // Chia tất cả các kết quả cho 1000 để có độ lệch trung bình gyro_x_cal / = 1000.0; gyro_y_cal / = 1000.0; gyro_z_cal / = 1000.0; acc_x_cal / = 1000.0; acc_y_cal / = 1000.0; HorizonalCalibration = 255; eeprom_address = 0; EEPROM.put (eeprom_address, HorizonalCalibration); eeprom_address + = sizeof (int); EEPROM.put (eeprom_address, gyro_x_cal); eeprom_address + = sizeof (float); EEPROM.put (eeprom_address, gyro_y_cal); eeprom_address + = sizeof (float); EEPROM.put (eeprom_address, gyro_z_cal); eeprom_address + = sizeof (float); EEPROM.put (eeprom_address, acc_x_cal); eeprom_address + = sizeof (float); EEPROM.put (eeprom_address, acc_y_cal); eeprom_address + = sizeof (float); // Lưu ý rằng chúng tôi không lưu trữ một phần bù cho acc_z, do lực hấp dẫn! chậm trễ (500); }

Khối mã trên thực thi quy trình hiệu chuẩn. Mã này dành cho hiệu chuẩn ngang. Có mã gần giống hệt nhau cho hiệu chuẩn dọc (lưu ý, mã biết liệu MPU6050 của bạn được gắn theo chiều ngang hay chiều dọc!). MPU6050, được đọc 1000 lần. các giá trị thích hợp được cộng dồn tích lũy sau đó chia cho 1000 để tạo ra giá trị 'bù đắp' trung bình. Các giá trị này sau đó được lưu trữ vào Nano eeprom. Tất cả các giá trị hiệu chuẩn ngang được lưu trữ bắt đầu từ địa chỉ eeprom 0. Tất cả các giá trị dọc được lưu trữ bắt đầu từ địa chỉ eeprom 24. Việc hiệu chuẩn PHẢI được thực hiện trên bề mặt hoàn toàn bằng phẳng, nếu không chúng không có ý nghĩa gì.

/ * * Vài dòng tiếp theo xử lý dữ liệu thô để thay đổi nó thành các góc có thể xuất ra màn hình LCD và đèn LED. * Giá trị 4096, mà dữ liệu gia tốc được chia cho, được lấy từ biểu dữ liệu MPU6050 và dựa trên tốc độ mẫu. * Giá trị của 9,8 là trọng lực * Hàm atan2 là từ mô-đun toán học và được sử dụng để tính các góc từ dữ liệu đã cho * / thetaM = -atan2 ((acc_x / 4096.0) /9.8, (acc_z / 4096.0) /9.8) /2/3.141592656 * 360; // Dữ liệu thô phiM = -atan2 ((acc_y / 4096.0) /9.8, (acc_z / 4096.0) /9.8) /2/3.141592656 * 360; // Dữ liệu thô dt = (millis () - millisOld) / 1000; millisOld = millis (); / * * Phần này sử dụng dữ liệu con quay hồi chuyển để làm cho hệ thống phản hồi nhanh hơn * giá trị 65,5, mà dữ liệu con quay hồi chuyển được chia cho được lấy từ biểu dữ liệu MPU6050 và dựa trên tỷ lệ mẫu * / theta = (theta + (gyro_y / 65,5) * dt) *. 96 + thetaM *.04; // Bộ lọc thông thấp phi = (phi + (gyro_x / 65.5) * dt) *. 96 + phiM *.04; // Bộ lọc thông thấp

Đoạn mã trên là công cụ tính toán các góc. Hy vọng rằng các nhận xét cung cấp một chút thông tin chi tiết về cách hoạt động của nó, nhưng để có giải thích sâu hơn, hãy xem video của Paul McWhorters được liên kết đến trong tệp PDF đính kèm. Tuy nhiên, điều tôi sẽ nói là bạn có thể thay đổi tỷ lệ mẫu cho con quay hồi chuyển và Gia tốc kế (được thực hiện trong chương trình con thiết lập MPU6050 ở cuối mã của tôi). Nếu bạn thay đổi tỷ lệ mẫu, bạn cũng phải thay đổi mức dữ liệu thô được chia cho. Đối với dữ liệu gia tốc kế, giá trị hiện tại là 4096. Đối với con quay hồi chuyển, giá trị hiện tại là 65,5.

Tham khảo bảng dữ liệu đính kèm và video của EEEntusiast (liên kết trong tệp PDF đính kèm) để biết thêm thông tin chuyên sâu về cách tìm các giá trị lấy mẫu và độ lệch.

Bước 3: Các bước tiếp theo

Đến thời điểm này, hy vọng sẽ thực hiện được dự án này, nhưng bây giờ thì sao?

Thứ nhất, tại sao không thực sự xây dựng nó thành một cấp độ tinh linh mà bạn có thể sử dụng. Bạn có thể mua một cấp độ linh hồn giá rẻ (đảm bảo rằng đó là loại hộp) mà bạn có thể thích ứng, hoặc nếu bạn có bộ dụng cụ, hãy in cấp độ / hộp của riêng bạn.

Có lẽ hãy thử xem xét tỷ lệ mẫu con quay hồi chuyển và gia tốc kế để xem liệu chúng có hoạt động tốt hơn ở tốc độ này hay không.

Cố gắng tinh chỉnh mã hơn nữa. Ví dụ, hiện tại, ngoài 45 độ, góc đã nêu là ít nhất để nói rằng rất khó. Có một cách xung quanh nó?

Nếu bạn có bất kỳ câu hỏi nào, cho dù chúng có vẻ đơn giản đến mức nào, hãy hỏi. Nếu tôi có thể giúp, tôi sẽ làm.

Nếu bạn thích hướng dẫn này, xin vui lòng cho nó một thích, để tôi biết.

Nếu bạn thực hiện điều này, xin vui lòng chỉ cho tôi (đặc biệt nếu nó là trong một trường hợp làm việc).

CẢM ƠN

Đề xuất: