树莓派和手柄-控制舵机和电机

    上一篇文章我们已经介绍过了如果获取手柄的按钮、摇杆、方向键等信息;这一篇文章我们将继续上一次的主题,尝试一下如何在获取手柄数据后,控制舵机跟随摇杆方向转动以及如何触发电机转动。
#先看组装效果:
接线效果
    如上图,可见舵机和电机小风扇由同一块树莓派控制;外接同一块电源驱动;其中舵机由pca9685驱动板驱动;电机小风扇这次只是为了效果展示,所以直接由继电器控制电源开合(接通电源小风扇即可旋转)。

*舵机的接线示例可参考文章:舵机驱动实验;
*电机的接线以及更多的扩展,比如旋转方向控制,旋转速度控制等可参考文章:直流电机驱动实验;
*继电器的接线示例可参考文章:继电器实验
#实验过程:
1、编写代码,然后保存为jiujiang.py;
2、连接手柄,可以通过蓝牙或者直接电线连,按上图接线,然后接通电源;
3、打开vnc,选择要执行的代码然后执行,执行效果见下图:
4、摆动摇杆或者按动按键,查看vnc画面是否有数值出现(有数据为正常);
5、按动R2键,可见电机小风扇转动;
6、摆动右侧摇杆,向右摆动可见舵机顺时针转动,当摇杆复位时,舵机也复位90度;当向左摆动摇杆可见舵机逆时针转动;舵机最大最小转动度数代码设置为170度和10度;这个可以自行调整。
#效果如下:
#注:其中舵机驱动部分我们采用了新的驱动方式,去掉了繁琐的驱动文件,采用CircuitPython的舵机驱动程序;这部分下一篇文章我们会详细介绍和实验。

直流电机驱动变速实验

#实验目的:通过测试外接可变压电源以及直流电机驱动板(L298N)这个组合,驱动自制的风扇,在pwm的调节下,展现转动速度连续发生变化的现象。
#接线效果如图:
接线示例
#注:其中风扇造型可采用其他形式代替,只要可体现转动速度即可。
#驱动板:采用的是L298N的改进型,某宝有卖;他跟传统L298N驱动板控制pwm不同在于,它直接在对应电机的高电平引脚输出即可;单个板可同时驱动两个电机。具体接线效果如下:
#控制原理如下: 
直流电机转动形式IN1IN2IN3IN4
MOTOR-A正向(调速)高电平/PWM低电平
反向(调速)低电平高电平/PWM
停止低电平低电平
刹车高电平高电平
MOTOR-B正向(调速)高电平/PWM低电平
反向(调速)低电平高电平/PWM
停止低电平低电平
刹车高电平高电平
#实验代码:
代码示例

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
http:://www.shumeijiang.com
'''

import RPi.GPIO as GPIO ##引入GPIO模块
import time    ##引入time库

motorA1 = 18   ##定义电机A的IN1引脚
motorA2 = 19   ##定义电机A的IN2引脚

GPIO.setmode(GPIO.BCM)  ##此处采用BCM编码
GPIO.setup(motorA1, GPIO.OUT)  ##设置引脚为输出模式
GPIO.setup(motorA2, GPIO.OUT)

pwm = GPIO.PWM(motorA1, 80)    ##引脚A1高电平为正转,所以创建一个正转pwm实例并设置频率
pwm.start(70)  ##初始化占空比 即单位时间高电平的时间占比

GPIO.output(motorA1, GPIO.HIGH) ##设置A1 引脚为高电平
GPIO.output(motorA2, GPIO.LOW)  ##设置A2 引脚为低电平 如此可控制电机A正转,反之电机A反转

##通过一定时间间隔设置占空比,可见电机间隔一定时间后会发生速度变化 其中0则电机停止转动
try:
    while True:
        pwm.ChangeDutyCycle(30)
        time.sleep(2)
        pwm.ChangeDutyCycle(70)
        time.sleep(2)
        pwm.ChangeDutyCycle(0)  ##电机停止转动
        time.sleep(2)  ##持续时间

except KeyboardInterrupt:
    pass

pwm.stop()
GPIO.cleanup()
#实验效果:
1、执行代码 Python jiujiang.py;
2、可见小风扇快速转动,然后持续2秒钟;速度增强到原来两倍;
3、速度增强转动2秒钟后,风扇停止转动;
4、停转2秒后,风扇继续往复前面一个动作。
#视频效果如下: