IoT-For-Beginners 第 3 课作业研究指南从光敏传感器到 LED 执行器的原理剖析与三平台实战【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners导读本篇技术指南围绕 IoT-For-Beginners 项目中第 3 课《Interact with the physical world with sensors and actuators》的课后作业assignment.md展开。作业要求你独立研究一个传感器 一个执行器并从功能、内部电子硬件、模拟或数字、单位与量程四个维度给出完整描述。本文将以课程中实际使用的 Grove 光传感器photodiode 光敏二极管和 Grove LED 为例逐维度演示如何完成这类硬件研究同时补充课程源码级的实现证据ADC 转换、PWM 脉宽调制、analogRead/digitalWrite调用链并给出 Wio Terminal、Raspberry Pi 与虚拟设备CounterFit三个平台可直接运行的最小代码。读完后你既能独立完成作业也能为后续课程积累识别传感器/执行器关键参数的方法论。一、先读懂作业研究什么、按什么标准评分assignment.md 的核心任务非常明确本课讲解了传感器与执行器你需要研究并描述一个可与 IoT 开发套件配合使用的传感器以及一个执行器每项都要覆盖四个维度它做什么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 个维度Exemplary优秀只覆盖 2–3 个维度Adequate合格只覆盖 1 个维度Needs Improvement需改进也就是说四维全覆盖是拿高分的最低门槛。下面的章节将严格按这四维框架示范如何为选定的传感器与执行器撰写研究报告。二、传感器研究示范Grove 光传感器2.1 它做什么光传感器用于检测环境光照水平light level。在课程的小夜灯nightlight项目里它的用途是持续读取环境光强当光线过暗读数低于 300时触发 LED 点亮模拟天黑自动亮灯的行为。2.2 内部电子/硬件根据 wio-terminal-sensor.md 与 pi-sensor.md 的说明本课使用的光传感器基于光敏二极管photodiode光照会使二极管内部产生与光强成比例的光电流进而转换为可测量的电压信号。在 Wio Terminal 上该传感器直接内置于设备背面透过透明塑料窗口可见在 Raspberry Pi 上则是外接 Grove 模块通过 Grove 线缆接到 Grove Base Hat 的模拟口A0。2.3 它是模拟还是数字模拟传感器。它的输出是一个与光强连续对应的电压值而非离散的 0/1。根据课程 READMEREADME.md第 59–63 行的说明模拟传感器的工作方式是IoT 设备向传感器送出一个电压传感器内部的元器件改变该电压设备再测量返回的电压以得到传感器数值。模拟值无法被数字设备直接处理因此必须先经过模数转换ADC, Analog-to-Digital Converter。课程的典型实现路径有两种Wio Terminal主控自带 ADC代码中直接调用analogRead(WIO_LIGHT)读取Raspberry Pi Grove Base HatPi 的 GPIO 本身没有 ADC模拟传感器必须接到 Base Hat 上的模拟端口A0由 Hat 内置的 ADC 把电压转换成数字信号后经 GPIO 传给 Pi。一个直观的量级换算例子课程 README 第 83 行若传感器以 3.3V 供电、输出 1VGrove 光传感器的 0–1023 量程下该电压对应的读数约为 300其二进制表示是0000000100101100。从编程角度看这类转换通常由传感器库封装好了你不需要手写。2.4 单位与量程量程整数 0–1,023Raspberry Pi 侧文档 pi-sensor.md 表述为 0–1,000 用于说明概念实际 Grove 库同样返回 0–1,023 的 10 位 ADC 读数。单位相对光强无标准单位。课程文档特别强调该读数不映射到任何标准测量单位例如 lux勒克斯。因此它只能用于比较亮/暗不能直接换算成物理照度。2.5 三平台最小实现代码以下代码均可在仓库源码目录中找到完整版本Wio TerminalArduino/C见 code-sensor/wio-terminal/nightlight/src/main.cppvoid setup() { Serial.begin(9600); // ... pinMode(WIO_LIGHT, INPUT); // 将板载光传感器引脚配置为输入 } void loop() { int light analogRead(WIO_LIGHT); // 读取 0-1023 的模拟值 Serial.print(Light value: ); Serial.println(light); delay(1000); // 每秒采样一次降低功耗 }WIO_LIGHT是与板载光传感器相连的 GPIO 引脚编号analogRead返回 0–1,023 的整数。项目由 platformio.ini 描述使用seeed_wio_terminal开发板与 Arduino 框架。Raspberry PiPython Grove 库见 code-sensor/pi/nightlight/app.pyimport time from grove.grove_light_sensor_v1_2 import GroveLightSensor light_sensor GroveLightSensor(0) # 连接 Grove Base Hat 的 A0 口 while True: light light_sensor.light # 读取 0-1023 的光强 print(Light level:, light) time.sleep(1)虚拟设备CounterFit见 code-sensor/virtual-device/nightlight/app.py。它用counterfit_shims_grove模拟库替代真实硬件并增加CounterFitConnection.init(127.0.0.1, 5000)建立与 CounterFit 应用的连接在 CounterFit 界面中创建Light类型传感器Pin 0后可通过Value手动设定读数或勾选Random并设置Min/Max让读数随机变化import time from counterfit_connection import CounterFitConnection from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor CounterFitConnection.init(127.0.0.1, 5000) light_sensor GroveLightSensor(0) while True: light light_sensor.light print(Light level:, light) time.sleep(1)运行方式Pi 与虚拟设备平台均通过python3 app.py启动Wio Terminal 则用 PlatformIO 编译上传后用串口监视器观察输出例如遮住/移开传感器时读数会在个位数与 300 之间跳变。三、传感器类型补充知识模拟、数字与 ADC在做作业的模拟 or 数字判断时可以对照课程 README 的传感器分类模拟传感器以输出改变后的电压来表达测量值。典型例子是电位器potentiometer——一个可在两端之间旋转的拨盘。若设备送 5V 进入电位器拨到 0 位置时输出 0V拨到满档11时输出 5V中间位置则输出介于两者之间的电压如 3.8V见 potentiometer.png。再如基于热敏电阻thermistor的模拟温度传感器其电阻随温度变化输出转换后的电压再由代码换算成开尔文/摄氏度/华氏度。数字传感器要么只输出两种状态0/1要么内置 ADC 把模拟量直接编码成二进制数字信号。最简单的数字传感器就是按钮/开关按下时返回满电压读数 1未按下返回 0V读数 0。进阶的数字传感器如数字温度传感器仍用热偶等元器件感知变化但由片上 ADC 完成转换后再以 0/1 数字序列发送给设备。ADC 的必要性IoT 设备只能处理 0 和 1因此所有模拟传感器都必须先经过模数转换设备内置 ADC 或连接板上的 ADC。对 Grove 光传感器而言Pi 场景正是通过 Grove Base Hat 上的 ADC 完成这一步的。经验法则当你研究一个传感器时是否输出连续电压决定它是不是模拟的是否带内置 ADC/接口直接输出二进制决定它是不是数字的。这两个判据在作业中务必写清楚。四、执行器研究示范Grove LED4.1 它做什么执行器与传感器正好相反——把 IoT 设备发出的电信号转换成对物理世界的某种作用。课程选用LED发光二极管作为执行器电流流过时发光用于在小夜灯项目中光线不足时亮起。小夜灯的整体逻辑wio-terminal-actuator.md 等文档中的伪代码为Check the light level. If the light is less than 300 Turn the LED on Otherwise Turn the LED off对应流程如图 assignment-1-flow.png 所示读取光强 → 判断是否低于阈值 → 控制 LED。4.2 内部电子/硬件LED 是发光二极管一种只允许电流单向流动正向导通的二极管导通时电能转化为光能。正因如此硬件接线时极性不能接反——LED 两脚中较平的一侧是负极较圆的一侧是正极必须对应模块上标注的插座与靠近模块中心的插座。Grove LED 模块还带一个可调电阻旋钮用于调节亮度上限接线时应先把旋钮调到最大逆时针拧到底方便观察亮灭变化。接线位置随平台不同Raspberry PiLED 模块接到 Grove Base Hat 的数字插座D5见 pi-actuator.md。Wio Terminal接到右侧 Grove 插座面向屏幕时的右手边离电源键最远的那个左侧插座仅供 I²C 与数字设备使用本课不涉及。虚拟设备在 CounterFit 的Create actuator面板中选择LED类型Pin 设为 5并可用Color选择器改变 LED 颜色。4.3 它是模拟还是数字数字执行器只有开1/关0两种状态发送数字值1HIGH引脚输出设备满电压LED 点亮发送数字值0LOW引脚输出 0VLED 熄灭。课程文档给出了明确的电压约定Wio Terminal 与 Raspberry PiGrove 生态下1对应满电压3.3V0对应 0V。对于 Wio Terminal控制引脚是右侧 Grove 插座对应的数字引脚D0。4.4 单位与量程LED 的控制信号是离散的布尔量只有HIGH1/LOW0两档没有中间亮度状态Grove 模块上的旋钮是硬件层调节不改变数字控制信号的量程。因此本维度的描述重点是两态开关量高电平3.3V 亮低电平0V 灭。4.5 三平台完整小夜灯代码Wio TerminalArduino/C见 code-actuator/wio-terminal/nightlight/src/main.cpp。在setup中把D0配为OUTPUTloop中读取光强后与阈值 300 比较void setup() { Serial.begin(9600); // ... pinMode(WIO_LIGHT, INPUT); pinMode(D0, OUTPUT); // 右侧 Grove 插座数字引脚用于驱动 LED } void loop() { int light analogRead(WIO_LIGHT); Serial.print(Light value: ); Serial.println(light); if (light 300) { digitalWrite(D0, HIGH); // 光弱 → 亮 } else { digitalWrite(D0, LOW); // 光足 → 灭 } delay(1000); }Raspberry PiPython Grove 库见 code-actuator/pi/nightlight/app.pyimport time from grove.grove_light_sensor_v1_2 import GroveLightSensor from grove.grove_led import GroveLed light_sensor GroveLightSensor(0) # A0 led GroveLed(5) # D5 while True: light light_sensor.light print(Light level:, light) if light 300: led.on() # 数字值 1 → 亮 else: led.off() # 数字值 0 → 灭 time.sleep(1)虚拟设备CounterFit将上面导入行换成from counterfit_shims_grove.grove_led import GroveLed其余逻辑一致virtual-device-actuator.md。运行后在 CounterFit 中把光传感器读数在 300 上下调节即可看到虚拟 LED 亮灭。排错提示如果真实 LED 不亮先检查极性是否接反、模块旋钮是否开到最大。五、执行器类型补充知识模拟执行器、DAC 与 PWM作业中模拟 or 数字的判断同样适用于执行器模拟执行器接受连续电压并据此改变作用强度。典型例子是可调光灯电压越高越亮、越低越暗dimmable-light.png。由于 IoT 设备只能输出数字信号驱动模拟执行器需要数模转换器DAC, Digital-to-Analog Converter设备内置或连接板上。脉冲宽度调制PWM, Pulse-Width Modulation另一种把数字信号伪装成模拟信号的方式——用大量短促的数字脉冲其占空比决定等效输出强度。课程以电机调速为例做了精确计算README.md 第 151–183 行5V 供电的电机每 0.02s 发送一个 5V 高电平脉冲推动电机转 1/10 圈即 36°随后 0.02s 低电平 0V周期 0.04s。每秒 25 个脉冲 × 每次 0.1 圈 2.5 圈/秒 150 RPM每分钟转数如图 pwm-motor-150rpm.png 所示保持周期不变把高电平缩到 0.01s、低电平加到 0.03s占空比从 50% 降到 25%每个脉冲只转 1/20 圈每秒 25 脉冲 1.25 圈/秒 75 RPM电机速度减半如图 pwm-motor-75rpm.png 所示。结论仅靠改变数字脉冲的宽度占空比就能连续控制模拟执行器的输出强度。占空比定义为信号处于高电平的时间占总周期时间的百分比。数字执行器LED 之外另一类简单两态执行器是继电器relay——由小电压信号控制通断的开关可让 IoT 设备以低电压控制大电压负载更复杂的数字执行器如屏幕则需要按特定格式发送数据通常借助厂家库实现。六、把方法论迁移到任意设备家庭 IoT 设备盘点挑战课程在课后挑战中建议把你家中、学校或工作场所里的 IoT 设备尽可能列出来判断它们是围绕微控制器microcontroller还是单板计算机single-board computer构建然后逐一分析每个设备连接了哪些传感器与执行器以及各自的用途。结合本课知识你可以这样套用四维框架功能该设备感知什么温度、运动、声音、图像…、作用什么发声、发光、移动、加热…内部硬件大概率是基于热敏电阻/光电二极管/压电元件/电机/电磁阀等常见器件遇到不确定的可通过拆机图或产品资料佐证模拟 or 数字看它输出的是连续电压模拟还是 0/1 或串行数字数字单位与量程如温湿度传感器常返回相对湿度百分比与摄氏/华氏温度加速度计常返回 g 值接近传感器常返回距离cm/mm等。七、作业自查清单完成研究报告后对照以下清单确认是否达到 Exemplary 档传感器四维齐全功能、内部电子photodiode 等具体器件、模拟/数字判断及理由是否需 ADC、单位与量程0–1,023、相对光强、无 lux 等标准单位执行器四维齐全功能、内部电子二极管单向导电性、数字两态HIGH3.3V / LOW0V、控制方式digitalWrite/led.on()/led.off()能结合课程概念解释原理如模拟信号的 ADC 转换、数字信号的高低电平容差Raspberry Pi GPIO 以 3.3V 工作、约 1.8V 以上判为 1、PWM 占空比调速关键代码可运行、参数有注释阈值 300、引脚 A0/D5/D0、采样间隔 1s 等均已在上文给出依据。按此框架完成的研究报告将同时具备课程要求的完整性、硬件细节的准确性以及可直接落地的代码证据。参考资源仓库内路径课程主体1-getting-started/lessons/3-sensors-and-actuators/README.md作业说明1-getting-started/lessons/3-sensors-and-actuators/assignment.md传感器分平台指南wio-terminal-sensor.md、pi-sensor.md、virtual-device-sensor.md执行器分平台指南wio-terminal-actuator.md、pi-actuator.md、virtual-device-actuator.md可运行源码code-sensor 与 code-actuator 目录下的nightlight工程含platformio.ini构建配置【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
