
1. 项目缘起从一块小板子到一堂生动的健康课几年前我第一次接触micro:bit这块小小的开发板时就被它的潜力所震撼。它不像传统的单片机开发那样需要复杂的电路知识和繁琐的编译环境搭建。对于高中生甚至初中生来说它更像是一个可以“即插即用”的创意工具箱。而“感知环境促健康”这个主题恰恰是连接物理世界与数字世界、激发学生探究兴趣的绝佳切入点。我们每天生活在环境中温度、光线、声音无时无刻不在影响着我们的舒适度与健康但如何量化这种影响如何让冷冰冰的数据变得可感知、可理解这正是信息技术课程从“工具学习”走向“素养培养”的关键一步。这个项目就是利用micro:bit及其生态引导学生动手搭建一个简易的环境感知系统核心是监测温度并基于数据给出简单的健康提示。它不追求工业级的精度而重在体验完整的“感知-处理-反馈”信息流程。项目中我们会用到主控板micro:bit、LM35这类模拟温度传感器以及一个非常实用的配件——I/O扩展板。通过BXY这款国产的图形化/代码混合编程工具学生可以快速上手将想法变为现实。整个过程就像在搭积木但搭出的是一个能与你对话的智能小装置。2. 核心器件选型为什么是它们在开始动手之前我们得先搞清楚手头的“积木”都是什么以及为什么选择它们。这对于理解整个系统的工作原理至关重要。2.1 主控大脑BBC micro:bitmicro:bit是一块由英国广播公司BBC主导设计的微型计算机专为教育而生。它的核心优势在于极低的上手门槛和丰富的内置资源。内置传感器板上直接集成了温度传感器、加速度计、磁力计和光线传感器。这意味着即使不连接任何外部设备它也能测量环境温度通过处理器温度间接估算和完成许多互动项目。但为了更专业、更精确地感知环境我们通常会使用外置传感器。可编程LED点阵5x5的LED阵列不仅能显示数字、简单图形还能作为直接的视觉反馈输出在我们的项目中可以用来显示温度数值或健康提示图标。GPIO引脚边缘的25个金色触点就是它的输入输出接口可以连接各种外部设备如传感器、舵机、LED灯等。但原生引脚较小直接连接杜邦线容易接触不良所以扩展板就成了好帮手。低功耗与无线支持蓝牙可以轻松实现设备间通信或与手机/电脑交互为项目扩展如数据无线传输到云端留下了空间。选择micro:bit作为核心是因为它完美契合教学场景免驱动、多语言支持、社区资源丰富、安全可靠。2.2 感知触角LM35温度传感器详解当我们需要更准确测量环境温度时LM35是一个经典的选择。与之常被一同提及的还有DS18B20这类数字传感器。这里我们详细对比一下理解为什么在本项目中LM35可能更合适。LM35模拟传感器工作原理LM35的输出电压与摄氏温度成线性正比关系其比例系数为10.0 mV/°C。这意味着在0°C时输出电压为0V。在25°C时输出电压为250mV0.25V。在100°C时输出电压为1000mV1.0V。 它无需外部校准在常温下精度可达±0.5°C。使用起来非常简单只需连接电源、地和信号线即可。DS18B20数字传感器特点它采用单总线协议将模拟信号在传感器内部就转换为数字信号通过一根数据线进行通信抗干扰能力更强传输距离更远且每个传感器有唯一ID可以在一根总线上挂载多个。为什么本项目优先考虑LM35原理直观对于高中生理解“电压随温度线性变化”这一模拟量概念比理解单总线数字通信协议要直观得多。这有助于建立物理量与电信号之间的直接联系。接线简单仅需三根线VCC, GND, Signal连接一目了然出错概率低。编程入门友好在BXY中读取LM35只需要一个“读取引脚模拟值”的积木然后通过一个简单的公式温度 模拟值 * 转换系数即可算出结果。这个过程清晰地展示了模拟信号采集和量化的全过程。成本与普及性LM35价格低廉非常容易获取。当然如果项目需要测量多个点的温度、或者环境干扰较大DS18B20是更优的选择。但就“感知环境促健康”的入门教学而言LM35的简洁和直观是无与伦比的。注意micro:bit的GPIO引脚读取模拟量的范围是0-3.3V对应的模拟值读数为0-1023。LM35在3.3V供电下理论最大测量温度为330°C远超日常范围完全够用。2.3 连接桥梁I/O扩展板的作用micro:bit的引脚焊盘很小直接用杜邦线连接不稳定且引脚功能如哪些支持模拟输入、哪些支持PWM需要查手册对新手不友好。I/O扩展板完美解决了这些问题物理扩展将micro:bit的引脚转换成标准的2.54mm间距排针或接线端子方便用杜邦线牢固连接。功能标识板上清晰地标注了每个引脚的功能如“P0”、“3.3V”、“GND”以及哪些是模拟输入口通常标有“Analog”或“A”。集成供电与保护很多扩展板自带稳压电路和电源接口可以为micro:bit和外接传感器提供更稳定、电流更大的电源并带有一定的防反接和过流保护功能。模块化接口一些扩展板设计了直接插接常见传感器模块如Gravity系列的接口进一步简化连接。在项目中我们将micro:bit插入扩展板然后将LM35的VCC、GND、Signal分别连接到扩展板的3.3V或5V取决于LM35型号和扩展板支持、GND和任何一个标有模拟输入功能的引脚如P0。2.4 开发环境BXY必趣编程的优势BXY是一款由国内团队开发的面向micro:bit等硬件的编程软件支持图形化编程类似MakeCode和Python代码编程并且两者可以无缝混合使用。对教育场景的优化界面简洁中文支持好库管理方便特别适合课堂教学。混合编程模式学生可以从图形化积木入门降低畏难情绪随着能力提升可以切换到代码视图查看图形化操作生成的Python代码甚至直接编写代码实现平滑过渡。丰富的硬件支持除了micro:bit还支持多种主流开源硬件并集成了大量常用传感器和执行器的驱动库对于LM35这样的常见元件通常都有现成的示例或积木。一键烧录连接micro:bit后点击下载即可将程序烧录到板子上过程非常流畅。3. 硬件连接与电路原理现在让我们把所有的硬件连接起来。这是将想法变为现实的第一步也是最容易出错的一步。3.1 连接步骤详解安装micro:bit到扩展板确保micro:bit的LED点阵面朝上边缘的金色引脚与扩展板的卡槽对齐轻轻按下直到micro:bit被扩展板的卡扣固定住。连接LM35传感器识别引脚LM35通常有三个引脚平面朝向自己从左至右VCC电源正极、OUT信号输出、GND电源负极。电源连接将LM35的VCC引脚通常为最左侧用杜邦线连接到扩展板的3.3V引脚。这里是一个关键点虽然LM35数据手册标称工作电压为4V-30V但在3.3V供电下完全可以正常工作在0-100°C范围。使用3.3V可以避免因电压不同带来的计算复杂度且与micro:bit逻辑电平匹配更安全。地线连接将LM35的GND引脚通常为最右侧连接到扩展板的任意一个GND引脚。信号连接将LM35的OUT引脚中间连接到扩展板的一个模拟输入引脚例如P0。在扩展板上P0、P1、P2、P3、P4、P10都支持模拟输入ADC。供电通过Micro-USB数据线将扩展板或micro:bit连接到电脑。电脑USB口将为整个系统供电。3.2 电路原理与安全注意事项这个简单的连接背后是模拟电路采集的基本原理。LM35作为一个恒流源型的温度传感器其输出是一个微弱的模拟电压信号。这个信号进入micro:bit的P0引脚。micro:bit内部有一个模数转换器ADC它会以一定的频率可以通过程序设置对这个引脚上的电压进行采样并将连续的电压值模拟量转换为一个离散的数字值数字量。micro:bit的ADC是10位精度的这意味着它会把0-3.3V的电压范围划分为2^101024个等级。所以读到的模拟值范围是0到1023。计算公式推导我们知道ADC参考电压Vref 3.3VADC分辨率MaxADCValue 1023LM35灵敏度Sensitivity 10 mV/°C 0.01 V/°C首先将读取到的模拟值analog_value转换为电压电压 (V) analog_value * (Vref / MaxADCValue) analog_value * (3.3 / 1023)然后根据LM35的特性计算温度温度 (°C) 电压 (V) / Sensitivity [analog_value * (3.3 / 1023)] / 0.01简化公式温度 (°C) analog_value * (3.3 / 1023) * 100 analog_value * (330 / 1023) ≈ analog_value * 0.3225在实际编程中我们直接使用这个简化公式即可。安全提示务必确保电源正负极没有接反。虽然扩展板和micro:bit有一定保护但反接仍可能损坏传感器。连接前花10秒钟核对一下线序这个习惯能避免很多不必要的损失。4. BXY编程实战从读取温度到健康提示硬件准备就绪接下来就是赋予它“智慧”的编程环节。我们将在BXY中完成一个完整的项目持续读取环境温度并在LED点阵上显示同时根据温度范围给出不同的健康提示图标。4.1 项目初始化与模拟值读取首先打开BXY软件创建一个新的micro:bit项目。导入必要模块在代码模式下我们需要导入micro:bit的相关函数库。BXY的图形化积木背后其实就是Python代码。为了理解本质我们直接从代码开始。在代码编辑器顶部确保有以下导入语句from microbit import *这行代码导入了micro:bit的所有核心功能如控制引脚、显示、睡眠等。读取P0引脚模拟值在while True:循环中我们需要持续读取数据。while True: # 读取P0引脚的模拟值范围0-1023 sensor_value pin0.read_analog() # 打印到串口方便在BXY的“串口”窗口中调试查看 print(“传感器模拟值:”, sensor_value) sleep(1000) # 暂停1秒避免数据刷新太快将这段代码下载到micro:bit打开BXY的“串口”功能你应该能看到每秒输出一个0-1023之间的数字。用手捏住LM35这个数值会上升对着它吹气或用酒精棉片擦拭数值会下降。这说明我们的硬件连接和基本读取功能是正常的。4.2 将模拟值转换为摄氏温度根据前面推导的公式我们在代码中添加转换逻辑。from microbit import * # 定义转换系数 CONVERSION_FACTOR 330 / 1023 # 3.3V参考电压下LM35的转换系数 while True: sensor_value pin0.read_analog() # 计算温度 temperature_c sensor_value * CONVERSION_FACTOR # 打印温度值保留一位小数 print(“温度:”, round(temperature_c, 1), “°C”) sleep(1000)现在串口输出应该就是直观的温度值了。你可以用一杯冰水混合物约0°C和一杯温水可以用温度计校准来简单测试一下传感器的读数是否大致准确。由于LM35是模拟器件且受自发热、供电微小波动等因素影响可能会有1-2°C的误差这对于环境感知和健康提示来说是完全可接受的。4.3 在LED点阵上显示温度与健康提示仅仅在串口看数据不够直观我们让micro:bit自己“说话”。显示温度数值micro:bit的display.show()函数可以显示数字但直接显示浮点数不方便。我们可以显示整数部分。while True: sensor_value pin0.read_analog() temperature_c sensor_value * CONVERSION_FACTOR # 显示整数部分温度 display.show(str(int(temperature_c))) sleep(2000) # 显示2秒 display.clear() # 清屏 sleep(500) # 暂停0.5秒但这样只能显示数字缺少单位且无法同时进行健康判断。设计健康提示逻辑与多状态显示一个更完善的方案是循环执行“显示温度 - 显示健康图标 - 短暂暂停”的流程。我们根据常见室内舒适温度范围来设定规则低温提醒 18°C显示向下箭头图标Image.ARROW_S提示“温度偏低注意保暖”。舒适范围18°C ~ 26°C显示笑脸图标Image.HAPPY提示“温度舒适”。高温提醒 26°C显示向上箭头图标Image.ARROW_N提示“温度偏高注意防暑”。完整代码如下from microbit import * CONVERSION_FACTOR 330 / 1023 while True: # 1. 读取并计算温度 sensor_value pin0.read_analog() temperature_c sensor_value * CONVERSION_FACTOR temp_int int(temperature_c) # 取整用于显示 # 2. 显示温度数值2秒 display.scroll(str(temp_int) “C”, delay150) # 滚动显示如“23C” sleep(500) # 3. 根据温度范围显示健康提示图标2秒 if temperature_c 18: display.show(Image.ARROW_S) # 向下箭头 # 这里可以后续扩展为语音播报“温度偏低” elif temperature_c 26: display.show(Image.ARROW_N) # 向上箭头 else: display.show(Image.HAPPY) # 笑脸 sleep(2000) display.clear() sleep(1000) # 进入下一个循环前等待1秒4.4 使用BXY图形化积木实现相同功能对于编程初学者BXY的图形化积木界面更加友好。操作流程如下在BXY左侧积木区找到“引脚”类别拖出读取引脚 P0 模拟值积木。从“变量”类别中创建变量sensor_value和temperature_c。用将变量 sensor_value 设为积木放入“读取引脚”积木。进行数学运算拖出数学运算积木选择乘法一侧放入变量sensor_value另一侧手动输入0.3225即我们计算的系数。将计算结果赋值给变量temperature_c。使用如果...那么...否则积木进行条件判断条件积木从“逻辑”类别中拖出。在判断分支内使用显示 图标积木在“显示”类别中来显示不同的箭头或笑脸。最后用等待 毫秒积木控制显示时长。图形化编程的过程是可视化的逻辑搭建BXY会自动在后台生成与上述代码类似的Python程序。学生可以通过切换“代码”视图观察自己搭的积木变成了什么样的代码这是学习编程思维的绝佳方式。5. 数据记录与可视化进阶一个能够记录温度变化并生成简单图表的系统其教育价值会大大提升。我们可以利用BXY的“数据文件”功能或借助电脑上的Python程序来实现。5.1 利用BXY文件系统记录数据micro:bit有一个很小的内置文件系统。我们可以将温度数据连同时间戳这里用运行时间代替保存到一个CSV文件中。from microbit import * import os CONVERSION_FACTOR 330 / 1023 LOG_FILE “temp_log.csv” log_interval 30000 # 每30秒记录一次单位毫秒 last_log_time running_time() # 检查文件是否存在如果不存在写入表头 if LOG_FILE not in os.listdir(): with open(LOG_FILE, ‘w’) as f: f.write(“time_ms,temperature_c\n”) while True: current_time running_time() # 1. 实时显示与提示代码同上略 # ... # 2. 定时记录数据到文件 if current_time - last_log_time log_interval: sensor_value pin0.read_analog() temperature_c sensor_value * CONVERSION_FACTOR with open(LOG_FILE, ‘a’) as f: # ‘a’ 模式表示追加写入 f.write(‘{},{}\n’.format(current_time, round(temperature_c, 2))) last_log_time current_time # 记录时给一个视觉反馈比如LED点阵闪烁一下 display.set_pixel(2, 2, 9) sleep(100) display.set_pixel(2, 2, 0) sleep(10000) # 主循环休眠10秒降低功耗程序运行一段时间后可以通过BXY的“文件”功能将temp_log.csv文件下载到电脑用Excel或WPS表格打开就能看到两列数据时间戳和温度。可以将其绘制成折线图直观展示一天内的温度变化趋势。5.2 通过串口实时传输数据到电脑另一种更灵活的方式是让micro:bit通过USB串口持续向电脑发送数据然后在电脑上用Python程序使用pyserial库接收并实时绘图。这涉及到电脑端编程可以作为项目的拓展挑战。micro:bit端代码简化只发送数据while True: sensor_value pin0.read_analog() temperature_c sensor_value * CONVERSION_FACTOR # 以特定格式打印方便电脑端解析例如“DATA,23.5” print(“DATA,” str(temperature_c)) sleep(5000) # 每5秒发送一次电脑端Python脚本示例框架import serial import time from datetime import datetime import matplotlib.pyplot as plt # 配置串口端口号需要根据实际情况修改 ser serial.Serial(‘COM3’, 115200, timeout1) # Windows通常是COMX macOS/Linux是 /dev/tty.usbmodemXXX time.sleep(2) # 等待连接稳定 timestamps [] temperatures [] try: while True: if ser.in_waiting 0: line ser.readline().decode(‘utf-8’).strip() if line.startswith(‘DATA,’): temp float(line.split(‘,’)[1]) now datetime.now() timestamps.append(now) temperatures.append(temp) print(f“{now.strftime(‘%H:%M:%S’)} - 温度: {temp}°C”) # 这里可以添加实时绘图代码需要matplotlib动画功能 except KeyboardInterrupt: ser.close() # 绘制最终的温度曲线图 plt.plot(timestamps, temperatures) plt.xlabel(‘时间’) plt.ylabel(‘温度 (°C)’) plt.title(‘环境温度变化曲线’) plt.show()这个拓展方案将项目从一个独立的设备升级为一个“边缘感知中心处理”的物联网原型系统极大地丰富了课程内容。6. 项目优化、调试与教学实施建议在实际课堂或个人实践中总会遇到各种各样的问题。这里分享一些调试技巧和项目优化思路。6.1 常见问题排查踩坑记录读数不稳定或跳动大原因可能是电源噪声或接触不良。解决首先检查所有杜邦线连接是否牢固。可以在LM35的VCC和GND引脚之间并联一个0.1uF104的陶瓷电容用于滤波稳定供电电压。这在模拟信号采集中是常见做法。温度读数明显偏高原因micro:bit处理器自身发热影响。micro:bit在工作时尤其是无线通信如蓝牙开启时CPU会产生热量导致板载温度以及靠近它的LM35读数高于环境温度。解决用一根较长的杜邦线将LM35的信号线引出让LM35传感器本体远离micro:bit主板。这是获得准确环境温度的关键。BXY中无法识别micro:bit或下载失败原因驱动问题、USB线问题或端口被占用。解决尝试换一条质量好的USB数据线确保能传输数据在电脑设备管理器中检查端口是否正常重启BXY软件或者尝试先使用官方MakeCode编程一次再换回BXY。公式计算温度不准原因转换系数不精确或ADC参考电压有微小偏差。解决进行两点校准。记录两个已知温度点如冰水混合物0°C和室温下用可靠温度计测得的温度T对应的模拟值A0和A1。然后用公式温度 (模拟值 - A0) * (T / (A1 - A0))。这能有效消除系统误差。6.2 功能扩展与创意发散基础功能实现后可以引导学生从以下方向进行拓展培养计算思维和创新能力多传感器融合除了LM35还可以在扩展板上接入光敏电阻感知光线、声音传感器感知噪音。综合判断环境舒适度例如“光线太暗建议开灯温度适宜噪音偏大”。增加输出方式连接一个蜂鸣器当温度超出阈值时发出警报声或者连接一个舵机控制一个纸质指针指向“舒适”、“偏冷”、“偏热”等区域。无线数据传输与预警利用micro:bit的蓝牙功能将温度数据发送到手机APP如Bitty Data Logger实现远程监控。甚至可以设置阈值当温度异常时手机收到通知。长期监测与数据分析结合5.2节的电脑端程序让学生收集家庭或教室24小时的温度数据分析变化规律撰写一份简单的“小环境健康报告”。6.3 课堂教学实施要点作为一堂高中信息技术课其目标不仅是完成一个作品更是让学生体验项目化学习的过程。情境导入可以从“你感觉教室现在舒适吗”这类问题出发引出量化评价环境的需求激发学习动机。分层任务设计基础层完成硬件连接在BXY中用图形化积木实现温度读取和LED显示。提高层改用Python代码模式实现并增加健康提示逻辑。拓展层实现数据记录或无线传输功能并进行简单数据分析。强调过程而非结果鼓励学生记录连接和调试中遇到的问题及解决方法。允许读数存在合理误差引导他们思考误差来源这比得到一个“完美”的读数更有价值。跨学科联系与物理课电路、模拟信号、数学课线性函数、数据处理、健康教育环境与人体舒适度相结合体现STEAM教育理念。这个项目就像一颗种子硬件连接是它的根编程是它的茎叶而学生的创意和探究就是让它绽放的花朵。从感知一个简单的温度开始学生们迈出了用计算思维理解和改造世界的第一步。