Arduino ADC + 模拟温度传感器LM35D

LM35是美国国家半导体(后被TI收购)推出的精密温度传感IC系列,其信号输出方式为模拟输出,输出电压值与摄氏温度值呈正比,且用户不需额外的校正就能获得较高的测量精度。其主要特性有:

  • 供电电压:4~30V
  • 测量范围:与芯片相关,单个正电源供电时最大+2~+150°C
  • 测量精度:与芯片、测量温度有关,如下图。可见室温附近误差典型值大约在+-0.5°C,最大值在+-0.5°C到+-1.5°C不等。本文中使用的LM35D是精度最差的芯片,误差最大值约+-1.5°C。

  • 功耗:与测量电路、温度有关,大约在50~100μA范围。
  • Sensor Gain:10mV/°C,电压与温度的关系为 Vout = Temperature × 10mV/°C。
  • 长期稳定性:量程最高温度下1000小时漂移+-0.08°C。
  • 封装:有TO-92、Metal Can、SOIC-8、TO-220。本文使用的LM35D为TO-92封装。

电路连接

LM35D采用Arduino UNO板上的5V电压供电,信号输出端与A0管脚相连。

简单的电压读取和转换

转换采用Arduino的ADC功能实现,测量电压与AD采样值的关系为:

其中,Vin是被测量(输入)电压;Vref是参考电压,若不特殊设置的话即为供电电压,对于UNO板为5V;resolution是ADC的比特数(不含符号位),对于atmega328p为10比特;ADC为读取的转换结果。严格来讲,上式的分母应该再减去1,但是否减1对结果的影响可以忽略不计。实现的代码非常简单:

 1 /*
 2 Measuring the temperature using the LM35 sensor
 3 Connection:
 4 LM35        UNO
 5 Vs <------> 5V
 6 GND <-----> GND
 7 Vout <----> A0
 8
 9 */
10
11 const int PIN_LM35 = A0; //pin connection
12
13 float sensorVolt; //unit: mV
14 float temperature; //unit: centigrade
15
16 void setup()
17 {
18     Serial.begin(115200); //initialize serial communication
19 }
20
21 void loop()
22 {
23     sensorVolt = analogRead(PIN_LM35)*5000.0/1023; //do conversion
24     temperature = sensorVolt/10.0;
25
26     Serial.print("Temperature: "); //print the result
27     Serial.print(temperature);
28     Serial.println(" `C");
29
30     delay(1000); //delay 1s
31 }

获得更高分辨率

除了采用电源电压作为基准源外,atmega328p提供了1.1V的内部基准源。在室温条件下测量时,LM35的输出电压在几百mV量级,因此可以利用内部基准源获得更高的测量分辨率。

  • 若使用5V的电源电压作为基准源时,测量分辨率为5000mV/1024 = ~4.9mV,对应温度0.49°C;
  • 若使用1.1V的内部基准源,测量分辨率为1100mV/1024 = ~1.1mV,对应温度0.11°C,分辨能力有明显的提高。

代码也很简单,只需增加analogReference()语句及更改转换参数即可:

 1 /*
 2 Measuring the temperature using the LM35 sensor
 3 Connection:
 4 LM35        UNO
 5 Vs <------> 5V
 6 GND <-----> GND
 7 Vout <----> A0
 8
 9 */
10
11 const int PIN_LM35 = A0; //pin connection
12
13 float sensorVolt; //unit: mV
14 float temperature; //unit: centigrade
15
16 void setup()
17 {
18     analogReference(INTERNAL); //use internal voltage reference
19     Serial.begin(115200); //initialize serial communication
20 }
21
22 void loop()
23 {
24     sensorVolt = analogRead(PIN_LM35)*1100.0/1023; //do conversion
25     temperature = sensorVolt/10.0;
26
27     Serial.print("Temperature: "); //print the result
28     Serial.print(temperature);
29     Serial.println(" `C");
30
31     delay(1000); //delay 1s
32 }

然而,atmega328p的手册中描述内部基准源本身的误差有+-9%左右。因此,使用内部基准源在提高分辨能力的同时,也引入了额外的测量误差。更好的方法是采用外部的高精度基准源

参考资料

datasheet: LM35 Precision Centigrade Temperature Sensors - TI
Tutorial: Analog to Digital Conversion - Thanks to SparkFun
How to Build a LM35 Temperature Sensor Circuit
Arduino LM35 Sensor (包含利用Processing实现结果可视化的程序)
TMP36 Temperature Sensor - from Adafruit

时间: 2025-01-07 18:36:58

Arduino ADC + 模拟温度传感器LM35D的相关文章

arduino adc数模放大器

http://ardui.co/archives/833 http://henrysbench.capnfatz.com/henrys-bench/arduino-voltage-measurements/arduino-ads1115-module-getting-started-tutorial/ PGA 的默认值是 2/3x 增益,即 ±6.144V,其分辨率为 16bits,即: ±6.144V / (2∧16 – 1) = ±6.144V / 32767 =  ±0.1875 mV 与

「雕爷学编程」Arduino动手做(39)——DS18B20温度传感器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉. [Arduino]108种传感器模块系列实验(资料+代码+图形+仿真) 实验三十九:DS18B20单总线数字温度传感器模块 DS18B20 是世界第一片支持"一线总线"接口的温度传感器,

给Arduino打电话 — Twilio云通讯

怎样 用你的电话 呼叫Arduino,用Twilio和Yaler.net就可以做到! Twilio是一个网页服务器,可以把所有的消息都转移到电话中.这是一个用于电话通讯的REST API,托管于云服务器.基于这样的环境,当有人呼叫Arduino预先设好的电话号时,Twilio向Arduino请求一个新的voice.xml文件.响应内容读给呼叫人Alice,一端发向语音识别引擎的Twilio的文本的语音. Yaler.net 能使网页访问防火墙后的嵌入式设备,NAT或者一个移动网络路由.这就使Tw

Arduino传感器连载之温度测量篇

来源:http://www.hzhike.com/School/2016/201607/20160711100131.html 温度是我们经常接触到的物理量,能够被我们所直观的感受得到,例如天气凉了需要增添衣物,吃的食物太烫需要吹一吹,同时也需要对温度精确的测量,例如人类的正常体温是37.5℃,一个大气压下纯水沸腾时的温度是100℃,都需要我们去做实验来找出其中的科学.下面我们将详细讲解几种常用的温度传感器,并利用Arduino来实现温度的测量,包括热敏电阻.LM35.DS18B20.DHT11

Arduino LM35温度计

使用Arduino读取LM35温度传感器的值算出当前温度显示到LCD上: 关于控制LCD的显示前一篇文章中已经介绍了http://www.cnblogs.com/Zhang-Shangyu/p/5249206.html,这里介绍一下LM35温度传感器 LM35芯片实物图 下图来自http://www.arduino.cn/thread-1055-1-1.html 硬件连接: LCD连接方式同前一篇文章http://www.cnblogs.com/Zhang-Shangyu/p/5249206.h

使用Arduino开发板制作交流电压表

在本文中,我们将使用Arduino开发板制作一个交流电压测量装置,测量我们家中交流电源的电压.我们将在Arduino IDE的串行监视器上打印输出该电压,并在万用表上显示出来. 制作数字电压表比模拟电压更容易一些,因为在制作模拟电压表时,您必须具备一些物理参数的知识,如扭矩.摩擦损耗等.然而在制作数字电压表时,您只需使用LCD或LED矩阵或甚至你的笔记本电脑打印输出电压值即可. 所需的元件 ●  一个220-12变压器 ●   1N4007二极管 ●   1uf电容 ●   10k和4.7K电阻

Arduino 极速入门系列 - 光控灯(3) - 光敏电阻、与电阻分压那些事

继续是讲解基础原理,新手专用部分.这次讲光敏电阻,和用电阻分压.光电元器件有好几种,其中测光相关的元器件,常见的有光敏三极管和光敏电阻,我们这次光控灯用光敏电阻.在我们光控灯里面,将会使用它搭建出分压电路,给Arduino 的模拟引脚发送模拟量.新学的朋友们需要了解光敏电阻是什么回事,分压又是怎样做的,本篇就是讲解这两点. 光敏电阻 光敏电阻(photo-resistor / light-dependent resistor),是在特定波段照射下,阻值会减少的电阻.所谓特定波段,也包括了不可见的

初探物联网 - 基于Arduino的气象站和View and Data API的结合实例

如果你参加了上个月在北京的Autodesk 开发者日,你应该看到了我做的关于Arduino的物联网实例演示,如果你没看到,欢迎参加14号在上海的开发者日,到时候我会再演(xian)示(bai)一下. 这是个基于这样一个场景的简单演示.我的一个建筑物上面安装了这样一个温度传感器,随时把当前环境温度上传到云端,在浏览器端可以显示这个建筑物的三维模型和温度变化曲线图.如果温度到达一定的高温,比如大于40度,那可能是起火了,就需要发出高温报警,在三维模型中定位出报警的温度传感器的位置,并发出火警警报.

温度测量【温度传感器类型】

温度传感器主要有RTD.热电偶.热敏电阻器.IC传感器这四种 原文地址引用 http://www.mr-wu.cn/rtd-thermocouple-rtc-thermistor-ic-sensor-compare/ RTD 当 一边测量RTD的电阻一边改变它的温度时,响应几乎是线性的,表现得像一个电阻器.如图1所示,该RTD的电阻曲线并非完全呈线性,而是有几度的偏差(示 出了一条用作参考的直线)-- 但却是高度可预测并可复验的.为了对这种轻微的非线性进行补偿,大多数设计人员都会对测得的电阻值进