當前位置:
首頁 > 最新 > 使用Arduino開發板製作自動空調溫度控制器

使用Arduino開發板製作自動空調溫度控制器

曾經被認為是奢侈品的空調,只能在大酒店、電影廳、餐廳等等看到。但是,現在幾乎每個人家中都有一個AC來度過夏季/冬天,並且那些擁有它的人們都在擔心一件共同的事情。那就是他們的高耗電量和充電器。在這個項目中,我們將製作一個小型自動溫度控制電路,通過根據房間溫度自動改變空調溫度,盡量降低電力消耗。通過周期性地改變設定的溫度,我們可以使空調長時間工作在較低的溫度值,從而使它消耗更少的電力。

我們大多數人都會遇到這樣的情況:我們不得不在一天中的不同時間將空調的設定溫度改變成不同的值,以始終保持我們舒適。為了使這個過程自動化,這個項目使用一個溫度感測器(DHT11)讀取房間的當前溫度,根據這個值,它將通過一個類似於空調遙控器的紅外發射器向空調發送指令。空調將對這些命令作出反應,就好像它對遙控器反應一樣,從而調節溫度。隨著房間溫度的變化,Arduino也會調整空調設定溫度,以保持你的溫度。聽起來很酷嗎?...讓我們看看如何建立一個這樣的項目。

所需材料:

1. Arduino Mega 2560開發板

2.TSOP1738(或HS0038)

3. IR發射器

4.DHT11溫度/濕度感測器

5. 任意彩色LED和1K電阻(可選)

6. 麵包板

7. 連接導線

工作方法:

我們家裡用來控制電視、家庭影院、空調等電器的所有遙控器都需要使用紅外發射器。紅外發射器只不過是一個紅外發光二極體,它可以通過一些重複脈衝來發射信號;該信號將由電子設備中的接收器讀取。對於遙控器上的每個不同的按鈕,將會發射一個獨有的信號,接收器讀取後用於執行特定的預定義任務。如果我們能夠讀取來自遙控器的信號,那麼當需要執行該特定任務時,我們可以使用紅外LED模擬相同的信號。

TSOP1738是一個紅外接收器,可用於解碼來自遙控器的信號。這個接收器連接到Arduino開發板,以便解碼每個按鈕的信號,然後在有需要時,使用Arduino模擬信號。這樣我們可以使用Arduino控制我們的空調。

現在剩下的就是使用DHT11讀取溫度值,以及使用相應的IR信號指示空調。為了使項目看起來更具吸引力和界面友好,我還添加了一個OLED顯示屏來顯示當前溫度、濕度和空調設定溫度。

準備條件:

這個自動空調溫度控制器項目是略微高於初學者的水平,但通過以下幾個教程,任何人都可以在較短時間內來製作這個。所以如果你是初次學校OLED、DHT11或者TSOP1738,那麼就可以回顧一下這些教程,你可以學到一些基礎知識以及如何開始使用這些教程。名單似乎有點長,但請相信我,這些很容易,並且值得學習,也會打開許多新項目的大門。

1. 使用TSOP和IR LED的基本電路,理解工作原理

2. DHT11與Arduino的基本連接指南

3. OLED與Arduino的基本連接指南

4. 將TSOP與Arduino連接以讀取IR遙控器的值

請確保您有一個Arduino Mega開發板,或者任何其他版本的Arduino,因為代碼大多。另外,請檢查您是否已經安裝了以下Arduino庫,如果沒有,請從下面的鏈接進行安裝:

1. 用於TSOP和IR Blaster的IR遙控器庫

2. OLED的Adafruit代碼庫

3. 用於OLED的GFX圖形庫

4. DHT11溫度感測器感測器庫

空調遙控器的工作原理:

在開始項目之前,請花點時間注意您的空調遙控器是如何工作的。與電視、DVD紅外遙控器相比,空調遙控器的工作方式有點不同。遙控器上可能只有10-12個按鈕,但是它們可以發送很多不同類型的信號。這意味著遙控器不會每次都為同一個按鈕發送相同的代碼。例如,當使用向下按鈕降低溫度使其達到24°C(攝氏度)時,您將獲得一組數據的信號,但是當您再次按下以將其設置為25°C時,您將得不到相同的數據,因為溫度現在是25而不是24。同樣,對於不同的風扇速度、睡眠設置等,25°C時的代碼也會有所不同。因此,讓我們不要擺弄所有選項,只集中在溫度值,其他設置採用恆定值。

另一個問題是每個按鍵發送的數據量,正常的遠程發送24位或48位,但空調遙控器可能發送高達228位,因為每個信號包含大量的信息,如溫度、風扇速度、睡眠時間、擺動樣式等,這就是為什麼我們需要一個存儲容量大的Arduino Mega開發板的原因。

電路圖和說明:

幸運的是,這個自動空調溫度控制項目的硬體設置非常簡單。您可以簡單地使用麵包板並按下圖所示進行連接。

下表也可以用來驗證你的連接。

一旦連接完成後,應該看起來如下所示。我用麵包板來連接,但是你也可以直接使用導線來連接所有的部件。

解碼您的空調遙控器信號:

控制空調的第一步是使用TSOP1738來解碼空調遙控器的IR代碼。按照電路圖所示完成所有連接,並確保已經安裝了所有提到的庫。現在打開示常式序「IRrecvDumpV2」,它可以在File -> Examples -> IRremote - > IRrecvDumpV2中找到。將程序上傳到Arduino Mega開發板並打開串列監視器。

將您的遙控器指向TSOP並按任意按鈕,對於您按下每個按鈕的相應信號,將由TSOP1738讀取,由Arduino解碼並顯示在串列監視器中。對於您的遙控器上的每個溫度變化,您將得到一組不同的數據。保存這個數據,我們將在我們的主程序中使用它。你的串口監視器看起來像這樣,我也顯示了保存複製的數據的Word文件。

屏幕截圖顯示了我的空調遙控器的溫度設置為26°C的代碼。根據您的遙控器,您將得到一組不同的代碼。同樣複製所有不同溫度級別的代碼。您可以檢查本教程結尾給出的Arduino代碼中的所有空調遙控IR代碼。

主要的Arduino程序:

完整的主要Arduino程序可以在這個頁面的底部找到,但是你不能使用相同的程序。您必須更改剛剛從上面的示例框架中獲取的信號代碼值。在你的Arduino IDE上打開主程序,並向下滾動到下面顯示的區域,你必須用你的遙控器獲得的數值替換數組值。

請注意,我已經使用了10個數組,其中兩個用於打開和關閉AC,而其餘8個用於設置不同的溫度。例如,Temp23用於設置AC上的23°C,因此請使用該陣列中的相應代碼。一旦完成,您只需將代碼上傳到您的Arduino,並將其放置在您的空調對面,享受Cool Breeze。

代碼的說明如下,首先我們必須使用DHT1溫度感測器來讀取溫度和濕度並將其顯示在OLED上。這由以下代碼完成。

DHT.read11(DHT11_PIN); //Read the Temp and Humidity

Measured_temp = DHT.temperature + temp_error;

Measured_Humi = DHT.humidity;

// text display tests

display.setTextSize(1);

display.setTextColor(WHITE);

display.setCursor(0,0);

display.print("Temperature: "); display.print(Measured_temp);display.println("C");

display.setCursor(0,10);

display.print("Humidity: "); display.print(Measured_Humi);display.println("%");

複製代碼

一旦我們知道房間的溫度,我們只需要將其與期望的值進行比較。這個所需的值是一個常數值,在我的程序中設置為27°C(攝氏度)。所以基於這個比較,我們將設置相應的交流溫度,如下所示:

if (Measured_temp == Desired_temperature+3) //If AC is ON and measured temp is very high than desired

{

irsend.sendRaw(Temp24, sizeof(Temp24) / sizeof(Temp24[0]), khz); delay(2000);//Send signal to set 24*C

AC_Temp = 24;

}

複製代碼

測量溫度為30°C(因為所需溫度為27°C),交流電會被設置為24°C。同樣,我們可以創建許多If循環來根據測量的溫度設置不同的溫度級別,如下所示。

if (Measured_temp == Desired_temperature-1) //If AC is ON and measured temp is low than desired value

{

irsend.sendRaw(Temp28, sizeof(Temp28) / sizeof(Temp28[0]), khz); delay(2000);//Send signal to set 28*C

AC_Temp = 28;

}

if (Measured_temp == Desired_temperature-2 ) //If AC is ON and measured temp is very low than desired value

{

irsend.sendRaw(Temp29, sizeof(Temp29) / sizeof(Temp29[0]), khz); delay(2000);//Send signal to set 29*C

AC_Temp = 29;

}

if (Measured_temp == Desired_temperature-3 ) //If AC is ON and measured temp is very very low desired value

{

irsend.sendRaw(Temp30, sizeof(Temp30) / sizeof(Temp30[0]), khz); delay(2000);//Send signal to set 30*C

AC_Temp = 30;

}

複製代碼

自動空調溫度控制系統的工作過程:

當您的代碼和硬體準備就緒時,將代碼上傳到您的電路板,您應該注意OLED顯示類似的東西。

現在把電路放在空調的對面,你注意到空調的溫度是根據房間的溫度來控制的。 您可以嘗試提高DHT11感測器附近的溫度,以檢查空調溫度是否被控制。

您可以調整程序以執行任何所需的操作; 您所需要的只是您從示例框架中獲得的代碼。 希望你了解這個自動溫度控制器項目,並喜歡製作非常相似的東西。 我知道這裡有很多地方比較難懂,但不要擔心。只需使用論壇來描述你的問題,這裡的人肯定會樂於幫助您解決問題。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 一板網電子技術論壇 的精彩文章:

基於Arduino開發板的光學指紋識別模塊指南

TAG:一板網電子技術論壇 |