- Vật liệu thiết yếu:
- Sơ đồ mạch:
- Cung cấp năng lượng cho thiết lập của bạn:
- Lập trình Arduino của bạn:
- Chuẩn bị Ứng dụng Android bằng Xử lý:
- Hoạt động của Arduino Inclinometer:
Các MPU6050 là một IC 3-trục gia tốc kế và con quay hồi chuyển 3 trục kết hợp thành một đơn vị. Nó cũng chứa một cảm biến nhiệt độ và một DCM để thực hiện một nhiệm vụ phức tạp. MPU6050 thường được sử dụng để chế tạo Drone và các robot từ xa khác như robot tự cân bằng. Trong dự án này, chúng ta sẽ học cách sử dụng MPU6050 được chế tạo một Máy đo độ nghiêng hoặc Máy đo độ tinh thần. Như chúng ta đã biết, một máy đo độ nghiêng được sử dụng để kiểm tra xem bề mặt có được làm phẳng hoàn hảo hay không, chúng có sẵn dưới dạng bọt bong bóng hoặc máy đo kỹ thuật số. Trong dự án này, chúng tôi sẽ xây dựng một Máy đo độ nghiêng kỹ thuật số có thể được giám sát bằng ứng dụng Android. Lý do sử dụng màn hình từ xa như điện thoại di động là chúng ta có thể theo dõi các giá trị từ MPU6050 mà không cần phải xem phần cứng, điều này sẽ rất tiện lợi khi MPU6050 được đặt trên máy bay không người lái hoặc một số vị trí không thể tiếp cận khác.
Vật liệu thiết yếu:
- Arduino Pro-mini (5V)
- Cảm biến con quay hồi chuyển MPU6050
- Mô-đun Bluetooth HC-05 hoặc HC-06
- Bảng FTDI
- Breadboard
- Kết nối dây
- Điện thoại thông minh
Sơ đồ mạch:
Sơ đồ mạch hoàn chỉnh cho Dự án cảm biến nghiêng Arduino này được hiển thị bên dưới. Nó chỉ có ba thành phần và có thể dễ dàng xây dựng trên breadboard.
Các MPU6050 giao tiếp với sự giúp đỡ của I2C và do đó pin SDA được kết nối với pin A4 của Arduino là pin SDA và SCL pin được kết nối với pin A5 của Arduino. Các HC-06 Bluetooth module làm việc với sự giúp đỡ của truyền thông nối tiếp do đó pin Rx của Bluetooth được kết nối với D11 pin và pin Tx của Bluetooth được kết nối với D10 pin của Arduino. Chân D10 và D11 này sẽ được cấu hình thành chân Nối tiếp bằng cách lập trình Arduino. Mô-đun HC-05 và mô-đun MSP6050 hoạt động trên + 5V và do đó chúng được cấp nguồn bằng chân Vcc của Arduino như hình trên.
Tôi đã sử dụng một số dây kết nối breadboard và xây dựng thiết lập trên một breadboard nhỏ. Sau khi các kết nối được thực hiện, bảng của tôi trông như thế này bên dưới.
Cung cấp năng lượng cho thiết lập của bạn:
Bạn có thể cấp nguồn cho mạch của mình thông qua bảng lập trình FTDI như tôi đã làm, hoặc sử dụng pin 9V hoặc bộ chuyển đổi 12V và kết nối nó với chân Raw của Arduino pro mini. Arduino Pro-mini có bộ điều chỉnh điện áp tích hợp sẽ chuyển đổi điện áp bên ngoài được điều chỉnh thành + 5V.
Lập trình Arduino của bạn:
Khi phần cứng đã sẵn sàng, chúng ta có thể bắt đầu lập trình Arduino của mình. Như mọi khi, mã hoàn chỉnh cho dự án này có thể được tìm thấy ở cuối trang này. Nhưng để hiểu rõ hơn về dự án, tôi đã chia nhỏ mã thành các đoạn mã nhỏ và giải thích chúng như các bước bên dưới.
Bước đầu tiên sẽ là giao tiếp MPU6050 với Arduino. Đối với dự án này, chúng tôi sẽ sử dụng thư viện do Korneliusz phát triển có thể tải xuống từ liên kết bên dưới
MPU6050 Liberty - Korneliusz Jarzebski
Tải xuống tệp ZIP và thêm nó vào IDE Arduino của bạn. Sau đó, chuyển đến File-> Examples-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Thao tác này sẽ mở chương trình ví dụ sử dụng thư viện mà chúng ta vừa tải xuống. Vì vậy, hãy nhấp vào tải lên và đợi chương trình được tải lên Arduino Pro mini của bạn. Sau khi hoàn tất, hãy mở màn hình nối tiếp của bạn và đặt tốc độ truyền của bạn thành 115200 và kiểm tra xem bạn có nhận được những điều sau đây không.
Ban đầu, tất cả ba giá trị sẽ bằng 0, nhưng khi bạn di chuyển bảng mạch của mình, bạn có thể thấy các giá trị này đang thay đổi. Nếu họ thay đổi điều đó có nghĩa là kết nối của bạn đúng, nếu không hãy kiểm tra kết nối của bạn. Hãy dành chút thời gian ở đây để ý xem ba giá trị Pitch Roll và Yaw khác nhau như thế nào tùy theo cách bạn nghiêng cảm biến. Nếu bạn bối rối, hãy nhấn nút đặt lại trên Arduino và các giá trị sẽ được khởi tạo lại về 0, sau đó nghiêng cảm biến theo một hướng và kiểm tra xem giá trị nào đang thay đổi. Hình ảnh dưới đây sẽ giúp bạn hiểu rõ hơn.
Trong số ba thông số này, chúng tôi chỉ quan tâm đến Roll và Pitch. Giá trị cuộn sẽ cho chúng tôi biết về độ nghiêng trong trục X và giá trị Pitch sẽ cho chúng tôi biết về độ nghiêng trong Y-Axis. Bây giờ chúng ta đã hiểu những điều cơ bản, hãy thực sự bắt đầu lập trình Arduino để đọc các giá trị này, gửi nó đến Arduino qua Bluetooth. Như mọi khi, hãy bắt đầu bằng cách bao gồm tất cả các thư viện cần thiết cho dự án này
#include
Sau đó, chúng tôi khởi tạo nối tiếp phần mềm cho mô-đun Bluetooth. Điều này có thể thực hiện được vì thư viện Phần mềm Serial trong Arduino, các chân IO có thể được lập trình để hoạt động như các chân Serial. Ở đây chúng tôi đang sử dụng các chân kỹ thuật số D10 và D11, trong đó D10 id Rx và D11 là Tx.
Phần mềm BT (10, 11); // RX, TX
Tiếp theo là chúng tôi khởi tạo các biến và đối tượng cần thiết cho chương trình và chuyển sang hàm setup () nơi chúng tôi chỉ định tốc độ truyền cho Serial monitor và Bluetooth. Đối với HC-05 và HC-06 tốc độ baud là 9600 nên bắt buộc phải sử dụng như nhau. Sau đó, chúng tôi kiểm tra xem bus IIC của Arduino có được kết nối với MPU6050 hay không, nếu không chúng tôi sẽ in thông báo cảnh báo và ở đó miễn là thiết bị được kết nối. Sau đó, chúng tôi hiệu chỉnh Con quay hồi chuyển và đặt các giá trị ngưỡng của nó bằng cách sử dụng các chức năng tương ứng như hình dưới đây.
void setup () {Serial.begin (115200); BT.begin (9600); // bắt đầu giao tiếp Bluetooth ở tốc độ 9600 baudrate // Khởi tạo MPU6050 while (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Không thể tìm thấy cảm biến MPU6050 hợp lệ, hãy kiểm tra dây!"); chậm trễ (500); } mpu.calibrateGyro (); // Hiệu chỉnh con quay hồi chuyển trong khi khởi động mpu.setThreshold (3); // Kiểm soát độ nhạy}
Dòng “ mpu.calibrateGyro ();” hiệu chỉnh MPU6050 cho vị trí mà nó hiện đang được đặt. Dòng này có thể được gọi nhiều lần bên trong chương trình bất cứ khi nào MPU6050 cần được hiệu chỉnh và tất cả các giá trị phải được đặt thành 0. “Mpu.setThreshold (3);” chức năng này kiểm soát giá trị thay đổi bao nhiêu đối với chuyển động trên cảm biến, một giá trị quá thấp sẽ làm tăng tiếng ồn, vì vậy hãy cẩn thận khi tìm hiểu điều này.
Bên trong void loop (), chúng tôi liên tục đọc các giá trị của Con quay hồi chuyển và Cảm biến nhiệt độ tính toán giá trị của cao độ, cuộn và yaw, gửi nó đến mô-đun Bluetooth. Hai dòng sau sẽ đọc các giá trị Gyro thô và giá trị nhiệt độ
Vector chuẩn = mpu.readNormalizeGyro (); temp = mpu.readTempe Heat ();
Tiếp theo, chúng tôi tính toán cao độ, cuộn và ngáp bằng cách nhân với bước thời gian và cộng nó với các giá trị trước đó. Một timestep là gì, nhưng khoảng cách giữa các bài đọc liên tiếp.
cao độ = cao độ + định mức.YAxis * timeStep; cuộn = cuộn + định mức.XAxis * timeStep; yaw = yaw + chuẩn.ZAxis * timeStep;
Để hiểu rõ hơn về bước thời gian, chúng ta hãy xem dòng dưới đây. Dòng này được đặt để đọc các giá trị từ MPU6050 chính xác trong khoảng thời gian 10mS hoặc 0,01 giây. Vì vậy, chúng tôi khai báo giá trị của timeStep là 0,01. Và sử dụng dòng bên dưới để giữ chương trình nếu còn thời gian. (millis () - timer ()) cho biết thời gian thực thi chương trình cho đến nay. Chúng tôi chỉ trừ nó với 0,01 giây và trong thời gian còn lại, chúng tôi chỉ giữ chương trình của mình ở đó bằng cách sử dụng hàm trì hoãn.
delay ((timeStep * 1000) - (millis () - timer));
Sau khi đọc và tính toán xong các giá trị, chúng ta có thể gửi chúng đến điện thoại của mình qua Bluetooth. Nhưng có một bắt ở đây. Mô-đun Bluetooth mà chúng tôi đang sử dụng chỉ có thể gửi 1 byte (8 bit) cho phép chúng tôi gửi các số chỉ từ 0 đến 255. Vì vậy, chúng tôi phải chia nhỏ các giá trị của mình và ánh xạ nó trong phạm vi này. Điều này được thực hiện bởi các dòng sau
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (cao độ> -100 && cao độ <100) y = map (cao độ, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Như bạn có thể hình dung, giá trị của cuộn được ánh xạ từ 0 đến 100 vào biến x và cao độ được ánh xạ từ 100 đến 200 vào biến y và nhiệt độ được ánh xạ thành 200 trở lên vào biến t. Chúng tôi có thể sử dụng cùng một thông tin để lấy dữ liệu từ những gì chúng tôi đã gửi. Cuối cùng, chúng tôi viết các giá trị này qua Bluetooth bằng các dòng sau.
BT.write (x); BT.write (y); BT.write (t);
Nếu bạn đã hiểu chương trình hoàn chỉnh, hãy cuộn xuống để xem chương trình và tải nó lên bảng Arduino.
Chuẩn bị Ứng dụng Android bằng Xử lý:
Ứng dụng android cho Arduino Inclinometer này được phát triển bằng cách sử dụng IDE xử lý. Điều này rất giống với Arduino và có thể được sử dụng để tạo ứng dụng hệ thống, ứng dụng Android, thiết kế web và hơn thế nữa. Chúng tôi đã sử dụng quá trình xử lý để phát triển một số dự án thú vị khác của chúng tôi được liệt kê bên dưới
- Trò chơi Ping Pong sử dụng Arduino
- Đài FM được điều khiển trên điện thoại thông minh bằng cách sử dụng Xử lý.
- Hệ thống rađa Arduino sử dụng cảm biến xử lý và siêu âm
Tuy nhiên, không thể giải thích mã hoàn chỉnh về cách tạo ứng dụng này. Vì vậy, bạn có hai cách để vượt qua điều này. Bạn có thể tải xuống tệp APK từ liên kết bên dưới và cài đặt ứng dụng Android trực tiếp trên điện thoại của mình. Hoặc cuộn bên dưới để tìm mã xử lý hoàn chỉnh và tự tìm hiểu cách hoạt động
Bên trong tệp ZIP, bạn có thể tìm thấy một thư mục được gọi là dữ liệu bao gồm tất cả các hình ảnh và các nguồn khác sẽ được tải vào ứng dụng android. Dòng dưới đây quyết định tên nào mà Bluetooth sẽ tự động kết nối với
bt.connectToDeviceByName ("HC-06");
Bên trong hàm draw () , các thứ sẽ được thực thi lặp đi lặp lại ở đây chúng ta vẽ các hình ảnh, hiển thị văn bản và tạo hoạt ảnh cho các thanh dựa trên các giá trị tạo thành mô-đun Bluetooth. Bạn có thể kiểm tra những gì xảy ra bên trong mỗi chức năng bằng cách đọc qua chương trình.
void draw () // Vòng lặp vô hạn {background (0); imageMode (TRUNG TÂM); hình ảnh (logo, width / 2, height / 1.04, width, height / 12); tải hình ảnh(); textfun (); getval (); }
Cuối cùng, có một điều quan trọng hơn cần giải thích, hãy nhớ rằng chúng tôi chia giá trị của cao độ, cuộn và nhiệt độ thành 0 thành 255. Vì vậy, ở đây chúng tôi một lần nữa đưa nó trở lại giá trị bình thường bằng cách ánh xạ ngược nó thành giá trị bình thường.
if (info <100 && info> 0) x = map (info, 0, 100, - (width / 1.5) / 3, + (width / 1.5) / 3); // x = info; else if (info <200 && info> 100) y = map (info, 100, 200, - (width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; else if (thông tin> 200) temp = info -200; println (temp, x, y);
Có nhiều cách tốt hơn để lấy dữ liệu từ mô-đun Bluetooth sang điện thoại, nhưng vì đây chỉ là một dự án sở thích nên chúng tôi đã bỏ qua chúng, bạn có thể tìm hiểu sâu nếu quan tâm.
Hoạt động của Arduino Inclinometer:
Sau khi bạn đã sẵn sàng với Phần cứng và Ứng dụng, đã đến lúc vui chơi với những gì chúng tôi đã xây dựng. Tải Mã Arduino lên bảng, bạn cũng có thể xóa nhận xét trên các dòng Serial.println và kiểm tra xem phần cứng có hoạt động như mong đợi hay không bằng cách sử dụng màn hình nối tiếp. Dù sao, đó là hoàn toàn không bắt buộc.
Sau khi mã được tải lên, hãy khởi chạy ứng dụng Android trên điện thoại di động của bạn. Ứng dụng sẽ tự động kết nối với mô-đun HC-06 của bạn và nó sẽ hiển thị “Kết nối với: HC-06” trên đầu ứng dụng như hình dưới đây.
Ban đầu, tất cả các giá trị sẽ bằng 0 ngoại trừ giá trị nhiệt độ. Điều này là do Arduino đã hiệu chỉnh MPU-6050 cho vị trí này làm tham chiếu, bây giờ bạn có thể nghiêng phần cứng và kiểm tra xem các giá trị trên ứng dụng di động cũng đang thay đổi cùng với hoạt ảnh. Hoạt động hoàn chỉnh của ứng dụng có thể được tìm thấy tại video dưới đây. Vì vậy, bây giờ bạn có thể đặt breadboard ở bất cứ đâu và kiểm tra xem bề mặt đã được phẳng hoàn hảo chưa.
Hy vọng bạn đã hiểu dự án và học được điều gì đó hữu ích từ nó. Nếu bạn có bất kỳ nghi ngờ nào, vui lòng sử dụng phần bình luận bên dưới hoặc diễn đàn để giải quyết.