实验报告:基于 DS18B20的多功能温度监测系统
一、实验目的
- 掌握 DS18B20 数字温度传感器的基本原理与使用方法
- 学习 LED 显示屏(如 TM1637 或 MAX7219)的驱动与控制
- 实现蜂鸣器、LED 二极管与温度传感器的联动控制
- 掌握面包板电路搭建与元器件连接技巧
- 设计一个完整的温度监测与报警系统
二、实验器材
| 序号 | 器材名称 | 规格/型号 | 数量 | 用途 |
|---|---|---|---|---|
| 1 | 主控板 | Arduino Uno/Nano | 1 | 系统控制核心 |
| 2 | 温度传感器 | DS18B20(防水型可选) | 1 | 温度采集 |
| 3 | LED显示屏 | TM1637 4位7段数码管 | 1 | 温度显示 |
| 4 | 蜂鸣器 | 有源/无源蜂鸣器 | 1 | 温度报警 |
| 5 | LED二极管 | 5mm红色/绿色 | 2 | 状态指示 |
| 6 | 面包板 | 830孔/400孔 | 1 | 电路搭建 |
| 7 | 杜邦线 | 公对公/公对母 | 若干 | 线路连接 |
| 8 | 电阻 | 220Ω、4.7kΩ | 若干 | 限流/上拉 |
| 9 | 电源 | USB数据线/9V电池 | 1 | 系统供电 |
三、材料清单
以下是本实验所需的完整材料清单,包含所有元器件、连接线和辅助工具:
| 类别 | 名称 | 规格/型号 | 数量 | 单价(约) | 小计(约) | 备注 |
|---|---|---|---|---|---|---|
| 主控模块 | Arduino Uno开发板 | R3兼容版 | 1 | ¥25.00 | ¥25.00 | 也可用Arduino Nano |
| 传感器模块 | DS18B20温度传感器 | 防水型/不锈钢探头 | 1 | ¥8.00 | ¥8.00 | 单总线数字温度传感器 |
| 显示模块 | TM1637 4位数码管 | 0.36英寸共阴 | 1 | ¥6.50 | ¥6.50 | 带驱动芯片,4位7段 |
| 报警模块 | 有源蜂鸣器 | 5V直流 | 1 | ¥2.00 | ¥2.00 | 长鸣型,给电即响 |
| 指示模块 | LED发光二极管 | 5mm红色 | 1 | ¥0.20 | ¥0.20 | 高温报警指示 |
| LED发光二极管 | 5mm绿色 | 1 | ¥0.20 | ¥0.20 | 正常状态指示 | |
| 电路基础 | 面包板 | 830孔/400孔 | 1 | ¥8.00 | ¥8.00 | 免焊接实验板 |
| 杜邦线 | 公对公 | 20根 | ¥0.10 | ¥2.00 | 用于元器件连接 | |
| 杜邦线 | 公对母 | 10根 | ¥0.15 | ¥1.50 | 用于连接Arduino | |
| 电阻元件 | 碳膜电阻 | 220Ω 1/4W | 2 | ¥0.05 | ¥0.10 | LED限流电阻 |
| 碳膜电阻 | 4.7kΩ 1/4W | 1 | ¥0.05 | ¥0.05 | DS18B20上拉电阻 | |
| 电源系统 | USB数据线 | Type-B/Micro | 1 | ¥5.00 | ¥5.00 | Arduino供电与编程 |
| 9V电池 | 6F22/6LR61 | 1 | ¥8.00 | ¥8.00 | 可选,便携供电 | |
| 电池扣 | 9V电池扣 | 1 | ¥1.50 | ¥1.50 | 连接电池与面包板 | |
| 辅助工具 | 万用表 | 数字式 | 1 | - | - | 检测电路通断 |
| 剥线钳/剪刀 | - | 1 | - | - | 线材处理 | |
| 镊子 | 尖头 | 1 | - | - | 精细操作 |
总计费用:约 ¥67.55元(不含辅助工具)
采购建议:
- 初学者套装:可直接购买Arduino入门套件,通常包含大部分元件
- 分项采购:可在淘宝、京东等平台按清单单独购买
- 替代方案:
- 显示模块:可用1602 LCD屏替代TM1637(需调整程序)
- 蜂鸣器:无源蜂鸣器需PWM驱动,程序需相应修改
- 主控板:Arduino Nano体积更小,引脚兼容
注意事项:
- DS18B20建议选择防水型,适用环境更广
- 电阻功率选择1/4W即可,精度±5%足够
- 杜邦线建议多备一些,方便调试时更换连接方式
- 如使用9V电池供电,需注意电池续航时间(约4-6小时)
三、实验原理
3.1 DS18B20 温度传感器
DS18B20 是 Dallas 半导体公司生产的单总线数字温度传感器,具有以下特点:
- 单总线接口:仅需一根数据线即可与 MCU 通信
- 高精度:测量精度 ±0.5℃(-10℃~+85℃)
- 宽量程:-55℃~+125℃
- 数字输出:直接输出数字温度值,无需 AD 转换
- 寄生供电:可从数据线获取电源,减少连线
3.2 LED显示屏工作原理
本实验采用 TM1637 驱动的 4 位 7 段数码管:
- TM1637芯片:集成了显示驱动和键盘扫描
- 通信协议:两线制(CLK、DIO)串行通信
- 显示原理:通过扫描方式控制7段数码管各段亮灭
3.3 蜂鸣器与LED 控制
- 蜂鸣器:有源蜂鸣器直接给电即响,无源蜂鸣器需要PWM驱动
- LED 二极管:通过限流电阻控制亮度,防止电流过大损坏
四、电路连接图
五、连接器材演示
本节将详细展示如何将各个元器件连接到面包板上,并提供清晰的连接示意图和分步指导。
5.1 连接步骤详解
第一步:准备面包板与电源
- 将面包板平放在工作台上,识别正极(+)和负极(-)电源轨
- 使用杜邦线将 Arduino Uno 的 5V 引脚连接到面包板的正极电源轨
- 使用杜邦线将 Arduino Uno 的 GND 引脚连接到面包板的负极电源轨
第二步:连接 DS18B20 温度传感器
- 将 DS18B20 的 VCC(红线)插入面包板正极电源轨
- 将 DS18B20 的 GND(黑线)插入面包板负极电源轨
- 将 DS18B20 的 DQ(黄线)插入面包板任意行(如第15行A列)
- 在 DQ 引脚所在行和正极电源轨之间连接一个 4.7kΩ 上拉电阻
第三步:连接 TM1637 数码管显示屏
- 将 TM1637 模块的 VCC 引脚连接到面包板正极电源轨
- 将 TM1637 模块的 GND 引脚连接到面包板负极电源轨
- 将 TM1637 模块的 CLK 引脚连接到 Arduino 的 D3 引脚
- 将 TM1637 模块的 DIO 引脚连接到 Arduino 的 D4 引脚
第四步:连接蜂鸣器
- 将有源蜂鸣器的正极(长脚)连接到 Arduino 的 D5 引脚
- 将蜂鸣器的负极(短脚)连接到面包板负极电源轨
第五步:连接 LED 指示灯
- 绿色 LED(正常状态指示):
- 将 LED 长脚(阳极)通过 220Ω 电阻连接到 Arduino 的 D6 引脚
- 将 LED 短脚(阴极)连接到面包板负极电源轨
- 红色 LED(报警状态指示):
- 将 LED 长脚(阳极)通过 220Ω 电阻连接到 Arduino 的 D7 引脚
- 将 LED 短脚(阴极)连接到面包板负极电源轨
5.2 连接示意图
(此处预留面包板实际连接示意图位置)
图2:面包板实际连接示意图。图中清晰展示了各元器件在面包板上的布局和连接方式:
- 左侧区域:DS18B20 温度传感器及其上拉电阻
- 中部区域:TM1637 数码管显示模块
- 右侧区域:蜂鸣器和两个 LED 指示灯
- 电源轨:顶部红色线为正极(5V),蓝色线为负极(GND)
- Arduino 连接:通过杜邦线将面包板各信号点连接到 Arduino 对应引脚
5.3 连接检查清单
在通电前,请按以下清单检查所有连接:
| 检查项目 | 正确连接 | 常见错误 | 检查方法 |
|---|---|---|---|
| 电源连接 | 5V→正极轨,GND→负极轨 | 正负极接反 | 用万用表测量电压 |
| DS18B20 | VCC→5V,GND→GND,DQ→D2 | 缺少上拉电阻 | 检查4.7kΩ电阻连接 |
| 上拉电阻 | DQ与5V之间有4.7kΩ电阻 | 电阻值错误 | 用万用表测量电阻值 |
| TM1637 | VCC→5V,GND→GND,CLK→D3,DIO→D4 | CLK/DIO接反 | 检查引脚对应关系 |
| 蜂鸣器 | 正极→D5,负极→GND | 极性接反 | 观察蜂鸣器标识 |
| 绿色LED | 阳极→D6→220Ω→5V,阴极→GND | 缺少限流电阻 | 检查220Ω电阻连接 |
| 红色LED | 阳极→D7→220Ω→5V,阴极→GND | LED极性接反 | 长脚为正,短脚为负 |
| 所有杜邦线 | 插接牢固,无松动 | 接触不良 | 轻轻拉动检查 |
5.4 连接技巧与注意事项
面包板布局技巧:
- 按功能分区布局:传感器区、显示区、报警区
- 电源轨专线专用,避免交叉
- 信号线尽量短,减少干扰
杜邦线使用建议:
- 使用不同颜色区分功能:红色-5V,黑色-GND,黄色-信号线
- 公对母线用于连接 Arduino 和面包板
- 公对公线用于面包板内部连接
安全注意事项:
- 连接完成后再通电
- 通电前再次检查正负极
- 避免短路,特别是电源正负极直接接触
调试建议:
- 先连接电源和地线
- 逐个模块连接并测试
- 使用万用表检查关键点电压
5.5 实物连接效果展示
(此处预留系统整体实物连接图位置)
图3:系统整体实物连接图。展示了完整的实验装置连接状态,包括:
- Arduino Uno 主控板与面包板的连接
- 各元器件在面包板上的实际位置
- 杜邦线的整齐布线
- 电源线的连接方式
连接验证方法:
- 通电后,观察 TM1637 显示屏是否显示初始信息
- 触摸 DS18B20,观察温度显示是否变化
- 分别遮挡两个 LED,确认对应引脚控制正常
- 短接蜂鸣器控制引脚到 5V,确认蜂鸣器能响
完成以上连接后,系统硬件部分就准备就绪,可以进行软件烧录和功能测试了。
4.1 面包板布局示意图
+5V GND │ │ ┌──────┼────┼────┐ │ │ │ │ │ ┌───┴────┴──┐ │ │ │ 面包板 │ │ │ └───────────┘ │ │ │ └────────────────┘ 元器件连接位置: 1. DS18B20:VCC → 5V,GND → GND,DQ → D2(加 4.7kΩ 上拉) 2. TM1637:VCC → 5V,GND → GND,CLK → D3,DIO → D4 3. 蜂鸣器:+极 → D5,-极 → GND 4. LED1(正常):阳极 → D6 → 220Ω → 5V 5. LED2(报警):阳极 → D7 → 220Ω → 5V4.2 接线表
| 元器件 | Arduino引脚 | 面包板连接 | 备注 |
|---|---|---|---|
| DS18B20 VCC | 5V | 正极电源轨 | |
| DS18B20 GND | GND | 负极电源轨 | |
| DS18B20 DQ | D2 | 数据线 | 接4.7kΩ上拉电阻到5V |
| TM1637 VCC | 5V | 正极电源轨 | |
| TM1637 GND | GND | 负极电源轨 | |
| TM1637 CLK | D3 | 时钟线 | |
| TM1637 DIO | D4 | 数据线 | |
| 蜂鸣器 + | D5 | 信号线 | |
| 蜂鸣器 - | GND | 负极电源轨 | |
| LED1 阳极 | D6 | 通过220Ω电阻 | 正常状态指示 |
| LED2 阳极 | D7 | 通过220Ω电阻 | 报警状态指示 |
4.3 系统架构图
以下是基于DS18B20的多功能温度监测系统的整体架构图:
该架构图展示了系统的四个主要模块及其连接关系:
- 传感器模块:DS18B20通过OneWire总线将温度数据发送给Arduino
- 主控模块:Arduino UNO处理数据并控制其他模块
- 显示模块:TM1637数码管实时显示温度值
- 报警模块:蜂鸣器和LED提供声光报警功能
五、程序设计
5.1 所需库文件
#include<Wire.h>#include<Adafruit_GFX.h>#include<Adafruit_SSD1306.h>#include<OneWire.h>#include<DallasTemperature.h>5.2 引脚定义与初始化
// 显示屏参数#defineSCREEN_WIDTH128#defineSCREEN_HEIGHT64#defineOLED_RESET-1// 引脚定义#defineTEMP_PIN2// DS18B20 温度传感器数据线#defineBUZZER_PIN8// 蜂鸣器控制引脚// 温度报警阈值#defineALARM_TEMP30.0// 高温报警阈值// 对象初始化Adafruit_SSD1306display(SCREEN_WIDTH,SCREEN_HEIGHT,&Wire,OLED_RESET);OneWireoneWire(TEMP_PIN);DallasTemperaturesensors(&oneWire);5.3 主程序代码
voidsetup(){// 设置蜂鸣器引脚为输出模式pinMode(BUZZER_PIN,OUTPUT);digitalWrite(BUZZER_PIN,LOW);// 初始化OLED 显示屏if(!display.begin(SSD1306_SWITCHCAPVCC,0x3C)){// 如果初始化失败,程序停止for(;;);}// 显示屏基础设置display.clearDisplay();display.setTextSize(1);display.setTextColor(WHITE);// 初始化温度传感器sensors.begin();}voidloop(){// 请求温度传感器读数sensors.requestTemperatures();floattemp=sensors.getTempCByIndex(0);// 清空显示屏display.clearDisplay();// 第一行:显示姓名display.setCursor(0,8);display.print("Name: 123");// 第二行:显示学号display.setCursor(0,22);display.print("ID: 456");// 第三行:显示温度值(保留1位小数)display.setCursor(0,30);display.print("Temp: ");display.print(temp,1);display.print(" C");// 第四行:显示状态并控制蜂鸣器display.setCursor(0,44);if(temp>ALARM_TEMP){// 高温报警状态display.print("!!! ALARM !!!");digitalWrite(BUZZER_PIN,HIGH);// 蜂鸣器响}else{// 正常状态display.print("Status: Normal");digitalWrite(BUZZER_PIN,LOW);// 蜂鸣器关闭}// 更新显示屏显示display.display();// 延迟500 ms后再次读取delay(500);}六、实验步骤
6.1 硬件搭建
- 面包板准备:将面包板平放,识别正负极电源轨
- 电源连接:将 Arduino 的 5V 和 GND 分别连接到面包板正负极电源轨
- DS18B20 连接:
- VCC(红线)→ 5V电源轨
- GND(黑线)→ GND电源轨
- DQ(黄线)→ Arduino D2引脚
- 在DQ和5V之间连接4.7kΩ上拉电阻
- TM1637 连接:
- VCC → 5V电源轨
- GND → GND电源轨
- CLK → Arduino D3引脚
- DIO → Arduino D4引脚
- 蜂鸣器连接:
- 正极(长脚)→ Arduino D5引脚
- 负极(短脚)→ GND电源轨
- LED 连接:
- LED1(绿)阳极 → 220Ω电阻 → Arduino D6引脚
- LED1阴极 → GND电源轨
- LED2(红)阳极 → 220Ω电阻 → Arduino D7引脚
- LED2阴极 → GND电源轨
6.2 软件配置
- 安装 Arduino IDE(1.8.x或更高版本)
- 安装所需库:
- 工具 → 管理库 → 搜索 “OneWire” → 安装
- 搜索 “DallasTemperature” → 安装
- 搜索 “TM1637” → 安装
- 将上述代码复制到新项目
- 选择正确板卡(Arduino Uno)和端口
- 点击上传按钮编译并烧录程序
6.3 功能测试
- 上电测试:连接USB电源,观察系统启动
- 温度显示测试:用手触摸DS18B20,观察显示屏温度变化
- LED指示测试:
- 正常温度:绿色LED亮
- 异常温度:红色LED亮
- 蜂鸣器报警测试:
- 低温测试:用冰袋靠近传感器
- 高温测试:用吹风机热风靠近传感器
- 串口监视:打开串口监视器(波特率9600),查看温度数据
七、实验结果与分析
效果演示图:
图1:系统实物运行效果图。图中展示了完整的实验装置:Arduino Nano主控板、DS18B20温度传感器、LED数码管显示屏、蜂鸣器和LED指示灯。显示屏实时显示当前温度,当温度超过设定阈值时,红色LED亮起并触发蜂鸣器报警。
7.1 实验现象记录
| 测试条件 | 显示屏显示 | LED状态 | 蜂鸣器 | 串口输出 |
|---|---|---|---|---|
| 室温环境 | 25.3 °C | 绿灯亮 | 无声 | “当前温度: 25.30°C 状态: 正常” |
| 手捂传感器 | 32.7 °C | 红灯亮 | 高频报警 | “当前温度: 32.70°C 状态: 高温报警!” |
| 冰袋冷却 | 8.5 °C | 红灯亮 | 低频报警 | “当前温度: 8.50°C 状态: 低温报警!” |
| 断开传感器 | Err | 红灯闪烁 | 连续报警 | “传感器故障” |
7.2 数据分析
- 测量精度:DS18B20 在室温下测量误差 ±0.5℃,满足一般实验需求
- 响应速度:温度变化后约 1-2 秒系统更新显示,实时性良好
- 系统稳定性:连续运行1小时无死机或数据异常
- 报警准确性:阈值触发准确,无误报或漏报
7.3 常见问题与解决
问题:显示屏不亮或显示乱码
- 原因:TM1637 引脚接反或接触不良
- 解决:检查 CLK/DIO 连接,重新插拔
问题:温度显示-127℃
- 原因:DS18B20 接线错误或损坏
- 解决:检查 VCC/GND/DQ 连接,确认上拉电阻正常
问题:蜂鸣器不响
- 原因:有源/无源蜂鸣器类型错误或引脚接反
- 解决:确认蜂鸣器类型,调整正负极
八、实验总结
8.1 实验成果
- 成功搭建了基于 DS18B20的温度监测系统
- 实现了温度数据的实时显示(LED 显示屏)
- 完成了温度阈值报警功能(蜂鸣器+LED指示)
- 掌握了面包板电路搭建的基本技能
- 学习了单总线通信和数码管驱动原理
8.2 技术要点
- 单总线通信:DS18B20 的单线通信简化了电路连接
- 上拉电阻:4.7kΩ 上拉电阻确保数据线稳定
- 分压限流:220Ω 电阻保护LED不被烧毁
- 库函数使用:合理使用现成库简化开发
8.3 改进建议
- 增加无线模块:添加 ESP8266 实现 Wi-Fi 远程监控
- 数据存储:添加 SD 卡模块记录温度历史数据
- 多传感器:扩展多个 DS18B20 实现多点测温
- 手机APP:开发蓝牙 APP 实现手机端监控
- 太阳能供电:添加太阳能板实现户外长期监测
8.4 应用前景
本系统可应用于:
- 实验室温度监控
- 温室大棚环境监测
- 仓库冷链温度管理
- 智能家居温度控制
- 工业设备温度保护
九、附录
9.1 元器件实物图识别
DS18B20: 金属探头,三根线(红-VCC,黑-GND,黄-DQ) TM1637: 4位数码管+黑色驱动芯片 有源蜂鸣器: 底部有密封,给电即响 无源蜂鸣器: 底部有电路板,需要PWM驱动 LED: 长脚为正极,短脚为负极9.2 程序扩展功能代码
// 扩展功能:温度数据记录voidlogTemperature(floattemp){// 可扩展为SD卡存储或网络上传Serial.print("记录时间:");Serial.print(millis()/1000);Serial.print("s,温度:");Serial.println(temp);}// 扩展功能:温度单位切换floatcelsiusToFahrenheit(floatcelsius){returncelsius*9.0/5.0+32.0;}9.3 安全注意事项
- 接线前确保系统断电
- 避免 DS18B20 长时间超过 125℃
- LED必须串联限流电阻
- 蜂鸣器不要长时间连续工作
- 面包板插拔时注意引脚方向
实验完成时间:年________月________日
实验人员:________________
指导教师:________________________
成绩评定:________________________