news 2026/6/15 22:52:57

从零实现基于Arduino的温度传感器监测项目

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零实现基于Arduino的温度传感器监测项目

从一块面包板开始:手把手教你用 Arduino 做温度监控系统

你有没有想过,家里的智能恒温器、温室大棚的自动控温装置,甚至是你手腕上那块能提醒发烧的手环,背后其实都藏着一个“看不见”的小卫士——温度传感器

今天,我们就从零开始,不讲空话,只动手。用一块十几块钱的Arduino Uno和一个小小的温度传感器,搭建一套真正能用的环境温度监测系统。无论你是电子小白,还是刚入门嵌入式开发的新手,这篇教程都能让你在两小时内跑通第一个“会感知世界”的项目。


为什么选它?因为够简单、够真实

物联网听起来高大上,但它的起点往往特别朴素:读一个数据,做一点反应。而温度,是最直观、最容易理解的物理量之一。

我们这次要玩的是两个经典选手:
-LM35:模拟信号老将,便宜到不可思议;
-DS18B20:数字通信高手,支持多点串联,布线自由。

它们各有绝活,也各藏坑点。接下来我会像朋友一样,把踩过的雷、调过的参数、写过的代码,全都摊开讲清楚。


先认识你的“温度侦探”:LM35 vs DS18B20

LM35 —— 模拟时代的线性王者

这颗小芯片长得跟三极管差不多,但它输出的是电压,而且非常“讲道理”:每升高1°C,输出就精准增加10毫伏(mV)。
比如室温25°C时,它就会输出250 mV

听起来很美,但现实有点骨感:

📌关键限制来了:Arduino Uno 的 ADC 是 10 位的,参考电压默认是 5V,意味着它能把 0~5V 分成 1024 份,每一份约等于4.88 mV
所以你能分辨的最小温差是:
4.88 mV ÷ 10 mV/°C ≈ 0.49°C

也就是说,你最多只能看到“23°C”、“24°C”,很难捕捉更细微的变化。这不是传感器不准,而是“分辨率不够”。

但它胜在接线极简:VCC、GND、OUT 三根线搞定,连库都不用装。

DS18B20 —— 数字世界的组网高手

如果说 LM35 是独行侠,那 DS18B20 就是个社交达人。它走的是单总线协议(1-Wire),一根数据线就能和多个设备通信——没错,你可以把十个 DS18B20 全接到同一个引脚上,靠它们各自的“身份证”(64位唯一ID)来区分。

更重要的是,它是直接输出数字温度值的,不需要 ADC 转换,避免了模拟信号受干扰的问题。精度最高可达 ±0.5°C,分辨率还能设到0.0625°C

不过,天下没有免费的午餐:
- 必须外加一个4.7kΩ 上拉电阻到 VCC,否则数据线拉不起来;
- 需要引入第三方库才能轻松使用;
- 单次测温需要等待最多 750ms(12位模式),不能太心急。

但一旦配好,你会发现它稳定得不像这个价位的产品。


硬件怎么连?一张表说清所有细节

组件引脚连接到 Arduino
LM35VCC5V
GNDGND
OUTA0(模拟输入)

✅ 特别注意:不要接反电源!LM35 不耐高压,超过30V可能烧毁。

DS18B20(TO-92封装)标记面朝向你左→右顺序
左侧VDD(电源) → 5V
中间DQ(数据) → 数字引脚 D2
右侧GND → GND

📌重点来了:在 DQ 和 VDD 之间必须焊接一个4.7kΩ 电阻!这是保证通信稳定的“命门”。没有它,程序会报错或读不到数据。


软件怎么写?两种风格,两种哲学

方案一:LM35 模拟采集 —— 最基础却最锻炼基本功

const int tempPin = A0; void setup() { Serial.begin(9600); } void loop() { int raw = analogRead(tempPin); // 读取0~1023的原始值 float voltage = raw * (5.0 / 1023.0); // 换算成电压 float tempC = voltage * 100.0; // 因为10mV/°C → ×100 Serial.print("Temperature: "); Serial.print(tempC); Serial.println(" °C"); delay(1000); }

💡逐行解读
-analogRead()返回的是 ADC 的量化结果,不是真实电压;
-(5.0 / 1023.0)是为了精确计算每一步对应的电压;
-*100是因为 1V 对应 100°C(10mV/°C → 1000mV/V ÷ 10mV = 100);

🎯优化技巧:如果你发现数值跳动厉害,试试加个平均滤波:

float getAverageTemp() { float sum = 0; for (int i = 0; i < 10; i++) { sum += analogRead(tempPin); delay(10); } float voltage = (sum / 10.0) * (5.0 / 1023.0); return voltage * 100.0; }

这样可以有效抑制噪声干扰。


方案二:DS18B20 数字读取 —— 库帮你搞定复杂协议

先去 Arduino IDE 安装两个库:
-OneWireby Paul Stoffregen
-DallasTemperatureby Miles Burton

然后上传以下代码:

#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); sensors.begin(); // 可选:打印总线上有多少设备 Serial.print("Found "); Serial.print(sensors.getDeviceCount(), DEC); Serial.println(" temperature devices."); } void loop() { sensors.requestTemperatures(); float tempC = sensors.getTempCByIndex(0); if (tempC == -127.0) { Serial.println("❌ 传感器未连接或通信失败"); } else { Serial.print("✅ Temperature: "); Serial.print(tempC); Serial.println(" °C"); } delay(1000); }

🧠核心逻辑拆解
-sensors.begin()会扫描总线上的所有 DS18B20 设备;
-requestTemperatures()相当于喊一声:“各位,开始测温!”;
- 然后你要等一会儿(内部已处理),再用getTempCByIndex(0)拿第一个设备的数据;
- 如果返回-127,说明没找到设备,赶紧检查接线和上拉电阻!

🔧进阶玩法:如果你想挂两个以上传感器,可以用:

DeviceAddress sensor1, sensor2; sensors.getAddress(sensor1, 0); // 获取第0个设备地址 sensors.getAddress(sensor2, 1); // 获取第1个设备地址 // 后续通过地址单独读取 sensors.getTempC(sensor1);

这才是分布式测温网络的雏形。


实际应用中那些没人告诉你的事

我在实际项目里被坑过太多次,现在把这些血泪经验交给你:

❗ 问题1:DS18B20 死活读不出数据?

👉 检查三点:
1. 上拉电阻是不是焊上了?4.7kΩ 接在 DQ 和 VCC 之间;
2. 接线有没有松动?特别是杜邦线容易接触不良;
3. 是否开启了寄生供电模式?如果不是,请务必接 VDD 供电。

❗ 问题2:LM35 数值忽高忽低?

👉 很可能是电源噪声太大。解决办法:
- 加一个 0.1μF 陶瓷电容在 VCC 和 GND 之间;
- 或者改用稳压电源模块供电;
- 软件端做滑动平均或卡尔曼滤波。

🛠 设计建议清单

场景推荐方案
快速验证、教学演示LM35 + Arduino
多点监测、长距离传输DS18B20 组网
户外使用传感器套热缩管或灌封胶防水
电池供电让 Arduino 睡眠,定时唤醒采样
数据可视化串口绘图器 Serial Plotter 或 Blynk App

这个项目能带你走多远?

别小看这个看似简单的温度计,它其实是通往更大世界的入口:

  • 加个DHT11,你就有了温湿度一体监测;
  • 接上ESP8266 WiFi 模块,数据就能上传云端;
  • OLED 屏幕显示实时曲线,本地也能看;
  • 设置阈值触发继电器,实现风扇自动启停;
  • 把数据存进 SD 卡,做长期趋势分析;
  • 甚至结合机器学习模型,预测设备过热风险……

我见过有人用类似的架构做了鸡舍温控系统,也有人把它改装成酿酒发酵监控仪。真正的创造力,永远来自最基础的组合。


写在最后:动手才是硬道理

技术文档可以写得很完美,但只有当你亲手把线接上、看到串口监视器跳出第一个“23.5 °C”的那一刻,那种“我让机器感知了世界”的成就感,才是无法替代的。

所以别犹豫了,打开你的工具箱,找一块 Arduino,买一个传感器,花一个小时试一遍。哪怕第一次失败了,查资料、换线、改代码的过程,就是最好的学习。

如果你在调试过程中遇到任何问题——读数异常、通信超时、库安装失败——欢迎留言交流。我们一起解决。

毕竟,每一个嵌入式工程师,都是从点亮一个 LED、读出一个温度开始的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 20:00:04

QR Code Master性能调优:多线程处理二维码的最佳实践

QR Code Master性能调优&#xff1a;多线程处理二维码的最佳实践 1. 背景与挑战&#xff1a;高并发场景下的性能瓶颈 随着二维码在支付、身份认证、物联网等领域的广泛应用&#xff0c;对二维码生成与识别服务的响应速度和并发能力提出了更高要求。QR Code Master作为一款基于…

作者头像 李华
网站建设 2026/6/15 11:50:45

NewBie-image-Exp0.1实操手册:从Prompt编写到图像输出的全流程

NewBie-image-Exp0.1实操手册&#xff1a;从Prompt编写到图像输出的全流程 1. 引言 随着生成式AI在视觉内容创作领域的持续演进&#xff0c;高质量、可控性强的动漫图像生成成为研究与应用的热点方向。NewBie-image-Exp0.1 是一个专注于高保真动漫图像生成的大模型实验版本&a…

作者头像 李华
网站建设 2026/6/15 13:39:10

33种语言互译如何实现?HY-MT1.5-7B模型技术全解析

33种语言互译如何实现&#xff1f;HY-MT1.5-7B模型技术全解析 在跨语言交流日益频繁的今天&#xff0c;机器翻译早已从“能用”迈向“好用”的阶段。尤其在多语种并存、民族语言多样化的现实需求下&#xff0c;通用翻译系统常因语料稀疏、术语不准而难以胜任专业场景。正是在这…

作者头像 李华
网站建设 2026/6/15 12:25:04

AVR编程终极指南:快速掌握图形化烧录工具AVRDUDESS

AVR编程终极指南&#xff1a;快速掌握图形化烧录工具AVRDUDESS 【免费下载链接】AVRDUDESS A GUI for AVRDUDE 项目地址: https://gitcode.com/gh_mirrors/avr/AVRDUDESS AVRDUDESS作为AVRDUDE的图形化界面&#xff0c;彻底改变了传统命令行操作的复杂体验。这款开源工具…

作者头像 李华
网站建设 2026/6/15 0:43:23

Stable Cascade与Z-Image-Turbo对比:复杂构图生成能力评测

Stable Cascade与Z-Image-Turbo对比&#xff1a;复杂构图生成能力评测 1. 引言 1.1 技术背景 近年来&#xff0c;AI图像生成技术迅速发展&#xff0c;从早期的GAN模型到如今基于扩散机制&#xff08;Diffusion&#xff09;的大规模预训练模型&#xff0c;生成质量与可控性显…

作者头像 李华
网站建设 2026/6/15 13:38:49

Qwen3-VL-2B教程:手语识别翻译系统

Qwen3-VL-2B教程&#xff1a;手语识别翻译系统 1. 引言 1.1 学习目标 本文将指导你如何基于 Qwen/Qwen3-VL-2B-Instruct 多模态大模型&#xff0c;构建一个具备实际应用价值的手语识别与翻译系统。通过本教程&#xff0c;你将掌握&#xff1a; 如何利用视觉语言模型理解图像…

作者头像 李华