当前位置: 首页 > ds >正文

LM35 温度传感器介绍

【本文基于Arduino项目】

1. LM35 温度传感器简介

LM35 是一款 精密模拟温度传感器,由德州仪器(TI)推出,具有线性输出、无需校准、低功耗等特点,广泛应用于环境监测、工业控制等领域。

主要特性

参数规格
测量范围-55°C ~ +150°C
精度±0.5°C(室温下)
输出信号模拟电压(10mV/°C)
供电电压4V ~ 30V(推荐 5V)
接口类型模拟输出(直接连接 Arduino ADC)
封装形式TO-92(最常用)、SOIC

优势

无需校准:输出电压与温度呈线性关系(10mV/°C)。
低功耗:工作电流约 60μA。
低成本:适合学生和爱好者项目。


2. 硬件连接(Arduino 示例)

LM35 只需 3 根线即可工作(供电、地、信号输出)。

接线方式

LM35 引脚Arduino 引脚
VCC(+Vs)5V
GNDGND
Vout(信号)A0(或其他模拟输入引脚)

⚠️ 注意:

  • 如果使用 3.3V 供电(如 ESP8266/ESP32),需将 VCC 接 3.3V,但测量范围会缩小(0°C ~ +110°C)。
  • 避免将 LM35 靠近发热元件(如 Arduino 的稳压器)。

3. Arduino 代码示例

基础代码(直接读取温度)

void setup() {Serial.begin(9600); // 初始化串口
}void loop() {int sensorValue = analogRead(A0); // 读取模拟值(0~1023)float voltage = sensorValue * (5.0 / 1023.0); // 转换为电压(0~5V)float temperature = voltage * 100.0; // 转换为温度(10mV/°C)Serial.print("温度: ");Serial.print(temperature);Serial.println(" °C");delay(1000); // 1秒更新一次
}

优化代码(滤波与精度提升)

const int numReadings = 10; // 滑动平均滤波的样本数
int readings[numReadings];  // 存储历史数据
int index = 0;              // 当前索引void setup() {Serial.begin(9600);for (int i = 0; i < numReadings; i++) {readings[i] = 0; // 初始化数组}
}void loop() {// 读取当前值并存入数组readings[index] = analogRead(A0);index = (index + 1) % numReadings;// 计算滑动平均值float average = 0;for (int i = 0; i < numReadings; i++) {average += readings[i];}average /= numReadings;// 转换为温度float voltage = average * (5.0 / 1023.0);float temperature = voltage * 100.0;Serial.print("温度: ");Serial.print(temperature);Serial.println(" °C");delay(500); // 0.5秒更新一次
}

4. 常见问题与解决方法

Q1:温度读数跳动大?

  • 原因:模拟信号受干扰或电源噪声。
  • 解决
    • 在 LM35 的 VCC 和 GND 之间加 0.1μF 电容
    • 使用代码中的 滑动平均滤波(见优化代码)。

Q2:测量值偏高/偏低?

  • 原因:ADC 参考电压不准确(默认 5V 可能有误差)。
  • 解决
    • 使用 analogReference(INTERNAL) 切换为 Arduino 内部 1.1V 基准(需调整计算逻辑)。
    • 校准公式:voltage = sensorValue * (实际电压 / 1023.0)(用万用表测量 Arduino 5V 实际值)。

Q3:如何测量负温度?

  • 方法
    • 使用 LM35DZ(支持 -55°C ~ +150°C),将 VCC 接 双电源(±5V),Vout 接 Arduino ADC(需分压电路)。
    • 或改用 DS18B20(数字传感器,直接支持负温度)。

5. 进阶应用

(1) 多传感器组网

// 连接多个 LM35 到 A0、A1、A2...
float readLM35(int pin) {int value = analogRead(pin);return (value * 5.0 / 1023.0) * 100.0;
}void loop() {float temp1 = readLM35(A0);float temp2 = readLM35(A1);Serial.print("传感器1: "); Serial.print(temp1); Serial.println(" °C");Serial.print("传感器2: "); Serial.print(temp2); Serial.println(" °C");delay(1000);
}

(2) 与 OLED 显示屏结合

使用 Adafruit_SSD1306 库在 OLED 上显示温度:

#include <Adafruit_SSD1306.h>Adafruit_SSD1306 display(128, 64, &Wire, -1);void setup() {display.begin(SSD1306_SWITCHCAPVCC, 0x3C);display.clearDisplay();
}void loop() {float temp = (analogRead(A0) * 5.0 / 1023.0) * 100.0;display.clearDisplay();display.setTextSize(2);display.setTextColor(SSD1306_WHITE);display.setCursor(0, 0);display.print("Temp: ");display.print(temp);display.println(" C");display.display();delay(1000);
}

(3) 低功耗模式

适用于电池供电项目:

  • 通过 MOSFET 控制 LM35 电源,仅在测量时通电。
  • 使用 Arduino 的 睡眠模式(需外部中断唤醒)。

6. 替代方案

传感器优势缺点
DS18B20数字信号、支持负温度、精度高需单总线协议(代码复杂)
DHT11/DHT22温湿度一体、数字输出精度较低、响应慢
BME280气压+温度+湿度三合一价格较高

7. 总结

  • LM35 是一款简单易用的模拟温度传感器,适合快速原型开发。
  • 接线简单:VCC → 5V,GND → GND,Vout → Arduino 模拟输入。
  • 代码关键analogRead() + 电压转换(电压 × 100 = 温度)。
  • 优化方向:滤波、校准、低功耗设计。

如果有具体问题(如负温度测量或干扰处理),欢迎进一步讨论! ❄️🔥

http://www.xdnf.cn/news/1145.html

相关文章:

  • 学习前端(前端技术更新较快,需持续关注技术更新)
  • 深入探讨:如何完美完成标签分类任务(数据治理中分类分级的分类思考)
  • 短信验证码安全实战:三网API+多语言适配开发指南
  • 网络原理 - 4(TCP - 1)
  • 短视频+直播商城系统源码全解析:音视频流、商品组件逻辑剖析
  • 【Linux】46.网络基础(3.3)
  • 何东山团队提到的“真正真空”(zero-point-free vacuum)
  • 3.1goweb框架gin下
  • 中文通用embedding:BGE
  • 使用Spark-TTS-0.5B模型,文本合成语音
  • HCIP(综合实验2)
  • mockMvc构建web单元测试学习笔记
  • Unity-GC详解
  • 面试网络基础知识 — IP地址
  • PyTorch 分布式 DistributedDataParallel (DDP)
  • Nordic外设GPIO[nrfx_gpiote_in_init函数报NRFX_ERROR_NO_MEM并且fatal error]
  • 门控循环单元(GRU)
  • LX10-MDK的使用技巧
  • 【Spring Boot基础】MyBatis的基础操作:增删查改、列名和属性名匹配 -- XML实现
  • 【Java面试笔记:基础】7.int和Integer有什么区别?
  • kubernetes》》k8s》》删除命名空间
  • Spring中配置 Bean 的两种方式:XML 配置 和 Java 配置类
  • 18.2基于Linux的INPUT子系统实验(详细编写程序)_csdn
  • IDEA 创建Maven 工程(图文)
  • dmncdm达梦新云缓存数据库主从集群安装部署详细步骤说明
  • Redis 系列之 Key 过期策略介绍
  • 09.传输层协议 ——— TCP协议
  • kotlin的kmp编程中遇到Unresolved reference ‘java‘问题
  • 鸿蒙应用开发:如何修改APP名称与APP的图标
  • 物联网蓬勃发展是助力楼宇自控技术迈向成熟的关键