ARTICLE DETAIL

资讯详情

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

构建水果质量检测器:IoT-For-Beginners 制造项目实战——边缘 AI 分类、多设备协同与云端服务整合

构建水果质量检测器:IoT-For-Beginners 制造项目实战——边缘 AI 分类、多设备协同与云端服务整合 构建水果质量检测器IoT-For-Beginners 制造项目实战——边缘 AI 分类、多设备协同与云端服务整合【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本文围绕 IoT-For-Beginners 课程「4-manufacturing制造」项目的最终实战任务展开以关联文档 assignment.md 定义的「水果质量检测器」原型为核心完整拆解其四项评估标准云服务配置、接近触发与命令下发、边缘图像分类、LED 告警控制并结合仓库中各硬件平台的距离传感器示例代码给出可直接复现的端到端实现路径。读完本文你将掌握如何把前 24 课学到的传感器读取、IoT Hub 通信、Azure Functions 无服务器逻辑与边缘 AI 推理拼装成一条完整的「感知—决策—执行」工业流水线。一、任务背景把「手工挑果」变成自动化流水线该任务模拟一个真实制造场景处理厂的传送带上由人工逐个检查水果并挑出未成熟果实厂方希望用自动化系统替代人工。任务要求你利用此前所有课程积累的代码搭建一个原型级水果质量检测器实现三个核心能力接近触发当传送带上的水果靠近到预设距离时由接近传感器触发检测流程边缘 AI 分类摄像头拍照后由运行在边缘设备上的 AI 模型对水果成熟度进行分类并将结果存入云端存储执行器反馈根据分类结果通过云端命令控制 LED 点亮提醒工作人员移除未成熟水果。任务文档明确强调这应当能够完全由你在各前置课程训练水果检测器、设备端调用 Custom Vision、在边缘运行检测器等中写过的代码拼装而成仓库中4-manufacturing/lessons/下的前三个课时目录正是这些代码的来源。二、总体架构Things → Insights → Actions课程 README.md 给出的参考架构可以概括为三段式数据流Things设备侧带接近传感器的设备检测水果到达并发消息上云摄像头设备拍照后交给边缘图像分类器负责 LED 告警的设备接收命令。Insights洞察侧云端的无服务器应用Azure Functions消费 IoT Hub 消息、做出「是否触发拍照」「果实是否未熟」等决策Azure Storage 保存分类结果供后续统计分析如未熟果占比。Actions执行侧)IoT Hub 向摄像头设备下发拍照/分类命令向 LED 设备下发点亮命令。原型阶段全部逻辑跑在一台设备上使用微控制器时图像分类器需放在一台独立的边缘设备上其组件间消息流如下图所示三、评估标准逐项拆解任务文档给出了四档评估表Exemplary / Adequate / Needs Improvement这是完成本任务时最直接的验收清单标准优秀Exemplary合格Adequate待改进Needs Improvement配置全部云服务成功配置 IoT Hub、Azure Functions 应用与 Azure 存储仅配置了 IoT Hub未配置 Functions 或存储任何 IoT 云服务均未配置成功监控接近距离、低于预设距离时上报 IoT Hub并通过命令触发摄像头能测距、在物体足够近时向 IoT Hub 发消息并成功接收触发摄像头的命令测距并上报成功但摄像头未收到命令测距、上报或命令触发均失败拍照、分类并把结果发给 IoT Hub拍照后使用边缘设备分类并将结果发送到 IoT Hub能分类但未经由边缘设备或结果未上报无法完成图像分类根据分类结果用命令控制 LED 开关当水果未成熟时能通过命令点亮 LED命令能发到设备但 LED 不受控无法下发 LED 控制命令下面按标准逐项说明实现要点。标准 1配置 IoT Hub、Azure Functions 与 Azure 存储这一项要求三条云端链路全部打通设备遥测的入口IoT Hub、消息消费与决策逻辑Functions、分类结果的持久化Storage。三者分别在前置课时中搭建过本任务的核心是把它们串到同一个 Hub 下并为不同的设备身份距离传感器、摄像头、LED 设备分别管理连接字符串。标准 2接近触发与摄像头命令下发接近传感器硬件。课程选用 Seeed Grove 的 Time of Flight 距离传感器核心是 VL53L0X 激光测距模块量程 10mm2000mm超过 1000mm 的读数会报告为 8109mm接口为 I²C。其原理是发射激光或红外电磁波并检测反射回来的时间用飞行时间反算距离——这也是它被称为 Time of Flight飞行时间传感器的原因。Raspberry Pi 实现。仓库中 pi 平台示例 只有 11 行展示的是最小可运行读距循环import time from grove.i2c import Bus from rpi_vl53l0x.vl53l0x import VL53L0X distance_sensor VL53L0X(bus Bus().bus) distance_sensor.begin() while True: distance_sensor.wait_ready() print(fDistance {distance_sensor.get_distance()} mm) time.sleep(1)要点通过 Grove Base HAT 的 I²C 总线接入传感器依赖grove库的Bus和rpi-vl53l0x包安装命令pip install rpi-vl53l0xwait_ready()阻塞等待一次测距完成get_distance()返回毫米值。课程 pi-proximity.md 中给出预期的控制台输出形如Distance 29 mm每秒一行。Wio Terminal微控制器实现。同一硬件在 Wio Terminal 示例 中用 C 完成#include Seeed_vl53l0x.h Seeed_vl53l0x VL53L0X; void setup() { Serial.begin(9600); delay(1000); VL53L0X.VL53L0X_common_init(); VL53L0X.VL53L0X_high_accuracy_ranging_init(); } void loop() { VL53L0X_RangingMeasurementData_t RangingMeasurementData; memset(RangingMeasurementData, 0, sizeof(VL53L0X_RangingMeasurementData_t)); VL53L0X.PerformSingleRangingMeasurement(RangingMeasurementData); Serial.print(Distance ); Serial.print(RangingMeasurementData.RangeMilliMeter); Serial.println( mm); delay(1000); }对应的 platformio.ini 使用atmelsam平台、seeed_wio_terminal板型依赖seeed-studio/Grove Ranging sensor - VL53L0X ^1.1.1库。注意微控制器只能跑单个应用因此后续多设备逻辑要合并在一个 sketch 内见「多设备模拟」一节。虚拟设备实现。没有硬件时可用 CounterFit 模拟器虚拟设备示例 用counterfit-shims-rpi-vl53l0x垫片包替代真实驱动from counterfit_connection import CounterFitConnection CounterFitConnection.init(127.0.0.1, 5000) from counterfit_shims_rpi_vl53l0x.vl53l0x import VL53L0X distance_sensor VL53L0X() distance_sensor.begin() while True: distance_sensor.wait_ready() print(fDistance {distance_sensor.get_distance()} mm) time.sleep(1)在 CounterFit Web 应用中创建 Distance 类型传感器时I²C 地址需设为0x29物理 VL53L0X 的固定地址。virtual-device-proximity.md 还建议在模拟器中开启随机值模式模拟传送带上果实的远近变化。触发决策的位置是课程专门讨论的架构权衡是设备端判断「距离 阈值」后才上报一条触发消息还是把连续测距值全部上报、由云端IoT Hub/Functions判断两种都可行但代价不同——上报全部测距会增加 IoT Hub 费用与带宽工厂里上百万设备时尤其明显也可能拖慢设备而在设备端决策则需要通过云端配置如设备孪生来在线调整阈值避免把触发距离硬编码进固件。达到触发条件后Functions 消费消息并向摄像头设备发送 C2D云ToDevice命令例如「takePhoto」摄像头设备收到命令后执行拍照与分类。标准 3拍照、边缘分类并上报结果摄像头设备收到命令后拍照把图像交给运行在边缘设备上的 Custom Vision 模型此前课时已训练并发布过香蕉/水果成熟度检测模型完成推理。评估标准特别区分了「使用边缘设备分类」优秀与「仅在云端或 PC 上分类」合格但非优秀这正呼应课程「边缘计算减少回传带宽与延迟」的主线。推理完成后将包含类别与置信度的分类结果作为遥测消息发回 IoT Hub由 Functions 消费并写入 Azure Storage 存档用于事后统计未熟果占比。标准 4按分类结果下发 LED 控制命令当分类结果判定水果未成熟时Functions 向 LED 设备下发命令如turnOn/turnOff设备端在命令回调中驱动继电器或 GPIO 点亮 LED向工人发出移除未熟果的提示。验收的完整闭环是未熟果 → 边缘分类 → 结果上报 → Functions 决策 → 命令下发 → LED 点亮任何一环断裂都会落入评估表的较低档。四、先定义消息结构再写代码课程强调多组件通信的系统必须先约定每条消息的 JSON 结构再动手写应用。以温度为例字段该叫temperature还是temp{ temperature: 20.7 }vs.{ temp: 20.7 }两种写法本身都合法但收发两端不一致就是线上事故——文档引用了火星气候轨道器因单位换算失误坠毁的经典案例提醒不仅字段名单位也必须在全链路保持一致°C 还是 °F毫米还是米。本任务涉及的四种消息分别是距离测量上报、拍照命令下发、分类结果上报、LED 命令下发建议为每一类都先写出 schema 草案再实现。五、在一块开发板上模拟多台 IoT 设备原型要求「接近传感器设备」「摄像头设备」「LED 设备」三个身份而开发者手上只有一套硬件。课程给出两套模拟策略单板计算机Raspberry Pi / 虚拟设备可同时运行多个进程直接把每台 IoT 设备实现成独立 Python 文件在多个终端里并行运行本课时距离传感器就单独放在distance_sensor.py而非app.py中正是此意。注意部分硬件被多个进程并发访问时可能冲突。微控制器Wio Terminal无法多进程必须把所有设备逻辑合并进单个应用。课程建议每个 IoT 设备一个类如DistanceSensor、ClassifierCamera、LEDController各自暴露setup/loop方法供主函数调用命令处理集中在一处再分发到对应类主loop用统一的最小延迟如 1 秒配合计数器实现不同设备不同周期每 10 秒 vs 每 1 秒的调度。六、从原型走向生产任务文档同时说明了原型与生产系统的差距这也是评估答辩时的加分谈资加固硬件生产环境用能抗工厂噪音、高温、振动与机械应力的工业级部件内部直连部分组件之间改为设备间直接通信避免每次决策都绕行云端仅将需要留存的数据上云也可用网关设备把部分 IoT 服务下沉到边缘可配置化触发距离、检测对象等参数通过云端配置如设备孪生下发而非写死在固件中适应不同产线与不同水果自动剔除用机械装置自动移除未熟果替代 LED 人工提示。七、完成后的清理这是制造项目的最后一课任务文档特别提示先完成作业再按仓库根目录的 clean-up.md 指引删除 IoT Hub、Functions 与 Storage 等云资源避免持续产生费用。八、延伸阅读本课时主文档架构、消息设计、多设备模拟的完整讨论4-manufacturing/lessons/4-trigger-fruit-detector/README.md分平台接近传感器实操Raspberry Pi、Wio Terminal、虚拟设备原始任务英文4-manufacturing/lessons/4-trigger-fruit-detector/assignment.md前置技能来源训练检测器4-manufacturing/lessons/1-train-fruit-detector/、设备端调用检测器4-manufacturing/lessons/2-check-fruit-from-device/、边缘运行检测器4-manufacturing/lessons/3-run-fruit-detector-edge/【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表