news 2026/4/23 14:49:59

从零实现基于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/4/18 15:33:25

iOS应用部署终极指南:轻松安装第三方IPA文件的完整解决方案

iOS应用部署终极指南&#xff1a;轻松安装第三方IPA文件的完整解决方案 【免费下载链接】App-Installer On-device IPA installer 项目地址: https://gitcode.com/gh_mirrors/ap/App-Installer 在iOS生态系统中&#xff0c;应用部署一直是开发者和高级用户关注的核心话题…

作者头像 李华
网站建设 2026/4/23 14:46:55

AMD GPU终极部署指南:快速构建本地AI大模型环境

AMD GPU终极部署指南&#xff1a;快速构建本地AI大模型环境 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/gh_mirrors/ol/ollama-for…

作者头像 李华
网站建设 2026/4/22 13:29:49

避坑指南:Qwen3-4B-Instruct写作常见问题全解析

避坑指南&#xff1a;Qwen3-4B-Instruct写作常见问题全解析 1. 引言&#xff1a;为何需要关注Qwen3-4B-Instruct的写作表现&#xff1f; 随着大模型在内容生成领域的广泛应用&#xff0c;Qwen3-4B-Instruct 凭借其40亿参数量和强大的逻辑推理能力&#xff0c;成为CPU环境下AI…

作者头像 李华
网站建设 2026/4/21 22:59:02

从零开始学文本嵌入:GTE模型最佳实践,云端实验成本直降90%

从零开始学文本嵌入&#xff1a;GTE模型最佳实践&#xff0c;云端实验成本直降90% 你是一名转行AI的Java工程师&#xff0c;已经掌握了基础编程和机器学习概念&#xff0c;现在想深入理解文本嵌入&#xff08;Text Embedding&#xff09;技术。最近你在读一篇关于GTE模型的论文…

作者头像 李华
网站建设 2026/4/13 5:19:57

没显卡怎么玩AI写作?Qwen3云端镜像2块钱搞定

没显卡怎么玩AI写作&#xff1f;Qwen3云端镜像2块钱搞定 你是不是也刷到过抖音上那些“AI写作文”的视频&#xff1f;输入一个题目&#xff0c;几秒钟就生成一篇结构清晰、语言优美的议论文&#xff0c;连老师都看不出是机器写的。高中生小李就被这样的内容深深吸引——他每周…

作者头像 李华
网站建设 2026/4/23 9:58:45

从文本到向量:利用GTE镜像打造语义搜索基础能力

从文本到向量&#xff1a;利用GTE镜像打造语义搜索基础能力 1. 引言&#xff1a;构建语义搜索的底层基石 在信息爆炸的时代&#xff0c;传统关键词匹配的局限性日益凸显。用户期望的是“理解我意思”的智能系统&#xff0c;而非机械地查找字面匹配。例如&#xff0c;当输入“…

作者头像 李华