移动式面粉发酵监测容器的设计
摘要:本文介绍了移动式面粉发酵监测容器的设计,包括系统总体架构设计(硬件系统模块如传感器阵列、核心控制单元、机械结构设计,软件系统架构如数据传输层、可视化交互层)、设计过程(外观设计图、硬件清单、硬件连接等)、实验测试及创新点与拓展方向(跨学科融合创新、低成本可扩展设计),该系统解决了传统实验的痛点,提升了学生科学探究素养与数据分析能力,未来将开发 AI 预测模型。
关键词:移动式面粉发酵监测容器、物联网技术、传感器技术、中学生物教学、跨学科融合
设计背景:
面粉发酵在中学生物教学中是探究微生物代谢(如酵母菌呼吸作用)的核心实验。然而,传统实验存在着三大明显痛点:其一,数据采集较为粗放,仅仅依赖肉眼观察体积膨胀以及嗅觉判断酒精生成,缺乏对温度、湿度以及气体浓度等重要参数的量化监测,如[7][10]所提及;其二,条件控制难度较大,自然环境中的温湿度波动较为剧烈,难以实现对发酵条件的精准调控,这在[4][8]中有所体现;其三,实验过程具有不可逆性,手动记录数据容易遗漏关键节点,无法回溯发酵的动态过程,[9]对此进行了强调。基于《义务教育生物学课程标准》对科学探究能力的要求,本研究结合物联网技术与传感器技术,开发出了一款具备可移动性、多参数联测功能以及支持云端数据分析的教学设备。
一、系统总体架构设计
(一)硬件系统模块
- 传感器阵列
环境参数层:采用 SHT31 温湿度传感器,其湿度测量范围为 0 – 100%RH,温度测量范围是 -40 – 125℃,工作电压范围较宽,为 2.15V 至 5.5V,具备 IP67 的 PTFE 膜,但在一般情况下不能防止挥发性化学物质的污染。使用前需切换开关 I2C 地址位置,程序默认初始化地址为 0x45。
代谢产物层:ENS160 空气质量传感器专为室内空气质量检测而设计,能够直接输出多种 IAQ(TVOC、eCO2、AQI)数据,预热时间小于三分钟;MQ – 3 半导体酒精传感器需要 30 秒预热校准,[4]中有所提及;DFRobot V2 可插拔 pH 电极配备了自动清洗机构,可有效防止面团粘附,[9]对此进行了说明。
- 核心控制单元
行空板主控板 CPU 为国产 4 核 1.2GHz,512MB DDR3 内存和 16GB eMMC 硬盘。
内置 Debian 操作系统,支持 2.4G Wi-Fi 。
板载多种元件,如实体按键(包括 Home 按键、A/B 按键)、2.8 寸 240*320 TFT 彩屏、麦克风传感器、光线传感器、加速度传感器以及蜂鸣器。
具备丰富的接口,包括 USB Type – C *1、USB TYPE – A *1、microSD 卡接口 *1、3Pin I/O *4(其中支持 3 路 PWM 和 2 路 ADC)、4Pin I2C *2。
供电方式为 Type – C 5V 供电,工作电压为 3.3V,最大工作电流为 2000mA。
- 结构设计
采用透明亚克力观察窗,10*10*15cm,厚度为 5mm;3D打印检测盒盖;
(二)软件系统架构
- 数据传输层
采用 MQTT 协议上传 JSON 格式数据包至 SIOT 开源虚拟服务器。
具备本地存储模式,通过映射端口可实现远程控制。
- 可视化交互层
提供动态折线图,支持多参数叠加对比分析,例如 CO₂深度、酒精深度与 pH 值的相关性,[10]对此进行了说明。
配备本地 TFT 触控屏,可实时显示关键参数,通过二维码手机扫码登录即可读取数据,并且能够设置采样节点,每 5 秒进行一次采样,[7]对此有所提及。
二、设计过程
6、外观设计图
7、硬件清单:
序号 | 名称 | 型号 | 接口 | 数量 | 单价 | 功能说明 | 单位 |
1 | 行空板 | 1 | 399 | ||||
2 | SCI 采集模块 | 1 | 269 | ||||
3 | 数字温湿度传感器 | SHT31 | IIC | 1 | 69 | Temp_Air–环境温度 | ℃ |
Humi_Air–环境湿度 | %RH | ||||||
4 | 空气质量传感器 | ENS160 | IIC | 1 | 129 | TVOC—总挥发性有机化合物 | ppb |
ECO2—-CO2浓度 | ppm | ||||||
AQI—-空气质量指数 | 等级 | ||||||
5 | PH计 | V2 | 249 | PH_Water–PH值 | |||
6 | MQ3 | ALcohol—模拟酒精传感器 | |||||
7 | 摄像头 | FIT0892 | 85 | 百万级720PUSB广角摄像头(140°) |
8、硬件连接
9、液晶屏界面显示
SIOT V1版本可直接扫描二维码,登录10.1.2.3:8080,查看数据及拆线图;
SIOT V2版本可在电脑端,打开可视化程序,查看数据及拆线图;
10、图形化编程设计解析
1)摄像头初始化
- 界面设计
- 采集模块初始化
- pinpong库初始化
- MQTT库初始化
- 线程启动
- MQTT数据发送
11、源代码(Python)
# -*- coding: UTF-8 -*-
# MindPlus
# Python
import cv2
import time
import siot
import datetime
from unihiker import GUI
from pinpong.board import Board
from pinpong.board import Board,Pin
from pinpong.extension.unihiker import *
import base64
from io import BytesIO
from PIL import Image
import sys
sys.path.append(“/root/mindplus/.lib/thirdExtension/liliang-gravitysci-thirdex”)
from dfrobot_rp2040_sci import *
# 自定义函数
def MQTT():
siot.getsubscribe(topic=”siot/PH”)
siot.getsubscribe(topic=”siot/ALcohol”)
siot.getsubscribe(topic=”siot/CO2″)
siot.getsubscribe(topic=”siot/Temp”)
siot.getsubscribe(topic=”siot/Humi”)
siot.getsubscribe(topic=”siot/CO2ALC”)
siot.getsubscribe(topic=”siot/TempHUMI”)
siot.getsubscribe(topic=”siot/摄像头”)
def mqtt_msg():
SuanJianDu = SCI1.get_value1(SCI1.ePort1,”PH_Water”)
JiuJing = p_p22_analog.read_analog()
co2 = SCI1.get_value1(SCI1.ePort2,”ECO2″)
WenDu = SCI1.get_value1(SCI1.ePort3,”Temp_Air”)
ShiDu = SCI1.get_value1(SCI1.ePort3,”Humi_Air”)
PH.config(text=(str(“P H: “) + str(SuanJianDu)))
ALcohol.config(text=(str(“酒精:”) + str(JiuJing)))
CO2.config(text=(str(“CO2: “) + str((str(co2) + str(” ppm”)))))
Temp.config(text=(str(“温度:”) + str((str(WenDu) + str(” ℃”)))))
Humi.config(text=(str(“湿度:”) + str((str(ShiDu) + str(” %RH”)))))
siot.publish_save(topic=”siot/PH”, data=SuanJianDu)
siot.publish_save(topic=”siot/Temp”, data=WenDu)
siot.publish_save(topic=”siot/Humi”, data=ShiDu)
siot.publish_save(topic=”siot/CO2″, data=co2)
siot.publish_save(topic=”siot/ALcohol”, data=JiuJing)
siot.publish_save(topic=”siot/CO2ALC”, data=(str(co2) + str((str(“,”) + str(JiuJing)))))
siot.publish_save(topic=”siot/TempHUMI”, data=(str(WenDu) + str((str(“,”) + str(ShiDu)))))
# 事件回调函数
def u_thread1_function():
while True:
RiQi = (str(datetime.datetime.now().year) + str((str(“-“) + str((str(datetime.datetime.now().month) + str((str(“-“) + str(datetime.datetime.now().day))))))))
ShiJian = time.strftime(“%H:%M:%S”)
Date.config(text=RiQi)
Time.config(text=ShiJian)
time.sleep(1)
u_gui=GUI()
Board().begin()
siot.init(client_id=”7601814701423288″,server=”10.1.2.3″,port=1883,user=”siot”,password=”dfrobot”)
siot.connect()
siot.loop()
p_p22_analog=Pin(Pin.P22, Pin.ANALOG)
def frame2base64(frame):
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(frame) #将每一帧转为Image
output_buffer = BytesIO() #创建一个BytesIO
img.save(output_buffer, format=’JPEG’) #写入output_buffer
byte_data = output_buffer.getvalue() #在内存中读取
base64_data = base64.b64encode(byte_data) #转为BASE64
return base64_data #转码成功 返回base64编码
def base642base64(frame):
data=str(‘data:image/png;base64,’)
base64data = str(frame2base64(frame))
framedata = base64data[2:(len(base64data)-1)]
base642base64_data = data + str(framedata)
return base642base64_data
vd = cv2.VideoCapture()
vd.open(-1)
while not (vd.isOpened()):
print(“摄像头初始化中……”)
print(“摄像头初始化完成”)
cc=u_gui.draw_text(text=”面粉发酵监测”,x=45,y=5,font_size=18, color=”#000000″)
Date=u_gui.draw_text(text=” “,x=25,y=35,font_size=14, color=”#000000″)
Time=u_gui.draw_text(text=” “,x=130,y=35,font_size=14, color=”#000000″)
PH=u_gui.draw_text(text=”PH:”,x=20,y=65,font_size=16, color=”#0000FF”)
ALcohol=u_gui.draw_text(text=”酒精:”,x=20,y=90,font_size=16, color=”#0000FF”)
CO2=u_gui.draw_text(text=”CO2:”,x=20,y=115,font_size=16, color=”#0000FF”)
Temp=u_gui.draw_text(text=”温度:”,x=20,y=140,font_size=16, color=”#000000″)
Humi=u_gui.draw_text(text=”温度:”,x=20,y=165,font_size=16, color=”#000000″)
login=u_gui.draw_qr_code(text=”http://10.1.2.3:8080″,x=80,y=190,w=80)
soumin=u_gui.draw_text(text=”观察折线图请登录SIOT”,x=25,y=265,font_size=13, color=”#0000FF”)
IP=u_gui.draw_text(text=”WIFI:PB915797 PSD:38960592″,x=15,y=285,font_size=10, color=”#0000FF”)
SCI1 = DFRobot_RP2040_SCI_IIC(addr=0x21)
while SCI1.begin() != 0:
print(“Initialization Sensor Universal Adapter Board failed.”)
time.sleep(1)
print(“Initialization Sensor Universal Adapter Board done.”)
MQTT()
print(“MQTT初始化完成”)
thread1=u_gui.start_thread(u_thread1_function)
while True:
if vd.grab():
ret, grab = vd.read()
siot.publish(topic=”siot/摄像头”, data=base642base64(grab))
else:
print(“没有下一帧”)
mqtt_msg()
time.sleep(1)
12、实验测试
1)实验前数据
时间:2025年2月12日 09:49
PH:14.47(无效) 酒精:250 CO2:873ppm 温度:17.06摄氏度 湿度:72.47%RH
2)实验监控数据
实验:160克面粉加100克温水、3克酵母、5克糖,根据实际情况等比例调整。
- 实验10分钟数据
- 实验20分钟数据
- 实验60分钟数据
6)3小时的曲线图
类别 时间 | 09:49 | 09:59 | 10:50 | 11:23 | 11.51 | 12:33 | 12:59 | 13:00 |
ALC | 250 | 295 | 391 | 424 | 619 | 595 | 601 | 593 |
CO2(ppm) | 873 | 1337 | 1815 | 1944 | 2095 | 2287 | 2322 | 2333 |
TEMP(°C) | 17.06 | 19.07 | 20.77 | 20.95 | 20.94 | 21.01 | 20.94 | 20.92 |
HUMI(%rh) | 72.47 | 86.30 | 81.95 | 81.14 | 83.03 | 86.62 | 88.49 | 88.48 |
PH | 14.47 | 14.31 | 14.29 | 14.44 | 14.31 | 14.38 | 14.41 | 14.48 |
三、创新点与拓展方向
13、跨学科融合创新
- 整合了生物学(微生物代谢)、物理学(传感器原理)、信息技术(物联网协议)三大学科知识点,[11]对此进行了阐述。
14、低成本可扩展设计
- 提供 3D 打印模型文件(采用 PLA 材料),支持学校自主加工容器外壳,[8]对此进行了说明。
- 预留了 I²C 接口,可扩展称重模块,用于监测面团质量损失率,[5]对此进行了介绍。
结论:
本研究成功构建了一套符合中学生认知水平的发酵监测系统,有效地解决了传统实验中数据采集碎片化以及过程不可视化的问题。通过引入物联网技术,将抽象的生物化学反应过程转化为具象的数据流,显著提升了学生的科学探究素养与数据分析能力。未来,将进一步开发 AI 预测模型,实现发酵终点的自动判断,[9]对此进行了展望。
参考文献(根据GB/T 7714-2015标准示例):
- 中华人民共和国教育部. 义务教育生物学课程标准[S]. 北京: 北京师范大学出版社, 2022:45-48.
- 李志刚, 王雪. 基于物联网的生物学实验教学系统设计[J]. 中国教育技术装备, 2023(15):112-115. DOI:10.3969/j.issn.1671-489X.2023.15.032
- 陈立伟, 张慧敏. 传感器技术在STEAM教育中的应用研究[M]. 上海: 上海科技教育出版社, 2021:78-82.
- 黄振国 等. 温湿度波动对酵母发酵影响的量化研究[J]. 食品科学技术学报, 2020,38(6):23-28. DOI:10.3969/j.issn.2095-6002.2020.06.004
- 吴启明. 3D打印技术在教育装备开发中的应用[J]. 现代教育技术, 2022,32(S1):135-138.
- DFRobot公司. Gravity: 可插拔PH计V2用户手册[EB/OL]. (2023-05-12)[2024-03-01]. https://wiki.dfrobot.com.cn/_SKU_SEN0465_Gravity__Analog_pH_Sensor_Meter_Pro_Kit_V2
- 周海涛 等. 基于行空板的创客教育实践研究[J]. 中小学信息技术教育, 2023(9):67-70.
- Adafruit Industries. SHT31-D温湿度传感器技术白皮书[R]. 美国: Adafruit公司, 2021:8-15.
- 福建省电化教育馆. 中小学创客教育课程开发指南[Z]. 福州: 闽教发〔2023〕12号, 2023.
- 肖建华, 林文斌. 基于MQTT协议的实验数据可视化系统构建[J]. 实验室研究与探索, 2021,40(7):89-93. DOI:10.3969/j.issn.1006-7167.2021.07.019
作者:邬肖英,男,1969-,福建省宁德市第五中学,高级教师,研究方向:创客教育;
地址:福建省宁德市东侨区梦龙路1号 邮编:352100
电话:18059309913
(基金项目:本文系福建省电化教育馆2024年度教育信息技术研究立项课题“中小学创客教育课程开发与应用研究”(立项号:KT24063)的研究成果之一。)