假設(shè)您坐在房間里感覺(jué)很冷,并且希望加熱器自動(dòng)打開(kāi),然后在室溫升高一段時(shí)間后關(guān)閉,那么這個(gè)項(xiàng)目可以幫助您根據(jù)溫度自動(dòng)控制家用電器。在這里,我們正在根據(jù)溫度使用Arduino控制家用AC設(shè)備。在這里,我們使用熱敏電阻來(lái)讀取溫度。
在本教程中,我們將連接帶有繼電器的交流電器,并使用Arduino制作溫控家庭自動(dòng)化系統(tǒng)。它還在與電路連接的 16*2 LCD 顯示屏上顯示溫度和設(shè)備狀態(tài)。
所需材料
Arduino UNO
繼電器 (5v)
16*2液晶顯示屏
燈泡 (節(jié)能燈)
NTC熱敏電阻 10k
連接線
電阻器(1k 和 10k 歐姆)
電位器 (10k)
電路圖
這種基于溫度的家庭自動(dòng)化系統(tǒng)由各種組件組成,如Arduino板,LCD顯示器,繼電器和熱敏電阻。工作主要取決于繼電器和熱敏電阻,隨著溫度升高,繼電器將被打開(kāi),如果溫度降至預(yù)設(shè)值以下,則繼電器將被關(guān)閉。與繼電器連接的家用電器也將相應(yīng)地打開(kāi)和關(guān)閉。在這里,我們使用CFL燈泡作為AC設(shè)備。整個(gè)觸發(fā)過(guò)程和溫度值設(shè)置由編程的Arduino板執(zhí)行。它還為我們提供了有關(guān)每半秒的溫度變化和LCD屏幕上的電器狀態(tài)的詳細(xì)信息。
中繼:
繼電器是一種電磁開(kāi)關(guān),由小電流控制,用于打開(kāi)和關(guān)閉相對(duì)較大的電流。這意味著通過(guò)施加小電流,我們可以打開(kāi)繼電器,從而允許更大的電流流動(dòng)。繼電器是使用小得多的直流電流控制交流(交流)設(shè)備的一個(gè)很好的例子。常用的繼電器是單刀雙擲(SPDT)繼電器,它有五個(gè)端子如下:
當(dāng)線圈沒(méi)有施加電壓時(shí),COM(共)連接到NC(常閉觸點(diǎn))。當(dāng)對(duì)線圈施加一些電壓時(shí),產(chǎn)生的電磁場(chǎng)會(huì)吸引電樞(連接到彈簧的杠桿),COM和NO(常開(kāi)觸點(diǎn))被連接,從而允許更大的電流流動(dòng)。繼電器有多種額定值,這里我們使用 5V 工作電壓繼電器,允許 7A-250VAC 電流流動(dòng)。
繼電器通過(guò)使用由晶體管、二極管和電阻組成的小型驅(qū)動(dòng)器電路進(jìn)行配置。晶體管用于放大電流,以便全電流(來(lái)自直流電源 – 9v 電池)可以流過(guò)線圈以使其完全通電。電阻用于為晶體管提供偏置。二極管用于防止晶體管關(guān)閉時(shí)的反向電流。每個(gè)電感線圈在突然關(guān)閉時(shí)都會(huì)產(chǎn)生相等且相反的電動(dòng)勢(shì),這可能會(huì)對(duì)元件造成永久性損壞,因此必須使用二極管來(lái)防止反向電流。繼電器模塊在市場(chǎng)上很容易買(mǎi)到,其所有驅(qū)動(dòng)器電路都在板上,或者您可以使用上述組件來(lái)創(chuàng)建它。這里我們使用了5V繼電器模塊
使用熱敏電阻計(jì)算溫度:
我們從分壓器電路中得知:
Vout= (Vin * Rt) / (R + Rt)
因此,Rt 的值將是:
Rt = R (Vin/Vout) – 1
這里Rt將是熱敏電阻(Rt)的電阻,R將是10k歐姆電阻。
該公式用于根據(jù)輸出電壓Vo的測(cè)量值計(jì)算熱敏電阻電阻。我們可以從 Arduino 引腳 A0 處的 ADC 值中獲取電壓輸出的值,如下所示的 Arduino 代碼。
根據(jù)熱敏電阻電阻計(jì)算溫度
在數(shù)學(xué)上,熱敏電阻電阻只能借助斯坦-哈特方程計(jì)算。
T = 1 / (A + B*ln(Rt) + C*ln (Rt)3 )
其中,A、B 和 C 是常數(shù),Rt 是熱敏電阻電阻,ln 表示對(duì)數(shù)。
項(xiàng)目中使用的熱敏電阻的常量值為 A = 1.009249522×10?3,B= 2.378405444×10?4,C= 2.019202697×10?7.這些常數(shù)值可以通過(guò)輸入熱敏電阻在三種不同溫度下的三個(gè)電阻值從計(jì)算器中獲得。您可以直接從熱敏電阻的數(shù)據(jù)表中獲取這些常數(shù)值,也可以獲得不同溫度下的三個(gè)電阻值,并使用給定的計(jì)算器獲取常數(shù)值。
因此,為了計(jì)算溫度,我們只需要熱敏電阻電阻的值。從上面給出的計(jì)算中獲得 Rt 的值后,將值放入斯坦-哈特方程中,我們將得到以開(kāi)爾文為單位的溫度值。由于輸出電壓的微小變化會(huì)導(dǎo)致溫度變化。
Arduino 代碼
本文末尾給出了此溫控家用電器的完整Arduino代碼。在這里,我們已經(jīng)解釋了其中的幾個(gè)部分。
為了執(zhí)行數(shù)學(xué)運(yùn)算,我們使用頭文件“#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)
為了在啟動(dòng)時(shí)設(shè)置繼電器(作為輸出)和LCD,我們必須在void設(shè)置部分編寫(xiě)代碼
Void setup(){
lcd.begin(16,2);
lcd.clear();
pinMode(RELAY, OUTPUT);
}
為了使用熱敏電阻的電阻通過(guò)斯坦-哈特方程計(jì)算溫度,我們?cè)诖a中執(zhí)行一些簡(jiǎn)單的數(shù)學(xué)方程,如上面的計(jì)算中所述:
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的模擬引腳讀取值,并通過(guò)執(zhí)行數(shù)學(xué)運(yùn)算來(lái)打印溫度值
lcd.print((Thermistor(analogRead(0))));
該值由熱敏電阻函數(shù)獲取,然后開(kāi)始打印計(jì)算
float Thermistor(int Vo)
我們必須根據(jù)溫度編寫(xiě)打開(kāi)和關(guān)閉燈的條件的代碼,因?yàn)槲覀冊(cè)O(shè)置了溫度值,例如如果溫度升高超過(guò) 28 攝氏度,燈將打開(kāi),如果燈保持關(guān)閉。因此,每當(dāng)溫度高于 28 度時(shí),我們需要使繼電器引腳 (PIN 8) 變高以使繼電器模塊打開(kāi)。當(dāng)溫度低于 28 度時(shí),我們需要將繼電器引腳調(diào)低以關(guān)閉繼電器模塊。
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); ?
溫控家庭自動(dòng)化系統(tǒng)工作原理:
要為 Arduino 供電,您可以通過(guò) USB 將其供電到筆記本電腦或連接 12v 適配器。LCD與Arduino接口以顯示溫度值,熱敏電阻和繼電器根據(jù)電路圖連接。模擬引腳(A0)用于每時(shí)每刻檢查熱敏電阻引腳的電壓,在通過(guò)Arduino代碼使用Stein-Hart方程進(jìn)行計(jì)算后,我們能夠獲得溫度并將其以攝氏度和華氏度顯示在LCD上。
當(dāng)溫度升高超過(guò) 28 攝氏度時(shí),Arduino 通過(guò)使引腳 8 升高(繼電器模塊連接的位置)使繼電器模塊打開(kāi),當(dāng)溫度低于 28 度時(shí),Arduino 通過(guò)使引腳低關(guān)閉繼電器模塊。CFL燈泡也將根據(jù)繼電器模塊打開(kāi)和關(guān)閉。
#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);?
}
-
熱敏電阻
+關(guān)注
關(guān)注
14文章
1175瀏覽量
101622 -
家用電器
+關(guān)注
關(guān)注
2文章
265瀏覽量
29496 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187571
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論