树莓派4B-GPIO控制舵机转动

硬件需求:

  1. 树莓派
  2. 舵机
  3. 杜邦线

舵机

什么是舵机?

舵机(servomotor)是一种简化版本的伺服电机,是位置伺服的驱动器,能够通过输入PWM信号控制旋转角度,具备轻量、小型、简化和性价比高的特点。

舵机适用于那些需要角度不断变化并可以保持的简单控制系统,它能实现较为精确的电机控制,在航模、遥控玩具、机器狗等品类上运用良好。

舵机的运动方式

舵机的运动方式是绕轴摆动,“舵机”一词也和它的运动方式有关,舵机常用来摆动调整方向,就像海洋上的水手的舵一样,航模和船模常常用舵机的摆动来调整一些零部件的角度。

舵机的部分参数表

GPIO接线方式

pwm - pin32 (PWM Signal)

Vcc - pin2 (4.8v ~6v)

ground - pin14 (0v)

"""
使用该代码可以查询树莓派的GPIO参数
如果出现报错需要先安装wiringpi
"""
pi@raspberrypi:~ $ gpio readall

代码

舵机自己正反转180度:

#!/usr/bin/python
# coding:utf-8
# servo_PWM_GPIO.py
# 树莓派GPIO控制外部舵机来回摆动,角度范围为0~180°,周期为4秒。
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. "
" You can achieve this by using 'sudo' to run your script")
import time def servo_map(before_value, before_range_min, before_range_max, after_range_min, after_range_max):
"""
功能:将某个范围的值映射为另一个范围的值
参数:原范围某值,原范围最小值,原范围最大值,变换后范围最小值,变换后范围最大值
返回:变换后范围对应某值
"""
percent = (before_value - before_range_min) / (before_range_max - before_range_min)
after_value = after_range_min + percent * (after_range_max - after_range_min)
return after_value GPIO.setmode(GPIO.BOARD) # 初始化GPIO引脚编码方式
servo_SIG = 32
servo_VCC = 4
servo_GND = 6
servo_freq = 50
servo_time = 0.01
servo_width_min = 2.5
servo_width_max = 12.5
# servo_degree_div =servo_width_max - servo_width_min)/180
GPIO.setup(servo_SIG, GPIO.OUT)
# 如果你需要忽视引脚复用警告,请调用GPIO.setwarnings(False)
# GPIO.setwarnings(False)
servo = GPIO.PWM(servo_SIG, servo_freq) # 信号引脚=servo_SIG 频率=servo_freq in HZ
servo.start(0)
servo.ChangeDutyCycle((servo_width_min+servo_width_max)/2) # 回归舵机中位
print('预设置完成,两秒后开始摆动')
time.sleep(2)
try: # try和except为固定搭配,用于捕捉执行过程中,用户是否按下ctrl+C终止程序
while 1:
for dc in range(1, 181, 1):
dc_trans = servo_map(dc, 0, 180, servo_width_min, servo_width_max)
servo.ChangeDutyCycle(dc_trans)
# print(dc_trans)
time.sleep(servo_time)
time.sleep(0.2)
for dc in range(180, -1, -1):
dc_trans = servo_map(dc, 0, 180, servo_width_min, servo_width_max)
servo.ChangeDutyCycle(dc_trans)
# print(dc_trans)
time.sleep(servo_time)
time.sleep(0.2)
except KeyboardInterrupt:
pass
servo.stop() # 停止pwm
GPIO.cleanup() # 清理GPIO引脚

可以控制舵机角度:

#!/usr/bin/python
# coding:utf-8
# servo_PWM_GPIO_2.py
# 输入一个角度值,舵机将转动到对应的角度
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. "
" You can achieve this by using 'sudo' to run your script")
import time def servo_map(before_value, before_range_min, before_range_max, after_range_min, after_range_max):
"""
功能:将某个范围的值映射为另一个范围的值
参数:原范围某值,原范围最小值,原范围最大值,变换后范围最小值,变换后范围最大值
返回:变换后范围对应某值
"""
percent = (before_value - before_range_min) / (before_range_max - before_range_min)
after_value = after_range_min + percent * (after_range_max - after_range_min)
return after_value GPIO.setmode(GPIO.BOARD) # 初始化GPIO引脚编码方式
servo_SIG = 32
servo_VCC = 4
servo_GND = 6
servo_freq = 50
servo_time = 0.01
servo_width_min = 2.5
servo_width_max = 12.5
# servo_degree_div =servo_width_max - servo_width_min)/180
GPIO.setup(servo_SIG, GPIO.OUT)
# 如果你需要忽视引脚复用警告,请调用GPIO.setwarnings(False)
# GPIO.setwarnings(False)
servo = GPIO.PWM(servo_SIG, servo_freq) # 信号引脚=servo_SIG 频率=servo_freq in HZ
servo.start(0)
servo.ChangeDutyCycle((servo_width_min+servo_width_max)/2) # 回归舵机中位
print('预设置完成,两秒后开始等待输入')
time.sleep(2)
# 为舵机指定位置
try: # try和except为固定搭配,用于捕捉执行过程中,用户是否按下ctrl+C终止程序
while 1:
position = input("请输入0°-180°的角度值:\n")
if position.isdigit()==1:
dc = int(position)
if (dc>=0) and (dc<=180):
dc_trans=servo_map(dc, 0, 180,servo_width_min,servo_width_max)
servo.ChangeDutyCycle(dc_trans)
print("已转动到%d°处"%dc)
else:
print("Error Input:Exceed Range")
else:
print("Error Input:Not Int Input")
except KeyboardInterrupt:
pass servo.stop() # 停止pwm
GPIO.cleanup() # 清理GPIO引脚

结果展示

最后,祝各位学业有成,生活顺心!

树莓派4B-GPIO控制舵机转动的更多相关文章

  1. 树莓派通过GPIO控制步进电机

    一.接线方式与GPIO调用方法: 电源接入+5v和GND In1-4分别接GPIO1-4 正转时,GPIO1-4分次传入:[1,0,0,0],[sleep],[0,1,0,0],[sleep],[0, ...

  2. 【.NET 与树莓派】控制舵机

    不管是小马达,还是大马达,嗯,也就是电机,相信大伙伴们也不会陌生.四驱车是一种很优秀的玩具,从老周小时候就开始流行(动画片<四驱兄弟>估计很多大朋友都看过),直到现在还能看到很多卖四驱车的 ...

  3. 树莓派Zero W GPIO控制

    作者:陈拓 chentuo@ms.xab.ac.cn 2018.06.09/2018.07.05 0.  概述 本文介绍树莓派 Zero W的GPIO控制,并用LED看效果. 0.1 树莓派GPIO编 ...

  4. 树莓派GPIO控制RGB彩色LED灯

    树莓派GPIO通过PWM来控制RGB彩色LED灯,可以显示任何我们想要的颜色. RGB模块简介 这个RGB彩色LED里其实有3个灯,分别是红灯.绿灯和蓝灯.控制这三个灯分别发出不同强度的光,混合起来就 ...

  5. 树莓派GPIO控制LED彩灯

    树莓派使用GPIO接口来控制LED灯,自制五彩炫光的节日彩灯. 1.硬件准备 a. 树莓派(Raspberry Pi)一个 b. 彩色RGB二极管 c. 杜邦线 d. 5V电源引脚 以上所有零件均可在 ...

  6. 树莓派4b点亮led灯基本步骤

    方法/步骤1: 首先要了解树莓派上的针脚,下面以树莓派4b为例子 把LED的正极插在GPIO脚上,把负极插在GND上 这里的例子是:正极插在GPIO21 方法/步骤2: 创建脚本 在配置好的树莓派系统 ...

  7. 树莓派4B智能小车机器套件——入手组装实验记录

    树莓派4B智能小车机器套件--入手组装实验记录 4WD智能小车(4WD SMART ROBOT KIT),支持Arduino.51.STM32.Raspberry Pi等4个版本.本套件采用的是树莓派 ...

  8. 简单的实现树莓派的WEB控制

    最终效果如图: 用到的知识:Python Bottle HTML Javascript JQuery Bootstrap AJAX 当然还有 linux 我去,这么多--我还是一点一点说起吧-- 先贴 ...

  9. 树莓派高级GPIO库,wiringpi2 for python使用笔记(一)安装

    网上的教程,一般Python用RPi.GPIO来控制树莓派的GPIO,而C/C++一般用wringpi库来操作GPIO,RPi.GPIO过于简单,很多高级功能不支持,比如i2c/SPI库等,也缺乏高精 ...

  10. 树莓派的GPIO编程

    作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 树莓派除了提供常见的网口和USB接口 ,还提供了一组GPIO(General Purpose Input/ ...

随机推荐

  1. ansible(9)--ansible的yum模块

    1. yum模块 功能:管理软件包,需要确认被管理端为红帽系列的,并且需要被管理端配置好yum源. 主要的参数如下: 参数 说明 name 指定安装软件包名或软件包URL state 指定yum对应的 ...

  2. 纯JS实现多张图片无缝滚动和多张图片上下滚动的效果--JavaScript实例集锦(初学)

    我们会看到很多的网站上会使用多张图片无缝滚动的效果. 下面我就介绍几种纯JS实现多张图片的无缝滚动,并实现鼠标移到图片上运动停止的效果,可以控制图片左右滚动.1.效果展示: 代码实现: <!DO ...

  3. java8用Stream一行代码实现数据分组统计、排序、最大值、最小值、平均值、总数、合计

    getAverage(): 它返回所有接受值的平均值. getCount(): 它计算所有元素的总数. getMax(): 它返回最大值. getMin(): 它返回最小值. getSum(): 它返 ...

  4. [从零学习C++][01]如何在Clion中定义多个main函数

    在一个Clion项目中定义多个main函数编译的时候会报这个错误 显示就是main函数重复了,查阅了下好像可以通过修改CMakeList.txt来修改,将其定义成两个独立的executable即可 a ...

  5. PageOffice动态生成Word文件并转换为PDF

    说明:PageOffice是客户端插件,做不到纯后台调用把word转为pdf.但是pageoffice的FileMaker对象可以实现不在客户端打开文件直接转换文件为pdf并保存到服务器端,看起来跟服 ...

  6. 工作面试老大难-MySQL中的锁类型

    MySQL 是支持ACID特性的数据库.我们都知道"C"代表Consistent,当不同事务操作同一行记录时,为了保证一致性,需要对记录加锁.在MySQL 中,不同的引擎下的锁行为 ...

  7. MyBatis两级缓存机制详解

    缓存是提高软硬件系统性能的一种重要手段:硬件层面,现代先进CPU有三级缓存,而MyBatis也提供了缓存机制,通过缓存机制可以大大提高我们查询性能. 一级缓存 ​ Mybatis对缓存提供支持,但是在 ...

  8. golang 怎么获取kubernetes deployments的状态?

    如果我们需要把k8s的信息展示为一个友好的web页面.那么deployment 的信息基本上是非常重要的(大部分的服务都是使用deployment部署). 从yaml 中我们能获取到很多关于deplo ...

  9. 地图坐标转换 WGS84、BD09与GCJ02的相互转换

    高德地图 WGS84转GCJ02 export function wgs84ToGcj02(lng, lat) { if (out_of_china(lng, lat)) { return [lng, ...

  10. Pyomo基础学习笔记:建模组成要素的编写方法

    1.Pyomo 简介 pyomo文档[数学建模]优化模型建模语言 Pyomo 入门教程 - 知乎 (zhihu.com) Pyomo 是基于 Python 的开源软件包,主要功能是建立数学规划模型,包 ...