1535浏览
查看: 1535|回复: 0

[K10项目分享] E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测

[复制链接]
本帖最后由 zoey不种土豆 于 2025-2-21 19:35 编辑

E-nose(电子鼻)是基于行空板K10的AI气体检测设备,它利用气味、烟雾、VOC(挥发性有机化合物)、H2S(硫化氢)这四种类型的气味传感器,从大蒜和咖啡豆中采集实时气体数据。然后将这些数据用于在 Edge Impulse平台上训练 AI模型。经过训练的模型被部署在行空板K10上,从而可以智能识别和区分出这两种气味。通过简单的用户交互,它可以识别不同的气味,使其适用于智能气味监测、环境检测和更多应用。
E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图18


系统组件
硬件平台
以行空板K10为主控平台,以Arduino IDE作为编程环境。行空板K10具备内置显示屏和按钮,能够显示推理结果并接收用户输入。
气体传感器
四种类型的气体传感器,包括气味、烟雾、VOC(挥发性有机化合物)、H2S(硫化氢),负责捕获大蒜和咖啡豆的气味数据。通过分析传感器数据的变化,来检测不同气味的独特特征。
Edge Impulse
Edge Impulse平台用于使用收集到的气味数据训练AI模型,从而创建气味识别模型。
推理引擎:
部署在行空板K10上的推理引擎负责执行实时 AI 推理,将传感器输入数据转换为可解释的结果。

所需硬件
行空板K10
Fermion: MEMS 硫化氢传感器
Fermion: MEMS VOC传感器
Fermion: MEMS臭味传感器
Fermion: MEMS 烟雾传感器
Gravity: I2C ADS1115 16位AD转换模块
风扇、连接线和 3D打印部件

项目步骤
1.环境设置
  • 安装 Arduino IDE 1.8.19:下载链接
  • 在 Arduino IDE 中安装行空板K10开发板:

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图4

  • 选择 工具 -> 板管理器

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图3

  • 搜索ESP32并安装

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图2

完成

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图5


2.硬件连接

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图6

  • 连接气体传感器:使用 VCC、GND 和 ADC 引脚将四个气体传感器连接到16位AD转换模块。传感器应连接到ADS1115上的模拟输入通道 A0 至 A3(连接顺序 A0-A3:H2S、VOC、气味、烟雾)。行空板K10通过 I2C 接口连接到 ADS1115 模块。
  • 组装容器:将要测试的对象(大蒜、咖啡豆)放入容器。
E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图8

3. 数据收集和标记
  • 设备上电后,Arduino IDE 代码(data.ino)初始化 ADS1115 模块。DFRobot_ADS1115 库从传感器读取数据并将其转换为电压值。
  • 代码使用 drawLine() 函数在行空板K10屏幕上显示传感器数据的实时变化,这样就可以观察4个传感器的数据变化趋势。

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图7

  • 每次收集数据时,传感器的电压读数都存储在 sensorData 数组中。为保证数据的实时更新,新数据存储时会覆盖旧数据,最多保留8个数据集。每100ms,四个传感器的值就会打印在串行监视器上。
  • 打开 Windows PowerShell 并运行 Edge Impulse 数据转发器工具,输入:$edge-impulse-data-forwarder --frequency 10
  • 使用 Edge Impulse 平台的数据采集工具收集和标记串行数据。

标签:咖啡豆、大蒜
采样长度:800ms
传感器:H2S、VOC、气味、烟雾

  • 训练数据用于训练你的模型,而测试数据用于在训练完成后测试模型的准确性。我们建议将你的数据集按照大约80%训练数据和20%测试数据的比例进行划分,用于每个类别(或标签)的数据。不过,对于特别大的数据集,可能需要更少的测试数据。

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图9

4.训练模型
在为E-nose收集数据之后,你可以着手创建自己的 Impulse。一个完整的 Impulse 由三个主要构建模块构成:输入模块、处理模块以及学习模块。一个项目可以包含多个 Impulse,或Experiments,每个 Impulse 可以包含相同或不同的模块组合。这使得你可以使用相同的输入训练和测试数据集,查看不同学习和处理模块的准确性和模型预测结果。

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图10

Flatten模块对信号进行统计分析。它适用于温度数据等变化缓慢的平均值计算,并可与其他模块配合使用。

Flatten 模块参数:
缩放轴(Scale axes):将轴乘以这个数值。
平均值(Average):计算窗口内的平均值。
最小值(Minimum):计算窗口内的最小值。
最大值(Maximum):计算窗口内的最大值。
均方根值(Root-mean square):计算窗口内的均方根值。
标准差(Standard deviation):计算窗口内的标准差。
偏度(Skewness):计算窗口内的偏度。
峰度(Kurtosis):计算窗口内的峰度。

移动平均窗口数量:通过维护最后 N 个窗口的滚动平均来计算移动平均值。注意,没有填充零,模块会累积到最多 N 个窗口的平均值。(例如,在样本的第一个窗口中,移动平均值等于窗口的平均值。)
在训练期间,每个样本的移动平均值都会重置,并且在推理时调用 run_classifier_init() 时也会重置。注意,如果启用此功能,则可能不希望在训练时有重叠的窗口。

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图11

在我们的大多数 DSP 模块中,你都可以选择计算特征重要性。Edge Impulse Studio 随后会输出一份特征重要性列表(Feature Importance list),这将帮你确定在想要训练模型时,来自 DSP 模块的哪些轴在分析中最为重要。

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图12

通过信号处理从原始信号中提取出有意义的特征后,你便可以利用学习模块来训练模型了。

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图13

实时分类功能让你能利用直接从任意设备或受支持的开发板捕获的数据来验证你的模型。这让你可以了解模型在处理真实世界数据时的表现。

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图14

Impulse 可以作为 Arduino 库进行部署。这将所有的信号处理模块、配置以及学习模块打包成一个单一的包。你可以将它包含在你的草图中,以在本地运行 Impulse。在E-nose的教程中,你需要导出一个 Impulse,并将其集成到一个草图中,以对传感器数据进行分类。

E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图15

5.部署
  • 部署训练好的 TensorFlow Lite 模型:通过 Arduino IDE 开发环境(导入 .zip 库),将训练好的 TensorFlow Lite 模型(使用 enose2025_inferencing 库)部署到 行空板K10上:[url=https://mc.dfrobot.com.cn/thread-1854-1-1.html?fromuid=864588]如何加载库文件?[/url]
  • 上传程序(enose.ino)。当用户按下按钮时,系统开始收集传感器数据并将其存储在特征数组(features array)中。随后调用 run_classifier() 函数进行推理,模型会根据输入数据预测当前气味是大蒜还是咖啡豆。
  • 根据推理结果的概率,相应的气味图标(大蒜或咖啡豆)会显示在行空板K10的屏幕上。推理时间及结果也会通过串口监视器输出。
E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图17


E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图16


代码分析
E-nose的代码分为多个功能模块,主要包括:

1.库导入和全局变量:
DFRobot_ADS1115:用于从ADS1115模数转换器读取电压值,适用于气体传感器数据采集。
unihiker_k10:用于控制K10显示屏,提供绘图和显示功能。
enose2025_inferencing:用于气味识别的推理库。
2.全局变量:
包括屏幕方向设置、用于存储传感器数据的数组以及用于存储特征数据的数组。
3.图像数据和特征数组:
image_data数组:存储背景、加载界面和推理结果的图像,以显示用户界面。
features数组:存储从传感器收集的特征数据,这些数据在推理过程中使用。
4.函数定义:
setup():初始化串口通信、行空板K10屏幕,设置背景图像,并配置按钮回调函数。
loop():主循环实时读取传感器数据并更新显示。当数据达到8组时,会移除旧数据,仅保留最新的8组数据。
drawLine():绘制实时传感器数据曲线,便于观察数据趋势。
onButtonAPressed():当用户按下A按钮时,系统开始收集传感器数据,并调用run_classifier()推理函数。根据推理结果,显示相应的图像。
5.推理结果处理:
根据推理结果的概率,系统判断气味是大蒜还是咖啡豆,并在屏幕上显示相应的图像。同时,还会打印推理时间以及任何潜在的异常检测结果。


结论
这款基于 K10 硬件的 AI 驱动的气味检测设备E-nose(电子鼻)完成了从数据收集到 AI 推理的全过程。通过使用四个气体传感器收集大蒜和咖啡豆的数据,在Edge Impulse 平台上训练模型,并将模型部署在行空板K10上,系统可以进行气味识别。
E-nose 电子鼻:用行空板 K10和Arduino IDE进行MEMS AI气体检测图19

相关教程
如何通过Arduino IDE在行空板K10 (ESP32 S3) 上使用TensorFlow Lite Micro

代码下载:下载附件enose-k10-main.rar

项目作者:jenna
原文链接:https://community.dfrobot.com/makelog-315191.html



进阶阅读:TinyML电子鼻E-nose:使用MEMS气体传感器和edge impulse平台

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail