1. 项目缘起:为什么用Micro:bit做温度计?
如果你手头正好有一块BBC Micro:bit,或者正想给孩子、学生或者自己找一个简单又有趣的电子入门项目,那么做一个温度测量装置绝对是个绝佳的选择。这听起来可能有点“小儿科”,不就是读个数吗?但恰恰是这个看似简单的项目,能让你完整地走通从硬件感知、数据处理到软件编程、再到结果展示的整个流程。对于初学者来说,它没有复杂的电路焊接,没有令人头疼的驱动安装,Micro:bit内置的传感器和友好的图形化编程环境,让“从零到一”的成就感来得特别快。
我最初接触Micro:bit时,也用它做过温度计。当时的想法很简单:验证一下这块小板子是不是真的“开箱即用”。结果出乎意料,短短十几行代码(甚至在图形化界面里拖几个积木块),一个能实时显示温度的小设备就诞生了。这个过程中,你会直观地理解什么是传感器、什么是模拟/数字信号、程序是如何循环运行的。更重要的是,它点燃了你对物理世界进行数字化感知和交互的兴趣。今天,我就把这个项目的完整实现过程、背后的原理、以及我踩过的一些小坑,毫无保留地分享出来。无论你是教育工作者、家长,还是纯粹的电子爱好者,都能跟着一步步做出属于自己的温度测量装置。
2. 认识你的核心工具:Micro:bit的内置温度传感器
在动手写代码之前,我们得先搞清楚Micro:bit是靠什么来“感觉”温度的。这关系到我们后续数据的准确性和对现象的理解。
2.1 传感器原理:它不是传统的“温度计”
Micro:bit上并没有一个独立的、像DS18B20那样的专用温度传感器芯片。它的温度感知功能,集成在了主控芯片Nordic nRF51822内部。准确来说,Micro:bit测量的是其核心处理器的芯片结温。
它的工作原理是这样的:半导体芯片内部的PN结(二极管结构)有一个特性,其正向压降会随着温度的变化而呈现近似线性的变化。芯片内部有一个专门的电路模块,通过测量这个压降,再经过一系列校准和计算,最终换算成我们看到的温度值(摄氏度)。所以,你读到的温度,严格意义上是Micro:bit主芯片的温度。
注意:正因为测的是芯片温度,所以读数会受到芯片自身发热的影响。当Micro:bit持续高负荷运行(比如快速刷新屏幕、进行复杂运算)时,芯片温度会上升,导致温度读数比环境温度偏高。这是所有基于芯片内置传感器方案的共同特点,并非故障。
2.2 性能边界与校准概念
了解原理后,我们就能理性看待它的测量结果了:
- 测量范围:官方标称大约为-40°C到+105°C。但对于日常室内环境测量,我们更关心的是其相对精度和稳定性。
- 精度:通常在±1°C以内。这对于感知环境温度变化、进行对比实验(比如比较室内外温差、冰箱内外温差)已经足够。
- 响应速度:由于传感器与芯片一体,热传导快,响应环境温度变化的速度尚可,但测量的是芯片所在微环境的温度。
这里引入一个重要的概念:校准。虽然传感器出厂有校准,但如果你想获得更接近真实环境温度的值,可以进行简单的软件校准。例如,将Micro:bit静置在已知温度的环境(如室内常温)中一段时间,读取其稳定值,与你用可靠温度计测得的实际环境温度对比,得到一个“偏移量”。在后续程序中,将所有读数加上或减去这个偏移量,就能提高准确性。这是我们后面编程时可以优化的一个点。
3. 开发环境搭建与编程入门
工欲善其事,必先利其器。给Micro:bit编程主要有两种方式:图形化的MakeCode和文本式的Python。这里我强烈建议初学者从MakeCode开始,它直观易懂,能让你快速建立信心。
3.1 选择并熟悉MakeCode编辑器
微软的MakeCode for Micro:bit是目前最主流、对新手最友好的选择。
- 访问编辑器:打开浏览器,访问
https://makecode.microbit.org/。它会自动加载最新版本。 - 界面认识:中间是虚拟的Micro:bit设备,可以实时模拟程序效果。左侧是积木块分类区,右侧是代码编辑区(可以在“积木”视图和“JavaScript”视图间切换)。
- 第一个程序:Hello World为了测试环境,我们可以拖一个最简单的积木:
- 从
基本分类中,拖出一个显示字符串“Hello!”积木。 - 将其放入
当开机时的事件积木中。 - 点击虚拟Micro:bit下方的“重启”按钮,你会看到“Hello!”在LED点阵上滚动显示。
- 从
恭喜你,环境通了!编程就是把我们想要的逻辑,用这些积木块像拼图一样组合起来。
3.2 连接与烧录Micro:bit
编写好的程序需要下载到真实的Micro:bit上运行。
- 硬件连接:用Micro-USB数据线将Micro:bit连接到电脑。Micro:bit会被识别为一个名为“MICROBIT”的U盘。
- 下载程序:在MakeCode中完成编程后,点击编辑器底部的“下载”按钮。这会生成一个后缀为
.hex的文件,并自动保存到你的电脑。 - 烧录程序:将下载好的
.hex文件,直接拖拽或复制到“MICROBIT”这个U盘里。此时,Micro:bit背面的黄色信号灯会快速闪烁,表示正在写入程序。写入完成后,程序会自动开始运行。
4. 核心实现:从基础显示到进阶功能
现在进入核心环节。我们将分步骤实现一个功能不断完善的温度计。
4.1 基础版:实时显示温度值
这是最直接的实现方式,让我们先看到数据。
- 编程思路:我们需要一个不断重复执行的循环,在每次循环中读取温度值,然后将其显示出来。
- 积木步骤:
- 从
输入分类中找到温度(°C)积木。这个积木本身就是一个值,代表当前温度。 - 从
基本分类中拖出显示数字积木。 - 将
温度(°C)积木拖拽到显示数字积木的插槽中。 - 将这套组合放入
无限循环积木(在循环分类中)内部。
- 从
- 完整积木图:
[无限循环] 重复执行 [显示数字] [温度(°C)] - 效果与问题:下载程序后,Micro:bit的LED点阵上会不断刷新显示温度数字。但你会发现两个问题:一是数字刷新太快,眼花缭乱;二是LED点阵只能显示整数,小数部分被舍去了。
4.2 优化版:稳定显示与小数处理
针对基础版的问题,我们进行优化。
- 解决刷新过快:在每次显示后加入一个延时,比如1秒。从
基本分类中拖出暂停(毫秒) 1000积木,放在显示数字后面。 - 尝试显示小数:Micro:bit的LED点阵无法直接显示小数点。但我们可以用一点“视觉技巧”。例如,想显示“23.5”,我们可以先显示“23”,短暂暂停,再显示“5”,让人眼感知为“23.5”。或者,更常用的方法是将温度值转换为字符串,然后滚动显示。
- 从
文本分类中找到连接“”和“”积木。 - 将
温度(°C)积木和文本“°C”连接起来。但这里温度(°C)是数字,需要先用转换为文本积木(在文本分类中)处理一下。 - 最后用
显示字符串来显示连接后的完整文本。
- 从
- 优化后的积木逻辑:
这样,温度值会以“XX°C”的形式滚动显示,虽然还是整数,但信息更完整。[无限循环] 重复执行 [变量 温度文本 设为] [连接] ([转换为文本] [温度(°C)]) 和 “°C” [显示字符串] [温度文本] [暂停(毫秒)] 2000 // 显示字符串需要滚动时间,暂停长一些
4.3 进阶版:温度阈值报警与数据记录
让我们的温度计变得更“智能”一些。
- 高温报警功能:
- 思路:判断当前温度是否超过某个设定值(如28°C),如果超过,则用LED点阵显示一个警告图标(比如“X”),同时让蜂鸣器响起来(如果连接了外部蜂鸣器模块)或者让板子自身震动(Micro:bit无内置震动电机,需外接)。
- 积木实现:使用
如果...那么...逻辑积木(在逻辑分类中)。在循环内,先读取温度,然后用> (大于)逻辑积木进行比较。 - 示例:
[无限循环] 重复执行 [变量 当前温度 设为] [温度(°C)] 如果 [当前温度] > [28] 那么 [显示图标] (叉号图标) [播放音调] 中C [持续] 1/4拍 // 需要外接蜂鸣器到引脚,并使用`音乐`分类积木 否则 [显示数字] [当前温度] [暂停(毫秒)] 1000
- 数据记录与查看:
- 思路:Micro:bit内存有限,但我们可以利用其无线射频功能,将温度数据实时发送到另一块Micro:bit或电脑上进行记录和显示。
- 双Micro:bit方案:需要两块板子。一块作为“发射器”,不断读取温度并通过无线电发送;另一块作为“接收器”,接收数据并显示。这涉及到“无线电”积木组的使用,是学习无线通信的绝佳入门。
- 连接电脑方案:通过USB串行通信,将温度数据发送到电脑,用MakeCode的控制台或者第三方串口工具(如CoolTerm、Putty)查看并保存数据日志。这需要用到
串行 写入行积木(在高级->串行中)。 - 示例(串行输出):
在MakeCode中点击“显示数据控制台”,就能看到不断刷新的温度数据了。[当开机时] [串行 重定向到] USB [无限循环] 重复执行 [串行 写入行] “温度:” + ([转换为文本] [温度(°C)]) + “°C” [暂停(毫秒)] 5000 // 每5秒记录一次
5. 硬件扩展:提升测量专业性与实用性
内置传感器方便,但有其局限。如果你想测量液体温度、土壤温度,或者需要更高的精度,就必须进行硬件扩展。
5.1 使用外部温度传感器(以DS18B20为例)
DS18B20是一款非常经典的数字温度传感器,精度高(±0.5°C),防水封装后可测量液体,且单总线协议只需一根数据线。
- 所需材料:Micro:bit、DS18B20传感器、一个4.7kΩ电阻(上拉电阻)、若干杜邦线。
- 电路连接:
- DS18B20的VDD引脚接Micro:bit的3V引脚。
- DS18B20的GND引脚接Micro:bit的GND引脚。
- DS18B20的DQ(数据)引脚接Micro:bit的任意一个GPIO口,例如P0。
- 在VDD和DQ之间连接一个4.7kΩ的上拉电阻。这是单总线协议正常工作的关键,很多初学者会忘记。
- 编程(需添加扩展):
- 在MakeCode中,点击“扩展”,搜索“ds18b20”或“one-wire”,添加对应的扩展库。
- 添加后,会出现新的积木分类。编程逻辑变为:初始化传感器连接的引脚 -> 在循环中读取该传感器的温度值。
- 优势:测量更准确,不受芯片自热影响,可测量物体表面或液体温度,应用场景更广。
5.2 构建一个完整的温度监测站
结合上述所有知识,我们可以设计一个小项目:
- 功能:同时用内置传感器监测设备自身温度(防止过热),用外部DS18B20监测环境水温。通过无线电将两组数据发送到另一块作为“显示终端”的Micro:bit上,交替显示。
- 所需材料:两块Micro:bit,一个DS18B20,电阻,杜邦线,电池盒。
- 编程要点:
- 发射端:循环读取两个温度值,将它们打包成一个字符串(如“INT:25.0 EXT:18.5”),通过无线电发送。
- 接收端:设置相同的无线电组,接收字符串,解析出两部分温度数据,交替显示在LED屏上。
- 价值:这个项目综合运用了传感器读取、数据处理、字符串操作、无线通信等多个核心概念,是一个非常好的阶段性总结项目。
6. 常见问题排查与调试心得
在实际操作中,你可能会遇到一些小问题。这里分享一些我遇到的情况和解决方法。
6.1 温度读数异常偏高
- 现象:显示的温度始终比室温高好几度,甚至越来越高。
- 排查:
- 芯片自热:这是最常见原因。检查你的程序是否包含非常密集的循环、复杂的图形显示或数学运算。尝试在循环中加入更长的延时(如
暂停(毫秒) 5000),让芯片有时间冷却,再看读数是否下降并稳定。 - 供电问题:使用电脑USB供电是稳定的。如果使用电池盒,确保电池电量充足。电压不足可能导致芯片工作异常。
- 程序逻辑错误:检查是否错误地重复读取了某个发热元件的状态(虽然Micro:bit上这类元件不多)。
- 芯片自热:这是最常见原因。检查你的程序是否包含非常密集的循环、复杂的图形显示或数学运算。尝试在循环中加入更长的延时(如
- 解决:对于内置传感器,接受其测量的是芯片温度这一事实。进行长时间监测时,让程序间歇性工作(工作1秒,休眠9秒)。对于需要精确环境温度的场景,转向使用外部传感器。
6.2 程序下载失败或Micro:bit无反应
- 现象:下载hex文件后,MICROBIT盘符会重新挂载,但板子上的程序没运行,或者LED屏显示一个哭脸图标。
- 排查:
- 数据线问题:有些USB线只能充电,不能传输数据。换一根确认可以传输数据的手机数据线。
- 驱动问题(Windows):极少情况下需要驱动。通常Windows 10/11会自动识别。如果不行,可尝试手动安装mbed串口驱动。
- hex文件损坏:确保下载过程完整。可以重新下载一次。
- 程序错误导致崩溃:哭脸图标通常意味着程序运行时发生了致命错误。回顾你的代码,特别是无限循环中是否有逻辑错误导致内存溢出(例如,不断创建永不删除的变量)。返回MakeCode,用更简单的程序(如只显示一个图标)测试,以排除硬件故障。
- 解决:遵循“换线 -> 重启电脑 -> 重下程序 -> 简化程序测试”的步骤,绝大多数问题都能解决。
6.3 外部传感器(如DS18B20)无法读取数据
- 现象:程序一直返回0、-127,或者干脆超时。
- 排查:
- 接线错误(重中之重):再次确认VCC、GND、DQ是否接对。最关键的,检查4.7kΩ上拉电阻是否正确地连接在VCC和DQ之间。没有这个电阻,通信极不稳定甚至完全失败。
- 引脚冲突:确保程序中初始化的引脚号与实际连接的物理引脚(如P0)一致。
- 电源不足:如果传感器距离较远,导线过长可能导致电压下降。尝试缩短导线,或在传感器VCC和GND之间并联一个10μF以上的电容进行稳压。
- 传感器损坏:DS18B20的塑料封装版本不耐高温,如果焊接时间过长可能烫坏。用万用表测量VCC和GND之间电阻,非短路或断路一般可用。
- 解决:焊接和接线务必仔细。对于单总线设备,上拉电阻和稳定的电源是成功之本。
7. 项目延伸思考与创意拓展
一个基础的温度测量项目,可以衍生出无数有趣的创意,这正是Micro:bit的魅力所在。
- 智能提醒器:结合光线传感器,制作一个“桌面舒适度提醒器”。当环境温度超过设定值且环境光线充足(表示可能在阳光下)时,点亮LED屏进行提醒。
- 简易数据记录仪:利用Micro:bit有限的存储空间(约20KB),编写程序每隔10分钟记录一次温度,并保存在一个数组里。24小时后,通过串口一次性将所有数据导出到电脑,用Excel生成温度变化曲线图。
- 温差发电演示装置:用两个DS18B20,一个测量冰块温度,一个测量手心温度。程序计算并显示两者的温差,直观展示热电效应(塞贝克效应)的物理基础。虽然Micro:bit本身不能发电,但可以作为演示温差概念的教具。
- 结合物联网平台:对于有进阶需求的学习者,可以通过Micro:bit的串口连接一个ESP8266 Wi-Fi模块,将温度数据上传到简单的物联网平台(如SIoT、Blynk),实现手机远程查看温度。这就从本地测量跨越到了物联网应用。
回过头看,这个“给初学者”的温度测量项目,绝不仅仅是读取一个数字。它是一条引线,串联起了硬件原理、编程逻辑、数据处理、问题调试和创意发散。我建议你在完成基本功能后,不要停下,选择一个延伸方向去尝试。真正的学习,发生在你根据想法去查阅资料、调试错误、最终让它运行起来的那一刻。那块闪烁着小LED的Micro:bit,会成为你探索更广阔数字世界的第一块坚实跳板。