Mục lục:

Cánh tay robot đơn giản & thông minh sử dụng Arduino !!!: 5 bước (có hình ảnh)
Cánh tay robot đơn giản & thông minh sử dụng Arduino !!!: 5 bước (có hình ảnh)

Video: Cánh tay robot đơn giản & thông minh sử dụng Arduino !!!: 5 bước (có hình ảnh)

Video: Cánh tay robot đơn giản & thông minh sử dụng Arduino !!!: 5 bước (có hình ảnh)
Video: Đồ án tốt nghiệp BKĐN | Cánh Tay Robot 4 Bậc Tự do phân loại sản phẩm theo màu sắc | Robot arm 4 dof 2024, Tháng sáu
Anonim
Image
Image
Những thứ bạn cần:
Những thứ bạn cần:

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: -

Những thứ bạn cần:
Những thứ bạn cần:
Những thứ bạn cần:
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: -

Làm cánh tay:
Làm cánh tay:
Làm cánh tay:
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: -

Tạo kết nối:
Tạo kết nối:
Tạo kết nối:
Tạo kết nối:
Tạo kết nối:
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: -

Mã hóa:
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: