当前位置: 首页 > news >正文

实例3:树莓派呼吸灯

实例3:树莓派呼吸灯

实验目的

  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

相关文章:

实例3:树莓派呼吸灯

实例3&#xff1a;树莓派呼吸灯 实验目的 通过背景知识学习&#xff0c;了解digital与analog的区别。通过GPIO对外部LED灯进行呼吸控制&#xff0c;熟悉PWM技术。 实验要求 通过python编程&#xff0c;用GPIO控制LED灯&#xff0c;使之亮度逐渐增大&#xff0c;随后减小&am…...

android适配ipv6,请求慢?

先贴一篇我们经常能搜索到的解决方案&#xff1a; Android 在 4G 下访问 IPV6 慢的解决方案 文章很有参考意义&#xff0c;但也并不是所有请求慢的的原因&#xff01; 本文是另一种原因,有兴趣就继续往下看一看. 使用的okhttp框架,模式支持ipv6和ipv4协议,但两种协议同时存在时…...

【LeetCode】剑指 Offer(10)

目录 题目&#xff1a;剑指 Offer 27. 二叉树的镜像 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 28. 对称的二叉树 - 力扣&#xff0…...

学校AI视频行为分析监测系统 opencv

学校AI视频行为分析监测系统通过pythonopencv网络模型AI视频分析技术&#xff0c;学校AI视频行为分析监测算法对学校区域人员打架行为识别、跌倒行为识别、翻墙识别、人员聚众识别、攀高识别、抽烟行为等进行智能识别预警。OpenCV的全称是Open Source Computer Vision Library&…...

内存数据库的设计与实现(已在大型项目中应用)

一、概况 1、设计总图 组成,由Redis集群缓存,普通缓存,传统数据库,各类数据驱动 2、内存数据库的增删改查,分页查询 组成,由数据查询,分页查询,数据存储,数据修改,数据删除 3、内存数据库的驱动 组成,由驱动适配器,普通缓存驱动,Redis缓存驱动 4、内存数据库与…...

Linux基础命令-stat显示文件的状态信息

文章目录 stat 命令介绍 语法格式 基本参数 测试三个时间的变化过程 1&#xff09;使用cat命令 2&#xff09;使用echo命令 3&#xff09;使用chmod命令 4&#xff09;使用vim命令 参考实例 1&#xff09;显示文件的状态信息 2&#xff09;以简洁的形式显示状态信…...

SQL入门DEMO

单表查询 ● --查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值 ● --查询供应商的ID、公司名称、地区、城市和电话字段的值。条件是“地区等于华北”并且“联系人头衔等于销售代表”。 –查询供应商的ID、公司名称、地…...

辉光管时钟学习制作及开源软硬件工程

文章目录前言开源地址辉光管项目介绍辉光管的工作条件硬件部分部分介绍充电电路驱动电路不足之处软件部分总结前言 作为一个电子人&#xff0c;一直想做一个辉光管时钟&#xff0c;算是大学的一个心愿&#xff0c;终于在快要毕业前做了一个&#xff0c;下面把软件和硬件的部分…...

动手学深度学习(第二版)学习笔记 第三章

第三章 线性神经网络 代码&#xff1a;d2l-zh/pytorch/chapter_linear-networks 3.1 线性回归 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation 解析解 线性回归的解可以用一个公式简单地表达出来&#xff0c;这类解叫作解析解&#xff08;analytical solution&…...

冯诺依曼体系结构与操作系统的概念及理解

一、 冯诺依曼体系结构1、概念2、内存的作用3、硬件原理解释软件行为二、操作系统的概念及基本作用1、概念2、设计操作系统的目的3、操作系统的主要作用4、什么是管理5、管理的目的6、操作系统如何为我们服务一、 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们…...

【深度探讨】如何利用区块链改善公共服务

发表时间&#xff1a;2022年5月4日 信息来源&#xff1a;bsvblockchain.org BSV区块链协会全力支持符合企业和政府对于节能降耗和合法合规等相关要求的区块链生态系统。 然而&#xff0c;虽然监管机构负责其监管范围内的技术服务的性质、目的和影响&#xff0c;但他们并不是全…...

【打卡】图分析与节点嵌入

背景介绍 图&#xff08;Graphs&#xff09;是一种对物体&#xff08;objects&#xff09;和他们之间的关系&#xff08;relationships&#xff09;建模的数据结构&#xff0c;物体以结点&#xff08;nodes&#xff09;表示&#xff0c;关系以边&#xff08;edges&#xff09;…...

python元编程详解

什么是元编程 软件开发中很重要的一条原则就是“不要重复自己的工作&#xff08;Don’t repeat youself&#xff09;”&#xff0c;也就是说当我们需要复制粘贴代码时候&#xff0c;通常都需要寻找一个更加优雅的解决方案&#xff0c;在python中&#xff0c;这类问题常常会归类…...

为什么文档对 SaaS 公司至关重要?

在过去十年左右的时间里&#xff0c;SaaS的兴起使全球数百家公司成为家喻户晓的公司。但他们并不是仅仅依靠产品的力量到达那里的。客户服务和支持是使一切在幕后顺利进行的原因——其中很大一部分是文档。以正确的风格和正确的位置在您的网站上找到适当的用户文档对于将浏览器…...

Echarts 实现电池效果的柱状图

第022个点击查看专栏目录本示例是解决显示电池电量状态的柱状图&#xff0c;具体的核心代码请参考源代码。 文章目录示例效果示例源代码&#xff08;共102行&#xff09;相关资料参考专栏介绍示例效果 示例源代码&#xff08;共102行&#xff09; /* * Author: 还是大剑师兰特…...

计算机网络高频知识点(一)

目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…...

JavaScript split()方法

JavaScript split()方法 目录JavaScript split()方法一、定义和用法二、语法三、参数值四、返回值五、更多实例5.1 省略分割参数5.2 使用limit参数5.3 使用一个字符作为分割符一、定义和用法 split() 方法用于把一个字符串分割成字符串数组。 二、语法 string.split(separat…...

前端面试题 —— 性能优化

目录 一、CDN的作用 二、CDN的使用场景 三、懒加载的概念 四、懒加载与预加载的区别 五、documentFragment 是什么&#xff1f;用它跟直接操作 DOM 的区别是什么&#xff1f; 六、常见的图片格式及使用场景 七、懒加载的特点 八、如何优化动画&#xff1f; 九、如何提⾼…...

我的周刊(第080期)

我的信息周刊&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。&#x1f3af; 项目stable-diffusion-webui-docker[1]基于 Docker 的一…...

操作系统——7.进程的定义,组成,组成方式和特征

目录 1.概述 ​编辑2.定义 2.1单道程序 2.2多道程序 2.3进程定义 3.进程的组成 3.1进程的组成内容 3.2 PCB中的内容 4.进程的组织 4.1进程的两种组织方式 4.2链接方式 4.3索引方式 5.进程的特征 6.小结 这篇文章&#xff0c;我们主要来学习一下进程的定义&#xff0…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...