响应式网站用什么工具做,免费的html5模板,中国四大saas公司,alisql wordpress实例3#xff1a;树莓派呼吸灯
实验目的
通过背景知识学习#xff0c;了解digital与analog的区别。通过GPIO对外部LED灯进行呼吸控制#xff0c;熟悉PWM技术。
实验要求
通过python编程#xff0c;用GPIO控制LED灯#xff0c;使之亮度逐渐增大#xff0c;随后减小树莓派呼吸灯
实验目的
通过背景知识学习了解digital与analog的区别。通过GPIO对外部LED灯进行呼吸控制熟悉PWM技术。
实验要求
通过python编程用GPIO控制LED灯使之亮度逐渐增大随后减小并循环上述过程实现呼吸效果周期为4s。
实验知识
1. 查看树莓派GPIO引脚图
pinout参考链接树莓派官方4B引脚图的详细资料
2.安装及引入RPi.GPIO库
sudo pip install RPi.GPIO # 命令行pip安装RPi.GPIOimport RPi.GPIO as GPIO # 在Python代码引入RPi.GPIO库3. RPi.GPIO库的用法
GPIO.setmode(GPIO.BOARD) #初始化GPIO引脚编码方式需放在代码正式开始处
# GPIO引脚由多种编码方式比如BCM、wiringPi、BOARD等,方便起见课程均采用BOARD编码模式GPIO.setup(12, GPIO.OUT) #初始化GPIO引脚设置需放在代码正式开始处
GPIO.setup(12, GPIO.IN) #12为引脚号 GPIO.IN或者GPIO.OU为输入输出模式print(GPIO.input(12)) #GPIO.input查看GPIO输入的电平信号
#GPIO.HIGH为高电平 GPIO.LOW为低电平 也可用于条件判断作其他操作# GPIO.output向端口发送高低电平信号
GPIO.output(12, GPIO.HIGH) # 此处以12号端口为例
GPIO.output(12, GPIO.LOW)GPIO.cleanup() #在使用完GPIO后要作清理避免后续引脚被占用参考链接Python RPi.GPIO库官方文档
图片2树莓派LED灯细节图
4.什么是模拟
LED灯在数字信号0和1的切换下发生亮灭的变化但是LED灯在亮和灭之间存在着许多中间状态比如30%亮度、50%亮度这些状态应该如何表示呢这就要提到模拟、数字以及PWM技术了。 模拟信号Analog是指用连续变化的物理量表示的信号分布于自然界的各个角落如气温、电流、电压的变化。 在模拟电路中电压和电流可直接用来进行控制对象比如家庭音箱的音量。简单来说随着电流的增大播放音乐的音量也在逐步增大。
5.什么是数字
数字信号Digital是人为的、抽象出来的、在幅度取值上不连续的信号。 比如我们在控制LED灯闪烁时是通过0和1也就是高低电平信号来控制LED的亮和灭只存在两种状态要么高电平要么低电平没有其他中间值。 在计算机中大小常用有限位的二进制数表示的这种离散的、不连续的信号被称为数字信号。 模拟信号在现实的传输过程中经常会被外界干扰造成传输信息有偏差比如打电话时的模糊老式电视机上的雪花噪点将模拟信号转化为数字信号则可以解决这个问题。
图片4使模拟信号数字化的图
6.什么是PWM
PWM正是一种将模拟信号转换数字信号的技术它对模拟信号电平进行数字编码。 PWM全称为Pulse-width modulation意为脉冲宽度调制通过对数字信号每一个周期内高电平的占比时长的调节来使得信号对外的表现为01之间的一个中间值。 高电平的占比时常也就是占空比(Duty Cycle)占空比指电路被接通的时间占整个电路工作周期的百分比。 当方波在一个周期内高电平1的时长为周期的一半时低电平0的时长也为周期的一半那么这个周期对外展现出的值就是(1x50% 0x50%)0.5 当我们希望LED对外呈现30%的亮度时只需要让高电平1的时间占比为周期的30%其余70%的时间为低电平0那么这个周期对外展现出的值就是(1x30% 0x70%)0.3 如此一来LED灯就呈现出了30%的亮度。
图片5PWM示意图
7. RPi的GPIO库中PWM的用法
import RPi.GPIO as GPIO # 引入GPIO库GPIO.setmode(GPIO.BOARD) #初始化GPIO引脚编码方式需放在代码正式开始处
GPIO.setup(12, GPIO.OUT) #初始化GPIO引脚设置需放在代码正式开始处p GPIO.PWM(channel, frequency) # 创建pwm实例 channel为引脚号 frequency为频率p.start(dc) # 开始pwm dc为初始占空比(0.0 dc 100.0)p.stop() # 停止pwmp.ChangeFrequency(freq) # 改变频率Hzfreqp.ChangeDutyCycle(dc) # 改变占空比(0.0 dc 100.0)GPIO.cleanup() # 清理GPIO引脚参考链接RPi GPIO库中PWM()函数的详细资料
8.mini pupper学习套件-LED模块的使用
mini pupper学习套件中的LED模块自带板载限流电阻能够保护LED模块。 接线如下
引脚作用树莓派对应口GND接地GND口R红灯正极PWM口G绿灯正极PWM口B蓝灯正极PWM口
实验步骤
1.硬件连接
将灯的任一正极R/G/B/Y接入树莓派上的PWM端口例如33号端口 树莓派的GPIO中仅有部分为PWM口你可以通过查看树莓派GPIO的引脚图来确认哪个端口是PWM端。将灯的GND端接入树莓派上的GND端口例如34号端口 你可以通过查看树莓派GPIO的引脚图来确认哪个端口是GND端。
2.编写Python程序led_breathe.py
#!/usr/bin/python
# coding:utf-8
# led_breathe.py
# 树莓派GPIO控制外部LED灯呼吸周期为4秒。
import time
import RPi.GPIO as GPIO# GPIO初始化
LED 33 # 外部led灯连接的树莓派PWM端口可根据需要调整
GND 34 # 接地的端口
period 4 # 呼吸周期
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LED, GPIO.OUT)
p GPIO.PWM(LED, 50) # 引脚LED 频率50Hz
p.start(0)
print(PWM控制呼吸灯开始端口号为%d周期为%d秒。 % (LED, period))
try: # try和except为固定搭配用于捕捉执行过程中用户是否按下ctrlC终止程序while 1:for dc in range(0, 101, 1):p.ChangeDutyCycle(dc)time.sleep(period / 200)for dc in range(100, -1, -1):p.ChangeDutyCycle(dc)time.sleep(period / 200)
except KeyboardInterrupt:pass
p.stop()
GPIO.cleanup()3.运行程序观察实验效果
在led_breathe.py的目录下执行以下命令
sudo python led_breathe.py应该能观察到用LED灯亮度逐渐增大随后减小并循环上述过程体现了呼吸的效果周期为4s。
图片3gif图片 LED呼吸效果
实验总结
经过本知识点的学习和实验操作你应该能达到以下水平
知识点内容了解熟悉掌握模拟与数字模拟与数字的区别✔树莓派树莓派GPIO中的PWM端口✔PWMPWM技术的用法✔硬件mini pupper学习套件的LED模块的使用✔
版权信息教材尚未完善此处预留版权信息处理方式 mini pupper相关内容可访问https://github.com/mangdangroboticsclub