基于Arduino UNO的可控机械臂
目录
1.Aeduino UNO简介
2.项目构思
3.项目所需材料
4.代码示例
4.1 开发板代码
4.2 VS code控制代码
5. 运行结果
1.Aeduino UNO简介
Arduino Uno 是一款基于 微控制器 MTATmega328P的开发板。它有14个数字输入/输出引脚(这些引脚中有6个引脚可以作为PWM输出引脚),6个模拟输入引脚,16 MHz石英晶振,USB接口,电源接口,支持在线串行编程以及复位按键。用户只需要将开发板与电脑通过USB接口连接就可以使用。
2.项目构思
编辑arduino ide代码,获取舵机的当前状态,然后再vscode中使用图形化界面控制舵机转动。通过控制三个舵机的转动,实现控制一个三自由度的机械臂的运动。
3.项目所需材料
Arduino UNO控制板
SG90舵机*3
泡沫板
4.代码示例
4.1 开发板代码
#include <Servo.h>
Servo servo1; // SG90
Servo servo2; // SG90
Servo servo3; // SG90
void setup() {
Serial.begin(9600);
servo1.attach(5); // 连接到引脚5
servo2.attach(6); // 连接到引脚6
servo3.attach(9); // 连接到引脚9
}
void loop() {
if (Serial.available()) {
int servoNum = Serial.parseInt(); // 读取舵机编号
int angle = Serial.parseInt(); // 读取角度
switch (servoNum) {
case 1:
servo1.write(angle);
break;
case 2:
servo2.write(angle);
break;
case 3:
servo3.write(angle);
break;
}
}
}
4.2 VS code控制代码
import serial
import time
import tkinter as tk
# 配置串口
arduino = serial.Serial('COM3', 9600)
time.sleep(1)
# 发送舵机控制命令到Arduino
def move_servo(servo_num, angle):
command = f"{servo_num} {angle}\n"
arduino.write(command.encode())
# 创建GUI窗口
window = tk.Tk()
window.title("舵机控制面板")
# 创建滑块和标签
label1 = tk.Label(window, text="舵机 1")
label1.grid(row=0, column=0)
scale1 = tk.Scale(window, from_=0, to=90, orient=tk.HORIZONTAL, command=lambda angle, servo=1: move_servo(servo, angle))
scale1.grid(row=0, column=1)
label2 = tk.Label(window, text="舵机 2")
label2.grid(row=1, column=0)
scale2 = tk.Scale(window, from_=0, to=90, orient=tk.HORIZONTAL, command=lambda angle, servo=2: move_servo(servo, angle))
scale2.grid(row=1, column=1)
label3 = tk.Label(window, text="舵机 3")
label3.grid(row=2, column=0)
scale3 = tk.Scale(window, from_=0, to=90, orient=tk.HORIZONTAL, command=lambda angle, servo=3: move_servo(servo, angle))
scale3.grid(row=2, column=1)
# 运行GUI主循环
window.mainloop()
# 关闭串口
arduino.close()
5. 运行结果
通过滑条控制舵机的运作。
运行视频:用装菜的泡沫箱做一个简易的三自由度可控机械臂。_哔哩哔哩_bilibili
作者:Zucker N