如何根据温度使用Arduino控制家用AC设备

描述

假设您坐在房间里感觉很冷,并且希望加热器自动打开,然后在室温升高一段时间后关闭,那么这个项目可以帮助您根据温度自动控制家用电器。在这里,我们正在根据温度使用Arduino控制家用AC设备。在这里,我们使用热敏电阻来读取温度。

在本教程中,我们将连接带有继电器的交流电器,并使用Arduino制作温控家庭自动化系统。它还在与电路连接的 16*2 LCD 显示屏上显示温度和设备状态。

所需材料

Arduino UNO

继电器 (5v)

16*2液晶显示屏

灯泡 (节能灯)

NTC热敏电阻 10k

连接线

电阻器(1k 和 10k 欧姆)

电位器 (10k)

电路图

Arduino

这种基于温度的家庭自动化系统由各种组件组成,如Arduino板,LCD显示器,继电器和热敏电阻。工作主要取决于继电器和热敏电阻,随着温度升高,继电器将被打开,如果温度降至预设值以下,则继电器将被关闭。与继电器连接的家用电器也将相应地打开和关闭。在这里,我们使用CFL灯泡作为AC设备。整个触发过程和温度值设置由编程的Arduino板执行。它还为我们提供了有关每半秒的温度变化和LCD屏幕上的电器状态的详细信息。

中继:

继电器是一种电磁开关,由小电流控制,用于打开和关闭相对较大的电流。这意味着通过施加小电流,我们可以打开继电器,从而允许更大的电流流动。继电器是使用小得多的直流电流控制交流(交流)设备的一个很好的例子。常用的继电器是单刀双掷(SPDT)继电器,它有五个端子如下:

Arduino

当线圈没有施加电压时,COM(共)连接到NC(常闭触点)。当对线圈施加一些电压时,产生的电磁场会吸引电枢(连接到弹簧的杠杆),COM和NO(常开触点)被连接,从而允许更大的电流流动。继电器有多种额定值,这里我们使用 5V 工作电压继电器,允许 7A-250VAC 电流流动。

继电器通过使用由晶体管、二极管和电阻组成的小型驱动器电路进行配置。晶体管用于放大电流,以便全电流(来自直流电源 – 9v 电池)可以流过线圈以使其完全通电。电阻用于为晶体管提供偏置。二极管用于防止晶体管关闭时的反向电流。每个电感线圈在突然关闭时都会产生相等且相反的电动势,这可能会对元件造成永久性损坏,因此必须使用二极管来防止反向电流。继电器模块在市场上很容易买到,其所有驱动器电路都在板上,或者您可以使用上述组件来创建它。这里我们使用了5V继电器模块

Arduino

 

Arduino

使用热敏电阻计算温度:

我们从分压器电路中得知:

Arduino

Vout= (Vin * Rt) / (R + Rt)

因此,Rt 的值将是:

Rt = R (Vin/Vout) – 1

这里Rt将是热敏电阻(Rt)的电阻,R将是10k欧姆电阻。

该公式用于根据输出电压Vo的测量值计算热敏电阻电阻。我们可以从 Arduino 引脚 A0 处的 ADC 值中获取电压输出的值,如下所示的 Arduino 代码。

根据热敏电阻电阻计算温度

在数学上,热敏电阻电阻只能借助斯坦-哈特方程计算。

T = 1 / (A + B*ln(Rt) + C*ln (Rt)3 )

其中,A、B 和 C 是常数,Rt 是热敏电阻电阻,ln 表示对数。

项目中使用的热敏电阻的常量值为 A = 1.009249522×10−3,B= 2.378405444×10−4,C= 2.019202697×10−7.这些常数值可以通过输入热敏电阻在三种不同温度下的三个电阻值从计算器中获得。您可以直接从热敏电阻的数据表中获取这些常数值,也可以获得不同温度下的三个电阻值,并使用给定的计算器获取常数值。

因此,为了计算温度,我们只需要热敏电阻电阻的值。从上面给出的计算中获得 Rt 的值后,将值放入斯坦-哈特方程中,我们将得到以开尔文为单位的温度值。由于输出电压的微小变化会导致温度变化。

Arduino 代码
本文末尾给出了此温控家用电器的完整Arduino代码。在这里,我们已经解释了其中的几个部分。

为了执行数学运算,我们使用头文件“#include ”,LCD头文件是“#include ”,“#define继电器8”用于分配继电器的输入引脚。我们必须使用代码分配LCD的引脚。

#include
#include "LiquidCrystal.h"
#define RELAY 8 
LiquidCrystal lcd(6,7,5,4,3,2); // these are in format like LCD(Rs, EN, D4, D5, D6, D7)
为了在启动时设置继电器(作为输出)和LCD,我们必须在void设置部分编写代码

Void setup(){
lcd.begin(16,2);
lcd.clear();
pinMode(RELAY, OUTPUT);
}
为了使用热敏电阻的电阻通过斯坦-哈特方程计算温度,我们在代码中执行一些简单的数学方程,如上面的计算中所述:

float a = 1.009249522e-03, b = 2.378405444e-04, c = 2.019202697e-07;
float T, logRt, Tf, Tc;
float Thermistor(int Vo) {
logRt = log(10000.0*((1024.0/Vo-1)));
T = (1.0 / (a + b*logRt + c* logRt * logRt * logRt)); // We get the temperature value in Kelvin from this Stein-Hart equation
Tc = T - 273.15; // Convert Kelvin to Celsius
Tf = (Tc * 1.8) + 32.0; // Convert Kelvin to Fahrenheit
return T;
}
在下面的代码中,功能热敏电阻从Arduino的模拟引脚读取值,并通过执行数学运算来打印温度值

lcd.print((Thermistor(analogRead(0))));
该值由热敏电阻函数获取,然后开始打印计算

float Thermistor(int Vo)

我们必须根据温度编写打开和关闭灯的条件的代码,因为我们设置了温度值,例如如果温度升高超过 28 摄氏度,灯将打开,如果灯保持关闭。因此,每当温度高于 28 度时,我们需要使继电器引脚 (PIN 8) 变高以使继电器模块打开。当温度低于 28 度时,我们需要将继电器引脚调低以关闭继电器模块。

if (Tc > 28) digitalWrite(RELAY, HIGH),lcd.setCursor(0,1),lcd.print("Light status:ON "),delay(500); else 

if (Tc < 28) digitalWrite(RELAY, LOW),lcd.setCursor(0,1),lcd.print("Light status:OFF"),delay(500);  

温控家庭自动化系统工作原理:

要为 Arduino 供电,您可以通过 USB 将其供电到笔记本电脑或连接 12v 适配器。LCD与Arduino接口以显示温度值,热敏电阻和继电器根据电路图连接。模拟引脚(A0)用于每时每刻检查热敏电阻引脚的电压,在通过Arduino代码使用Stein-Hart方程进行计算后,我们能够获得温度并将其以摄氏度和华氏度显示在LCD上。

Arduino

当温度升高超过 28 摄氏度时,Arduino 通过使引脚 8 升高(继电器模块连接的位置)使继电器模块打开,当温度低于 28 度时,Arduino 通过使引脚低关闭继电器模块。CFL灯泡也将根据继电器模块打开和关闭。

#include

#include "LiquidCrystal.h"

#define RELAY 8 

LiquidCrystal lcd(6,7,5,4,3,2);

float A = 1.009249522e-03, B = 2.378405444e-04, C = 2.019202697e-07;

float T,logRt,Tf,Tc;

float Thermistor(int Vo) {

logRt = log(10000.0*((1024.0/Vo-1))); 

T = (1.0 / (A + B*logRt + C*logRt*logRt*logRt)); // We get the temperature value in Kelvin from this Stein-Hart equation

Tc = T - 273.15; // Convert Kelvin to Celcius

Tf = (T * 1.8) + 32.0; // Convert Kelvin to Fahrenheit

return T;

}


void setup() {

lcd.begin(16,2);

lcd.clear();

pinMode(RELAY, OUTPUT); 

}


void loop() {



lcd.setCursor(0,0);

lcd.print("Temperature:");

lcd.print(int(Thermistor(analogRead(0))));

lcd.print("C ");

delay(500); // wait 0.5 seconds before sampling temperature again


if (Tc > 28) digitalWrite(RELAY, HIGH),lcd.setCursor(0,1),lcd.print("Light status:ON "),delay(500);

else if (Tc < 28) digitalWrite(RELAY, LOW),lcd.setCursor(0,1),lcd.print("Light status:OFF"),delay(500); 



}
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分