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 控制舵机的主要内容,如果未能解决你的问题,请参考以下文章

Arduino控制舵机详解(含代码)

SD卡声音播放代码和舵机代码烧进arduino板卡里不能正常运行?

Arduino控制舵机

舵机控制那些事(附STM32代码!!!)

这个单片机控制舵机的程序 舵机会抖动 哪位大侠帮我改一下c程序?

51单片机控制舵机转角的C语言程序