实例7:树莓派呼吸灯

news2024/9/29 5:39:03

实例7:树莓派呼吸灯

实验目的

  1. 通过背景知识学习,了解digital与analog的区别。
  2. 通过GPIO对外部LED灯进行呼吸控制,熟悉PWM技术。

实验要求

通过python编程,用GPIO控制LED灯,使之亮度逐渐增大,随后减小,并循环上述过程,实现呼吸效果,周期为4s。

实验知识

1. 查看树莓派GPIO引脚图

pinout

参考链接:树莓派官方4B引脚图的详细资料

2.安装及引入RPi.GPIO库

sudo pip install RPi.GPIO # 命令行pip安装RPi.GPIO
import 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,意为脉冲宽度调制,通过对数字信号每一个周期内高电平的占比时长的调节,来使得信号对外的表现为0~1之间的一个中间值。
高电平的占比时常也就是占空比(Duty Cycle),占空比指电路被接通的时间占整个电路工作周期的百分比。
当方波在一个周期内高电平(1)的时长为周期的一半时,低电平(0)的时长也为周期的一半,那么这个周期对外展现出的值就是(1x50% + 0x50%)=0.5
当我们希望LED对外呈现30%的亮度时,只需要让高电平(1)的时间占比为周期的30%,其余70%的时间为低电平(0),那么这个周期对外展现出的值就是(1x30% + 0x70%)=0.3
如此一来,LED灯就呈现出了30%的亮度。

图片5:PWM示意图
在这里插入图片描述

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() # 停止pwm
p.ChangeFrequency(freq)   # 改变频率(Hz)freq
p.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.硬件连接

  1. 将灯的任一正极(R/G/B/Y)接入树莓派上的PWM端口(例如33号端口)
    树莓派的GPIO中仅有部分为PWM口,你可以通过查看树莓派GPIO的引脚图来确认哪个端口是PWM端。
  2. 将灯的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为固定搭配,用于捕捉执行过程中,用户是否按下ctrl+C终止程序
    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。

图片3:gif图片 LED呼吸效果
在这里插入图片描述

实验总结

经过本知识点的学习和实验操作,你应该能达到以下水平:

知识点内容了解熟悉掌握
模拟与数字模拟与数字的区别
树莓派树莓派GPIO中的PWM端口
PWMPWM技术的用法
硬件mini pupper学习套件的LED模块的使用

版权信息:教材尚未完善,此处预留版权信息处理方式
mini pupper相关内容可访问:https://github.com/mangdangroboticsclub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/371025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

交换字符使得字符串相同[贪心]

贪心前言一、交换字符使得字符串相同二、贪心1、分析问题的思路过程2、go总结参考资料前言 贪心算法&#xff0c;必须先看清楚有哪些选择&#xff0c;才能在这些选择的基础上进行贪心&#xff0c;做最优选择&#xff0c;除此之外&#xff0c;还得看局部最优会不会形成全局最优…

8 百度接口

0 建议学时 2学时 1 简介 百度人工智能平台-站在巨人的肩膀上 https://ai.baidu.com/ 控制台->立即注册 百度人工智能平台 APP Key 和 Secret Key AI接入指南 https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3 百度智能云视频参考 https://abcxueyuan.baidu.com/#/…

2023年最新详细教程!手把手教你搭建Hexo + GitLab个人博客

文章目录前言一、安装和配置环境1.安装 Git2.安装 Node.js二、新建博客项目1.GitLab配置CI/CD自动化部署1.1 GitLab新建项目1.2 GitLab自建Runners1.2.1 下载gitlab-runner1.2.2 注册Runners1.2.3 安装Runners并启动1.3 添加.gitlab-ci.yml文件2.拉取和推送hexo blog2.1 拉取he…

基于遗传算法的配电网故障定位(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…

sonarqube 外部扫描器 go vet golangci-lint 无法导入问题

首先&#xff0c;请看[外部分析报告]各种语言的报告生成 go vet 2> govet-report.out#没有golangci-lint&#xff0c;我从网上找到了 golangci-lint run --out-format checkstyle ./... > golangci-lint-report.xml值得注意的是&#xff0c;貌似不支持目录&#xff0c;仅…

6.2 负反馈放大电路的四种基本组态

通常&#xff0c;引入交流负反馈的放大电路称为负反馈放大电路。 一、负反馈放大电路分析要点 如图6.2.1(a)所示电路中引入了交流负反馈&#xff0c;输出电压 uOu_OuO​ 的全部作为反馈电压作用于集成运放的反向输入端。在输入电压 uIu_IuI​ 不变的情况下&#xff0c;若由于…

mysys2+minGW方案编译ffmpeg的最佳实践

一、Win10 64bit编译环境的建立1&#xff09;从http://www.msys2.org/下载 msys2-x86_64-xxx.exe2&#xff09; 安装msys2到默认路径 C:\msys64\3&#xff09; 运行MSYS2 w644&#xff09;执行 pacman -Syu 更新系统当出现提示时&#xff0c;选择y5) 当窗口关闭时&#xff0c;重…

JavaScript函数

目录 定义函数 调用函数 函数参数 函数返回值 匿名函数 箭头函数 使用JavaScript编程时&#xff0c;函数是一种非常有用的编程结构&#xff0c;用于执行特定的任务并返回结果。函数可以重复使用&#xff0c;因此您只需编写一次代码&#xff0c;即可在需要时多次调用该代码…

深入解析dubbo的延迟暴露

一、引子 最近搭建了一个新的Java工程&#xff0c;主要是提供dubbo服务给其他业务用的。突然想起之前dubbo服务都会配置延迟暴露来解决平滑发布的问题&#xff0c;但是好像现在新的Java项目都没有配置延迟暴露了&#xff0c;觉得很奇怪&#xff0c;所以去研究了一下关于dubbo延…

Delete `␍`eslint(prettier/prettier) in vscode 的解决方案

错误描述从 Github 仓库拉取代码&#xff0c;使用 vscode 打开&#xff0c;页面报错&#xff0c;每一行都爆红 &#xff08;如下图&#xff09;问题原因由于历史原因&#xff0c;windows下和linux下的文本文件的换行符不一致。Windows在换行的时候&#xff0c;使用了换行符CRLF…

ROG配置ubuntu20.04.5双系统要点

win11ubuntu20.04.5 1. BIOS设置 开机长按F2进入bios设置&#xff0c;修改advanced参数&#xff1a; boot -> 关闭fast bootsecurity -> 关闭secure boot设置VMD controller为Disabled&#xff08;其他电脑是修改硬盘的SATA和ACHI模式&#xff09;。但是改了之后windo…

【大数据离线开发】8.1 Hive介绍和架构

Hive&#xff1a;数据分析引擎 了解 大数据的终极目标: 使用SQL语句来处理大数据 Hadoop的体系架构中: Hive:支持SOLPig:支持PiqLatin Spark的体系架构中: Spark SQL:类似Hive&#xff0c;支持SOL、支持DSL 另一个&#xff1a;Impala 8.1 什么是Hive&#xff1f; 起源自f…

Linux 离线安装Ruby和RubyGems环境

文章目录简介1. 安装GCC环境2. 安装ruby3. 安装 RubyGems4. 安装 redis-xxx.gem提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 简介 在学习 Redis 集群对这几个词的概念和关系感混乱&#xff0c;故在此对其梳理。 Ruby 是什么&#xff1f; 它…

鼠标更换指针图案和更改typora的主题

鼠标更换指针图案 由此偶然看见好几个朋友都使用了新的图案替换掉了原有的鼠标图案&#xff0c;今天寻思自己也换一个图案 主要是觉得鼠标大一点儿会好看一些&#xff0c;所以就找了一些教程 官方教程&#xff0c;小的变动 当然最多的是官方教程&#xff0c;如果你只是想要…

Web Spider Ast-Hook 浏览器内存漫游 - 数据检索

文章目录一、资源下载二、通过npm安装anyproxy模块三、anyproxy的介绍以及基本使用1. anyproxy的功能介绍2. anyproxy的基本使用四、给浏览器挂代理五、实操极验demo案例总结提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、资源下载 Github&#x…

性能优化之node中间件耗时

背景 中间件在node框架中是很基本的套件&#xff0c;使用不当很容易对页面性能造成影响。除了node服务端外&#xff0c;前端做的SSR项目也要特别重视这块 哪些场景会造成中间件耗时特别严重&#xff1f; 罪魁祸首是&#xff1a;await阻塞 举个例子&#xff1a; 1.如何得到 …

稀疏特征和密集特征

在机器学习中&#xff0c;特征是指对象、人或现象的可测量和可量化的属性或特征。特征可以大致分为两类&#xff1a;稀疏特征和密集特征。 稀疏特征 稀疏特征是那些在数据集中不连续出现的特征&#xff0c;并且大多数值为零。稀疏特征的示例包括文本文档中特定单词的存在或不存…

高性能 Message ToJavaBean 工具 【easy.server.mapper】

easy.server.mapper 介绍 后端开发中&#xff0c;消息转换常见问题 Map 中的数据 转换成实体Bean数组 中的数据 转换成实体BeanServet 中的 param 转换成实体Bean 以上的三个问题是最常见的消息转换困扰。 以Map 举例 常见做法是 手动转换 Map<String,Object> da…

stm32f407探索者开发板(二十三)——定时器中断实验

文章目录一、通用定时器知识回顾1.1 时钟的选择1.2 内部时钟的选择1.3 计数器模式二、常用寄存器和库函数配置2.1 计数器当前值寄存器CNT2.2 预分频寄存器TIMx_PSC2.3 自动重装载寄存器&#xff08;TIMx_ARR)2.4 控制寄存器1&#xff08;TIMx_CR1&#xff09;2.5 DMA中断使能寄…

基因净化车间装修设计方案SICOLAB

基因净化车间的设计方案应该根据实际需求进行定制&#xff0c;以下是一些规划建设要点和洁净设计要注意的事项&#xff1a;一、净化车间规划建设要点&#xff1a;&#xff08;1&#xff09;基因车间的面积应该根据实验项目的规模进行规划&#xff0c;包括充足的操作区域和足够的…