风筝
发表于: 2020-4-9 15:49:36 | 显示全部楼层

在本篇文章中,我们将LM35温度传感器与Arduino开发板连接,设计一款数字温度计。测得的温度将直接显示在1602 LCD显示屏上。 LM35能够以摄氏度为单位读取温度。传感器的输出电压与摄氏温度成正比。 LM35可以在-55°C至+ 150°C的范围内使用,精度为+/- 0.75°C。现在,让我们学习如何使用Arduino和LM35温度传感器设计数字温度计。

Digital-Thermometer-Using-Arduino-LM35-Temperature-Sensor.jpg


所需的组件

我们需要以下组件来设计数字温度计。

●    Arduino UNO开发板

●    LM35温度传感器

●    1602 LCD显示屏

●    面包板

●    连接线


LM35温度传感器

LM35系列温度传感器是精密集成电路温度器件,其输出电压与摄氏度的温度成线性比例。 LM35器件相对于用开尔文(Kelvin)校准的线性温度传感器具有优势,因为不需要用户从输出中减去较大的恒定电压即可获得方便的摄氏度。 LM35器件不需要任何外部校准或修整即可在室温下提供±¼°C的典型精度,在整个-55°C至150°C的温度范围内提供±¾°C的典型精度。

LM35-Temperature-Sensor.jpg


通过在晶圆级进行修整和校准可以确保较低的成本。 LM35器件的低输出阻抗、线性输出和精确的固有校准使与读数或控制电路的接口连接特别容易。该器件使用单电源或正负双电源。由于LM35器件仅从电源汲取60 µA电流,因此它在静止空气中的自发热非常低,低于0.1°C。


LM35温度传感器的主要特征:

●    直接以摄氏度校准

●    10.0 mV /°C比例因子下的线性

●    保证0.5°C的精度(在a25°C时)

●    额定温度范围为-55°C至150°C

●    适用于远程应用

●    晶圆级修整,成本低廉

●    工作电压为4至30伏

●    电流消耗小于60 mA

●    低自热,静止空气中0.08°C

●    非线性仅0.25°C(典型值)

●    低阻抗输出,0.1mA(1 mA负载)


为了了解lm35温度传感器的工作原理,我们必须了解线性比例因子。 lm35的特性是每摄氏度+10毫伏。这意味着随着传感器vout引脚的输出增加10毫伏,温度值将增加1。例如,如果传感器在vout引脚上输出100毫伏的电压,则以摄氏度为单位的温度将为10摄氏度。负温度读数也是如此。如果传感器输出的电压为-100毫伏,则温度将为-10摄氏度。

Untitled-3.png


电路图如上所示。简要地说,在图的中心有两个晶体管。一个发射器的发射面积是另一个发射器的十倍。这意味着它具有电流密度的十分之一,因为相同的电流流过两个晶体管。这会导致电阻R1两端的电压与绝对温度成正比,并且在我们关注的范围内几乎呈线性。专用电路负责“几乎”部分的工作,该电路理顺了电压与温度之间的曲线曲线。顶部的放大器通过比较两个晶体管的输出,确保左晶体管(Q1)的基极电压与绝对温度(PTAT)成正比。


右边的放大器根据部件(LM34或LM35)将绝对温度(以开尔文测量)转换为华氏温度或摄氏温度。带有“ i”的小圆圈是恒流源电路。这两个电阻在出厂时已经过校准,以生产出高精度的温度传感器。


电路图和连接

lm35-temperature-sensor-connection.png


首先,我们连接LM35温度传感器。将LM35的第1引脚连接到Arduino UNO的5V,将第3引脚连接到GND。将第二个引脚连接到Arduino UNO的模拟输入引脚A0。


源代码/程序

下面给出了使用Arduino和LM35温度传感器的数字温度计的源代码。复制此代码并将其粘贴到您的Arduino IDE中,然后将其上传到Arduino开发板中。

  1. #include<LiquidCrystal.h>
  2. LiquidCrystal lcd(8,9,10,11,12,13);
  3. #define sensor A0
  4. byte degree[8] =
  5. {
  6. 0b00011,
  7. 0b00011,
  8. 0b00000,
  9. 0b00000,
  10. 0b00000,
  11. 0b00000,
  12. 0b00000,
  13. 0b00000
  14. };
  15. void setup()
  16. {
  17. lcd.begin(16,2);
  18. lcd.createChar(1, degree);
  19. lcd.setCursor(0,0);
  20. lcd.print(" Digital ");
  21. lcd.setCursor(0,1);
  22. lcd.print(" Thermometer ");
  23. delay(2000);
  24. lcd.clear();
  25. }
  26. void loop()
  27. {
  28. /*---------Temperature-------*/
  29. float reading=analogRead(sensor);
  30. float temperature=reading*(5.0/1023.0)*100;
  31. delay(10);

  32. /*------Display Result------*/
  33. lcd.clear();
  34. lcd.setCursor(2,0);
  35. lcd.print("Temperature");
  36. lcd.setCursor(4,1);
  37. lcd.print(temperature);
  38. lcd.write(1);
  39. lcd.print("C");
  40. delay(1000);
  41. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1483



手机版|

GMT+8, 2024-5-9 07:51 , Processed in 0.047246 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表