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 = 温度)。
  • 优化方向:滤波、校准、低功耗设计。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值