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

前言

为了实现垃圾分类和倾倒功能,于是购买了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%

舵机旋转范围0~180度:角度angle和占空比dutyCycle的转换为dutyCycle = 2.5 + angle/180 * 10
**舵机旋转范围0~270度😗*角度angle和占空比dutyCycle的转换为dutyCycle = 2.5 + angle/270 * 10

2、功能测试

说明:

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、舵机使用外部电源供电

碰到问题:舵机使用外部电源供电导致舵机不转或者向一个方向转动直到卡死。
问题原因: 外接电源时的接线图如下,导致舵机和外部供电没有与板子共地。

请添加图片描述
解决办法: 让舵机、外部供电和板子共地,具体如下:
在这里插入图片描述

实现控制代码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,p.start(5.833)
	sleep(0.5)

	p.ChangeDutyCycle(0)  # 清空当前占空比,使舵机停止抖动

	return p


# 水平旋转角度转换到PWM占空比
def angleToDutyCycle(angle):
	# 注意,这里舵机的范围 是0到180度,如果舵机的范围是0到270,则需要将180更换为270
	return 2.5 + (angle / 180.0 )* 10


# 垂直旋转角度转换到PWM占空比
def angleToDutyCycleVertical(angle):
	return 2.5+(angle / 180.0 )* 10

# 270度垂直旋转角度转换到PWM占空比
# 190度 回正
# 90度 下落
#def angleToDutyCycleVertical(angle):
#	return (angle / 180.0 )* 10

if __name__ == '__main__':
	
	while True:
		angle = int(input('水平旋转度数:'))
		# 17 水平转动
		p = complex_change(17)
		p.ChangeDutyCycle(angleToDutyCycle(angle))

		sleep(1.5)

		# 18 垂直方向回正
		p = complex_change(18)
		# 90度 下落
		p.ChangeDutyCycle(angleToDutyCycleVertical(90))
		sleep(0.5)
		# 190度 回正
		p.ChangeDutyCycle(angleToDutyCycleVertical(190))


		sleep(0.1)
		p.ChangeDutyCycle(0)  # 清空当前占空比,使舵机停止抖动
    

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

参考文献

  1. 【树莓派-网络监控(3)角度遥控】基于python3控制两自由度舵机,实现摄像头拍摄角度的遥控
  2. 树莓派 — 控制舵机
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值