- Cảm biến con quay hồi chuyển & gia tốc kế MPU6050
- Cảm biến Flex
- Chuẩn bị sẵn sàng ARM robot in 3D:
- Các thành phần bắt buộc:
- Sơ đồ mạch:
- Gắn MPU6050 & Cảm biến Flex vào Găng tay
- Lập trình Arduino Nano cho Cánh tay robot
- Hoạt động của Cánh tay robot được điều khiển bằng cử chỉ bằng Arduino
Robotic Arms là một trong những sáng tạo kỹ thuật hấp dẫn và luôn hấp dẫn khi xem những thứ này nghiêng và xoay để hoàn thành những việc phức tạp giống như cánh tay của con người. Những cánh tay robot này thường được tìm thấy trong các ngành công nghiệp tại dây chuyền lắp ráp thực hiện các công việc cơ khí cường độ cao như hàn, khoan, sơn, v.v., gần đây các cánh tay robot tiên tiến với độ chính xác cao cũng đang được phát triển để thực hiện các hoạt động phẫu thuật phức tạp. Trước đây, chúng tôi đã in 3D một Cánh tay rô-bốt và chế tạo Cánh tay rô-bốt Tự chọn và Đặt bằng Vi điều khiển ARM7. Một lần nữa, chúng tôi sẽ sử dụng cùng một Cánh tay robot được in 3D để tạo ARM robot điều khiển bằng cử chỉ bằng tay sử dụng Arduino Nano, Con quay hồi chuyển MPU6050 và cảm biến flex.
Vị trí cánh tay robot in 3D này được điều khiển thông qua một găng tay được gắn với Con quay hồi chuyển MPU6050 và một cảm biến linh hoạt. Cảm biến Flex được sử dụng để điều khiển servo kẹp của Robotic Arm và MPU6050 được sử dụng cho chuyển động của robot theo trục X và Y. Nếu bạn không có máy in, bạn cũng có thể tạo cánh tay của mình bằng bìa cứng đơn giản như chúng tôi đã xây dựng cho Dự án cánh tay robot Arduino của mình. Để có thêm cảm hứng, bạn cũng có thể tham khảo Ghi và Chơi Cánh tay rô bốt mà chúng tôi đã xây dựng trước đó bằng Arduino.
Trước khi đi vào chi tiết, trước tiên chúng ta hãy tìm hiểu về cảm biến MPU6050 và cảm biến flex.
Cảm biến con quay hồi chuyển & gia tốc kế MPU6050
MPU6050 dựa trên công nghệ Hệ thống vi cơ (MEMS). Cảm biến này có gia tốc kế 3 trục, con quay hồi chuyển 3 trục và cảm biến nhiệt độ được tích hợp sẵn. Nó có thể được sử dụng để đo các thông số như Gia tốc, Vận tốc, Định hướng, Độ dịch chuyển, v.v. Trước đây, chúng tôi đã giao tiếp MPU6050 với Arduino và Raspberry pi và cũng đã xây dựng một vài dự án sử dụng nó như robot Tự cân bằng, Thước đo kỹ thuật số Arduino và Máy đo độ nghiêng Arduino.
Các tính năng trong Cảm biến MPU6050:
- Giao tiếp: Giao thức I2C với Địa chỉ I2C có thể định cấu hình
- Nguồn điện đầu vào: 3-5V
- ADC 16-bit tích hợp cung cấp độ chính xác cao
- DMP tích hợp cung cấp sức mạnh tính toán cao
- Có thể được sử dụng để giao tiếp với các thiết bị I2C khác như một từ kế
- Cảm biến nhiệt độ tích hợp
Chi tiết về Pin-Out của MPU6050:
Ghim | Sử dụng |
Vcc | Cung cấp nguồn cho module, có thể là + 3V đến + 5V. Thông thường + 5V được sử dụng |
Đất | Kết nối với mặt đất của hệ thống |
Đồng hồ nối tiếp (SCL) | Được sử dụng để cung cấp xung đồng hồ cho Giao tiếp I2C |
Dữ liệu nối tiếp (SDA) | Được sử dụng để truyền dữ liệu thông qua giao tiếp I2C |
Dữ liệu nối tiếp phụ trợ (XDA) | Có thể được sử dụng để giao tiếp các mô-đun I2C khác với MPU6050 |
Đồng hồ nối tiếp phụ (XCL) | Có thể được sử dụng để giao tiếp các mô-đun I2C khác với MPU6050 |
AD0 | Nếu nhiều hơn một MPU6050 được sử dụng một MCU, thì chân này có thể được sử dụng để thay đổi địa chỉ |
Ngắt (INT) | Chân ngắt để cho biết dữ liệu có sẵn để MCU đọc |
Cảm biến Flex
Cảm biến Flex không là gì ngoài một biến trở. Điện trở cảm biến uốn thay đổi khi cảm biến bị uốn cong. Chúng thường có hai kích thước 2,2 inch và 4,5 inch.
Tại sao chúng tôi sử dụng cảm biến flex trong dự án của mình?
Trong Cánh tay rô bốt được điều khiển bằng cử chỉ này, một cảm biến linh hoạt được sử dụng để điều khiển bộ kẹp của cánh tay rô bốt. Khi cảm biến uốn trên găng tay bị uốn cong, mô tơ servo gắn với bộ kẹp sẽ quay và bộ kẹp mở ra.
Cảm biến Flex có thể hữu ích trong nhiều ứng dụng và chúng tôi đã xây dựng một số dự án sử dụng cảm biến Flex như bộ điều khiển trò chơi, bộ tạo giai điệu, v.v.
Chuẩn bị sẵn sàng ARM robot in 3D:
Cánh tay rô bốt in 3D được sử dụng trong hướng dẫn này được thực hiện theo thiết kế do EEZYbotARM đưa ra có sẵn trong Thingiverse. Quy trình hoàn chỉnh để chế tạo cánh tay robot in 3D và chi tiết lắp ráp bằng video có trong liên kết Thingiverse được chia sẻ ở trên.
Trên đây là hình ảnh Cánh tay robot in 3D của tôi sau khi lắp ráp với 4 Động cơ Servo.
Các thành phần bắt buộc:
- Arduino Nano
- Cảm biến Flex
- Điện trở 10k
- MPU6050
- Găng tay
- Kết nối dây
- Breadboard
Sơ đồ mạch:
Hình ảnh sau đây cho thấy các kết nối mạch cho Cánh tay robot điều khiển bằng cử chỉ dựa trên Arduino .
Kết nối mạch giữa MPU6050 và Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Kết nối mạch giữa Động cơ Servo và Arduino Nano:
Arduino Nano |
ĐỘNG CƠ SERVO |
Bộ chuyển đổi điện |
D2 |
Servo 1 màu cam (PWM Pin) |
- |
D3 |
Servo 2 màu cam (PWM Pin) |
- |
D4 |
Servo 3 màu cam (PWM Pin) |
- |
D5 |
Servo 4 màu cam (PWM Pin) |
- |
GND |
Servo 1,2,3,4 Brown (GND Pin) |
GND |
- |
Servo 1,2,3,4 Đỏ (Pin + 5V) |
+ 5V |
Một cảm biến flex có hai chân. Nó không chứa các thiết bị đầu cuối phân cực. Vì vậy, chân một P1 được kết nối với Chân A0 tương tự của Arduino Nano với điện trở kéo lên là 10k và chân hai P2 được nối đất với Arduino.
Gắn MPU6050 & Cảm biến Flex vào Găng tay
Chúng tôi đã gắn MPU6050 và Cảm biến Flex vào găng tay. Ở đây, kết nối có dây được sử dụng để kết nối Găng tay và cánh tay robot nhưng nó có thể được thực hiện không dây bằng cách sử dụng kết nối RF hoặc kết nối Bluetooth.
Sau mỗi lần kết nối, thiết lập cuối cùng cho Cánh tay robot điều khiển bằng cử chỉ sẽ giống như hình dưới đây:
Lập trình Arduino Nano cho Cánh tay robot
Như thường lệ, mã hoàn chỉnh cùng với video hoạt động được đưa ra ở cuối hướng dẫn này. Dưới đây là một số dòng mã quan trọng được giải thích.
1. Đầu tiên, hãy bao gồm các tệp thư viện cần thiết. Thư viện Wire.h được sử dụng cho giao tiếp I2C giữa Arduino Nano & MPU6050 và servo.h để điều khiển động cơ servo.
#include
2. Tiếp theo, các đối tượng cho lớp servo được khai báo. Khi chúng tôi sử dụng bốn động cơ servo, bốn đối tượng như servo_1, servo_2, servo_3, servo_4 được tạo.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Tiếp theo, địa chỉ I2C của MPU6050 và các biến sẽ được sử dụng được khai báo.
const int MPU_addr = 0x68; // MPU6050 I2C Địa chỉ int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; gấp đôi x; y gấp đôi; z đôi;
4. Tiếp theo trong thiết lập void , tốc độ truyền là 9600 được đặt cho giao tiếp nối tiếp.
Serial.begin (9600);
Và giao tiếp I2C giữa Arduino Nano & MPU6050 được thiết lập:
Wire.begin (); // Khởi tạo I2C Communication Wire.beginTransmission (MPU_addr); // Bắt đầu giao tiếp với MPU6050 Wire.write (0x6B); // Ghi vào Đăng ký 6B Wire.write (0); // Ghi 0 vào 6B Register để Reset Wire.endTransmission (true); // Kết thúc quá trình truyền I2C
Ngoài ra, bốn chân PWM được xác định cho các kết nối động cơ servo.
servo_1.attach (2); // Chuyển tiếp / Reverse_Motor servo_2.attach (3); // Lên / Xuống_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Left / Right_Motor
5. Tiếp theo trong hàm void loop , một lần nữa thiết lập kết nối I2C giữa MPU6050 và Arduino Nano, sau đó bắt đầu đọc dữ liệu X, Y, Z-Axis từ thanh ghi của MPU6050 và lưu trữ chúng trong các biến tương ứng.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Bắt đầu bằng regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, true); // Đọc 14 thanh ghi axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Sau đó, ánh xạ giá trị tối thiểu và tối đa của dữ liệu trục từ cảm biến MPU6050 trong phạm vi -90 đến 90.
int xAng = map (axis_X, minVal, maxVal, -90,90); int yAng = map (axis_Y, minVal, maxVal, -90,90); int zAng = map (axis_Z, minVal, maxVal, -90,90);
Sau đó, sử dụng công thức sau để tính các giá trị x, y, z theo các giá trị từ 0 đến 360.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
Sau đó, đọc dữ liệu đầu ra Analog của cảm biến flex tại chân A0 của Arduino Nano và theo giá trị kỹ thuật số của cảm biến flex, đặt góc servo của bộ kẹp. Vì vậy, nếu dữ liệu cảm biến flex lớn hơn 750, góc mô tơ servo của bộ kẹp là 0 độ và nếu nhỏ hơn 750 thì là 180 độ.
int Gripper; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { gripper = 0; } else { Gripper = 180; } servo_3.write (bộ kẹp);
Sau đó, chuyển động của MPU6050 trên trục X từ 0 đến 60 được ánh xạ theo góc 0 đến 90 độ cho chuyển động Tiến / lùi của động cơ servo của cánh tay Robot.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60.0,90); Serial.print ("Di chuyển trong F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
Và chuyển động của MPU6050 trên trục X từ 250 đến 360 được ánh xạ từ 0 đến 90 độ cho cánh tay Robot chuyển động LÊN / XUỐNG của động cơ servo.
else if (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("Di chuyển lên / xuống ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Chuyển động của MPU6050 trên trục Y từ 0 đến 60 được lập bản đồ theo góc 90 đến 180 độ đối với Chuyển động trái của cánh tay rô-bốt.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Di chuyển trong Left ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Chuyển động của MPU6050 theo trục Y từ 300 đến 360 được lập bản đồ từ 0 đến 90 độ cho Chuyển động sang phải của cánh tay Robot.
else if (y> = 300 && y <= 360) { int mov3 = map (y, 360.300,90,0); Serial.print ("Di chuyển sang phải ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Hoạt động của Cánh tay robot được điều khiển bằng cử chỉ bằng Arduino
Cuối cùng, tải mã lên Arduino Nano và đeo găng tay được gắn với MPU6050 & Cảm biến Flex.
1. Bây giờ di chuyển bàn tay xuống để di chuyển cánh tay robot về phía trước và di chuyển lên để di chuyển cánh tay robot lên trên.
2. Sau đó nghiêng tay sang trái hoặc phải để xoay cánh tay robot sang trái hoặc phải.
3. Bẻ cong cáp uốn được gắn với ngón tay của găng tay để mở bộ kẹp và sau đó thả ra để đóng lại.
Hoạt động hoàn chỉnh được minh họa trong video dưới đây.