树莓派3B小练习

article/2025/8/2 21:21:36

PWM驱动LED灯

3B引脚图

请添加图片描述
PWM通道 GPIO号 物理引脚 复用功能
PWM0 GPIO12 32 Alt Fun 0
PWM1 GPIO13 33 Alt Fun 0
PWM0 GPIO18 12 Alt Fun 5
PWM1 GPIO19 35 Alt Fun 5

第一步

启用pwm(默认情况下未启用)

简而言之,你无法通过Linux内核API获取到PWM资源,因为在树莓派官方的设备树配置(/boot/config.txt)里并没有通知内核要启用pwm。因此第一步自然是让内核支持pwm驱动,使用如下命令:

 vim打开/boot/config.txt在最后一行加入: dtoverlay=pwm保存退出,重启philon@rpi:~ $ sudo vim /boot/config.txt 
philon@rpi:~ $ sudo reboot#重启之后,有两种方式确认pwm已启用
philon@rpi:~ $ lsmod | grep pwm
pwm_bcm2835            16384  1 # 方式1: 加载了官方pwm驱动philon@rpi:~ $ ls /sys/class/pwm/
pwmchip0                        # 方式2: sysfs里可以看到pwmchip0目录

第二步

连接引脚
根据之前的硬件接线,LED与树莓派的PWM0通道相连,所以使能pwm0即可点亮led,大体步骤为:

请求pwm0资源
设置脉冲周期
设置占空比
打开pwm0
命令行控制pwm其实和gpio大同小异,都是通过sysfs这个虚拟文件系统完成的。

philon@rpi:~ $ cd /sys/class/pwm/pwmchip0/    # 进入pwm资源目录philon@rpi:~ $ echo 0 > export                # 加载pwm0资源
philon@rpi:~ $ echo 10000000 > pwm0/period    # 设置脉冲周期为10ms(100Hz)
philon@rpi:~ $ echo 8000000 > pwm0/duty_cycle # 设置占空比为8ms
philon@rpi:~ $ echo 1 > pwm0/enable           # 开始输出#可以自行调整脉冲周期和占空比,得到不同的亮度如果玩够了,记得释放资源
philon@rpi:~ $ echo 0 > pwm0/enable           # 关闭输出
philon@rpi:~ $ echo 0 > unexport              # 卸载pwm0资源

经过上面这番犀利操作,只要你够虔诚,就会看见一束绿光闯入你的眼里,心里,脑海里。但是这时只是实现了固定占空比的PWM灯,灯的强弱不会改变

第三步

编写代买

import RPi.GPIO as GPIO
import time# 配置 GPIO 模式和引脚
PWM_PIN = 18  # 使用 BCM 编号的 GPIO 18(需与设备树配置一致)
FREQUENCY = 100  # PWM 频率 (Hz)# 初始化 GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(PWM_PIN, GPIO.OUT)# 创建 PWM 实例并启动
pwm = GPIO.PWM(PWM_PIN, FREQUENCY)
pwm.start(0)  # 初始占空比为 0%try:while True:# 亮度逐渐增加(0% -> 100%)for duty_cycle in range(0, 101, 5):pwm.ChangeDutyCycle(duty_cycle)time.sleep(0.05)  # 间隔时间(可调整)# 亮度逐渐减少(100% -> 0%)for duty_cycle in range(100, -1, -5):pwm.ChangeDutyCycle(duty_cycle)time.sleep(0.05)except KeyboardInterrupt:# 捕获 Ctrl+C 中断,释放资源print("程序已终止")pwm.stop()GPIO.cleanup()

最后运行此代码,就能看见呼吸灯了
视频效果链接

HC-SR04 超声波传感器

接线方式

4 个引脚由 2 个电源引脚(Vcc 、GND)和 2 个控制引脚(Trig、Echo)组成

Vcc 和 Gnd 接 5v DC 电源,但不推荐用独立电源给它供电,应使用树莓派或单片机的 GPIO 口输出 5v 和 Gnd 给它供电。不然会影响这个模块的运行

Trig 引脚用来接收来自树莓派的控制信号。接任意 GPIO 口

Echo 引脚用来发送测距结果给树莓派。接任意 GPIO 口

注意:Echo 返回的是 5v信号,而树莓派的 GPIO 接收超过 3.3v 的信号可能会被烧毁,因此需要加一个分压电路

HC-SR04 的测距过程
树莓派向 Trig 脚发送一个持续 10us 的脉冲信号

HC-SR04 接收到树莓派发送的脉冲信号,开始发送超声波 (start sending ultrasoun),并把 Echo置为高电平。 然后准备接收返回的超声波

当 HC-SR04 接收到返回的超声波 (receive returned ultrasound) 时,把 Echo 置为低电平

从上述过程可以看出, Echo 高电平持续的时间就是超声波从发射到返回所经过的时间间隔

#导入 GPIO库
import RPi.GPIO as GPIO
import time#设置 GPIO 模式为 BCM
GPIO.setmode(GPIO.BCM)#定义 GPIO 引脚
GPIO_TRIGGER = 23
GPIO_ECHO = 24#设置 GPIO 的工作方式 (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)def distance():# 发送高电平信号到 Trig 引脚GPIO.output(GPIO_TRIGGER, True)# 持续 10 us time.sleep(0.00001)GPIO.output(GPIO_TRIGGER, False)start_time = time.time()stop_time = time.time()# 记录发送超声波的时刻1while GPIO.input(GPIO_ECHO) == 0:start_time = time.time()# 记录接收到返回超声波的时刻2while GPIO.input(GPIO_ECHO) == 1:stop_time = time.time()# 计算超声波的往返时间 = 时刻2 - 时刻1time_elapsed = stop_time - start_time# 声波的速度为 343m/s, 转化为 34300cm/s。distance = (time_elapsed * 34300) / 2return distanceif __name__ == '__main__':try:while True:dist = distance()print("Measured Distance = {:.2f} cm".format(dist))time.sleep(1)# Reset by pressing CTRL + Cexcept KeyboardInterrupt:print("Measurement stopped by User")GPIO.cleanup()

视频效果


http://www.hkcw.cn/article/GCEVSdXUHf.shtml

相关文章

中国信通院:《“机器人+人工智能”工业应用研究报告》| 人工智能赋能机器人,如何重塑工业版图?

在数字经济蓬勃兴起的浪潮中,《中国信通院&苏州机器人产业协会-“机器人人工智能”工业应用研究报告》为我们揭示了智能制造的未来图景。 这份报告不仅是技术发展的记录,更是产业升级的指南。它以深刻的洞察力,剖析了“机器人人工智能”…

LangChain-结合GLM+SQL+函数调用实现数据库查询(三)

针对 LangChain-结合GLM+SQL+函数调用实现数据库查询(二)-CSDN博客 进一步简化 通过 LangChain 和大语言模型(GLM-4)实现了一个 AI 代理,能够根据自然语言提问自动生成 SQL 查询语句,并连接 MySQL 数据库执行查询,最终返回结果。 整个流程如下: 用户提问 → AI 生成 SQ…

8天Python从入门到精通【itheima】-62~63

目录 第六章开始-62节-数据容器入门 1.学习目标 2.为什么要学习数据容器? 3.什么是Python中的数据容器 4.小节总结 63节-列表的定义语法 1.学习目标 2.为什么需要列表? 3.列表定义的基本语法 4.列表定义的基本语法-案例演示 5.列表定义的基本语…

重学计算机网络之以太网

一:历史发展进程 DIX EtherNet V2 战胜IEEE802.3成为主流版本。总线型交换机拓扑机构代替集线器星型拓扑机构 1990年IEEE制定出星形以太网10BASE-T的标准**802.3i**。“10”代表10 Mbit/s 的数据率,BASE表示连接线上的信号是基带信号,T代表…

4、数据标注的武林秘籍:Label-Studio vs CVAT vs Roboflow

开篇痛点:90%的模型效果取决于数据质量 "标注3小时,训练5分钟"——这是很多AI工程师的真实写照。上周有位读者训练YOLOv12时发现,同样的代码,换批数据mAP直接跌了15%,根本原因是标注不规范!本文…

一天搞懂深度学习--李宏毅教程笔记

目录 1. Introduction of Deep Learning1.1. Neural Network - A Set of Function1.2. Learning Target - Define the goodness of a function 2. Tips for Training Deep Neural Network3. Variant of Neural Network4. Next Wave 对一天搞懂深度学习–李宏毅教程分享内容做读…

【Canvas与色彩】八彩大风车

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>八彩风车 Draft1</title><style type"text/css"&…

Linux权限

文章目录 一、Linux用户权限1.1权限的概念1.2 用户分类##1.3切换用户1.4sudo提权 二、Linux文件权限2.1文件属性2.2文件的类型2.3 基本权限##2.4权限划分 三、Linux文件权限的修改方法3.1 chmod3.1.1操作符3.1.2数字模式 3.2chown3.3chgrp3.4目录文件权限的具体剖析3.4.1目录的…

70.新增用户内容复制功能

对于AI回答的内容可以复制和重新生成功能&#xff0c;对于用户则没有复制等功能&#xff0c;所以想了一下觉得还是很有必要添加该功能 首先&#xff0c;修改用户消息的模板部分&#xff0c;添加复制按钮&#xff1a; 然后&#xff0c;更新CSS样式以确保按钮正确显示。 因为之前…

暴雨和强对流双预警齐发 多地迎极端天气挑战

中央气象台今日6时继续发布暴雨蓝色预警和强对流天气蓝色预警。福建、广东、广西等六地将有大到暴雨,我国多地将有8级以上雷暴大风或冰雹天气。端午假期最后一天,出行前需关注天气变化。预计6月2日8时至3日8时,福建东部和南部沿海、广东中南部、广西南部、云南西北部和东部、…

Go语言中的rune和byte类型详解

1. rune类型 1.1. 基本概念 1. rune是Go语言的内建类型&#xff0c;它是int32的别名&#xff0c;即32位有符号整数&#xff1b; 2. 用于表示一个Unicode码点&#xff0c;全拼Unicode code point&#xff1b; 3. 可以表示任何UTF-8编码的字符&#xff1b; 1.2. 特点 1. 每…

基于mediapipe深度学习的虚拟画板系统python源码

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 虚拟画板系统基于计算机视觉与深度学习技术&#xff0c;通过摄像头捕获用户手部动作&#xff0c;利用 MediaPipe框架实现手…

AUTOSAR图解==>AUTOSAR_SWS_DIODriver

AUTOSAR DIO驱动器详解 基于AUTOSAR 4.4.0规范的DIO驱动架构、配置与应用 目录 1. 引言2. DIO驱动架构 2.1 DIO在AUTOSAR架构中的位置2.2 DIO驱动的功能概述 3. DIO驱动的数据类型和API 3.1 基本数据类型3.2 API接口3.3 错误检测 4. DIO驱动的操作流程 4.1 通道操作4.2 端口操…

Python数据类型详解:从字符串到布尔值,一网打尽

Python是现代编程语言中非常流行的一种&#xff0c;它的语法简洁、易懂&#xff0c;非常适合初学者。而在Python编程中&#xff0c;“数据类型”是最基础也是最重要的概念。理解这个概念&#xff0c;将为你之后的编程打下坚实的基础。 1. 什么是数据类型&#xff1f; 在Pytho…

lc hot 100之:双指针题目对比

写到两个给我感觉很类似的双指针题目&#xff0c;但是代码不同&#xff0c;我想把两个题放在一起&#xff0c;对比着看看。 第一题&#xff1a; 首先&#xff0c;提到“重复”&#xff0c;比较好想到哈希表。访问过就在哈希表里记录&#xff0c;然后只要找哈希表中有没有这个数…

6.01打卡

浙大疏锦行 DAY 40 训练和测试的规范写法 知识点回顾&#xff1a; 1. 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中 2. 展平操作&#xff1a;除第一个维度batchsize外全部展平 3. dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模…

SIM——引入双阶段搜索机制在用户行为序列的同时关注动态兴趣

文章目录 1. 背景2. 方法2.1 GSU2.1.1 Hard Search2.1.2 Soft Search 2.2 ESU 这里来回顾一篇经典的文章 SIM&#xff08;Search-based Interest Model&#xff09;&#xff0c;也是自己学习一下&#xff0c;虽然挺久了&#xff0c;但是业界都在使用这个&#xff0c;说明含金量…

LeRobot ACT——LeRobot对ALOHA ACT策略的封装:含源码解析与真机部署(效果比肩ACT原论文)

前言 本文一开始是此文的第一部分&#xff0c;后随着我司各大具身团队对各个动作策略的实践、深入&#xff0c;觉得可以挖掘且分享的细节越来越多&#xff0c;比如LeRobot ACT&#xff0c;其效果也不错 ALOHA ACT的复现与应用&#xff1a;双臂下的智能分拣场景 故把其中的「Le…

【Linux网络编程】网络层IP协议

目录 IP协议的协议头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 IP协议的协议头格式 4位版本号 &#xff1a;指定IP协议的版本&#xff0c;对于IPv4&#xff0c;版本号就是4。 4位首部长度&#xff1a;表名IP协议报头的长度&#xff0c;单…

微调大模型:什么时候该做,什么时候不该做?

目录 一、什么是“微调”&#xff1f;你真的需要它吗&#xff1f; 二、什么时候不该微调&#xff1f; &#x1f6ab; 不该微调的 5 个典型场景&#xff1a; 1. 通用问答、闲聊、常识类内容 2. 企业内部问答 / 文档助手 3. 想要通过微调“学会格式” 4. 没有大量高质量标…