Mục lục:
- Bước 1: Những thứ bạn cần: -
- Bước 2: Làm cánh tay: -
- Bước 3: Tạo kết nối: -
- Bước 4: Mã hóa: -
- Bước 5: Kiểm tra: -
Video: Cánh tay robot đơn giản & thông minh sử dụng Arduino !!!: 5 bước (có hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Trong phần hướng dẫn này, tôi sẽ chế tạo một cánh tay robot đơn giản. Điều đó sẽ được kiểm soát bằng cách sử dụng một nhánh chính. Cánh tay sẽ ghi nhớ các chuyển động và chơi theo trình tự. Khái niệm này không phải là mới. Tôi lấy Ý tưởng từ "cánh tay robot mini -by Stoerpeak" Tôi đã muốn thực hiện điều này từ rất lâu, nhưng hồi đó tôi hoàn toàn là người không có kinh nghiệm và không có kiến thức gì về lập trình. Bây giờ cuối cùng tôi đang xây dựng một cái, Giữ cho nó đơn giản, rẻ tiền và chia sẻ nó với tất cả các bạn.
Vậy hãy bắt đầu….
Bước 1: Những thứ bạn cần: -
Đây là danh sách những thứ bạn sẽ cần: -
1. Động cơ servo x 5 Liên kết dành cho Mỹ: - https://amzn.to/2OxbSH7 Liên kết dành cho châu Âu: -
2. Chiết áp x 5 (Tôi đã dùng 100k.) Liên kết cho US: - https://amzn.to/2ROjhDMLink cho Châu Âu: -
3. Arduino UNO. (Bạn cũng có thể sử dụng Arduino Nano) Liên kết cho Hoa Kỳ: - https://amzn.to/2DBbENWLink cho Châu Âu: -
4. Bảng mạch. (Tôi đề xuất bộ này) Liên kết cho Hoa Kỳ: - https://amzn.to/2Dy86w4 Liên kết cho Châu Âu: -
5. Pin. (tùy chọn, tôi đang sử dụng bộ chuyển đổi 5v)
6. Các tông / Gỗ / Sun-board / acrylic cái gì cũng có sẵn hoặc dễ kiếm.
Và bạn cũng sẽ cần cài đặt Arduino IDE.
Bước 2: Làm cánh tay: -
Ở đây tôi đã sử dụng que Popsicle để làm cánh tay. Bạn có thể sử dụng bất kỳ vật liệu nào có sẵn cho bạn. Và bạn có thể thử các thiết kế cơ học khác nhau để tạo ra cánh tay tốt hơn nữa. thiết kế của tôi không phải là rất ổn định.
Tôi chỉ sử dụng băng dính hai mặt để dán các servo vào thanh Popsicle và buộc chặt chúng bằng vít.
Đối với Master arm, tôi dán chiết áp vào que kem và làm cánh tay.
Tham khảo các bức tranh sẽ cung cấp cho bạn một Ý tưởng tốt hơn.
Tôi đã gắn tất cả mọi thứ trên một bảng vải khổ A4 được sử dụng làm cơ sở.
Bước 3: Tạo kết nối: -
Trong bước này, chúng tôi sẽ thực hiện tất cả các kết nối cần thiết, Tham khảo các hình ảnh trên.
- Đầu tiên kết nối tất cả các Servos song song với nguồn điện (Dây màu đỏ đến + ve và Dây màu đen hoặc màu nâu với Gnd)
- Tiếp theo kết nối các dây tín hiệu, tức là dây Vàng hoặc Cam vào chân PWM của arduino.
- Bây giờ kết nối các chiết áp với + 5v và Gnd của arduino song song.
- Kết nối thiết bị đầu cuối giữa với chân Analog của ardunio.
Ở đây các Chân kỹ thuật số 3, 5, 6, 9 & 10 được sử dụng để điều khiển các servo
Chân Analog A0 đến A4 được sử dụng cho Đầu vào từ Chiết áp.
Servo được kết nối với chân 3 sẽ được điều khiển bằng chiết áp kết nối với A0
Servo kết nối với chân 5 sẽ được điều khiển bằng nồi trên A1, v.v.
Lưu ý: - Mặc dù Servos không được cung cấp bởi arduino, hãy đảm bảo kết nối Gnd của Servos với arduino, nếu không cánh tay sẽ không hoạt động.
Bước 4: Mã hóa: -
Logic của đoạn mã này khá đơn giản, các giá trị của chiết áp được lưu trữ trong một mảng, các bản ghi sau đó được duyệt qua bằng vòng lặp for và các servos thực hiện các bước theo các giá trị. Bạn có thể xem hướng dẫn này mà tôi đã sử dụng để tham khảo "Điều khiển và bộ nhớ Servo chiết áp Arduino"
Mã: - (Tệp có thể tải xuống đính kèm bên dưới.)
Đầu tiên chúng ta sẽ khai báo tất cả các biến cần thiết trên toàn cục để chúng ta có thể sử dụng chúng trong suốt chương trình. Không cần giải thích đặc biệt cho điều này
#bao gồm
// Đối tượng Servo Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Đối tượng chiết áp int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Biến lưu trữ Vị trí Servo int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Biến để lưu các giá trị vị trí trước int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Biến để lưu trữ các giá trị vị trí hiện tại int Current_0_Pos; int Current_1_Pos; int Hiện tại_2_Pos; int Hiện tại_3_Pos; int Hiện_4_Pos; int Servo_Position; // Lưu trữ góc int Servo_Number; // Lưu trữ không có servo int Storage [600]; // Mảng để lưu trữ dữ liệu (Kích thước mảng tăng lên sẽ tốn nhiều bộ nhớ hơn) int Index = 0; // Chỉ mục mảng bắt đầu từ vị trí thứ 0 char data = 0; // biến để lưu dữ liệu từ đầu vào nối tiếp.
Bây giờ chúng ta sẽ viết một hàm thiết lập, nơi chúng ta đặt các chân và chức năng của chúng. Đây là chức năng chính thực thi đầu tiên
void setup ()
{Serial.begin (9600); // Đối với giao tiếp nối tiếp giữa arduino và IDE. // Các đối tượng Servo được gắn vào các chân PWM. Servo_0.attach (3); Servo_1.attach (5); Servo_2.attach (6); Servo_3.attach (9); Servo_4.attach (10); // Servos được đặt ở vị trí 100 khi khởi tạo. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println ("Nhấn 'R' để ghi và 'P' để phát"); }
Bây giờ chúng ta phải đọc các giá trị của chiết áp bằng cách sử dụng các chân Analog Input và ánh xạ chúng để điều khiển servos., bạn có thể đặt tên cho nó bất cứ thứ gì bạn muốn. Nó là một chức năng do người dùng xác định
void Map_Pot ()
{/ * Servo xoay 180 độ nhưng sử dụng nó đến giới hạn không phải là ý kiến hay vì nó làm cho servo kêu liên tục, gây khó chịu vì vậy chúng tôi hạn chế servo di chuyển trong khoảng: 1-179 * / Pot_0 = analogRead (A0); // Đọc đầu vào từ pot và lưu trữ trong Variable Pot_0. Servo_0_Pos = map (Pot_0, 0, 1023, 1, 179); // Ánh xạ các servos theo giá trị từ 0 đến 1023 Servo_0.write (Servo_0_Pos); // Di chuyển servo đến vị trí đó. Pot_1 = analogRead (A1); Servo_1_Pos = map (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = map (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = map (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = map (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }
Bây giờ chúng ta sẽ viết hàm lặp:
void loop ()
{Map_Pot (); // Lời gọi hàm đọc giá trị pot while (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Đang ghi các chuyển động …"); if (data == 'P') Serial.println ("Đang phát các chuyển động đã ghi…"); } if (data == 'R') // Nếu nhập 'R', hãy bắt đầu ghi. {// Lưu trữ các giá trị trong một biến Prev_0_Pos = Servo_0_Pos; Trước_1_Pos = Servo_1_Pos; Prev_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Map_Pot (); // Hàm ánh xạ được gọi lại để so sánh if (abs (Prev_0_Pos == Servo_0_Pos)) // giá trị tuyệt đối nhận được bằng cách so sánh {Servo_0.write (Servo_0_Pos); // Nếu các giá trị khớp với servo được định vị lại nếu (Current_0_Pos! = Servo_0_Pos) // Nếu các giá trị không khớp {Storage [Index] = Servo_0_Pos + 0; // Giá trị được thêm vào mảng Index ++; // Giá trị chỉ mục tăng 1} Current_0_Pos = Servo_0_Pos; } / * Tương tự như vậy, so sánh giá trị được thực hiện cho tất cả các servos, +100 được thêm vào mọi mục nhập dưới dạng giá trị khác biệt. * / if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100; Chỉ số ++; } Hiện tại_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); if (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Chỉ số ++; } Hiện tại_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Chỉ số ++; } Hiện tại_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); if (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400; Chỉ số ++; } Current_4_Pos = Servo_4_Pos; } / * Các giá trị được in trên màn hình nối tiếp, '\ t' là để hiển thị các giá trị ở định dạng bảng * / Serial.print (Servo_0_Pos); Serial.print ("\ t"); Serial.print (Servo_1_Pos); Serial.print ("\ t"); Serial.print (Servo_2_Pos); Serial.print ("\ t"); Serial.print (Servo_3_Pos); Serial.print ("\ t"); Serial.println (Servo_4_Pos); Serial.print ("Chỉ số ="); Serial.println (Chỉ mục); chậm trễ (50); } if (data == 'P') // NẾU 'P' được nhập, Bắt đầu chơi các nước đi đã ghi. {for (int i = 0; i <Index; i ++) // Duyệt mảng bằng vòng lặp for {Servo_Number = Storage / 100; // Tìm số servo Servo_Position = Storage % 100; // Tìm vị trí của công tắc servo (Servo_Number) {case 0: Servo_0.write (Servo_Position); nghỉ; trường hợp 1: Servo_1.write (Servo_Position); nghỉ; trường hợp 2: Servo_2.write (Servo_Position); nghỉ; case 3: Servo_3.write (Servo_Position); nghỉ; trường hợp 4: Servo_4.write (Servo_Position); nghỉ; } delay (50); }}}
Khi mã đã sẵn sàng, bây giờ hãy tải nó lên bảng arduino
Cánh tay thông minh đã sẵn sàng hoạt động. Chức năng này vẫn chưa được mượt mà như chức năng của Stoerpeak.
Nếu bạn có thể làm cho mã tốt hơn hoặc có bất kỳ đề xuất nào cho tôi, vui lòng cho tôi biết trong phần bình luận.
Với điều đó đã được nói, Chúng ta hãy chuyển sang thử nghiệm….
Bước 5: Kiểm tra: -
Sau khi tải mã lên bảng thành công, Mở 'Trình theo dõi nối tiếp', bạn có thể tìm thấy mã trong tùy chọn Công cụ. Khi màn hình nối tiếp khởi động arduino sẽ đặt lại. Giờ đây, bạn có thể điều khiển cánh tay robot bằng cách sử dụng cánh tay chính. Nhưng không có gì được ghi lại.
Để bắt đầu ghi, hãy nhập 'R' vào màn hình, bây giờ bạn có thể thực hiện các bước di chuyển mà bạn muốn ghi lại.
Sau khi thực hiện xong các bước di chuyển, bạn phải nhập 'P' để chơi các bước di chuyển đã ghi. Servos sẽ tiếp tục thực hiện các động tác miễn là bo mạch không được đặt lại.
Đề xuất:
Biến điện thoại thông minh không sử dụng thành màn hình thông minh: 6 bước (có hình ảnh)
Biến điện thoại thông minh không sử dụng thành màn hình thông minh: Hướng dẫn Deze có trong het Engels, voor de Nederlandse versie klik hier Bạn có điện thoại thông minh (cũ) chưa sử dụng? Biến nó thành một màn hình thông minh bằng Google Trang tính và một số bút và giấy, bằng cách làm theo hướng dẫn từng bước dễ dàng này. Khi bạn hoàn thành
Điều khiển bằng cử chỉ đơn giản - Điều khiển đồ chơi RC của bạn bằng chuyển động của cánh tay: 4 bước (có hình ảnh)
Điều khiển bằng cử chỉ đơn giản - Điều khiển đồ chơi RC của bạn bằng chuyển động của cánh tay: Chào mừng bạn đến với 'ible' # 45 của tôi. Cách đây một thời gian, tôi đã tạo một phiên bản RC hoàn chỉnh của BB8 bằng cách sử dụng các phần Lego Star Wars … https://www.instructables.com/id/Whats-Inside-My-R…Khi tôi thấy nó thú vị như thế nào Force Band do Sphero tạo ra, tôi nghĩ: " Ok, tôi c
Xây dựng hệ thống thủy canh tự làm mini & vườn thảo mộc thủy canh tự làm với cảnh báo WiFi: 18 bước
Xây dựng Hệ thống thủy canh tự làm nhỏ & Vườn thảo mộc thủy canh tự làm với cảnh báo WiFi: Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách xây dựng hệ thống #DIY #hydroponics. Hệ thống thủy canh tự làm này sẽ tưới theo chu kỳ tưới thủy canh tùy chỉnh với 2 phút bật và 4 phút tắt. Nó cũng sẽ theo dõi mực nước hồ chứa. Hệ thống này
Một cánh tay robot đơn giản được điều khiển qua chuyển động của tay thực tế: 7 bước (có hình ảnh)
Một cánh tay rô bốt đơn giản được điều khiển trên chuyển động của tay thực tế: Đây là một cánh tay rô bốt DOF rất đơn giản dành cho người mới bắt đầu. Cánh tay được điều khiển bằng Arduino. Nó được kết nối với một cảm biến được gắn trên tay của người vận hành. Do đó, người điều khiển có thể điều khiển khuỷu tay của cánh tay bằng cách uốn cong chuyển động của khuỷu tay của mình
Tự động hóa tại nhà đơn giản nhất sử dụng Bluetooth, điện thoại thông minh Android và Arduino.: 8 bước (có hình ảnh)
Tự động hóa gia đình đơn giản nhất sử dụng Bluetooth, điện thoại thông minh Android và Arduino. Cái này rất dễ xây dựng và nó có thể được xây dựng trong vài giờ. Trong phiên bản của tôi mà tôi đang giải thích ngay tại đây, tôi có thể