OpenART mini 控制舵机

  • 基本介绍
    • 舵机的分类
  • 代码呈现(PWM控制)
    • PWM.py
    • 单个舵机代码
      • 运行结果:
      • 整合代码:
        • 运行结果:
    • 两个舵机
      • 代码
  • 项目效果呈现

基本介绍

最近在做智能车,用的语言是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 # 导入PWMpwm1=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-255pwm2.duty(n)    # 修改占空比 占空比设置范围0-255pwm3.duty(n)pwm4.duty(n)n = n-1         # 重新计算占空比 下次设置pyb.mdelay(2)   # 延时2mspwm1.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  #加 1print(n)  #打印 n 的值time.sleep(200) #防止转动太快 加个延时 好看出现象## 反方向 转回去while(n > 0):pwm4.duty(n) #转动舵机n = n - 1  #减 1print(n)  #打印 n 的值time.sleep(200) #防止转动太快 加个延时 好看出现象

运行结果:

总结现象: 我这里的现象: 分为:左、正视前方、右
通过打印值 我这里发现
正视前方:155
左:255
右:1

整合代码:

我们把现象整合代码 变成一个个的函数,方便阅读 和 管理。

## 回正
def initPwm4(n):if n < 155:while(n<155):pwm4.duty(n) n = n + 1print("n = %d" % n)time.sleep(3)else:while(n>155):pwm4.duty(n) n = n - 1print("n = %d" % n)time.sleep(3)print('方向回正')return n## 往右
def Pwm4_right(n):    while(n>1):pwm4.duty(n) n = n - 1print("n = %d" % n)time.sleep(3)print('方向往右')return n## 往左
def Pwm4_left(n):while(n<255):pwm4.duty(n) n = n + 1print("n = %d" % n)time.sleep(3)print('方向往左')return n
import pyb
from machine import PWM # 导入PWM
import timepwm4=PWM(2,4,400,100) # 通道4 400频率 100占空比n = 150initPwm4(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 timepwm3=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 - 1time.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 - 1time.sleep(1)print("u = %d" % u)return uelse:while(u < 150):pwm3.duty(u)print("值:%d " % u)u = u + 1time.sleep(1)print("u = %d" % u)print("=== 上面舵机 回正 ===")return u#上面舵机 往下def Pwm3_under(u):while(u < 210):pwm3.duty(u)print("值:%d " % u)u = u + 1time.sleep(1)print("=== 上面舵机 往下 ===")print("u = %d" % u)return u##===================下面舵机=====================##
#下面舵机 回正def initPwm4(n):if n < 155:while(n<155):pwm4.duty(n)n = n + 1print("n = %d" % n)time.sleep(1)else:while(n>155):pwm4.duty(n)n = n - 1print("n = %d" % n)time.sleep(1)print("=== 下面舵机 回正 ===")return n#下面舵机 往右 函数def Pwm4_right(n):while(n>1):pwm4.duty(n)n = n - 1print("n = %d" % n)time.sleep(1)print("=== 下面舵机 往右 ===")return n#下面舵机 往左 函数def Pwm4_left(n):while(n<255):pwm4.duty(n)n = n + 1print("n = %d" % n)time.sleep(1)print("=== 下面舵机 往左 ===")return nu = 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 控制舵机相关推荐

  1. OpenART mini使用教程

    前言 OpenART mini 是我们在 NXP 的 OpenART 套件的基础上,去除非视觉部分而制作出来的迷你版.虽说只是迷你版,但"麻雀虽小,五脏俱全". OpenART m ...

  2. 实例4:树莓派GPIO控制舵机转动

    实例4:树莓派GPIO控制舵机转动 实验目的 通过背景知识学习,了解舵机的外观及基本运动方式. 了解四足机器人mini pupper腿部单个舵机的组成结构. 通过GPIO对舵机进行转动控制,熟悉PWM ...

  3. pwm控制舵机转动角度程序_01 舵机旋转控制基础

    从今天开始,我们将学习Python代码控制舵机专题.第一节课我们将学习舵机的旋转控制基础,探究180度舵机的图形化编程控制. 一.舵机 1.舵机简介 舵机也叫伺服电机,最早用于船舶上实现其转向功能,由 ...

  4. Arduino 控制舵机

    Arduino 控制舵机 #include <Servo.h> Arduino自带的Servo函数及其语句,先来介绍一下舵机函数的几个常用语句吧. 1.attach(接口)--设定舵机的接 ...

  5. python舵机控制程序_树莓派PWM控制舵机的两种方式

    PWM控制舵机简介 通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的.伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上.伺服电机(舵 ...

  6. arduino定时器控制舵机_Arduino学习经验(一)之解决舵机库和pwm输出冲突

    一.前言 最近在公司学习Arduino uno ,用它实现小车超声波避障功能.实现的功能很简单,就是在小车前方挂一个超声波模块,当碰到障碍物时,会通过舵机进行摆头,判断两边的距离,进行左右转弯.但是碰 ...

  7. STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

    参考:stm32 超声波模块 原理 实现测距 +舵机使用 作者:点灯小哥 发布时间: 2021-03-10 19:37:16 网址:https://blog.csdn.net/weixin_46016 ...

  8. STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

    参考:stm32 定时器输出PWM原理及工作原理+控制舵机 作者:点灯小哥 发布时间: 2021-03-09 23:17:52 网址:https://blog.csdn.net/weixin_4601 ...

  9. 探测距离机器人模型:通过超声波测距控制舵机转向,LED灯,语音播放,蜂鸣器(米思齐mixly,arduino)

    ** ------------探测距离机器人模型:通过超声波测距控制舵机转向,LED灯,语音播放,蜂鸣器(米思齐mixly,arduino) 一. 初始化设置 在初始化这里要先设置波特率.并且把初始超 ...

最新文章

  1. Netty时间轮调度原理分析,再不了解你就out啦
  2. android 布局之scrollview
  3. (九)HTML5本地存储——本地数据库SQLLite的使用
  4. excel mysql实时交换数据_Excel与数据库的数据交互
  5. 一些图形学中的数学应用
  6. 如何用C++来计算大数字乘法
  7. 苹果为什么收购英特尔手机基带业务?库克解释了一下
  8. Thinapp的昨天,今天和明天
  9. 爬虫的步骤解析内容xpath介绍_Xpath的基本方法和使用详解 Python爬虫中最好用解析库...
  10. 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(三)
  11. iOS 程序上传流程
  12. 5个酷毙的Python工具
  13. matlab中ifelse能嵌套吗,MATLAB嵌套if-else语句
  14. 汽车电子_EMC测试_RE试验整改
  15. 缺失.NET Framework组件的解决方法
  16. java barchart类,JavaFX BarChart条形图颜色
  17. 37.0.概率论与数理统计-常用统计量及其分布,次序统计量,(样本均值,样本方差,样本标准差,样本k阶矩,样本k阶中心矩)
  18. win10安装序列号
  19. spark写入Oracle 报错 java.lang.ArrayIndexOutOfBoundsException: -32423
  20. python中的newline_python open函数newline用法

热门文章

  1. ETL 到底是什么?
  2. idea注释的快捷键三种方式
  3. freenas部署,文件共享,流媒体搭建
  4. C++石头剪刀布猿代码 为了/孙曌凌,CSDN
  5. BugFree使用说明
  6. Room实现数据统一管理-Repo
  7. (1)git的基本使用
  8. plt.style.use设置背景样式
  9. Java权限设计与控制
  10. 4G上网模块ME3760移植到arm开发板上(6410)