机械臂自制程序
下面这个程序首选确定各个机械臂的活动范围,主要功能不是让机械臂动作而是让机械臂动作起来比较平缓,所以整个程序里边有根据输入平缓渐进移动的动作逻辑,而且这个动作逻辑占据了程序大部分内容。
zhua.py
from machine import PWM ,Pin
import time
class Zhua(object):
def __init__(self,a,b,c,d,f):
self.a=PWM(Pin(a),freq=50)#旋转底座 30~130 中心位置75
self.b=PWM(Pin(b),freq=50)#根部第一节 30~130 中心位置75
self.c=PWM(Pin(c),freq=50) #根部第二节 30~130 中心位置75
self.d=PWM(Pin(d),freq=50)#根部第三节 30~130 中心位置75
self.f=PWM(Pin(f),freq=50)# 夹爪30~84
self.zero()
def run(self,x,y):
if y>self.zero_list[x]:
print('0')
for i in range(y//1):
if i>=self.zero_list[x]:
self.server_list[x].duty(i)
time.sleep_ms(80)
else:
for i in range((self.zero_list[x]-y)//1):
self.server_list[x].duty(self.zero_list[x]-i)
time.sleep_ms(110)
self.server_list[x].duty(y)
self.zero_list[x]=y
def zero(self):
self.zero_list=dict()
self.zero_list['a']=75
self.zero_list['b']=75
self.zero_list['c']=75
self.zero_list['d']=75
self.zero_list['f']=84
self.server_list=dict()
self.server_list['a']=self.a
self.server_list['b']=self.b
self.server_list['c']=self.c
self.server_list['d']=self.d
self.server_list['f']=self.f
self.run_all([75,75,75,75,84])
def run_all(self,list_1):
self.run('a',list_1[0])
self.run('b',list_1[1])
self.run('c',list_1[2])
self.run('d',list_1[3])
self.run('f',list_1[4])
if __name__=='__main__':
xx=Zhua(16,17,18,19,14)
下面这个部分是和1638配合实现输入和输出与机械臂联动并且录制机械臂动作并重现录制这么个逻辑,因为只有8个按键所以1-5号按键代表5个轴,7号配合1-5中的一个毽子实现增加,8号配合1-5实现减少,6号毽子为记录当前位置,7+8一起按则是重放记录,1+4一起按时复位到起始位置。
ctrlZhua.py
# 五轴机械臂程序,配合TM1638 实现按键控制,记录动作并复制动作功能
from zhua import Zhua #自制控制库名为爪。。。
from machine import Pin
xx=Zhua(16,17,18,19,14)#传入引脚标号
import tm1638,time
tm=tm1638.TM1638(stb=Pin(25),clk=Pin(26),dio=Pin(27)) ##TM1638标号一致 板子有标记
list_all=[] #录制动作的列表,有需要可以写到NVS里边永久保存
while 1:
#垃圾判断懒得优化,能用就行
if tm.keys()==1:#这是底座舵机
tm.show('ch1 %d'%xx.zero_list['a']) #显示通道,获取当前舵机数据
elif tm.keys()==65:
xx.run('a',xx.zero_list['a']+1) #加一运行
tm.show('ch1 %d'%xx.zero_list['a'])#显示
elif tm.keys()==129:
xx.run('a',xx.zero_list['a']-1)
tm.show('ch1 %d'%xx.zero_list['a'])
if tm.keys()==2:
tm.show('ch2 %d'%xx.zero_list['b'])
elif tm.keys()==66:
xx.run('b',xx.zero_list['b']+1)
tm.show('ch2 %d'%xx.zero_list['b'])
elif tm.keys()==130:
xx.run('b',xx.zero_list['b']-1)
tm.show('ch2 %d'%xx.zero_list['b'])
if tm.keys()==9:
tm.show('zero')
xx.zero()
if tm.keys()==4:
tm.show('ch3 %d'%xx.zero_list['c'])
elif tm.keys()==68:
xx.run('c',xx.zero_list['c']+1)
tm.show('ch3 %d'%xx.zero_list['c'])
elif tm.keys()==132:
xx.run('c',xx.zero_list['c']-1)
tm.show('ch3 %d'%xx.zero_list['c'])
if tm.keys()==0:
tm.clear()
tm.show('cool')
time.sleep(0.5)
if tm.keys()==8:
tm.show('ch4 %d'%xx.zero_list['d'])
elif tm.keys()==72:
xx.run('d',xx.zero_list['d']+1)
tm.show('ch4 %d'%xx.zero_list['d'])
elif tm.keys()==136:
xx.run('d',xx.zero_list['d']-1)
tm.show('ch4 %d'%xx.zero_list['d'])
if tm.keys()==16:#夹爪舵机
tm.show('ch5 %d'%xx.zero_list['f'])
elif tm.keys()==80:
xx.run('f',xx.zero_list['f']+1)
tm.show('ch5 %d'%xx.zero_list['f'])
elif tm.keys()==144:
xx.run('f',xx.zero_list['f']-1)
tm.show('ch5 %d'%xx.zero_list['f'])
if tm.keys()==32:
list_1 = [xx.zero_list['a'],xx.zero_list['b'],xx.zero_list['c'],xx.zero_list['d'],xx.zero_list['f']]#录制动作
list_all.append(list_1)
tm.show('rec---')
time.sleep(1)
print(list_all)
if tm.keys()==192:
tm.show('Run')
for i in list_all:#重放的逻辑
xx.run_all(i)
time.sleep(0.1)
贴个成品图片,![请添加图片描述](https://img-blog.csdnimg.cn/6f29769cfded4148991f7c1062848f4c.jpeg)
留个记录得了。