风筝
发表于: 2018-10-4 21:18:41 | 显示全部楼层

温度计使我们能够读取任何房间、空间或区域的温度。温度计广泛用于工业中用于制造过程中的温度监测。同样,温度计对医院至关重要,特别是在孵化单元中。模拟温度计的需求随着时间的推移而逐渐减少,因为模拟温度计不能用于远程温度监测,它们很慢且过时。然而,现在数字温度计是带有微控制器开发的,并提供各种功能,使它们更实用和有用。例如,数字温度计可用于无线领域,其中操作员的物理存在是不切实际的,例如在工业中的热炉中。温度计读取温度并将信号无线传输到手机或监控室中的HMI系统。此外,温度范围可根据需要设置为摄氏或华氏温度,并可显示在屏幕上或以LED数码管的形式显示。


在本篇文章中,我们将详细讨论数字温度计的完整设计和开发过程。该设计中使用的算法简单易懂。使用的组件很少,并且在市场上容易获得。虽然这个项目的整体开发成本低且容易,但结果却很令人满意。让我们看看这个设计是如何工作的。


理论知识

我们可以在家中开发基于Arduino开发板和LM35的数字温度计,只需要很少的元件和工具。本设计中使用的Arduino UNO是一个微控制器,负责温度计算和显示的数据处理和处理。 Arduino UNO具有数字I / O和模拟引脚。在本文中,我们同时使用了数字和模拟引脚。


下一个组件是LM35,它是一个温度传感器,看起来更像一个简单的BJT。与大多数温度传感器相比,LM35价格便宜,即使在极端温度下也能提供高精度的温度。 LM35可用于模拟电路和嵌入式系统,因为它在输出端提供模拟电压。


lm35.jpg

只是计算温度还远远不够,为了显示我们的结果,使用了基于HDD44780驱动芯片的LCD显示屏1602。 本文中,1602代表16行和2列。该组件广泛用于简单显示,因为它成本低且工作效率高。 LCD与Arduino兼容,因为两端都满足所涉及的协议。如果需要更多行,LCD也可以采用16×4配置。


我们来看看必要的组件。


需要的组件

此设计所需的组件包括:

●    Arduino UNO开发板

●    LM35温度传感器

●    LCD显示屏1602(基于HDD44780驱动)

●    6v电池或5v USB电源(移动适配器/笔记本电脑)

●    连接导线

●    面包板


连接原理图

digital-thermometer-arduino-2.jpg


LCD的引脚15和引脚16用于背光。如果这些没有连接,那么背光将保持关闭。用+ 5v连接LCD的引脚15。这是背光LED的正极端子。引脚16是背光LED的负端子,因此引脚16接地。


仿真

图中描述的电路图很简单,如果需要可以很容易地修改。无论何时设计电路,建议首先仿真并检查结果是否符合要求。由于只需点击几下即可轻松修改仿真,但硬件难以修改,因为焊接、拆焊、故障排除可能非常耗时。


该仿真已在Proteus 8上创建,所使用的库可在Internet上轻松获得。首先,添加所有必要的组件并按照电路图中的说明连接它们。

必须仔细考虑所有组件的引脚配置,因为一个错误的连接可能导致设计不正常或无法运行。


LM35提供与其保持的温度相关的模拟电压。由于仿真中温度无法改变,因此可以使用温度按钮控制仿真模型。当LM35的仿真模型的温度变化时,温度上升的指令被转发到传感器。 LM35的升温量为10mv /摄氏度。

由于LM35的这些输出电压是模拟的,并且MCU无法直接处理模拟值,因此这些值首先传递给模数转换器。根据算法进一步处理数字转换的值。这些数字输入用于计算摄氏度和华氏度的温度。


接下来,温度显示在与Arduino连接的LCD上。 LCD具有数据引脚、读/写使能配置以实现更多功能。


如仿真中所示,连接每个连接至关重要。电池电压必须保持5v。虽然在仿真中,即使电压超过5v,它们也不会对元件造成损害,但实际上,必须考虑元件的额定电压。超过5v会对组件造成永久性损坏。


完成所有必要的连接后,确保组件的每个连接和值都符合设计要求。在Arduino UNO的仿真模型中添加hex代码文件。 hex文件用作MCU的机器语言指令。

通过改变传感器的温度来运行仿真并观察功能。如果LCD上的温度仅根据传感器上的温度变化而变化,则模拟工作正常。

如果LCD上显示的温度相对于传感器温度没有变化,请检查传感器与Arduino的连接,并确保MCU代码符合所提供的代码。如果LCD上没有显示,则LCD和Arduino之间的连接可能是错误的,或者LCD或命令库在代码中可能是不准确的。


代码

已经在Arduino IDE上验证了本设计中使用的代码。幸运的是,Arduino IDE提供了令人印象深刻的功能,例如串行监视器上的代码运行时结果和内置库的加载。


该代码首先声明了LCD库和Arduino UNO的引脚配置。所有变量和引脚配置都在开头定义。

setup()函数中,通过命令初始化LCD,波特率设置为正确的通信。

代码的主要部分位于loop()函数中,除非MCU的电源被切断,否则应该反复运行。

执行模数转换,并计算温度以摄氏度为单位。此温度显示在串行监视器上,只有连接了硬件才能观察到。然后使用特定命令在LCD上显示测量的温度。

  1. // Digital Thermometer

  2. #include <LiquidCrystal.h>
  3. LiquidCrystal LCD(10, 9, 5, 4, 3, 2);
  4. float tempC;
  5. int reading;
  6. int tempPin = 1;

  7. void setup()
  8. {
  9. LCD.begin(16,2);
  10. LCD.setCursor(0,1);
  11. LCD.print(” “);
  12. LCD.setCursor(0,0);
  13. LCD.print(” “);

  14. analogReference(INTERNAL);
  15. Serial.begin(9600);
  16. }

  17. void loop()
  18. {
  19. reading = analogRead(tempPin);
  20. tempC = reading / 9.31;
  21. Serial.println(tempC);

  22. LCD.setCursor(0,0);
  23. LCD.print(” Temperature”);

  24. LCD.setCursor(0,1);
  25. LCD.print(” Temp: “);
  26. LCD.print(tempC);
  27. LCD.print(” C”);
  28. delay(200);
  29. LCD.setCursor(0,1);
  30. LCD.print(” “);
  31. }
复制代码

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

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-12-4 01:21 , Processed in 0.034915 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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