ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

在 Raspberry Pi 上用 Grove 光传感器构建智能小夜灯:硬件接线、Python 轮询与 ADC 原理实战(IoT-For-Beginners 第 3 课)

在 Raspberry Pi 上用 Grove 光传感器构建智能小夜灯:硬件接线、Python 轮询与 ADC 原理实战(IoT-For-Beginners 第 3 课) 在 Raspberry Pi 上用 Grove 光传感器构建智能小夜灯硬件接线、Python 轮询与 ADC 原理实战IoT-For-Beginners 第 3 课【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners导读本篇文章基于开源课程项目 IoT-For-Beginners 第 3 课传感器与执行器的 Raspberry Pi 分支文档完整讲解如何在树莓派上接入一个 Grove 模拟光传感器从 Grove 线缆与 Grove Base Hat 的 A0 模拟插槽接线到用 Grove Python 库编写app.py轮询光照强度并在控制台输出读数。读完本文你将掌握 Grove 生态中模拟传感器的接线规范、GroveLightSensor驱动的标准用法以及模拟信号经 ADC 转成 0~1023 数字量的底层原理为后续用光传感器驱动 LED 完成一个完整的小夜灯项目打下基础。本篇在课程中的定位IoT-For-Beginners 第 3 课《与物理世界交互传感器与执行器》的教学目标是让读者先为 IoT 设备添加一个光传感器再添加一个由光照控制的 LED最终拼装出一个小夜灯nightlight。课程为不同硬件提供了三条分支路线见 第 3 课 READMEArduinoWio Terminal分支单板计算机Raspberry Pi分支单板计算机虚拟设备分支。本篇讲解的是Raspberry Pi 分支的传感器部分对应的原始文档为 pi-sensor.md仓库内还提供该文档的多种语言翻译本文依据的德文版位于 translations/de/.../pi-sensor.md。传感器部分完成后小夜灯的下一步——用 LED 作为执行器——请继续阅读 pi-actuator.md。硬件认识 Grove 光传感器本课使用的传感器是光传感器light sensor其核心是一个 光电二极管Photodiode能够把照射到它上面的光转换成电信号。需要特别强调的是这是一个模拟传感器analog sensor输出一个 0 到 1,000课程硬件简介中的表述左右的整数值表示相对光照量该数值不映射任何标准计量单位例如不表示 勒克斯Lux 这样的光照度单位——它只是一个相对的强弱指示在实际编程读取时代码注释与运行结果展示的取值区间为0~1,023下文ADC 原理一节会解释这个区间与 12 位模数转换的关系。光传感器是外置 Grove 模块不能像 Wio Terminal 那样直接使用板载传感器它必须通过 Grove Base Hat 连接到树莓派的 GPIO 上。把光传感器接到 A0 插槽Grove 生态的特点是模块 标准线缆 扩展板即插即用。将光传感器接到树莓派的完整操作步骤如下插线到模块取一根 Grove 线缆将一端插入光传感器模块上的插座。Grove 线缆的插头有防呆设计只能以一个方向插入反了插不进去。接线到 Base Hat先关闭树莓派电源power off再将 Grove 线缆的另一端连接到 Grove Base Hat 上标记为A0的模拟插座。在 Base Hat 上这一排插座紧挨着 GPIO 引脚排针A0 是从右数第二个的插座。 为什么强调断电接线Grove 模块和树莓派 GPIO 均属于低压电路但热插拔时瞬间的电流冲击仍可能损坏传感器或主板的 GPIO 端口。先断电再插拔线缆是嵌入式开发的安全习惯本项目文档同样遵循这一原则。接线完成、上电启动后就可以开始编程了。软件编程用 Python 轮询光照强度树莓派分支使用 Python 与 Grove 官方驱动库进行编程。整个项目存放在nightlight目录中核心文件是app.py。下面按文档给出的步骤逐步完成。第 1 步导入所需库打开 VS Code 中的夜灯项目可以在树莓派本机直接打开也可以通过 Remote SSH 扩展远程连接清空app.py后写入以下导入语句import time from grove.grove_light_sensor_v1_2 import GroveLightSensorimport time导入 Python 标准库time模块稍后用于在循环末尾插入休眠sleepfrom grove.grove_light_sensor_v1_2 import GroveLightSensor从Grove Python 库中导入GroveLightSensor类。这套 Grove 驱动库封装了与 Grove 光传感器交互的底层代码I/O 读写并在树莓派的初始化设置Pi setup阶段就已经全局安装因此这里无需再执行 pip 安装直接 import 即可。第 2 步创建传感器实例在导入语句之后追加light_sensor GroveLightSensor(0)GroveLightSensor(0)创建一个连接到引脚 0即模拟 Grove 引脚A0的实例——这正是上一步物理接线的位置。从源码结构看该构造参数是树莓派 Grove Base Hat 上的通道号0 对应文档所述 A0 插槽。第 3 步死循环轮询并打印读数接着添加一个无限循环持续读取光值并输出到控制台while True: light light_sensor.light print(Light level:, light)light_sensor.light是GroveLightSensor类的属性读取的是引脚上的模拟值取值范围0~1,023读取到的值通过print输出到控制台。第 4 步在循环末尾加 1 秒休眠光照强度不需要每毫秒都去检查因此在循环尾部追加time.sleep(1)每次循环结束后休眠 1 秒降低设备功耗——对电池供电或长期运行的 IoT 设备来说合理的采样频率是节能的关键设计。第 5 步运行并观察在 VS Code 的终端中执行python3 app.py控制台会持续输出光照值。用手遮住光传感器再放开可以看到数值随之大幅变化例如文档给出的输出片段piraspberrypi:~/nightlight $ python3 app.py Light level: 634 Light level: 634 Light level: 634 Light level: 230 Light level: 104 Light level: 290从输出可以看出室内常光下读数稳定在 634 左右遮光后骤降到 104逐渐放开后又回升到 290——传感器响应灵敏验证接线与驱动均正常。完整代码仓库源码验证本节完整代码可直接在仓库中查看code-sensor/pi/nightlight/app.py内容与上述分步讲解完全一致import time from grove.grove_light_sensor_v1_2 import GroveLightSensor light_sensor GroveLightSensor(0) while True: light light_sensor.light print(Light level:, light) time.sleep(1)原理深挖模拟光值是如何变成 0~1023 的数字量的很多初学者会好奇为什么传感器输出的是 0~1023 的整数而不是电压或 Lux这涉及 IoT 设备处理模拟信号的通用机制——模数转换ADC, Analog-to-Digital Conversion。第 3 课 README1-getting-started/lessons/3-sensors-and-actuators/README.md对此有清晰的说明IoT 设备是数字设备只能处理 0 和 1无法直接理解 1V、2.5V 这样的模拟电压因此模拟传感器的输出电压必须经过ADC转成数字表示。很多 IoT 设备板载 ADC扩展板hat也可以自带 ADC在 Seeed Grove 生态中模拟传感器接到树莓派 GPIO 之上的 Base Hat 特定端口Hat 上的 ADC 负责把电压转成可经 GPIO 传输的数字信号。以文档给出的具体例子一个模拟光传感器接到使用 3.3V 的 IoT 设备返回 1V 电压。对于 Seeed Grove 光传感器其输出范围是0 到 1,023那么在 3.3V 供电下1V 输出对应的数字量约为300。设备无法直接处理 300 这个模拟值于是 Grove Hat 把 300 转成其二进制表示000000010010110012 位二进制数交给 IoT 设备处理——这正解释了读取区间为何是0~1023即 2¹⁰−1 到 2¹² 相关的 12 位 ADC 满量程概念Grove 传感器按此区间归一化。 从编码角度看这一整套电压→数字的转换通常由随传感器提供的驱动库完成。就像本文使用的GroveLightSensor库开发者只需读取light属性即可拿到 0~1023 的值无需自行处理 ADC 细节——这是使用 Grove 生态开发时库帮你屏蔽底层的典型体现。引脚规划模拟口与数字口的配合完成传感器后如果继续做执行器部分会涉及树莓派 Base Hat 的引脚分工。根据 pi-actuator.md 中的说明所有插座都有唯一的引脚编号模拟引脚0、2、4、6光传感器接的 A0 即引脚 0数字引脚5、16、18、22、24、26LED 将接到 D5即引脚 5。理解这一分工很重要模拟传感器必须接模拟口才能经 ADC 量化数字执行器如 LED则接数字口直接以高/低电平驱动。在 Grove Base Hat 上向执行器发送数字值 1 对应设备最大电压树莓派场景下为 3.3V发送 0 对应 0V。进阶把传感器接进完整的小夜灯逻辑传感器读数本身只是第一步。小夜灯的核心逻辑是检测到光照不足时点亮 LED。课程给出的伪代码如下Check the light level. If the light is less than 300 Turn the LED on Otherwise Turn the LED off将 LED接 D5与光传感器接 A0组合后的完整代码如下可在 code-actuator/pi/nightlight/app.py 中查看import time from grove.grove_light_sensor_v1_2 import GroveLightSensor from grove.grove_led import GroveLed light_sensor GroveLightSensor(0) led GroveLed(5) while True: light light_sensor.light print(Light level:, light) if light 300: led.on() else: led.off() time.sleep(1)GroveLed(5)创建连接到数字引脚 5D5的 LED 实例当light 300时调用led.on()发送数字值 1否则调用led.off()发送 0阈值 300 是一个相对值读者可以按实际环境光照自行调整。课程文档以流程图概括了这一完整作业的数据流读取光照 → 判断 → 控制 LED运行后遮住光传感器可以观察到读数降到 300 以下时 LED 自动亮起移开遮挡后 LED 熄灭——一个基于传感器的闭环 IoT 小夜灯就此完成。常见问题与注意事项数值范围表述差异文档硬件简介中写0 到 1,000而代码说明与实测输出使用 0~1,023 区间。两者并不冲突——前者是产品文档对相对量级的粗略描述后者是 ADC 量化后实际读取的真实范围编程时应以 0~1023 为准。Grove 线缆方向插头只能以一个方向插入模块插座不要用力硬插。接线必须断电连接或断开 Grove 线缆前务必先关闭树莓派电源。LED 不亮时排查若后续执行器阶段 LED 不亮请确认 LED 极性扁平侧为负极以及模块上的亮度旋钮是否已拧到最大。依赖环境本分支依赖 Grove Python 库grove包文档明确说明它已在 Pi 初始化设置阶段全局安装若在全新环境运行需确保该驱动已安装到全局或当前 Python 环境中。小结通过本文你完成了 IoT-For-Beginners 第 3 课 Raspberry Pi 分支的传感器阶段将 Grove 光传感器接线到 A0 模拟插槽用GroveLightSensor驱动读取 0~1023 的相对光强并打印到控制台同时理解了模拟信号经 Base Hat 上的 ADC 转成数字量的原理以及模拟口0/2/4/6与数字口5/16/18/22/24/26的分工。下一步配合 pi-actuator.md 与 code-actuator/pi/nightlight/app.py 中的 LED 控制代码即可完成会随环境光线自动开关的完整小夜灯。本课还提供了 Wio Terminalwio-terminal-sensor.md与虚拟设备virtual-device-sensor.md两条平行分支便于没有树莓派硬件的读者用模拟器完成同样的学习目标。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表