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

系统组件
硬件平台
以行空板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开发板:
- 选择 工具 -> 板管理器
- 搜索ESP32并安装

- 在 Arduino IDE 中安装 DFRobot_ADS1115 库(导入 .zip 库):https://docs.arduino.cc/software ... stalling-libraries/
- 在 Edge Impulse 平台上注册一个帐户:Edge Impulse Studio
- 安装 Edge Impulse 数据转发器工具:文档链接
2.硬件连接
- 连接气体传感器:使用 VCC、GND 和 ADC 引脚将四个气体传感器连接到16位AD转换模块。传感器应连接到ADS1115上的模拟输入通道 A0 至 A3(连接顺序 A0-A3:H2S、VOC、气味、烟雾)。行空板K10通过 I2C 接口连接到 ADS1115 模块。
- 组装容器:将要测试的对象(大蒜、咖啡豆)放入容器。

3. 数据收集和标记
- 设备上电后,Arduino IDE 代码(data.ino)初始化 ADS1115 模块。DFRobot_ADS1115 库从传感器读取数据并将其转换为电压值。
- 代码使用 drawLine() 函数在行空板K10屏幕上显示传感器数据的实时变化,这样就可以观察4个传感器的数据变化趋势。
- 每次收集数据时,传感器的电压读数都存储在 sensorData 数组中。为保证数据的实时更新,新数据存储时会覆盖旧数据,最多保留8个数据集。每100ms,四个传感器的值就会打印在串行监视器上。
- 打开 Windows PowerShell 并运行 Edge Impulse 数据转发器工具,输入:$edge-impulse-data-forwarder --frequency 10
- 使用 Edge Impulse 平台的数据采集工具收集和标记串行数据。
- 训练数据用于训练你的模型,而测试数据用于在训练完成后测试模型的准确性。我们建议将你的数据集按照大约80%训练数据和20%测试数据的比例进行划分,用于每个类别(或标签)的数据。不过,对于特别大的数据集,可能需要更少的测试数据。
4.训练模型

Flatten 模块参数:
缩放轴(Scale axes):将轴乘以这个数值。
平均值(Average):计算窗口内的平均值。
最小值(Minimum):计算窗口内的最小值。
最大值(Maximum):计算窗口内的最大值。
均方根值(Root-mean square):计算窗口内的均方根值。
标准差(Standard deviation):计算窗口内的标准差。
偏度(Skewness):计算窗口内的偏度。
峰度(Kurtosis):计算窗口内的峰度。
移动平均窗口数量:通过维护最后 N 个窗口的滚动平均来计算移动平均值。注意,没有填充零,模块会累积到最多 N 个窗口的平均值。(例如,在样本的第一个窗口中,移动平均值等于窗口的平均值。)
在训练期间,每个样本的移动平均值都会重置,并且在推理时调用 run_classifier_init() 时也会重置。注意,如果启用此功能,则可能不希望在训练时有重叠的窗口。
5.部署
- 部署训练好的 TensorFlow Lite 模型:通过 Arduino IDE 开发环境(导入 .zip 库),将训练好的 TensorFlow Lite 模型(使用 enose2025_inferencing 库)部署到 行空板K10上:[url=如何加载库文件? DF创客社区]如何加载库文件?[/url]
- 上传程序(enose.ino)。当用户按下按钮时,系统开始收集传感器数据并将其存储在特征数组(features array)中。随后调用 run_classifier() 函数进行推理,模型会根据输入数据预测当前气味是大蒜还是咖啡豆。
- 根据推理结果的概率,相应的气味图标(大蒜或咖啡豆)会显示在行空板K10的屏幕上。推理时间及结果也会通过串口监视器输出。


代码分析
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上,系统可以进行气味识别。

相关教程
如何通过Arduino IDE在行空板K10 (ESP32 S3) 上使用TensorFlow Lite Micro
代码下载
请至原文获取
进阶阅读
更多推荐



所有评论(0)