键盘遥控机械臂运动
建立PC与机械臂的通讯
硬件接线
机械臂组装时要开机再组装,
硬件接线
可用串口或者蓝牙,
串口通讯控制
- 单个舵机控制指令:
#000P1500T1000!
说明:#与P 之间代表舵机ID,位数必须是3 位,对于PWM 舵机范围000~005,对于总线
设备000~254;P 与T 之间代表位置,位数必须是4 位,范围0500~2500;T 与!之间代表时间,
单位ms,位数必须4 位。
2. 多个舵机控制指令
{#000P1500T1000!#001P1500T1000!#002P1500T1000!}
说明:多个单舵机指令的组合体,注意两边的大括号。
写代码让机械臂自己动起来
github搜索代码,下载前点赞是最基本的程序员礼仪,这个代码比较小,可以直接下载,老步骤,解压,拖到文件夹,打开项目,设置编译器,安装包,这里安装包又出现了导入时名称与安装名称不一致的情况,conda install pyserial
运行起来,连上机械臂,选择串口号,打开串口,发送测试指令,嘿,nice
来,我们来品品人家这个代码
找到发送按钮,发送按钮的命令,查看代码,修改代码
data="{#000P1000T1000!#001P1500T1000!#002P1500T1000!}\n"
在init函数中加入
self.angle0=1500
self.angle0=self.angle0+100
if self.angle0>2500:
self,angle0=2500
data="{#000P"+str(self.angle0)+"T1000!#001P1500T1000!#002P1500T1000!}\n"
键盘遥控机械臂
需求分析:添加一个按钮,点击这个按钮就可以进入键盘遥控事件,键盘的上下键能控制机械臂运动,再次点击按钮结束遥控。
第一步:我们需要添加一个开始遥控按钮:
spacelabel = tk.Label(optionframebottom, width=5, height=1)
spacelabel.pack()
self.controlbutton = tk.Button(optionframebottom, text='开始遥控', \
width=20, height=1, command=self.controlbuttoncmd)
self.controlbutton.pack()
第二步:修改按钮命令
def controlbuttoncmd(self):
if self.controlbutton['text'] == '开始遥控':
self.controlbutton['text'] = '结束遥控'
else:
self.controlbutton['text'] = '开始遥控'
第三步:开启键盘监听事件
def controlbuttoncmd(self):
if self.controlbutton['text'] == '开始遥控':
self.root.bind("<Key>", self.func)
self.controlbutton['text'] = '结束遥控'
else:
self.root.unbind("<Key>")
self.controlbutton['text'] = '开始遥控'
def func(self,event):
print("事件触发键盘输入:{event.keysym},对应的ASCII码:{event.keycode}")
第四步:修改键盘监听事件
if event.keycode==38:
self.angle0+=100
if self.angle0>=2500:
self.angle0=2500
# data="{#000P"+str(self.angle0)+"T1000!#001P1500T1000!#002P1500T1000!}\n"
data = "{#000P" + str(self.angle0) + "T1000!#001P"+str(self.angle1)+"T1000!#002P1500T1000!}\n"
self.serial.write(data[0:-1].encode(self.encoding))
time.sleep(1)
elif event.keycode == 40:
self.angle0 -= 100
if self.angle0<=500:
self.angle0=500
# data = "{#000P" + str(self.angle0) + "T1000!#001P1500T1000!#002P1500T1000!}\n"
data = "{#000P" + str(self.angle0) + "T1000!#001P" + str(self.angle1) + "T1000!#002P1500T1000!}\n"
self.serial.write(data[0:-1].encode(self.encoding))
time.sleep(1)
elif event.keycode==37:
self.angle1+=100
if self.angle1>=2500:
self.angle1=2500
data = "{#000P" + str(self.angle0) + "T1000!#001P"+str(self.angle1)+"T1000!#002P1500T1000!}\n"
self.serial.write(data[0:-1].encode(self.encoding))
time.sleep(1)
elif event.keycode == 39:
self.angle1 -= 100
if self.angle1<=500:
self.angle1=500
data = "{#000P" + str(self.angle0) + "T1000!#001P"+str(self.angle1)+"T1000!#002P1500T1000!}\n"
self.serial.write(data[0:-1].encode(self.encoding))
time.sleep(1)