树莓派驱动舵机
使用python 控制G90舵机,RPI.GPIO 模块的脉宽调制(PWM)功能_g90舵机duty-CSDN博客
9 G 180°微型舵机。
SG90 脉冲周期为20毫秒(millisecond) 不是20微秒(Microsecond),两者差1000倍呢!也就是说最多1秒钟内可以转动50次,但是考虑到每次转动还要耗时,所以实际达不到50次。PWM控制信号周期20ms,脉宽0.5ms-2.5ms对应的角度-90到+90度,范围180度(3度左右偏差),当脉宽1.5ms时舵机在中立点(0度),我们直接用Python的GPIO提供的PWM控制。脉宽0.5ms-2.5ms 对应的占空比为2.5% - 12.5% (脉宽/周期=0.5/20-2.5/20). 理论上,10%的空间可以提供180度的线性分割(12.5%-2.5%)。
SG90 脉冲周期为20ms,脉宽0.5ms-2.5ms对应的角度-90到+90,对应的占空比为2.5%-12.5%
注意:(在规定范围内) 给多少占空比 有且只有一个角度和它对应
1.首先安装python库和gpio库
(1) 安装python库
sudo apt-get install python-dev
(2)执行更新
sudo easy_install -U distribute
(3)安装python-pip
sudo apt-get install python-pip
(4)安装pythond 的GPIO库
sudo pip install rpi.gpio
2.基于python 的编程,编写sg90.py
(1)执行 cd ~
(2)执行 sudo mkdir SG90
(3)执行 cd SG90
(4)执行 nano sg90.py
(5)复制以下代码,并按ctl+x 选择Y保存退出
————————————————
这部分代码不一定对,先保留吧,万一哪天博文不能看了呢
原文链接:https://blog.csdn.net/wailaizhu/article/details/54666520
1、接线
SG90一共三根线,红线接5V电源,棕线GND。黄线为数据控制线,该线接到GPIO上,这里我们是BCM模式的pin 18。
黄------------ GBM 18;红-------------5V0;黑----------GND
2、程序
(1)正传180;反转180;ctr+c停止
#! /usr/bin/env python3
# encoding=utf-8
import RPi.GPIO as GPIO
import time
import signal
import atexit
atexit.register(GPIO.cleanup)
servopin=18
GPIO.setmode(GPIO.BCM)
GPIO.setup(servopin,GPIO.OUT,initial=False)
p=GPIO.PWM(servopin,50) #50HZ:频率就是周期脉冲的周期的倒数
p.start(0) #start(initdutycycle):占空比0-100间,0表示暂不输出
time.sleep(2)
while(True):
for i in range(0,181,10):
p.ChangeDutyCycle(2.5+10*i/180) #设置转动角度
time.sleep(0.02) #等该20ms周期结束
p.ChangeDutyCycle(0) #归零信号
time.sleep(0.2)
for i in range(181,0,-10):
p.ChangeDutyCycle(2.5+10*i/180)
time.sleep(0.02)
p.ChangeDutyCycle(0)
time.sleep(0.2)
GPIO.cleanup()
(2)慢慢转动,有点不理解,运动不流畅
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import signal
import atexit
atexit.register(GPIO.cleanup)
servopin=18
GPIO.setmode(GPIO.BCM)
GPIO.setup(servopin,GPIO.OUT,initial=False)
p=GPIO.PWM(servopin,50)
p.start(0)
time.sleep(2)
while(True):
for i in range(0,360,10):
p.ChangeDutyCycle(12.5-5*i/360)
time.sleep(0.02)
for i in range(0,360,10):
p.ChangeDutyCycle(7.5-5*i/360)
time.sleep(0.02)
GPIO.cleanup()
(3)输入值制定电机角度 ,也不是很流程,le(3)不明白意思
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import time
def setServoAngle(angle):
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(18, GPIO.OUT)
tilt = GPIO.PWM(18, 50)
tilt.start(0)
DutyCycle = angle/18 + 2
tilt.ChangeDutyCycle(DutyCycle)
time.sleep(1)
tilt.stop()
c = input("If you want to continue, type 'c' please. Type 'e' to end.")
while c == 'c':
angle = input('Please type an angle:') # input输入的是字符串,需要用int()函数转化成数字。
angle = int(angle)
setServoAngle(angle)
c = input("'c' or 'e'?")
GPIO.cleanup()
exit()
le(3) # 通过输入不同的“占空比值”来观察舵机的位置变化,这里的“占空比”是3%。
time.sleep(1)
p.stop() # 停止PWM。
GPIO.cleanup() # 清理GPIO。
更多推荐
所有评论(0)