回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【创意制造组】化学仪器AI助教:用掌控板和Mind+打造自动识别化学仪器工具 简单

头像 美美妞 2026.04.13 61 0

引言:化学课上,有些不常见的仪器名称容易给学生们造成一定困扰。如何让认识仪器更直观、更高效?我利用Mind+的AI图像分类功能,结合掌控板和物联网,制作了一个“化学仪器AI助教”。它就像一双智能的眼睛,看一眼就能识别出仪器,并立刻通过掌控板屏幕“说”出它的名字!这个项目将AI、物联网和开源硬件完美结合,为传统学习方式注入了科技的魔力。

一、项目介绍

本项目旨在解决化学教学中仪器识别难、记忆枯燥的问题。我们利用Mind+ V2软件,训练了一个能识别“多孔式气体洗瓶”、“液封除毒气集气瓶”等化学仪器的AI图像分类模型。通过电脑摄像头实时捕捉仪器画面,AI识别后,通过MQTT物联网协议将结果无线发送给掌控板。掌控板接收到信息后,会立刻在屏幕上显示仪器名称,实现“所见即所学”的智能互动体验。

核心功能:

1. AI视觉识别:实时识别2种以上常见化学仪器,识别准确率高。

2. 物联网无线传输:利用SIoT平台,实现电脑与掌控板的无线通讯。

3. 交互式学习反馈:掌控板屏幕显示名称,实现无线连接,打破设备局限。

4. 模块化设计:该项目可轻松扩展识别更多仪器,或增加语音播报、用外接摄像头无线识别等新功能。

本项目采用“端云端”的简易架构。电脑端(Mind+实时模式)负责AI模型推理和MQTT消息发布;SIoT平台作为本地MQTT服务器负责消息中转;掌控板端(上传模式)负责接收消息、控制外设,实现人机交互。

image.png

图一 项目架构图

image.png

图二 项目实物图

二、项目演示

3.56 07/26 aAG:/ v@F.UY https://v.douyin.com/QVxtMaQp870/ 复制此链接,打开Dou音搜索,直接观看视频!

三、项目制作过程

(一) 硬件准备

硬件数量作用
电脑(带摄像头)1台运行Mind+,训练模型进行AI识别
掌控板1块接收并文字显示仪器识别结果
手机(备选)1台拍摄待识别仪器照片,准备制作数据集

(二)软件准备

Mind+ V2.0及以上版本 (下载地址: mindplus.cc)

SIoT 1.2 (物联网服务器)

(三)硬件连接

掌控板与电脑用USB线连接image.png

图三 硬件连接实图

(四)AI模型训练

步骤1:打开Mind+,切换到实时模式,点击“模型训练”,新建“图像分类”项目。

image.png

图四 打开图像分类

步骤2:添加“多孔式气体洗瓶”、“液封除毒气集气瓶”、“空集”三个类别。

步骤3:分别采集图片或者上传图片。每个类别至少采集50张以上,要包括不同角度、光线和背景。image.png

图五 上传数据集

步骤4:点击“训练模型”,等待完成。

步骤5:点击“导出模型”,保存到电脑。

image.png

图六 模型训练

(五) 电脑端编程 (Mind+ 实时模式)

步骤1:打开实时模式
image.png

图七 打开实时模式

步骤2:添加扩展和编程image.png

图八 加载模型文件

用红色框标出关键积木:`加载图像分类模型`、`MQTT初始化`、`开启摄像头`、`图像分类开始使用摄像头推理`、`如果最高置信度0.8`、`MQTT发送消息至Topic_0`。

解释MQTT参数:服务器地址填电脑IP,Topic_0填`yiqi`。

image.png

图九 搜索和添加扩展

步骤3:SIoT服务器配置image.png

图十 实时模式下编程

image.png

图十一 设置MQTT参数

(六)掌控板端编程 (Mind+ 上传模式)

步骤1:打开上传模式

image.png

图十二 打开上传模式

步骤2 :添加扩展和编程

image.png

图十三 搜索和添加扩展

步骤3:WiFi和MQTT参数设置

image.png

图十四 配置WiFi和MQTT参数

步骤4:连接掌控板和上传代码

image.png

图十五 积木编程编译后修改代码改成手动编程

(七)项目运行

按照“项目演示”视频中的步骤,先启动SIoT,再运行电脑端程序,掌控板可以无线接收信息。

image.png

图十六 点击绿旗项目运行

image.png

图十七 项目运行成功

整个项目完成。

四、项目总结

(一) 项目亮点:

1. 跨学科融合:将人工智能(图像分类)、物联网(MQTT)和开源硬件(掌控板)有机融合,是典型的STEAM教育案例。

2. 解决实际问题:为化学仪器启蒙学习提供了新颖、直观的交互方式。

3. 技术闭环完整:从输入(视觉)到处理(AI)再到输出(显示/声音),形成了完整的技术闭环。

4. 成本低廉,易于推广:使用常见硬件和免费软件,便于在学校或家庭中复现。

(二)待改进之处与展望:

当前识别依赖电脑摄像头,未来可以尝试将AI模型部署到更高性能的硬件上,实现完全脱离电脑的便携式设备。

可以增加语音播报功能,让“助教”更加生动。

可以建立云端数据库,记录学生的识别正确率,形成学习报告。

代码
#include <MPython.h>
#include <WiFi.h>
#include <PubSubClient.h>

// WiFi配置
const char* ssid = "209-2.4G";
const char* password = "shiyanshi209";

// MQTT配置(请将IP改成你电脑的实际IP)
const char* mqtt_server = "192.168.1.100";
const char* mqtt_topic = "yiqi";
const char* mqtt_user = "siot";
const char* mqtt_pwd = "dfrobot";

const int buzzerPin = P0;
WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
    mPython.begin();
    pinMode(buzzerPin, OUTPUT);
    digitalWrite(buzzerPin, LOW);
    
    display.fillScreen(0);
    display.setCursorLine(1);
    display.printLine("MQTT接收测试");
    
    // 连接WiFi
    display.setCursorLine(2);
    display.printLine("连接WiFi...");
    WiFi.begin(ssid, password);
    
    int attempts = 0;
    while (WiFi.status() != WL_CONNECTED && attempts < 30) {
        delay(500);
        attempts++;
        display.setCursorLine(2);
        display.printLine(String("WiFi ") + attempts);
    }
    
    if (WiFi.status() == WL_CONNECTED) {
        display.setCursorLine(3);
        display.printLine("WiFi已连接");
        display.setCursorLine(4);
        display.printLine(WiFi.localIP().toString());
    } else {
        display.setCursorLine(3);
        display.printLine("WiFi失败");
        return;
    }
    
    // 连接MQTT
    client.setServer(mqtt_server, 1883);
    client.setCallback(callback);
    
    display.setCursorLine(4);
    display.printLine("MQTT连接中...");
    
    if (client.connect("mpython_test", mqtt_user, mqtt_pwd)) {
        client.subscribe(mqtt_topic);
        display.setCursorLine(4);
        display.printLine("等待消息");
    } else {
        display.setCursorLine(4);
        display.printLine("MQTT失败");
    }
}

void callback(char* topic, byte* payload, unsigned int length) {
    String message = "";
    for (int i = 0; i < length; i++) {
        message += (char)payload[i];
    }
    
    // 显示收到的消息
    display.setCursorLine(4);
    display.printLine(String("收到:") + message);
    
    // 蜂鸣器响一下
    digitalWrite(buzzerPin, HIGH);
    delay(200);
    digitalWrite(buzzerPin, LOW);
    
    // 2秒后恢复
    delay(2000);
    display.setCursorLine(4);
    display.printLine("等待消息");
}

void loop() {
    if (!client.connected()) {
        display.setCursorLine(4);
        display.printLine("重连中...");
        if (client.connect("mpython_test", mqtt_user, mqtt_pwd)) {
            client.subscribe(mqtt_topic);
            display.setCursorLine(4);
            display.printLine("等待消息");
        }
        delay(5000);
    }
    client.loop();
    delay(100);
}

评论

user-avatar