树莓派控制舵机 (二维云台舵机)

【树莓派】树莓派控制舵机 (二维云台舵机)

简单驱动舵机转动

舵机三根线
黑色或棕色 接gnd
红色 接vcc(5v)但这个舵机是6v 懒得在单独供电 直接树莓派5v供电
黄色 信号线
请添加图片描述

请添加图片描述

在这里插入图片描述
上面的舵机 接板载编码 11口 即GPIO17
下面的舵机 接板载编码 12口 即GPIO18

原理

先setup() 初始化将所用gpio口设为输出模式
初始化pwm 主要靠调节pwm占空比来控制舵机
占空比范围0-100
写个控制函数就ok了

代码

import RPi.GPIO as GPIO
import time

servo1_pin = 11    #上面的舵机
servo2_pin = 12    #下面的舵机


def setup():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(servo1_pin, GPIO.OUT)
    GPIO.setup(servo2_pin, GPIO.OUT)

    # 初始化PWM
    global servo1_pwm, servo2_pwm
    servo1_pwm = GPIO.PWM(servo1_pin, 40)
    servo2_pwm = GPIO.PWM(servo2_pin, 40)
    servo1_pwm.start(0)
    servo2_pwm.start(0)


def set_servo_angle(servo, angle):
    duty_cycle = angle / 18.0 + 2.5 # 计算占空比
    servo.ChangeDutyCycle(duty_cycle)  # 设置占空比


def main():
    setup()
    try:
        while True:
            # 控制舵机1
            set_servo_angle(servo1_pwm, 0)
            set_servo_angle(servo2_pwm, 0)
            time.sleep(1)

            set_servo_angle(servo1_pwm, 100)
            set_servo_angle(servo2_pwm, 100)
            time.sleep(1)

    except KeyboardInterrupt:
        servo1_pwm.stop()
        servo2_pwm.stop()
        GPIO.cleanup()


if __name__ == '__main__':
    main()

四个独立按键控制舵机云台运动

原理

只用到了 右边四个

右1按键按下 上面舵机向后转动
右2按键按下 上面舵机向前转动
右3按键按下 下面舵机向左转动
右4按键按下 上面舵机向右转动

key_pins = [23, 21, 29,31] # 4个按键开关的GPIO引脚
四个按键分别接板载编码23 21 29 31即
在这里插入图片描述

请添加图片描述

代码

import RPi.GPIO as GPIO
import time

servo1_pin = 11
servo2_pin = 12
key_pins = [23, 21, 29,31]  # 4个按键开关的GPIO引脚


def setup():
    GPIO.setwarnings(False)  # 防止警告信息干扰程序运行。
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(servo1_pin, GPIO.OUT)
    GPIO.setup(servo2_pin, GPIO.OUT)
    for key_pin in key_pins:
        GPIO.setup(key_pin, GPIO.IN ,pull_up_down=GPIO.PUD_UP)

    # 初始化PWM
    global servo1_pwm, servo2_pwm
    servo1_pwm = GPIO.PWM(servo1_pin, 40)
    servo2_pwm = GPIO.PWM(servo2_pin, 40)
    servo1_pwm.start(0)
    servo2_pwm.start(0)


def set_servo_angle(servo, angle):
    duty_cycle = angle / 18.0 + 0.5 # 计算占空比
    servo.ChangeDutyCycle(duty_cycle)  # 设置占空比


def main():
    up_servo = 0
    down_servo = 0
    setup()
    try:
        while True:
            if GPIO.input(key_pins[0]) == GPIO.LOW:
                up_servo += 5
            elif GPIO.input(key_pins[1]) == GPIO.LOW:
                up_servo -= 5
            elif GPIO.input(key_pins[2]) == GPIO.LOW:
                down_servo += 5
            elif GPIO.input(key_pins[3]) == GPIO.LOW:
                down_servo -= 5
            if up_servo > 100:up_servo = 100
            if up_servo < 0: up_servo = 0
            if down_servo > 100: down_servo = 100
            if down_servo < 0: down_servo = 0

            set_servo_angle(servo1_pwm, up_servo)
            set_servo_angle(servo2_pwm, down_servo)
            time.sleep(0.1)




    except KeyboardInterrupt:
        servo1_pwm.stop()
        servo2_pwm.stop()
        GPIO.cleanup()


if __name__ == '__main__':
    main()

演示视频

树莓派驱动舵机(二维云台)

引用\[1\]中的代码是关于OpenMV的引入和一些相关模块的导入。OpenMV是一款基于Python的嵌入式视觉开发平台,可以用于图像处理、机器视觉和人工智能等领域的开发。在这段代码中,导入了sensor、time、image等模块,以及一些其他的辅助模块,如UART、PID和Servo等。 引用\[2\]中的代码是关于二维舵机云台的测试程序。首先,通过导入Steering模块,创建了一个Steering对象,并设置了初始位置。然后,通过循环控制舵机在四个方向上连续转动。接着,通过调用specify方法,将舵机转到指定的角度。最后,调用cleanup方法,清理资源。 引用\[3\]中的内容是关于舵机的一些基本知识。舵机是一种可以自由指定转角的伺服马达,通常有三根引出的线,分别是电源线、地线和信号线。在舵机内部,有一个周期为20ms,脉宽为1.5ms的基准脉冲,用于控制舵机的转动。通过给信号线输入一定占空比的控制脉冲,可以控制舵机转到指定的角度。 综上所述,OpenMV二维舵机云台是一个基于OpenMV平台的二维舵机控制系统,可以通过Python代码来控制舵机的转动角度。 #### 引用[.reference_title] - *1* [openmv利用模板匹配+控制舵机来控制小车使P点触碰到靶心](https://blog.csdn.net/Guoyingyuan/article/details/124655978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [树莓派笔记13:舵机云台(一)](https://blog.csdn.net/wangzhenyang2/article/details/80426361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值