news 2026/5/13 11:20:32

从零实现基于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/5/9 4:12:29

AI读脸术精度提升技巧:图像预处理增强方法详解

AI读脸术精度提升技巧&#xff1a;图像预处理增强方法详解 1. 技术背景与问题提出 在基于深度学习的人脸属性分析系统中&#xff0c;模型推理的准确性不仅依赖于网络结构和训练数据&#xff0c;还高度受输入图像质量的影响。尽管当前主流的 Caffe 模型在性别与年龄预测任务上…

作者头像 李华
网站建设 2026/5/9 17:48:19

真人照片变卡通?科哥UNet镜像5分钟快速上手机器学习实战

真人照片变卡通&#xff1f;科哥UNet镜像5分钟快速上手机器学习实战 1. 功能概述 本工具基于阿里达摩院 ModelScope 的 DCT-Net 模型&#xff0c;结合 UNet 架构优化设计&#xff0c;实现高效的人像卡通化转换。项目以 unet_person_image_cartoon_compound 为核心模块&#x…

作者头像 李华
网站建设 2026/5/13 3:55:21

没独显如何跑通义千问?云端镜像解决方案,成本直降80%

没独显如何跑通义千问&#xff1f;云端镜像解决方案&#xff0c;成本直降80% 你是不是也遇到过这样的尴尬&#xff1a;想在课堂上带学生体验最新的AI大模型&#xff0c;比如通义千问2.5&#xff0c;结果一查学校机房的电脑——显卡还是五年前的老古董&#xff0c;连最基础的AI…

作者头像 李华
网站建设 2026/5/11 22:47:23

DeepSeek-R1-Distill-Qwen-1.5B加载失败?local_files_only设置详解

DeepSeek-R1-Distill-Qwen-1.5B加载失败&#xff1f;local_files_only设置详解 1. 引言 在部署高性能推理模型的过程中&#xff0c;开发者常常会遇到模型加载失败的问题。其中&#xff0c;DeepSeek-R1-Distill-Qwen-1.5B 作为基于 DeepSeek-R1 强化学习数据蒸馏的 Qwen 1.5B …

作者头像 李华
网站建设 2026/5/11 9:26:53

AI读脸术隐私合规?本地化部署数据安全实战解析

AI读脸术隐私合规&#xff1f;本地化部署数据安全实战解析 1. 引言&#xff1a;AI读脸术的兴起与隐私挑战 随着人工智能技术在视觉领域的深入发展&#xff0c;人脸属性分析正逐步从实验室走向实际应用。年龄与性别识别作为其中的基础能力&#xff0c;已被广泛应用于智能零售、…

作者头像 李华
网站建设 2026/5/11 0:40:36

iOS应用安装神器:App Installer完整使用指南

iOS应用安装神器&#xff1a;App Installer完整使用指南 【免费下载链接】App-Installer On-device IPA installer 项目地址: https://gitcode.com/gh_mirrors/ap/App-Installer App Installer是一款专为iOS设备设计的应用安装工具&#xff0c;能够帮助用户在没有App St…

作者头像 李华