OpenART mini 控制舵机
Posted 皮卡丘吉尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenART mini 控制舵机相关的知识,希望对你有一定的参考价值。
基本介绍
最近在做智能车,用的语言是python,做识别动物水果数字等,最基本的需要舵机来控制摄像头的移动镜头,这个就写一下 用OpenART mini 控制舵机 的代码 记录一下。
资料:OpenART mini 百度网盘 提取码:mxx8
在使用OPENART MINI的 GPIO LED PWM UART的时候,请务必将“SD卡必备文件”文件夹中的内容放置到sd卡根目录中。
舵机的分类
大致分为以下三种吧 只是我现在用过就三种 。
180° 有限位 (不上电 只能转180度 真正转也就是180° )
180° 无限位 (不上电 能转360° 但是真正转也就是180°)
360° 无限位 (这个就是上电不上电都能转360°以上)
我这里用的是 180° 无限位的舵机
首先看看一下图片:
代码呈现(PWM控制)
PWM.py
这个是逐飞给的demo代码。
import pyb
from machine import PWM # 导入PWM
pwm1=PWM(2,1,100,50) # 初始化pwm 使用pwm2 通道1 频率100hz 占空比数值设置为50(设置范围是0-255) PWM通过C6输出
pwm1.freq(2000) # 修改频率为2khz
pwm2=PWM(2,2,2000,100) # 使用pwm2通道2与使用pwm2通道1使用的是同一个定时器,因此两个通道频率必须一致,占空比可以不同 PWM通过C7输出
pwm3=PWM(2,3,3000,150) # 初始化pwm 使用pwm2 通道3 频率3khz 占空比数值设置为150(设置范围是0-255) PWM通过C8输出
pwm4=PWM(2,4,3000,200) # 使用pwm2通道3与使用pwm2通道4使用的是同一个定时器,因此两个通道频率必须一致,占空比可以不同 PWM通过C9输出
n = 255
while(n>0):
pwm1.duty(n) # 修改占空比 占空比设置范围0-255
pwm2.duty(n) # 修改占空比 占空比设置范围0-255
pwm3.duty(n)
pwm4.duty(n)
n = n-1 # 重新计算占空比 下次设置
pyb.mdelay(2) # 延时2ms
pwm1.deinit() # PWM2通道1反初始化
pwm2.deinit()
pwm3.deinit()
pwm4.deinit()
每个pwm是控制一个舵机的,我这里用的是2两个舵机 所以有两个可以不要,你们不知道分别是哪个舵机可以单个调试。
单个舵机代码
在这里我们 我们来看看pwm 从 1 到 255 看舵机 的转动状态是怎么样的 再整合代码。
##导入模块
import pyb
from machine import PWM # 导入PWM
import time
## 初始化引脚 我这里控制单个舵机是 pwm4
##频率:400 占空比:100
pwm4=PWM(2,4,400,100) # 通道4 400频率 100占空比
#定义一个变量 从1 到 255 观察 舵机转动状态
n = 1
#直接死循环
while True:
while(n < 255): #如果n 小于 255 不断的循环
pwm4.duty(n) #转动舵机
n = n + 1 #加 1
print(n) #打印 n 的值
time.sleep(200) #防止转动太快 加个延时 好看出现象
## 反方向 转回去
while(n > 0):
pwm4.duty(n) #转动舵机
n = n - 1 #减 1
print(n) #打印 n 的值
time.sleep(200) #防止转动太快 加个延时 好看出现象
运行结果:
总结现象: 我这里的现象: 分为:左、正视前方、右
通过打印值 我这里发现
正视前方:155
左:255
右:1
整合代码:
我们把现象整合代码 变成一个个的函数,方便阅读 和 管理。
## 回正
def initPwm4(n):
if n < 155:
while(n<155):
pwm4.duty(n)
n = n + 1
print("n = %d" % n)
time.sleep(3)
else:
while(n>155):
pwm4.duty(n)
n = n - 1
print("n = %d" % n)
time.sleep(3)
print('方向回正')
return n
## 往右
def Pwm4_right(n):
while(n>1):
pwm4.duty(n)
n = n - 1
print("n = %d" % n)
time.sleep(3)
print('方向往右')
return n
## 往左
def Pwm4_left(n):
while(n<255):
pwm4.duty(n)
n = n + 1
print("n = %d" % n)
time.sleep(3)
print('方向往左')
return n
import pyb
from machine import PWM # 导入PWM
import time
pwm4=PWM(2,4,400,100) # 通道4 400频率 100占空比
n = 150
initPwm4(n) #初始化 回正
time.sleep(2000)
print('n初始化值: %d' % n)
while True:
n = Pwm4_right(n) #往右
time.sleep(1000)
n = initPwm4(n) #回正
time.sleep(1000)
n = Pwm4_left(n) #往左
time.sleep(1000)
n = initPwm4(n) #回正
time.sleep(1000)
运行结果:
两个舵机
代码
import pyb
from machine import PWM # 导入PWM
import time
pwm3=PWM(2,3,400,100) # 初始化pwm 使用pwm2 通道3 频率3khz 占空比数值设置为101(设置范围是0-255) PWM通过C8输出
pwm4=PWM(2,4,400,100) # 使用pwm2通道3与使用pwm2通道4使用的是同一个定时器,因此两个通道频率必须一致,占空比可以不同 PWM通过C9输出
##===================上面舵机=====================##
#上面舵机 往上
def Pwm3_above(u):
while(u > 0):
pwm3.duty(u)
print("值:%d " % u)
u = u - 1
time.sleep(1)
print("=== 上面舵机 往上 ===")
print("u = %d" % u)
return u
#上面舵机 正方向
def Pwm3_correct(u):
if u > 150:
while(u > 150):
pwm3.duty(u)
print("值:%d " % u)
u = u - 1
time.sleep(1)
print("u = %d" % u)
return u
else:
while(u < 150):
pwm3.duty(u)
print("值:%d " % u)
u = u + 1
time.sleep(1)
print("u = %d" % u)
print("=== 上面舵机 回正 ===")
return u
#上面舵机 往下
def Pwm3_under(u):
while(u < 210):
pwm3.duty(u)
print("值:%d " % u)
u = u + 1
time.sleep(1)
print("=== 上面舵机 往下 ===")
print("u = %d" % u)
return u
##===================下面舵机=====================##
#下面舵机 回正
def initPwm4(n):
if n < 155:
while(n<155):
pwm4.duty(n)
n = n + 1
print("n = %d" % n)
time.sleep(1)
else:
while(n>155):
pwm4.duty(n)
n = n - 1
print("n = %d" % n)
time.sleep(1)
print("=== 下面舵机 回正 ===")
return n
#下面舵机 往右 函数
def Pwm4_right(n):
while(n>1):
pwm4.duty(n)
n = n - 1
print("n = %d" % n)
time.sleep(1)
print("=== 下面舵机 往右 ===")
return n
#下面舵机 往左 函数
def Pwm4_left(n):
while(n<255):
pwm4.duty(n)
n = n + 1
print("n = %d" % n)
time.sleep(1)
print("=== 下面舵机 往左 ===")
return n
u = 50 #设置 控制上面舵机 初值
n = 150 #设置 控制下面舵机 初值
u = Pwm3_above(u) #初始化 上面 舵机 (默认往上)
n = initPwm4(n) #初始化 下面 舵机 (默认回正)
time.sleep(1000)
u = Pwm3_under(u) #舵机1 往下
time.sleep(500)
n = Pwm4_left(n) #舵机2 往左
u = Pwm3_correct(u) #舵机1 正视前方
time.sleep(500)
n = initPwm4(n) #舵机2 回正
time.sleep(500)
n = Pwm4_right(n) #舵机2 往右
项目效果呈现
如果觉得这篇文章有用 记得点赞收藏哦 评论也可 o( ̄︶ ̄)o
以上是关于OpenART mini 控制舵机的主要内容,如果未能解决你的问题,请参考以下文章
SD卡声音播放代码和舵机代码烧进arduino板卡里不能正常运行?