2025年2月4日 星期二 甲辰(龙)年 腊月初四 设为首页 加入收藏
rss
您当前的位置:首页 > 电子 > 开发板/开源硬件

双向控制舵机(树莓派版)

时间:02-21来源:作者:点击数:34

前言

为了实现垃圾分类和倾倒功能,于是购买了180度舵机

避坑提示:360度舵机无法像180度舵机一样控制角度,它只能控制旋转方向和速度,所以别买360度的舵机。

1、舵机参数

我买的舵机参数如下:

工作电压:3.5V-6V

接线:红线(接高电平)、棕线(接地)、橙线(信号线)

**工作原理:**舵机的控制信号为周期是20ms(频率就是50HZ)的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0-180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,直到给它提供一个另外宽度的脉冲信号,输出轴才会改变角度。

初始位置(0°) =>脉冲宽度 => 0.5ms => 占空比= 0.5ms / 20ms = 2.5%

中间位置(90°)=> 1.5 ms的脉冲宽度 => 占空比= 1.5ms / 20ms = 7.5%

最终位置(180°)=> 2.5 ms的脉冲宽度 => 占空比= 2.5ms / 20ms => 12.5%

所以占空比范围:2.5%~12.5%

角度angle和占空比dutyCycle的转换:dutyCycle = 2.5 + angle/180*10

2、功能测试

说明:

  1. servo_pin=17,针对是水平方向,输入一个度数,舵机转轴上的指针就水平转到对应的位置。
  2. servo_pin=18,针对是垂直方向,输入一个度数,舵机转轴上的指针就垂直转到对应的位置。
在这里插入图片描述
在这里插入图片描述

实现控制代码control.py

  • import RPi.GPIO as GPIO
  • from time import sleep
  • GPIO.setmode(GPIO.BCM)
  • GPIO.setwarnings(False)
  • # servo_pin 舵机信号线接树莓派GPIO17
  • def complex_change(servo_pin):
  • GPIO.setup(servo_pin, GPIO.OUT, initial=False)
  • p = GPIO.PWM(servo_pin, 50) # 初始频率为50HZ
  • p.start(angleToDutyCycle(90)) # 舵机初始化角度为90
  • sleep(0.5)
  • p.ChangeDutyCycle(0) # 清空当前占空比,使舵机停止抖动
  • return p
  • # 旋转角度转换到PWM占空比
  • def angleToDutyCycle(angle):
  • return 2.5 + angle / 180.0 * 10
  • if __name__ == '__main__':
  • print('当前为90度')
  • while True:
  • angle = int(input('旋转度数:'))
  • if angle >= 0 and angle <= 180:
  • # 水平转动
  • p=complex_change(17)
  • p.ChangeDutyCycle(angleToDutyCycle(angle))
  • # 垂直方向回正
  • p=complex_change(18)
  • p.ChangeDutyCycle(angleToDutyCycle(0))
  • sleep(0.1)
  • p.ChangeDutyCycle(0) # 清空当前占空比,使舵机停止抖动
  • else:
  • print('旋转度数在0-180之间!')

舵机初始角度为90度,你可以把转轴上面的指针调到垂直方向,表示90度

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐