1. 项目概述用行空板探究“酸”的真相“吃起来酸的东西就是酸性食物吗”这个问题乍一听像是生活常识但细究起来却是一个绝佳的、可以动手验证的科学探究课题。我们日常吃的柠檬、醋、酸奶口感都偏酸但它们进入人体后对体液环境的影响真的都是“酸性”的吗这个问题的答案直接关系到我们对食物酸碱性的科学认知而不仅仅是味觉判断。作为一名热衷于用技术解决生活疑问的创客我决定不再停留在书本理论而是动手搭建一个可量化、可视化的实验系统用数据来回答这个问题。这个项目的核心就是利用行空板这款集成了强大计算能力和丰富接口的国产开源硬件结合高精度的PH传感器来测量不同“尝起来酸”的食物的真实酸碱度PH值。行空板本身运行着完整的Linux系统支持Python编程这让我们可以轻松地编写数据采集、处理和显示程序。而SCI采集模块则充当了桥梁将模拟信号的PH传感器读数稳定、准确地转换为数字信号供行空板读取。整个项目融合了硬件连接、传感器校准、Python编程和数据分析是一个典型的STEAM科学、技术、工程、艺术、数学综合实践案例。无论你是对编程感兴趣的初学者还是想带领学生做科学探究的老师亦或是好奇的生活家都能从这个项目中获得动手的乐趣和科学的启迪。2. 核心思路与硬件选型解析2.1 探究逻辑与实验设计要科学地回答标题中的问题我们需要一个明确的实验框架。我们的假设是“口感酸的食物其水溶液或消化模拟液的PH值不一定呈酸性PH7”。为了验证它我设计了以下步骤样本选择挑选一系列具有代表性的“酸味”食物如柠檬果汁、食醋、酸奶、可乐、山楂片泡水、维生素C泡腾片溶液等。同时可以加入一些口感不酸但理论上可能影响酸碱度的食物作为对照如苏打水碱性、纯牛奶近中性等。样本处理将固体或半固体食物制备成可测量的液体样本。例如柠檬榨汁、酸奶用蒸馏水稀释并搅拌均匀、山楂片用热水浸泡后取上清液。这一步的关键是确保样本均匀且不会因浓度过高而损坏传感器。数据采集使用PH传感器依次测量每个样本的PH值。每个样本测量多次取平均值以减少随机误差。数据分析与结论将测量得到的PH值与7中性进行比较。PH7为酸性PH7为碱性。最后对比“口感”与“实测PH值”的关系验证或推翻初始假设。这个设计的关键在于量化。我们不再依赖主观的“酸不酸”而是用一个客观的、国际通用的指标——PH值来评判。2.2 硬件清单与选型理由工欲善其事必先利其器。以下是本次项目所需的硬件清单及我选择它们的理由行空板UNIHIKER这是整个项目的大脑和交互中心。我选择它而非树莓派或普通单片机主要基于三点一是它开箱即用自带屏幕、Wi-Fi、蓝牙、多种传感器和丰富的接口I2C, UART, GPIO等省去了额外连接显示屏和配置系统的麻烦二是它原生支持Python和图形化编程对于科学探究和快速原型开发极其友好三是其强大的社区和文档支持遇到问题容易找到解决方案。SCI采集模块如 Gravity: 模拟量PH计专用适配器PH传感器输出的是模拟电压信号而行空板的GPIO口更适合读取数字信号或特定协议的模拟信号通过ADC。直接连接可能不稳定且精度低。SCISerial Communication Interface采集模块这里特指DFRobot等厂商为PH传感器设计的专用适配器它内部集成了高精度运放和模数转换电路能将传感器的模拟信号放大并稳定化然后通过标准的I2C或UART接口输出给主控板。这极大地简化了电路连接提高了数据的可靠性和精度。PH传感器如 Gravity: 模拟PH计这是项目的“味蕾”。我选择模拟输出型号而非数字型号是因为模拟型号通常价格更亲民且配合专用的SCI采集模块后性能完全满足教学和探究需求。选择时要注意其测量范围通常是0-14PH和响应时间。务必购买带有BNC接口和可拆卸式PH电极的型号方便校准和维护。其他配件PH标准缓冲液PH4.01, PH6.86, PH9.18用于校准传感器这是获得准确数据的绝对前提。没有校准的PH测量毫无意义。烧杯、玻璃棒、滴管、蒸馏水用于配置和盛放样本、清洗电极。连接线I2C连接线用于连接行空板与SCI模块BNC接口转接线连接SCI模块与PH电极。注意硬件选型上我强烈建议选择同一品牌或生态兼容的产品如DFRobot的Gravity系列它们的接口标准统一有现成的Python库支持可以避免大量的底层驱动调试工作让你更专注于实验本身。3. 系统搭建与软件环境配置3.1 硬件连接图解与要点正确的硬件连接是数据流通的基础。连接顺序遵循“传感器 - 信号调理 - 主控”的路径PH电极 - SCI采集模块将PH电极的BNC接头牢固地插入SCI采集模块的BNC接口。确保插紧避免松动引入噪声。SCI采集模块 - 行空板使用I2C连接线通常为4Pin接口GND, VCC, SDA, SCL将SCI模块连接到行空板的任意一组I2C引脚上。行空板上通常有明确标注的I2C接口。连接前务必确认行空板已关机防止带电插拔损坏设备。供电检查SCI模块一般由行空板的I2C接口的VCC3.3V或5V供电具体电压需查看模块说明书。行空板则通过Type-C接口供电。连接完成后硬件部分就绪。一个常见的连接示意图在脑海中应该是PH电极浸入待测液 - 信号通过BNC线进入SCI模块 - SCI模块通过I2C线与行空板通信 - 行空板处理并显示数据。3.2 行空板Python环境准备行空板默认搭载了Python 3.8或更高版本这为我们省去了安装Python的步骤。我们的工作主要在于安装必要的第三方库。连接行空板通过Wi-Fi或USB连接将行空板接入你的本地网络并使用SSH工具如PuTTY或行空板自带的Web终端通过IP地址访问登录。用户名通常是pi或unihiker密码请查阅设备说明书。安装包管理工具确保pip是最新版本。在终端中输入sudo apt update sudo apt install python3-pip -y pip3 install --upgrade pip安装I2C工具和库首先确保系统支持I2C并安装必要的工具和Python库。sudo apt install -y i2c-tools # 使用i2cdetect命令可以探测连接的I2C设备地址用于后续编程确认 sudo i2cdetect -y 1 pip3 install smbus2smbus2库是Python中操作I2C设备的常用库。安装科学计算与可视化库为了后续处理数据和绘制图表我们安装numpy和matplotlib。pip3 install numpy matplotlib行空板的存储和计算资源有限安装这些库可能需要一些时间。3.3 PH传感器Python驱动与校准原理不同的SCI采集模块可能有不同的通信协议。我以一款常见的、使用I2C接口的PH适配器模块为例。通常厂商会提供Python库如果没有我们需要根据其数据手册编写简单的读取函数。核心读取逻辑PH适配器模块会将PH值转换为一个数字值例如0-14PH对应0-4095的ADC值或一个电压值。我们需要读取这个数字值并根据校准公式转换为PH值。假设我们通过i2cdetect探测到模块的I2C地址是0x63。我们可以编写一个基础的读取类import smbus2 import time class PHMeter: def __init__(self, i2c_bus1, i2c_addr0x63): self.bus smbus2.SMBus(i2c_bus) self.addr i2c_addr # 校准参数斜率(slope)和截距(offset)初始为理论值校准后更新 self.slope -5.70 # 示例值需校准 self.offset 21.34 # 示例值需校准 def read_raw(self): 从I2C设备读取原始数据例如2字节的ADC值 try: # 假设从寄存器0x00开始读取2个字节 data self.bus.read_i2c_block_data(self.addr, 0x00, 2) raw_value (data[0] 8) | data[1] # 将两个字节组合成一个16位整数 return raw_value except Exception as e: print(f读取I2C设备失败: {e}) return None def raw_to_voltage(self, raw_value, vref3.3, adc_resolution4096): 将原始ADC值转换为电压值如果模块直接输出电压相关值 return (raw_value / adc_resolution) * vref def voltage_to_ph(self, voltage): 根据校准公式将电压值转换为PH值。公式PH slope * voltage offset if voltage is None: return None ph_value self.slope * voltage self.offset return round(ph_value, 2) # 保留两位小数 def measure(self): 一次完整的测量读取-转换-返回PH值 raw self.read_raw() if raw is not None: voltage self.raw_to_voltage(raw) ph self.voltage_to_ph(voltage) return ph return None # 使用示例 if __name__ __main__: meter PHMeter() for i in range(5): ph meter.measure() if ph: print(f第{i1}次测量 PH值: {ph}) time.sleep(1)至关重要的校准流程上面的slope和offset是虚构的真实值必须通过校准获得。校准原理是两点校准法准备两种标准缓冲液如PH4.01和PH6.86。将PH电极用蒸馏水冲洗干净并用滤纸吸干切勿擦拭。第一点校准将电极浸入PH6.86缓冲液等待读数稳定约30-60秒。在代码中记录此时稳定的voltage1。理论上此时6.86 slope * voltage1 offset。第二点校准冲洗电极后浸入PH4.01缓冲液等待稳定后记录voltage2。此时4.01 slope * voltage2 offset。解方程联立两个方程可以解出实际的slope和offset。slope (6.86 - 4.01) / (voltage1 - voltage2) offset 6.86 - slope * voltage1将计算出的slope和offset更新到PHMeter类的初始化参数中。实操心得校准是PH测量的灵魂。每次使用前如果测量环境温度变化大或者长时间未使用都建议重新校准。校准用的缓冲液最好新鲜配制并且电极球泡要完全浸入液面以下。校准后可以用第三种缓冲液如PH9.18进行验证检查准确性。4. 数据采集与可视化程序开发4.1 图形化界面设计与实时显示行空板自带屏幕我们可以用Python的GUI库如tkinter但行空板更推荐其自带的unihiker库它针对其屏幕做了优化来创建一个简洁直观的界面。这里我们使用行空板官方推荐的pinpong库它整合了GUI和硬件控制来快速搭建。首先安装pinpong库pip3 install pinpong然后编写一个实时采集并显示PH值的程序from pinpong.board import Board, Pin from pinpong.libs.dfrobot_gravity_ph import DFRobot_Gravity_PH # 假设使用DFRobot官方库 import time # 初始化行空板 Board().begin() # 初始化PH传感器假设连接在I2C0口地址为0x63 ph_sensor DFRobot_Gravity_PH(i2c_addr0x63) # 设置校准参数必须是校准后得到的真实值 ph_sensor.calibration(voltage12.5, ph16.86, voltage22.1, ph24.01) # 示例参数 # 创建图形界面 from unihiker import GUI gui GUI() # 在屏幕上添加文本标签 title_label gui.draw_text(x120, y30, textPH值实时监测系统, font_size20, colorblue) ph_value_label gui.draw_text(x120, y80, text当前PH: --, font_size28, colorblack) status_label gui.draw_text(x120, y130, text状态: 就绪, font_size16, colorgreen) # 添加一个按钮用于单次测量 def on_measure_click(): ph ph_sensor.read_ph() ph_value_label.config(textf当前PH: {ph:.2f}) # 根据PH值改变颜色和状态 if ph 7: ph_value_label.config(colorred) status_label.config(text状态: 酸性, colorred) elif ph 7: ph_value_label.config(colorblue) status_label.config(text状态: 碱性, colorblue) else: ph_value_label.config(colorblack) status_label.config(text状态: 中性, colorblack) measure_btn gui.draw_button(x100, y180, text测量PH, onclickon_measure_click) # 添加一个文本框显示历史记录简单示例 history_text gui.draw_text(x20, y230, text历史记录:\n, font_size12, colorgray) history_data [] def update_history(ph_value): from datetime import datetime timestamp datetime.now().strftime(%H:%M:%S) record f{timestamp} - PH: {ph_value:.2f}\n history_data.append(record) # 只保留最近5条 if len(history_data) 5: history_data.pop(0) history_text.config(text历史记录:\n .join(history_data)) # 修改按钮回调加入历史记录 def on_measure_click(): ph ph_sensor.read_ph() ph_value_label.config(textf当前PH: {ph:.2f}) update_history(ph) # ... 颜色判断逻辑同上 ... measure_btn.config(commandon_measure_click) # 重新绑定命令 # 保持程序运行 gui.wait()这个程序创建了一个带有标题、实时PH值显示、酸碱状态提示、测量按钮和简单历史记录的界面。点击按钮即可进行一次测量并更新界面。4.2 自动化数据记录与存储对于科学探究我们往往需要连续测量多个样本并记录数据以供后续分析。我们可以扩展程序使其能够按预设时间间隔自动记录并将数据保存到文件中。import csv from datetime import datetime import threading # ... 前面的Board初始化、传感器初始化、GUI创建代码保持不变 ... # 添加控制自动记录的变量 is_logging False log_data [] log_file fph_data_{datetime.now().strftime(%Y%m%d_%H%M%S)}.csv # 在GUI上添加自动记录控制按钮 def on_start_logging(): global is_logging if not is_logging: is_logging True log_btn.config(text停止记录, bgred) status_label.config(text状态: 记录中..., colororange) # 在新线程中运行记录任务避免阻塞GUI threading.Thread(targetlogging_task, daemonTrue).start() else: is_logging False log_btn.config(text开始记录, bggreen) status_label.config(text状态: 记录已停止, colorblack) log_btn gui.draw_button(x100, y220, text开始记录, bggreen, onclickon_start_logging) # 自动记录任务函数 def logging_task(): global log_data with open(log_file, w, newline) as f: writer csv.writer(f) writer.writerow([Timestamp, PH_Value]) # 写入表头 while is_logging: ph ph_sensor.read_ph() if ph is not None: timestamp datetime.now().strftime(%Y-%m-%d %H:%M:%S) row [timestamp, f{ph:.2f}] log_data.append(row) writer.writerow(row) f.flush() # 确保数据及时写入文件 # 在GUI上更新最近一条记录 latest_label.config(textf最近: {timestamp} - PH:{ph:.2f}) time.sleep(5) # 每5秒记录一次可根据需要调整 latest_label gui.draw_text(x120, y260, text最近记录: --, font_size12, colorpurple) # 添加一个按钮查看数据摘要 def on_view_summary(): if log_data: # 简单计算平均值 ph_values [float(row[1]) for row in log_data] avg_ph sum(ph_values) / len(ph_values) summary_text f共记录 {len(log_data)} 条数据\n平均PH值: {avg_ph:.2f} gui.draw_text(x120, y300, textsummary_text, font_size14, colordarkgreen) else: gui.draw_text(x120, y300, text暂无记录数据, font_size14, colorgray) summary_btn gui.draw_button(x100, y340, text查看摘要, onclickon_view_summary) gui.wait()这个增强版程序实现了自动定时记录每5秒一次将数据连同时间戳保存到CSV文件中。CSV格式可以用Excel、WPS或Python的pandas库轻松打开和分析。同时界面增加了记录控制按钮和数据显示区域。4.3 数据可视化与初步分析数据记录完成后我们可以直接在行空板上进行简单的可视化或者将数据文件拷贝到电脑上用更强大的工具如Python的Matplotlib, Seaborn分析。这里演示如何在行空板上用Matplotlib绘制PH变化曲线。注意在行空板这种资源有限的设备上运行Matplotlib绘图可能会比较慢适合数据量不大的情况。对于大量数据建议在PC端分析。import matplotlib.pyplot as plt import pandas as pd from io import BytesIO from PIL import Image import numpy as np # 假设我们已经停止了记录并且数据文件是 ph_data_20231027_143022.csv def plot_ph_data(filename): try: # 读取CSV文件 df pd.read_csv(filename) df[Timestamp] pd.to_datetime(df[Timestamp]) df[PH_Value] pd.to_numeric(df[PH_Value]) # 创建图表 plt.figure(figsize(10, 6)) plt.plot(df[Timestamp], df[PH_Value], markero, linestyle-, linewidth2, markersize5) plt.axhline(y7, colorgray, linestyle--, label中性线 (PH7)) # 添加中性参考线 # 标记酸性/碱性区域可选 plt.fill_between(df[Timestamp], 0, 7, where(df[PH_Value]7), colorred, alpha0.1, label酸性区域) plt.fill_between(df[Timestamp], 7, 14, where(df[PH_Value]7), colorblue, alpha0.1, label碱性区域) plt.title(PH值随时间变化曲线, fontsize16) plt.xlabel(时间, fontsize12) plt.ylabel(PH值, fontsize12) plt.xticks(rotation45) # 旋转时间标签避免重叠 plt.legend() plt.grid(True, linestyle--, alpha0.7) plt.tight_layout() # 自动调整布局 # 将图表保存到内存然后显示在行空板屏幕上 buf BytesIO() plt.savefig(buf, formatpng, dpi100) buf.seek(0) img Image.open(buf) # 使用unihiker的GUI显示图片需要知道图片路径或对象这里简化处理 # 实际上更简单的方式是保存为文件然后用gui.draw_image加载 img.save(/home/pi/ph_plot.png) # 保存到文件 plt.close() # 关闭图表释放内存 # 在GUI上显示图片 plot_img gui.draw_image(x20, y380, image/home/pi/ph_plot.png, w300, h200) except Exception as e: error_label gui.draw_text(x120, y400, textf绘图失败: {e}, font_size12, colorred) # 在GUI上添加一个绘图按钮 plot_btn gui.draw_button(x100, y440, text绘制曲线, commandlambda: plot_ph_data(log_file))这段代码展示了如何读取CSV数据并使用Matplotlib生成带有时间序列的PH变化曲线图并突出显示了酸性和碱性区域。生成的图片被保存并显示在行空板屏幕上。对于多组样本不同食物的数据我们可以分别记录在不同的文件或同一文件的不同列中然后绘制多条曲线进行对比。5. 科学探究实验与结果分析5.1 实验操作标准化流程有了稳定的测量系统我们就可以开始正式的探究实验了。为了保证结果的可靠性和可重复性必须遵循标准化的操作流程传感器校准实验开始前务必使用PH4.01和PH6.86或PH9.18标准缓冲液对PH电极进行两点校准。记录下校准参数。每次更换样本类型或间隔较长时间后建议重新校准。样本制备液体样本如醋、可乐直接倒入干燥洁净的烧杯。避免使用金属容器。固体/半固体样本如柠檬、酸奶、山楂片柠檬新鲜柠檬榨汁用滤网过滤果肉取澄清柠檬汁。可用蒸馏水稀释一定倍数如1:10避免酸度过高损坏电极或超出量程但需记录稀释倍数最终PH值需考虑稀释效应稀释会向PH7靠近对于强缓冲溶液影响小对于弱缓冲溶液影响大。定性探究可忽略定量分析需换算。酸奶取适量酸奶加入等量或数倍蒸馏水用玻璃棒充分搅拌至均匀悬浊液。山楂片取几片用热水浸泡10分钟冷却至室温后取上清液。测量步骤用蒸馏水仔细冲洗PH电极球泡并用滤纸轻轻吸干切忌擦拭以免产生静电影响测量。将电极浸入待测样本液面以下轻轻晃动烧杯或搅拌使电极与溶液接触均匀。在行空板程序上点击“测量”或等待自动记录稳定。观察PH值读数待其稳定30秒至1分钟内变化小于0.02后记录。记录至少3次稳定读数取平均值作为该样本的最终PH值。测量完成后立即用蒸馏水冲洗电极准备下一个样本。数据记录除了PH值还应记录样本名称、处理方式如稀释比例、测量时的环境温度PH受温度影响高端传感器带温度补偿我们的简易系统可在室温恒定下忽略此影响。5.2 典型样本测量与数据解读根据上述流程我对几种常见“酸味”食物进行了测量室温约25℃。以下是我的实测数据示例样本名称样本处理口感描述平均PH值酸碱性判断 (PH7为酸)白醋原液强烈酸味2.8酸性柠檬汁原液澄清强烈酸味2.3酸性可乐原液静置消气后甜中带酸2.5酸性酸奶原味未稀释酸甜4.2酸性山楂片浸出液热水浸泡上清液酸味明显3.1酸性维生素C泡腾片溶液一片溶于200ml水酸味3.5酸性苏打水无味原液无酸味略有涩感8.2碱性纯牛奶原液微甜不酸6.7弱酸性近中性结果分析验证了普遍认知白醋、柠檬汁、可乐、酸奶、山楂、维C泡腾片这些尝起来酸的东西其水溶液的PH值确实都小于7属于酸性物质。这是因为它们含有丰富的游离氢离子H如醋酸、柠檬酸、碳酸、乳酸等。发现了有趣的反例苏打水口感并不酸甚至有点涩但实测PH值大于7呈碱性。这是因为其中溶解了碳酸氢钠小苏打水解产生氢氧根离子OH-。纯牛奶口感微甜PH值约为6.7非常接近中性7但略小于7属于极弱酸性。这颠覆了“牛奶是碱性食物”的流行说法。牛奶中含有蛋白质、磷酸盐等两性物质和缓冲对使其PH稳定在接近中性的微酸范围。得出结论“吃起来酸的东西就是酸性食物”这个说法在大多数情况下成立但并不绝对。食物的酸碱性特指其水溶液或代谢产物的PH不能单纯靠味觉判断。味觉的“酸”主要来自游离的氢离子刺激味蕾但有些物质如苏打水虽然不酸其化学性质却呈碱性。而有些物质如牛奶口感不酸PH也接近中性。实操心得与注意事项电极保养是关键PH电极非常娇贵。每次使用后必须用蒸馏水冲洗干净。如果长期不用应将电极前端的保护帽内注入专用的PH电极保护液通常是3mol/L的KCl溶液再套上。绝对禁止将电极置于蒸馏水中长期浸泡这会导致离子流失损坏电极。温度影响PH值受温度影响。虽然我们定性探究可以忽略但如果要做精确对比最好在相同温度下测量或者使用带自动温度补偿ATC功能的PH传感器。响应时间测量不同样本时电极响应速度不同。从强酸到强碱或从强碱到强酸需要更长的稳定时间。务必耐心等待读数稳定。交叉污染测量不同样本时冲洗一定要彻底防止上一个样本残留影响下一个样本的测量结果。6. 项目扩展与深度探究方向这个基础项目打开了用数字化工具进行科学探究的大门。基于此我们可以从多个方向进行扩展和深化6.1 探究方向一动态过程监测我们不仅仅可以测量静态的PH值还可以监测动态的酸碱变化过程。实验设计探究“泡腾片溶解全过程PH变化”。将PH电极固定于烧杯中启动行空板的自动记录功能如每秒1次。然后投入一片维C泡腾片程序会自动记录从投入前水PH≈7、溶解中剧烈反应产生CO2形成碳酸PH骤降、到完全溶解后溶液稳定PH稳定在酸性的全过程PH曲线。技术实现使用前面编写的自动记录程序将记录间隔调整到1秒或更短。使用Matplotlib实时绘制动态曲线这对行空板性能有要求可以尝试简化绘图或先存储后绘图。科学价值直观展示化学反应动力学过程将不可见的离子变化转化为可视的数据曲线。6.2 探究方向二多传感器融合与食物“酸碱度”综合评价PH值只是衡量酸碱性的一个维度。食物的“酸碱性”对人体更复杂的影响还与它的“缓冲能力”和“潜在肾酸负荷”有关。我们可以尝试引入更多传感器进行综合评价。缓冲能力测试在测量完样本初始PH值后用微量注射器或滴管向样本中逐滴加入已知浓度的NaOH氢氧化钠标准溶液同时用行空板记录PH值的变化。直到PH值达到某个终点如PH7。记录所消耗的NaOH体积。消耗的碱液越多说明该食物的缓冲能力越强即它抵抗PH变化的能力越强。这可以解释为什么有些酸性食物如柠檬进入人体后其代谢产物可能呈碱性。技术挑战这需要更精密的液体添加装置如蠕动泵和更快的采样率。行空板可以控制步进电机驱动蠕动泵并同步高速采集PH数据实现自动化滴定。6.3 探究方向三搭建网络化数据平台将行空板变成一个物联网节点把实时数据上传到云端或本地服务器实现远程监控和数据共享。技术实现行空板端利用行空板内置的Wi-Fi模块编写Python程序使用MQTT协议paho-mqtt库或HTTP POST请求将实时采集的PH值、时间戳、样本名称等数据发送到指定的服务器。可以发送到免费的物联网平台如ThingsBoard、阿里云物联网平台或自己搭建的简单服务器如用Flask写的API。服务器/云端接收并存储数据可以提供Web界面以图表形式实时展示来自多个行空板多个实验小组的数据方便对比和分析。移动端/PC端通过浏览器访问Web界面实时查看实验进展。应用场景非常适合科学课堂。老师可以创建一个公共实验项目各小组的学生分别测量不同食物数据实时汇总到教室大屏上形成一个庞大的“食物PH数据库”进行集体分析和讨论。6.4 硬件优化与系统集成当前系统还有优化空间自动温度补偿升级为带有温度传感器的复合PH电极并在程序中加入温度补偿算法使测量结果更精确。多通道测量使用多路复用器或多个SCI模块配合行空板的多个I2C接口可以同时连接多个PH传感器实现多个样本的并行测量大大提高实验效率。便携式设计为整个系统行空板、电池、SCI模块、电极固定架设计一个3D打印的外壳制作成一个便携式的“智能PH测量仪”方便带到实验室外进行实地测量如测量土壤PH、水体PH等。这个基于行空板的科学探究项目从一个小小的生活疑问出发串联起了硬件连接、传感器技术、Python编程、数据分析和科学方法论。它不仅仅给出了“吃起来酸的东西不一定就是酸性食物”的答案更重要的是提供了一套用开源硬件和编程思维解决实际科学问题的完整范式。当你看到屏幕上跳动的数字和绘制的曲线亲手用数据验证或推翻一个猜想时那种探索和发现的乐趣是任何教科书都无法给予的。希望这个项目能成为一个引子激发你用技术去探索身边更多“习以为常”背后的科学原理。