- Sơ đồ mạch
- Tạo tín hiệu PWM trên chân GPIO để điều khiển động cơ Servo
- Lập trình PIC16F8771A cho Cánh tay robot
- Mô phỏng mã cánh tay robot PIC
- Thiết kế PCB bằng EasyEDA
- Tính toán và đặt hàng mẫu trực tuyến
- Hoạt động của cánh tay robot PIC
Từ dây chuyền lắp ráp của các ngành công nghiệp sản xuất ô tô đến các robot phẫu thuật trong không gian, Robotic Arms sẽ được tìm thấy ở khắp mọi nơi. Cơ chế của những robot này tương tự như con người có thể được lập trình để có chức năng tương tự và tăng khả năng. Chúng có thể được sử dụng để thực hiện các hành động lặp lại nhanh hơn và chính xác hơn con người hoặc có thể được sử dụng trong môi trường khắc nghiệt mà không gây nguy hiểm đến tính mạng con người. Chúng tôi đã xây dựng một Cánh tay rô bốt và chơi Ghi âm bằng Arduino có thể được huấn luyện để thực hiện một nhiệm vụ cụ thể và lặp lại mãi mãi.
Trong hướng dẫn này, chúng tôi sẽ sử dụng Vi điều khiển 8-bit PIC16F877A tiêu chuẩn công nghiệp để điều khiển cùng một cánh tay robot với chiết áp. Thách thức với dự án này là PIC16F877A chỉ có hai chân có khả năng PWN, nhưng chúng tôi cần điều khiển khoảng 5 động cơ servo cho rô-bốt của chúng tôi, yêu cầu 5 chân PWM riêng lẻ. Vì vậy, chúng ta phải sử dụng các chân GPIO và tạo ra tín hiệu PWM trên các chân GPIO PIC bằng cách sử dụng các ngắt bộ định thời. Bây giờ, tất nhiên chúng ta có thể nâng cấp lên một bộ vi điều khiển tốt hơn hoặc sử dụng IC khử ghép kênh để làm cho mọi thứ dễ dàng hơn rất nhiều ở đây. Tuy nhiên, vẫn đáng để thử dự án này để học hỏi kinh nghiệm.
Cấu trúc cơ học của cánh tay robot mà tôi đang sử dụng trong dự án này đã được in 3D hoàn toàn cho dự án trước của tôi; bạn có thể tìm thấy các tệp thiết kế hoàn chỉnh và quy trình lắp ráp tại đây. Ngoài ra, nếu bạn không có máy in 3D, bạn cũng có thể tạo Cánh tay robot đơn giản bằng các tấm bìa cứng như hiển thị trong liên kết. Giả sử rằng bằng cách nào đó bạn đã nắm được Cánh tay robot của mình, hãy tiến hành dự án.
Sơ đồ mạch
Sơ đồ mạch hoàn chỉnh cho Cánh tay robot dựa trên Vi điều khiển PIC này được hiển thị bên dưới. Các sơ đồ được vẽ bằng EasyEDA.
Sơ đồ mạch khá đơn giản; dự án hoàn chỉnh được cung cấp bởi bộ chuyển đổi 12V. Sau đó, 12V này được chuyển đổi thành + 5V bằng cách sử dụng hai bộ điều chỉnh điện áp 7805. Một được gắn nhãn là + 5V và cái còn lại được gắn nhãn là + 5V (2). Lý do có hai bộ điều chỉnh là khi servo quay, nó sẽ kéo theo rất nhiều dòng điện, tạo ra sự sụt giảm điện áp. Sự sụt giảm điện áp này buộc PIC phải tự khởi động lại, do đó chúng tôi không thể vận hành cả PIC và động cơ servo trên cùng một đường ray + 5V. Vì vậy, một đầu ra có nhãn là + 5V được sử dụng để cấp nguồn cho Vi điều khiển PIC, LCD và Potentiometers và một đầu ra bộ điều chỉnh riêng biệt có nhãn là + 5V (2) được sử dụng để cấp nguồn cho động cơ servo.
Năm chân đầu ra của chiết áp cung cấp điện áp thay đổi từ 0V đến 5V được kết nối với các chân tương tự An0 đến AN4 của PIC. Vì chúng tôi đang có kế hoạch sử dụng bộ hẹn giờ để tạo PWM nên động cơ servo có thể được kết nối với bất kỳ chân GPIO nào. Tôi đã chọn các chân dạng RD2 đến RD6 cho động cơ servo, nhưng nó có thể là bất kỳ GPIO nào bạn chọn.
Vì chương trình liên quan nhiều đến việc gỡ lỗi, màn hình LCD 16x2 cũng được giao tiếp với portB của PIC. Điều này sẽ hiển thị chu kỳ làm việc của động cơ servo đang được điều khiển. Ngoài ra, tôi cũng đã mở rộng kết nối cho tất cả các chân GPIO và analog, đề phòng nếu có bất kỳ cảm biến nào cần được giao tiếp trong tương lai. Cuối cùng tôi cũng đã kết nối chân lập trình H1 để lập trình trực tiếp PIC với pickit3 bằng cách sử dụng tùy chọn lập trình ICSP.
Tạo tín hiệu PWM trên chân GPIO để điều khiển động cơ Servo
Khi mạch đã sẵn sàng, chúng ta phải tìm cách tạo tín hiệu PWN trên chân GPIO của PIC để điều khiển động cơ servo. Chúng tôi đã mệt mỏi một cái gì đó tương tự bằng cách sử dụng phương pháp ngắt Timer và đã thành công. Ở đây chúng tôi sẽ chỉ xây dựng phần trên của nó, vì vậy nếu bạn là người mới ở đây, tôi thực sự khuyên bạn nên đọc hướng dẫn trước này trước khi tiếp tục.
Tất cả các động cơ servo sở thích hoạt động với tần số 50Hz. Có nghĩa là một chu kỳ xung hoàn chỉnh cho động cơ servo sẽ là 1/50 (F = 1 / T) là 20ms. Trong 20ms hoàn thành này, tín hiệu điều khiển chỉ từ 0 đến 2ms trong khi phần còn lại của tín hiệu luôn tắt. Hình dưới đây cho thấy thời gian BẬT chỉ thay đổi từ 0 đến 2ms để quay động cơ từ 0 độ đến 180 độ trong tổng thời gian 20ms.
Với ý nghĩ này, chúng ta phải viết chương trình theo cách mà PIC đọc từ 0 đến1204 từ chiết áp và ánh xạ nó thành 0 đến 100, đây sẽ là chu kỳ làm việc của động cơ servo. Sử dụng chu kỳ làm việc này, chúng tôi có thể tính toán thời gian BẬT của động cơ servo. Sau đó, chúng ta có thể khởi tạo ngắt bộ định thời để làm tràn theo một khoảng thời gian đều đặn để nó hoạt động tương tự như hàm millis () trong Arduino. Cùng với đó, chúng ta có thể chuyển pin GPIO trạng thái thành cao trong một khoảng thời gian mong muốn và tắt nó sau 20ms (một chu kỳ hoàn chỉnh) và sau đó lặp lại quá trình tương tự. Bây giờ, chúng ta đã hiểu logic, chúng ta hãy tham gia vào chương trình.
Lập trình PIC16F8771A cho Cánh tay robot
Giống như mọi khi, chương trình hoàn chỉnh với Video có thể được tìm thấy ở cuối trang này, mã cũng có thể được tải xuống từ đây với tất cả các tệp cần thiết. Trong phần này chúng ta sẽ thảo luận về logic đằng sau chương trình. Chương trình sử dụng mô-đun ADC, Mô-đun hẹn giờ và Mô-đun LCD để điều khiển Cánh tay robot. Nếu bạn không biết cách sử dụng các tính năng ADC hoặc tính năng Bộ hẹn giờ hoặc giao diện màn hình LCD với PIC, thì bạn có thể quay lại các liên kết tương ứng để tìm hiểu chúng. Giải thích dưới đây được đưa ra với giả định rằng người đọc đã quen thuộc với những khái niệm này.
Cấu hình cổng của Timer 0
Phần quan trọng nhất trong mã là đặt Timer 0 thành quá dòng cho mỗi độ trễ cụ thể. Các công thức để tính toán độ trễ này có thể được đưa ra như
Độ trễ = ((256-REG_val) * (Prescal * 4)) / Fosc
Bằng cách sử dụng thanh ghi OPTION_REG và TMR0, chúng tôi đã đặt Timer 0 hoạt động với giá trị địa chỉ trước là 32 và giá trị REG được đặt thành 248. Tần số tinh thể (Fosc) được sử dụng trong phần cứng của chúng tôi là 20Mhz. Với những giá trị này, độ trễ có thể được tính là
Độ trễ = ((256-248) * (32 * 4)) / (20000000) = 0,0000512 giây (hoặc) = 0,05 mili giây
Vì vậy, bây giờ chúng tôi đã đặt bộ đếm thời gian để tràn ở mỗi 0,05ms. Mã để làm điều tương tự được cung cấp dưới đây
/ ***** Cấu hình cổng cho bộ hẹn giờ ****** / OPTION_REG = 0b00000100; // Timer0 với freq bên ngoài và 32 là prescalar // Cũng cho phép PULL UPs TMR0 = 248; // Nạp giá trị thời gian cho 0,0001s; delayValue có thể nằm trong khoảng 0-256 chỉ TMR0IE = 1; // Kích hoạt bit ngắt bộ định thời trong thanh ghi PIE1 GIE = 1; // Bật ngắt toàn cục PEIE = 1; // Bật ngắt ngoại vi / *********** ______ *********** /
Trong tổng số cửa sổ điều khiển 0ms đến 2ms của động cơ servo, chúng ta có thể điều khiển nó với độ phân giải 0,05msec, cho phép chúng ta có (2 / 0,05) 40 vị trí khác nhau cho động cơ từ 0 độ đến 180 độ. Bạn có thể giảm giá trị này hơn nữa nếu MCU của bạn có thể hỗ trợ nó để có được nhiều vị trí hơn và kiểm soát chính xác.
Quy trình dịch vụ ngắt (ISR)
Bây giờ chúng ta có Bộ định thời 0 được đặt vượt quá dòng chảy cho mỗi 0,05ms, chúng ta sẽ có cờ ngắt TMR0IF được đặt cho 0,05ms. Vì vậy, bên trong hàm ISR, chúng ta có thể đặt lại cờ đó và tăng một biến được gọi là đếm từng một. Vì vậy, bây giờ biến này sẽ tăng 1 cho mỗi 0,05ms.
void timer_isr () { if (TMR0IF == 1) // Cờ hẹn giờ đã được kích hoạt do tràn bộ định thời -> đặt thành tràn cho mỗi 0,05ms { TMR0 = 248; // Nạp bộ định thời Giá trị TMR0IF = 0; // Xóa cờ ngắt đếm thời gian ++; // Đếm số gia tăng 1 cho mỗi 0,05ms }
Tính toán chu kỳ nhiệm vụ và thời gian
Tiếp theo, chúng ta phải tính toán chu kỳ làm việc và thời gian cho tất cả năm động cơ servo. Chúng tôi có năm động cơ servo, mỗi động cơ được sử dụng để điều khiển từng phần của cánh tay. Vì vậy, chúng tôi phải đọc giá trị ADC của cả năm và tính toán chu kỳ nhiệm vụ và thời gian cho mỗi.
Giá trị ADC sẽ nằm trong khoảng từ 0 đến 1024, có thể được chuyển đổi thành chu kỳ nhiệm vụ 0% đến 100% bằng cách nhân 0,0976 (100/1024 = 0,0976) với giá trị thu được. Sau đó chu kỳ nhiệm vụ 0 đến 100% này phải được chuyển đổi thành thời gian BẬT. Chúng ta biết rằng ở chu kỳ nhiệm vụ 100%, thời gian BẬT phải là 2ms (cho 180 độ) vì vậy nhân 0,02 (2/100 = 0,02) sẽ chuyển đổi chu kỳ làm việc 0 đến 100 thành 0 đến 2ms. Nhưng sau đó, số lượng biến bộ đếm thời gian của chúng tôi được đặt để tăng một lần cho mỗi 0,05ms. Điều này có nghĩa là giá trị của số đếm sẽ là 20 (1 / 0,05 = 20) cho mỗi 1ms. Vì vậy, chúng ta phải nhân 20 với 0,02 để tính toán chính xác thời gian cho chương trình của chúng ta sẽ cho chúng ta giá trị 0,4 (0,02 * 20 = 0,4). Mã cho tương tự được hiển thị bên dưới, bạn có thể thấy nó được lặp lại 5 lần cho cả 5 nồi bằng vòng lặp for. Các giá trị kết quả được lưu trữ trong mảng T_ON.
for (int pot_num = 0; pot_num <= 3; pot_num ++) { int Pev_val = T_ON; POT_val = (ADC_Read (pot_num)); // Đọc giá trị của POT bằng ADC Duty_cycle = (POT_val * 0.0976); // Ánh xạ 0 đến 1024 thành 0 đến 100 T_ON = Duty_cycle * 0.4; // 20 * 0.02
Chọn động cơ để quay
Chúng ta không thể điều khiển tất cả năm động cơ cùng nhau vì nó sẽ làm cho mã ISR nặng nề, làm chậm toàn bộ vi điều khiển. Vì vậy, chúng ta chỉ phải quay một động cơ servo tại một thời điểm. Để chọn servo nào để xoay, vi điều khiển sẽ giám sát thời gian BẬT của tất cả năm động cơ servo và so sánh với thời gian trước đó về thời gian. Nếu có sự thay đổi về thời gian BẬT thì chúng ta có thể kết luận rằng phải di chuyển servo cụ thể. Mã cho cùng một được hiển thị bên dưới.
if (T_ON! = Pev_val) { Lcd_Clear (); servo = pot_num; Lcd_Set_Cursor (2,11); Lcd_Print_String ("S:"); Lcd_Print_Char (servo + '0'); if (pot_num == 0) {Lcd_Set_Cursor (1,1); Lcd_Print_String ("A:");} else if (pot_num == 1) {Lcd_Set_Cursor (1,6); Lcd_Print_String ("B:");} else if (pot_num == 2) {Lcd_Set_Cursor (1,11); Lcd_Print_String ("C:");} else if (pot_num == 3) {Lcd_Set_Cursor (2,1); Lcd_Print_String ("D:");} else if (pot_num == 4) {Lcd_Set_Cursor (2,6); Lcd_Print_String ("E:");} char d2 = (Duty_cycle)% 10; char d1 = (Duty_cycle / 10)% 10; Lcd_Print_Char (d1 + '0'); Lcd_Print_Char (d2 + '0');
Chúng tôi cũng in chu kỳ làm việc của servo trên màn hình LCD để người dùng có thể biết vị trí hiện tại của nó. Dựa trên sự thay đổi về thời gian BẬT, servo biến đổi được cập nhật với các số từ 0 đến 4 cho mỗi động cơ riêng lẻ.
Điều khiển Động cơ Servo bên trong ISR
Bên trong ISR, chúng ta có số lượng biến tăng lên sau mỗi 0,05ms, điều này có nghĩa là cứ sau 1ms, biến sẽ tăng lên 20. Sử dụng điều này, chúng ta phải điều khiển các chân để tạo ra tín hiệu PWM. Nếu giá trị của bộ đếm nhỏ hơn đúng thời gian thì GPIO của động cơ đó được bật bằng cách sử dụng dòng dưới đây
PORTD = PORTD - servo_code;
Ở đây mảng servo_code có chi tiết chân của tất cả năm động cơ servo và dựa trên giá trị trong servo biến đổi, mã cho động cơ servo cụ thể đó sẽ được sử dụng. Sau đó nó là OR (-) một cách hợp lý với các bit PORTD hiện có để chúng tôi không làm xáo trộn các giá trị của động cơ khác và chỉ cập nhật động cơ cụ thể này. Tương tự để tắt ghim
PORTD = PORTD & ~ (servo_code);
Chúng tôi đã đảo ngược giá trị bit bằng cách sử dụng toán tử nghịch đảo logic (~) và sau đó thực hiện thao tác AND (&) trên PORTD để chỉ tắt chân mong muốn trong khi để các chân khác ở trạng thái trước đó của chúng. Đoạn mã hoàn chỉnh được hiển thị bên dưới.
void timer_isr () { if (TMR0IF == 1) // Cờ hẹn giờ đã được kích hoạt do tràn bộ định thời -> đặt thành tràn cho mỗi 0,05ms { TMR0 = 248; // Nạp bộ định thời Giá trị TMR0IF = 0; // Xóa cờ ngắt đếm thời gian ++; // Đếm số gia tăng 1 cho mỗi 0,05ms -> số lượng sẽ là 20 cho mỗi 1ms (0,05 / 1 = 20)) } int servo_code = {0b01000000, 0b00100000, 0b00010000, 0b00001000, 0b00000100}; if (count> = 20 * 20) count = 0; if (count <= (T_ON)) PORTD = PORTD - servo_code; else PORTD = PORTD & ~ (servo_code); }
Chúng ta biết rằng tổng chu kỳ phải kéo dài trong 20ms trước khi chân GPIO được bật lại. Vì vậy, chúng tôi kiểm tra xem số đếm có vượt quá 20ms hay không bằng cách so sánh giá trị của số đếm với 400 (tính toán tương tự như đã thảo luận ở trên) và nếu có, chúng tôi phải khởi tạo lại số đếm bằng 0.
Mô phỏng mã cánh tay robot PIC
Tốt hơn hết là bạn nên mô phỏng mã trước khi đưa nó vào phần cứng thực. Vì vậy, tôi đã sử dụng Proteus để mô phỏng mã của mình và xác minh nó hoạt động chính xác. Mạch được sử dụng để mô phỏng được hiển thị bên dưới, Chúng tôi đã sử dụng máy hiện sóng để kiểm tra xem các tín hiệu PWM có được tạo ra theo yêu cầu hay không. Ngoài ra, chúng tôi có thể xác minh xem động cơ LCD và Servo có quay như mong đợi hay không.
Như bạn có thể thấy màn hình LCD hiển thị chu kỳ làm việc của động cơ D là 07 dựa trên giá trị nồi là động cơ thứ 3. Tương tự nếu một nồi khác được di chuyển, chu kỳ làm việc của nồi đó và số mô tơ của nó sẽ được hiển thị trên màn hình LCD. Tín hiệu PWM hiển thị trên máy hiện sóng được hiển thị bên dưới.
Tổng chu kỳ được đo là 22,2ms bằng cách sử dụng tùy chọn con trỏ trên máy hiện sóng, rất gần với 20ms mong muốn. Cuối cùng, chúng tôi chắc chắn rằng mã hoạt động, vì vậy để tiếp tục với mạch, chúng tôi có thể hàn nó trên một bảng mạch hoàn thiện hoặc sử dụng một PCB. Nó sẽ không hoạt động dễ dàng trên breadboard vì POT luôn có xu hướng gây ra một số vấn đề do kết nối kém.
Thiết kế PCB bằng EasyEDA
Để thiết kế Cánh tay robot PIC này, chúng tôi đã chọn công cụ EDA trực tuyến có tên EasyEDA. Tôi đã sử dụng nó trong một thời gian dài và thấy nó rất tiện lợi vì tính sẵn có rộng rãi và tính chất dễ sử dụng. Sau khi thiết kế PCB, chúng tôi có thể đặt hàng các mẫu PCB bằng dịch vụ chế tạo PCB chi phí thấp của họ. Họ cũng cung cấp dịch vụ tìm nguồn cung ứng linh kiện, nơi họ có một lượng lớn linh kiện điện tử và người dùng có thể đặt hàng các thành phần cần thiết của họ cùng với đơn đặt hàng PCB.
Trong khi thiết kế mạch và PCB của bạn, bạn cũng có thể công khai thiết kế mạch và PCB của mình để người dùng khác có thể sao chép hoặc chỉnh sửa chúng và có thể hưởng lợi từ công việc của bạn, chúng tôi cũng đã công khai toàn bộ bố cục Mạch và PCB cho mạch này, hãy kiểm tra liên kết dưới đây:
easyeda.com/circuitdigest/pic-development-board-for-robotic-arm
Sử dụng liên kết này, bạn có thể đặt hàng trực tiếp cùng một PCB mà chúng tôi đang sử dụng trong dự án này và sử dụng nó. Sau khi thiết kế xong, bảng có thể được xem như mô hình 3D, điều này sẽ giúp ích rất nhiều trong việc hình dung bảng sẽ xuất hiện như thế nào sau khi chế tạo. Mô hình 3D của bảng mà chúng tôi đang sử dụng được hiển thị bên dưới. Ngoài ra, bạn cũng có thể xem lớp trên cùng và dưới cùng của bảng để kiểm tra xem màn hình có bóng như mong đợi hay không.
Tính toán và đặt hàng mẫu trực tuyến
Sau khi hoàn thành thiết kế PCB Robot PIC này, bạn có thể đặt mua PCB thông qua JLCPCB.com. Để đặt mua PCB từ JLCPCB, bạn cần có Tệp Gerber. Để tải xuống các tệp Gerber trên PCB của bạn, chỉ cần nhấp vào nút Tạo tệp Chế tạo trên trang trình chỉnh sửa EasyEDA, sau đó tải xuống tệp Gerber từ đó hoặc bạn có thể nhấp vào Đặt hàng tại JLCPCB như được hiển thị trong hình ảnh bên dưới. Thao tác này sẽ chuyển hướng bạn đến JLCPCB.com, nơi bạn có thể chọn số lượng PCB bạn muốn đặt hàng, bao nhiêu lớp đồng bạn cần, độ dày PCB, trọng lượng đồng và thậm chí cả màu PCB, như ảnh chụp nhanh được hiển thị bên dưới:
Sau khi bạn đã chọn tất cả các tùy chọn, hãy nhấp vào “Lưu vào giỏ hàng” và sau đó bạn sẽ được đưa đến trang nơi bạn có thể tải lên Tệp Gerber mà chúng tôi đã tải xuống từ EasyEDA. Tải lên tệp Gerber của bạn và nhấp vào “Lưu vào giỏ hàng”. Và cuối cùng nhấp vào Kiểm tra Bảo mật để hoàn tất đơn đặt hàng của bạn, sau đó bạn sẽ nhận được PCB của mình vài ngày sau đó. Họ đang chế tạo PCB với tỷ lệ rất thấp là $ 2. Thời gian xây dựng của họ cũng rất ít, là 48 giờ với thời gian giao hàng của DHL trong 3-5 ngày, về cơ bản bạn sẽ nhận được PCB của mình trong vòng một tuần kể từ khi đặt hàng.
Sau khi đặt hàng PCB, bạn có thể kiểm tra Tiến độ sản xuất PCB của mình với ngày và giờ. Bạn kiểm tra bằng cách vào trang Tài khoản và nhấp vào "Tiến độ sản xuất".
Sau vài ngày đặt hàng PCB, tôi đã nhận được các mẫu PCB trong bao bì đẹp như trong hình dưới đây.
Và sau khi nhận được những mảnh này, tôi đã hàn tất cả các thành phần cần thiết trên PCB. Tôi cũng trực tiếp hàn POT trực tiếp thay vì sử dụng dây kết nối vì dây cái với dây cái mà tôi sử dụng ban đầu cho điện áp đầu ra tương tự kỳ lạ có thể do các tiếp điểm lỏng lẻo. Sau khi tất cả các thành phần được lắp ráp, PCB của tôi trông giống như thế này.
Bạn có thể nhận thấy rằng chỉ có một 7805 trên bảng này. Đó là bởi vì ban đầu tôi nghĩ rằng tôi có thể sử dụng bộ điều chỉnh chỉ để cấp nguồn cho cả PIC và động cơ servo và sau đó tôi nhận ra rằng tôi cần hai bộ điều chỉnh. Vì vậy, tôi đã sử dụng một mạch bên ngoài để cấp nguồn cho động cơ servo thông qua các dây màu xanh lá cây mà bạn thấy ở đây.
Tuy nhiên, bạn không phải lo lắng nhiều về nó bởi vì; Tôi đã thực hiện các thay đổi đối với PCB ngay bây giờ. Bạn có thể sử dụng PCB đã sửa đổi và hàn cả các bộ điều chỉnh trên chính bo mạch.
Hoạt động của cánh tay robot PIC
Sau tất cả những công việc mệt mỏi đã đến lúc được đền đáp. Hàn tất cả các thành phần trên bo mạch và tải chương trình lên bộ điều khiển PIC. Mã hoàn chỉnh được cung cấp bên dưới hoặc có thể được tải xuống từ đây. Trình kết nối lập trình được cung cấp trên bảng sẽ giúp bạn tải lên chương trình trực tiếp bằng Pickit 3 mà không gặp nhiều rắc rối. Sau khi chương trình được tải lên, bạn sẽ thấy màn hình LCD hiển thị servo hiện đang được điều khiển. Để tìm hiểu thêm về lập trình Vi điều khiển PIC, chỉ cần làm theo hướng dẫn trước.
Từ đó, bạn có thể chỉ cần xoay nồi và kiểm tra cách các động cơ servo phản hồi từng chiết áp. Khi bạn hiểu định dạng, bạn có thể điều khiển cánh tay robot để thực hiện bất kỳ hành động nào bạn cần nó để thực hiện và vui chơi. Bạn có thể tìm thấy toàn bộ hoạt động của dự án trong video được liên kết bên dưới.
Đó là các bạn hy vọng bạn hiểu dự án và học được điều gì đó mới từ nó. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại chúng trong phần bình luận hoặc sử dụng diễn đàn để thảo luận kỹ thuật khác.