IoT 传感器与执行器调研指南:用四维框架分析 Grove 光敏传感器与 LED(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 仓库第 1 章第 3 课《通过传感器和执行器与物理世界交互》的课后作业——调研并描述一个可与 IoT 开发套件搭配使用的传感器与执行器。文章将作业要求中的四个分析维度(功能、内部硬件、模拟/数字属性、单位与量程)拆解为可复用的"四维框架",并以本课真实使用的 Grove 光敏传感器与 Grove LED 为例给出完整范例,同时深入传感器/执行器的模拟与数字原理(ADC、电压、PWM 等),并给出可运行的参考代码路径。读完本文,你既能独立完成本课作业,也能建立起评估任何 IoT 外设的通用分析方法。
作业任务:调研一个传感器与一个执行器
本课(第 3 课完整讲义)的核心内容是两类硬件——传感器(sensor)与执行器(actuator)。作业(作业原文)要求你选择一个可接入 IoT 开发套件的传感器和一个执行器,分别围绕以下4 个维度进行调研与描述:
- 它做什么(What it does)——该器件感知或产生何种物理量,在系统中承担什么角色;
- 内部使用的电子/硬件(The electronics/hardware used inside)——内部由哪些电子元件构成,如何实现功能;
- 它是模拟还是数字(Is it analog or digital)——输出/输入信号的类型及其含义;
- 输入或测量的单位与量程(What the units and range of inputs or measurements is)——具体数值范围、对应物理单位,以及是否映射到标准计量单位。
评估标准(Rubric)分为三档:完整覆盖全部 4 个维度为"优秀";仅覆盖 2-3 个维度为"合格";只覆盖 1 个维度则"需要改进"。因此,一篇高质量作业的关键在于四个维度缺一不可,且最好能落到可验证的数值与实现细节上。
先理解两个基本概念
在动手调研前,先明确本课的两个核心定义(出自第 3 课 README):
- 传感器:感知物理世界的硬件设备,测量周围的一个或多个属性,并把信息发送给 IoT 设备。常见的有温度传感器、按钮、光敏传感器、摄像头、加速度计、麦克风等。所有传感器的共同点是——把感知到的物理量转换为 IoT 设备能解释的电信号。
- 执行器:与传感器相反,它把来自 IoT 设备的电信号转换为对物理世界的交互,如发光、发声或驱动电机。常见的有 LED、扬声器、步进电机、继电器、屏幕等。
本课的教学场景是把两者组合起来搭建一个"夜灯(nightlight)":用光敏传感器读取环境光强,当光强过低时点亮 LED。这正是作业调研对象的天然样本——光敏传感器与 LED。
传感器范例:Grove 光敏传感器
以本课在 Raspberry Pi 与虚拟设备上使用的Grove 光敏传感器为例,展示四个维度如何逐一展开。该传感器在 pi-sensor.md 与 wio-terminal-sensor.md 中有详细说明。
维度一:它做什么
它检测环境光强度。在夜灯项目中,它负责持续读取当前光照水平,供程序判断是否需要开灯。
维度二:内部电子/硬件
内部核心元件是光电二极管(photodiode)——一种能将入射光转换为电信号的半导体元件。在 Raspberry Pi 方案中,传感器作为 Grove 外设模块通过 Grove 线缆接入 Grove Base Hat 的A0 模拟插座;在 Wio Terminal 方案中,光敏传感器则直接集成在板载,透过机身背面的透明塑料窗口可见,对应WIO_LIGHTGPIO 引脚。
维度三:模拟还是数字
模拟传感器。传感器输出的是随光强连续变化的电压值,IoT 设备(数字系统)无法直接理解模拟电压,需要经过**模数转换器(ADC)**转为数字量。在 Grove 生态中,Raspberry Pi 的 Grove Base Hat 内置了 ADC,把电压换算为整数读数;Wio Terminal 的 MCU 则通过analogRead完成片上 ADC 采样。从编码角度看,转换通常由传感器配套库封装完成,开发者无需手写转换逻辑。
维度四:单位与量程
输出为0 到 1,023 的整数,表示相对光强——这是一个相对值,不对应任何标准测量单位(如 lux)。量程上限 1,023 是 10 位 ADC 的典型满量程(2¹⁰ − 1)。在 3.3V 供电的系统中,若传感器返回 1V,对应读数约为 300(对应二进制0000000100101100)。
参考代码
Raspberry Pi / 虚拟设备(Python,见 虚拟设备传感器代码):
import time from grove.grove_light_sensor_v1_2 import GroveLightSensor light_sensor = GroveLightSensor(0) # 连接到 Grove 模拟引脚 A0 / CounterFit 引脚 0 while True: light = light_sensor.light # 读取 0-1023 的相对光强 print('Light level:', light) time.sleep(1) # 每秒采样一次,降低功耗Wio Terminal(C++,见 wio-terminal-sensor 源码目录):
pinMode(WIO_LIGHT, INPUT); // 在 setup() 中配置引脚为输入 int light = analogRead(WIO_LIGHT); // 在 loop() 中读取 0-1023 Serial.print("Light value: "); Serial.println(light); delay(1000); // 每秒采样一次实际运行中,遮挡/揭开传感器时读数会明显变化,例如:
Light level: 634 Light level: 230 Light level: 104 Light level: 290模拟与数字:理解信号世界的分水岭
对传感器(以及执行器)做"模拟/数字"判定时,需要先理解背后的电压与转换机制。
模拟传感器与电压
模拟传感器由 IoT 设备供电,传感器内部元件(如电位器、热敏电阻)改变这个电压,设备再测量返回的电压得到数值。例如电位器:设备送入 5V,旋钮在 0(关闭)位置时返回 0V,旋到最大(11)时返回 5V,中间位置返回中间电压。
又如基于**热敏电阻(thermistor)**的模拟温度传感器:其电阻随温度变化,输出电�压可经代码换算为开尔文,再转成 °C 或 °F。这类读数可能是任意值,也可能映射到标准单位。
由于 IoT 设备本质上是数字的(只处理 0 和 1),模拟值必须经 ADC 转换。ADC 可能内置于设备芯片、连接板(如 Grove Base Hat)或传感器自身。
数字传感器
最简单的数字传感器是按钮/开关:只有开、关两种状态。GPIO 引脚可直接读为 0 或 1——送入 3.3V、返回 3.3V 时为 1,返回 0V 时为 0,无需 ADC。注意电压存在容差:例如 Raspberry Pi 的 GPIO 以 3.3V 工作,将高于 1.8V 的返回信号判为 1,低于 1.8V 判为 0。
更高级的数字传感器(如数字温度传感器)内部依然使用热敏元件测量,但由板载 ADC把模拟读数转为二进制数字信号后再发送给 IoT 设备,省去了连接板或设备端的 ADC。数字化还让传感器可以传输更复杂的数据(如摄像头以 JPEG 格式传图、甚至加密数据)。
判断技巧:如果器件只有两种状态(通/断、开/关)且直接输出高低电平,通常是数字的;如果输出连续变化的电压、需要 ADC 参与,则通常是模拟的。
执行器范例:Grove LED
夜灯的第二个主角是Grove LED(详见 pi-actuator.md、wio-terminal-actuator.md 与 virtual-device-actuator.md)。
维度一:它做什么
电流流过时发出可见光。在夜灯中,当检测到的光强低于阈值(300)时被点亮,模拟"夜间自动照明"。
维度二:内部电子/硬件
核心是发光二极管(light-emitting diode,LED)。二极管是单向导电器件,因此 LED 必须区分正负极正确安装(圆形一侧为正极,稍扁平的一侧为负极),接反则不亮。Grove LED 模块附赠多种颜色的 LED 供选择,并带有可调亮度的旋钮(初始建议用螺丝刀逆时针旋到最大)。Raspberry Pi 方案中模块接入 Grove Base Hat 的D5 数字插座;Wio Terminal 方案中接入右侧 Grove 插座,对应D0数字引脚。
维度三:模拟还是数字
数字执行器,具有开、关两种状态:发送数字值 1 时点亮,发送 0 时熄灭。对 Raspberry Pi 的 Grove 引脚,1 对应 3.3V;对 Wio Terminal 的D0,HIGH(1)为 3.3V,LOW(0)为 0V。
维度四:单位与量程
输入为二进制数字信号,取值域是 {0, 1}(对应 0V 与设备最高电压,本课环境中为 3.3V)。不存在连续的模拟输入范围——这正是"两态数字执行器"的特征。若需调节亮度或速度等连续量,则属于模拟执行器或 PWM 范畴(见下文)。
参考代码
Python(完整夜灯代码:虚拟设备):
from grove.grove_led import GroveLed led = GroveLed(5) # 连接到数字引脚 D5 / CounterFit 引脚 5 if light < 300: led.on() # 发送数字值 1,点亮 else: led.off() # 发送数字值 0,熄灭C++(完整夜灯代码:Wio Terminal):
pinMode(D0, OUTPUT); // 在 setup() 中配置引脚为输出 if (light < 300) { digitalWrite(D0, HIGH); // 1 -> 点亮 } else { digitalWrite(D0, LOW); // 0 -> 熄灭 }执行器的模拟世界:可调光与 PWM
作业要求调研的"执行器"不限于 LED,理解模拟执行器能帮助你写出更全面的描述。
模拟执行器与 DAC
模拟执行器接收模拟信号,交互强度随电压变化。最典型的例子是可调光灯:供给电压越高越亮。由于 IoT 设备输出的是数字信号,需要数模转换器(DAC)(内置于设备或连接板)把 0/1 序列转换成执行器可用的模拟电压。
脉冲宽度调制(PWM)
不用 DAC 也能实现"伪模拟"的另一条路径是PWM(脉冲宽度调制)——发送大量短促的数字脉冲,让执行器表现出如同模拟信号的行为,常用于控制电机转速。
以 5V 供电的电机为例:向电机发送一个 0.02s 的高电平(5V)脉冲,电机可转 1/10 圈(36°),随后 0.02s 低电平(0V)暂停。每个"开-关"周期 0.04s,一秒内有 25 个脉冲,电机每秒转 2.5 圈,即 150 RPM:
25 pulses per second x 0.1 rotations per pulse = 2.5 rotations per second 2.5 rotations per second x 60 seconds in a minute = 150rpm把高电平脉冲减半为 0.01s、低电平延长到 0.03s(周期仍为 0.04s),每个脉冲只让电机转 1/20 圈,转速降为每秒 1.25 圈,即 75 RPM——仅靠改变数字脉冲的宽度就把模拟电机转速减半:
25 pulses per second x 0.05 rotations per pulse = 1.25 rotations per second 1.25 rotations per second x 60 seconds in a minute = 75rpm当信号一半时间开、一半时间关时,称为50% 占空比(duty cycle);占空比即信号处于开启状态的时间百分比。理解 PWM 后,你可以为"电机类执行器"写出第四个维度:输入为数字脉冲序列,单位为 RPM,量程取决于脉冲宽度(占空比)的调节范围。
组合成系统:夜灯的完整闭环
作业之外,本课还要求把传感器与执行器组合起来。夜灯的伪代码逻辑(源自 README)如下:
Check the light level. If the light is less than 300 Turn the LED on Otherwise Turn the LED off这一闭环展示了传感器与执行器的协作方式:传感器负责"感知"(读光强),设备负责"决策"(阈值判断),执行器负责"行动"(开/关 LED)。Python 与 C++ 的完整可运行代码分别位于 code-actuator/virtual-device/nightlight/app.py 与 code-actuator/wio-terminal/nightlight/src/main.cpp。无实体硬件时,可使用 CounterFit 应用创建虚拟传感器与执行器,并支持手动设值或随机值模拟环境变化(详见 virtual-device-sensor.md)。
评分标准与作业自查表
提交作业前,可按官方 Rubric 逐项自检(完整标准见 assignment.md):
| 标准 | 优秀 | 合格 | 需要改进 |
|---|---|---|---|
| 传感器描述 | 完整覆盖全部 4 个维度 | 仅覆盖其中 2-3 个维度 | 仅覆盖 1 个维度 |
| 执行器描述 | 完整覆盖全部 4 个维度 | 仅覆盖其中 2-3 个维度 | 仅覆盖 1 个维度 |
自查清单:
- 明确了该器件"感知/产生什么物理量、在系统中的角色";
- 说清了内部关键电子元件(如光电二极管、发光二极管、热敏电阻、继电器线圈等);
- 明确判定模拟或数字,并解释信号形式(连续电压 / 两态高低电平 / 数字数据流);
- 给出单位与量程(如 0-1,023 相对光强、{0,1} 数字状态、0-5V、占空比 0-100%、RPM 等),并说明是否对应标准计量单位(如 lux);
- 若可能,附上对应的驱动库调用或硬件接线信息,增强可信度。
延伸学习:从本课继续深入
若想进一步扩充调研素材或验证实现,可继续阅读仓库内以下资源:
- 第 3 课完整讲义(含模拟/数字传感器、ADC、PWM、常见器件清单);
- Raspberry Pi 光敏传感器实操 与 Raspberry Pi LED 实操;
- Wio Terminal 板载光敏传感器实操 与 Wio Terminal LED 实操;
- CounterFit 虚拟设备传感器/执行器实操;
- 本课全部参考代码(code-sensor 与 code-actuator)。
本课配套的课后挑战还提供了一个很好的实践入口:把你此前列出的家中/学校/工作场所的 IoT 设备逐一分析——它们连接了哪些传感器和执行器?每个传感器/执行器的用途是什么?这正是对"四维框架"的最佳反复练习。
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考