Mục lục:

Điều khiển Servo bằng MPU6050 giữa Arduino và ESP8266 với HC-12: 6 bước
Điều khiển Servo bằng MPU6050 giữa Arduino và ESP8266 với HC-12: 6 bước

Video: Điều khiển Servo bằng MPU6050 giữa Arduino và ESP8266 với HC-12: 6 bước

Video: Điều khiển Servo bằng MPU6050 giữa Arduino và ESP8266 với HC-12: 6 bước
Video: Điều Khiển Động Cơ Servo Bằng Remote RF Và Arduino Uno R3 | Điện tử DAT 2024, Tháng bảy
Anonim
Điều khiển Servo bằng MPU6050 giữa Arduino và ESP8266 Với HC-12
Điều khiển Servo bằng MPU6050 giữa Arduino và ESP8266 Với HC-12

Trong dự án này, chúng tôi đang điều khiển vị trí của động cơ servo sử dụng mpu6050 và HC-12 để giao tiếp giữa Arduino UNO và ESP8266 NodeMCU.

Bước 1: GIỚI THIỆU VỀ DỰ ÁN NÀY

Đây là một dự án IoT khác dựa trên HC-12 RF-module. Ở đây, dữ liệu imu (mpu6050) từ arduino được sử dụng để điều khiển động cơ servo (kết nối với Nodemcu). Ở đây, trực quan hóa dữ liệu cũng được thực hiện ở phía arduino, nơi dữ liệu cao độ mpu6050 (xoay quanh trục x) được hiển thị bằng một bản phác thảo xử lý (sẽ thảo luận ở phần sau). Về cơ bản, dự án này chỉ là một chút khởi động để ghi nhớ các khía cạnh khác nhau của điều khiển Imu & Servo với Arduino và ESP8266 gật gù.

MỤC TIÊU

Mục tiêu của điều này khá rõ ràng, Chúng tôi đang điều khiển vị trí của động cơ Servo bằng cách sử dụng giá trị cao độ của IMU. Và tất cả cùng cao độ và vị trí động cơ đồng bộ này được hiển thị bằng Xử lý.

Bước 2: Yêu cầu phần cứng

Mô-đun Wifi NodeMCU ESP8266 12E

Breadboard không hàn

Dây nhảy

MPU6050 accelo + con quay hồi chuyển

Mô-đun RF HC-12 (cặp)

Động cơ Servo SG90

Bước 3: Mạch & Kết nối

Mạch & Kết nối
Mạch & Kết nối
Mạch & Kết nối
Mạch & Kết nối

Kết nối là thẳng về phía trước. Bạn có thể cấp nguồn cho servo với 3.3V của Nodemcu. Bạn cũng có thể sử dụng Vin để cấp nguồn cho servo nếu nút của bạn có nhiều điện áp trên chân đó. Nhưng hầu hết các bo mạch Lolin không có 5V tại Vin (phụ thuộc vào nhà sản xuất).

Các sơ đồ mạch này được tạo bằng EasyADA.

Bước 4: LÀM VIỆC

ĐANG LÀM VIỆC
ĐANG LÀM VIỆC

Ngay sau khi bản phác thảo arduino bắt đầu, nó sẽ gửi góc cao độ (trong khoảng từ -45 đến 45) tới bộ thu hc12 của Nodemcu, nơi được ánh xạ với vị trí Servo từ 0 đến 180 độ. Ở đây chúng tôi đã sử dụng góc độ từ -45 đến +45 độ để chúng tôi có thể dễ dàng ánh xạ nó đến vị trí Servo.

Bây giờ, bạn đang nghĩ tại sao chúng ta có thể đơn giản sử dụng phương pháp bản đồ như sau: -

int pos = map (val, -45, 45, 0, 180);

Bởi vì góc âm do máy phát hc12 gửi đi nhận được là:

Hiệp 1: (T) 0 đến 45 => 0 đến 45 (R)

Hiệp 2: (T) -45 đến -1 => 255 đến 210 (R)

Vì vậy, bạn phải ánh xạ nó thành 0 đến 180 như

if (val> = 0 && val <= 45) pos = (val * 2) +90; khác pos = (val-210) * 2;

Tôi đang tránh phương pháp bản đồ do một số lỗi không liên quan. Bạn có thể thử nó và nhận xét nó hoạt động với bạn

if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = map (val, 255, 210, 0, 90); // Đối số thứ 4 có thể là 2 (bạn có thể kiểm tra)

Tính toán góc Pitch MPU6050

Tôi đang sử dụng thư viện MPU6050_tockn dựa trên việc cung cấp dữ liệu thô từ IMU.

int pitchAngle = mpu6050.getAngleX ()

Điều này sẽ cho chúng ta góc quay về trục x. Như bạn thấy trong hình, imu của tôi được đặt theo chiều dọc trên breadboard, vì vậy đừng nhầm lẫn với cao độ và cuộn. Trên thực tế, bạn sẽ luôn nhìn thấy trục được in trên bảng đột phá.

Thông qua thư viện này, bạn không phải bận tâm về thiết bị điện tử bên trong của việc đọc các thanh ghi cụ thể cho hoạt động cụ thể. bạn chỉ xác định công việc và bạn đã hoàn thành!

Btw nếu bạn muốn tự mình tính toán góc. Bạn có thể dễ dàng thực hiện như sau:

#bao gồm

const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (true); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (sai); Wire.requestFrom (MPU6050_addr, 14, true); AcX = Wire.read () << 8 | Wire.read (); AcY = Wire.read () << 8 | Wire.read (); AcZ = Wire.read () << 8 | Wire.read (); Temp = Wire.read () << 8 | Wire.read (); GyroX = Wire.read () << 8 | Wire.read (); GyroY = Wire.read () << 8 | Wire.read (); GyroZ = Wire.read () << 8 | Wire.read ();

int xAng = map (AcX, minVal, maxVal, -90, 90); int yAng = map (AcY, minVal, maxVal, -90, 90); int zAng = map (AcZ, minVal, maxVal, -90, 90); x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI); Serial.print ("AngleX ="); // Pitch Serial.println (x); Serial.print ("AngleY ="); // Cuộn Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }

Tuy nhiên, không nhất thiết bạn phải viết nhiều mã này để có được góc. Bạn nên biết sự thật đằng sau hiện trường nhưng việc sử dụng thư viện của người khác rất hiệu quả trong nhiều dự án. Bạn có thể đọc về imu này và các phê duyệt khác để nhận thêm dữ liệu đã lọc từ liên kết sau: Explore-mpu6050.

Mã arduino của tôi ở đầu truyền chỉ có 30 dòng với sự trợ giúp của thư viện MPU6050_tockn vì vậy việc sử dụng thư viện là tốt trừ khi bạn không cần một số thay đổi cốt lõi đối với chức năng của IMU. Một thư viện có tên I2Cdev của Jeff Rowberg rất hữu ích nếu bạn muốn một số dữ liệu được lọc bằng DMP (Bộ xử lý chuyển động kỹ thuật số) của IMU.

Tích hợp với Xử lý

Ở đây, Xử lý được sử dụng để hiển thị dữ liệu quay về trục x của IMU như được tính toán bởi dữ liệu thô đến từ MPU6050. Chúng tôi nhận dữ liệu thô đến trong SerialEvent theo cách sau:

void serialEvent (Serial myPort) {

inString = myPort.readString (); try {// Phân tích cú pháp dữ liệu // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i + 1]); }} else {println (inString); }}} catch (Exception e) {println ("Caught Exception"); }}

Ở đây bạn có thể thấy trực quan trong hình ảnh đính kèm trong bước này. Dữ liệu vị trí nhận được ở đầu nút cũng được nhìn thấy trên màn hình nối tiếp như trong hình ảnh.

Bước 5: MÃ

Tôi đã đính kèm kho lưu trữ github. Bạn có thể sao chép và phân nhánh nó để sử dụng trong các dự án của mình.

mã của tôi

Repo bao gồm 2 bản phác thảo arduino cho máy phát (arduino + IMU) & máy thu (Nodemcu + Servo).

Và một bản phác thảo xử lý. Gắn dấu sao repo nếu điều này giúp ích cho dự án của bạn.

Trong hướng dẫn này, R- Máy thu & T- Máy phát

Bước 6: XEM VIDEO

Tôi sẽ đính kèm video vào ngày mai. Theo dõi tôi để nhận thông báo.

Cảm ơn tất cả!

Đề xuất: