原文地址:https://circuitdigest.com/microcontroller-projects/arduino-automatic-ac-temperature-control
使用Arduino,DHT11和IR Blaster的自动交流温度控制器
经过**阿斯温斯·拉吉(Aswinth Raj)** 2017年11月2日30
曾经被认为是奢侈品的空调(AC)(空调)仅在大型酒店,电影院,餐厅等地方可以找到。但是,现在几乎每个人都在我们家中安装了空调,以击败夏季/冬天和那些拥有它的人,担心一件普通的事情。那就是他们的高电耗和充电器的缘故。在这个项目中,我们将制造一个小的自动温度控制电路,该电路可以根据房间温度自动改变交流温度,从而将充电器最小化。通过定期更改设定温度,我们可以避免长时间使交流电在较低的温度值下工作,从而降低功耗。
我们大多数人都会遇到这样的情况,我们必须在一天的不同时间将空调的设定温度更改为不同的值,以使我们始终保持舒适。为了使该过程自动化,该项目使用温度传感器(DHT11)读取房间的当前温度,并基于该值将通过类似于AC遥控器的IR blaster向AC发送命令。AC将对这些命令做出反应,就像它对其遥控器做出反应一样,从而调节温度。随着房间温度的变化,Arduino还将调整交流电的设定温度,以您想要的方式维持温度。听起来不错吧?…让我们看看如何构建一个。
所需材料:
- Arduino Mega 2560
- TSOP1738(HS0038)
- 红外LED
- DHT11温度/湿度传感器
- 任何彩色LED和1K电阻器(可选)
- 面包板
- 连接线
工作方法:
我们家里用来控制电视,家庭影院,空调等的所有遥控器均在IR Blasters的帮助下工作。一个IR发射不过是一种红外线发光二极管可能BLASTER通过重复脉冲的信号; 该信号将被电子设备中的接收器读取。对于遥控器上的每个不同按钮,将发出一个唯一的信号,该信号在接收器读取后将用于执行特定的预定义任务。如果我们能够读取来自遥控器的信号,则可以在需要执行特定任务时使用IR LED模仿相同的信号。我们之前已经为通用红外遥控器制作了一个IR Blaster电路。
TSOP是IR接收器,可用于从遥控器传来的信号进行解码。该接收器将与Arduino接口以为每个按钮发出信号,然后在需要时将IR Led与Arduino一起使用以模仿信号。这样,我们可以使用Arduino来控制AC。
现在,剩下的就是使用DHT11读取温度值,并使用IR信号相应地指示AC。为了使该项目更具吸引力和用户友好性,我还添加了一个OLED显示屏,该显示屏可显示当前的温度,湿度和交流设定温度。了解有关将OLED与Arduino结合使用的更多信息。
先决条件:
这个自动交流温度控制器项目相对于初学者来说是稍微先进的,但是在其他一些教程的帮助下,任何人都可以在很短的时间内构建它。因此,如果您绝对是OLED,DHT11或TSOP的新手,那么请回到下面的这些教程,在这里您可以学习基础知识以及如何开始使用它们。该列表似乎有点长,但是请相信我,它很简单并且值得学习,它还会为许多新项目打开大门。
- 使用TSOP和IR LED进行工作的基本电路
- DHT11与Arduino的基本接口指南
- OLED与Arduino的基本接口指南
- 将TSOP与Arduino接口以读取IR远程值
由于代码量很大,因此请确保您具有Arduino Mega和其他任何版本的Arduino。还要检查是否已经安装以下Arduino库(如果未安装),请通过下面的链接
- 用于TSOP和IR Blaster的IR远程库
- OLED的Adafruit库
- OLED的GFX图形库
- GFX图形库依赖的Adafruit BusIO库。在库管理器中搜索“ Adafruit BusIO”,或从https://github.com/adafruit/Adafruit_BusIO手动安装
- DHT11温度传感器传感器库
- DHT11温度传感器依赖的Adafruit统一传感器驱动程序
交流遥控器的工作方式:
在我们进行该项目之前,请花一些时间,并注意您的AC遥控器的工作方式。与电视,DVD红外遥控器相比,交流遥控器的工作方式略有不同。遥控器上可能只有10-12个按钮,但是它们将能够发送许多不同类型的信号。这意味着遥控器不会为相同的按钮每次发送相同的代码。例如,当您使用向下按钮降低温度使其达到24°C(摄氏度)时,您将获得带有一组数据的信号,但是当您再次按其将其设置为25°C时,您将不会得到相同的信号。数据,因为温度现在是25,而不是24。类似地,25的代码也会因风扇速度,睡眠设置等的不同而有所不同。 。
另一个问题是每次按下按钮时要发送的数据量,普通遥控器可以发送24位或48位,但是**AC遥控器最多可以发送228位,**因为每个信号都包含许多信息,例如温度,风扇速度,睡眠时间,Swing风格等。这就是为什么我们需要Arduino Mega以获得更好的存储选项的原因。
电路图和说明:
幸运的是,此自动交流温度控制项目的硬件设置非常简单。您可以简单地使用面包板并进行如下所示的连接。
下表也可以用于验证您的连接。
序号 | 组件引脚 | Arduino引脚 |
---|---|---|
1 | OLED – Vcc | 5V |
2 | OLED – Gnd | Gnd |
3 | OLED- SCK,D0,SCL,CLK | 4 |
4 | OLED- SDA,D1,MOSI,data | 3 |
5 | OLED- RES,RST,RESET | 7 |
6 | OLED- DC,A0 | 5 |
7 | OLED- CS,Chip Select | 6 |
8 | DHT11 – Vcc | 5伏 |
9 | DHT11 –Gnd | Gnd |
10 | DHT11 –Signal | 13 |
11 | TSOP – Vcc | 5V |
12 | TSOP –Gnd | Gnd |
13 | 红外LED –阳极 Anode | 9 |
14 | 红外LED –阴极 Cathode | Gnd |
连接完成后,其外观应如下图所示。我用面包板整理过东西,但是您也可以将公对母线直接连接到所有组件上
解码交流遥控信号:
控制AC的第一步是使用TSOP1738解码AC遥控器IR代码。按照电路图所示进行所有连接,并确保已安装所有提到的库。现在打开示例程序“ IRrecvDumpV2* ”,该程序可在文件->示例-> IRremote-> IRrecvDumpV2中找到*。将程序上传到Arduino Mega并打开串行监视器。
将遥控器指向TSOP,然后按任意按钮,对于每个按钮,按其各自的信号将由TSOP1738读取,由Arduino解码并显示在串行监视器中。对于遥控器上的温度变化,您将获得不同的数据。保存此数据,因为我们将在主程序中使用它。您的串行监视器将如下所示,我还显示了保存复制数据的Word文件。
屏幕截图显示了用于将我的AC遥控器的温度设置为26°C的代码。根据您的遥控器,您将获得不同的代码集。类似地,复制所有不同温度水平的代码。您可以在本教程末尾提供的Arduino代码中查看所有空调遥控器IR代码。
Arduino主要程序:
在完整的主Arduino的程序可以在这个页面的底部找到,但你不能使用相同的程序。您必须更改我们刚刚从上面的示例草图中获得的信号代码值。在Arduino IDE上打开主程序,然后向下滚动至下面显示的该区域,在该区域中必须将数组值替换为从Remote获得的值。
请注意,我使用了10个阵列,其中两个用于打开和关闭AC,其余8个用于设置不同的温度。例如,Temp23用于将AC设置为23°C,因此请使用该阵列中的相应代码。完成后,您只需将代码上传到Arduino,并将其放在交流电对面,即可享受Cool Breeze。
代码的解释如下,首先我们必须使用DHT1温度传感器读取温度和湿度并将其显示在OLED上。这是通过以下代码完成的。
DHT.read11(DHT11_PIN); //读取温度和湿度
Measured_temp = DHT.temperature + temp_error;
Measured_Humi = DHT。湿度;
//文字显示测试
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)//如果AC接通并且测量的温度比期望值高
{
irsend.sendRaw(Temp24,sizeof(Temp24)/ sizeof(Temp24 [0]),khz); delay(2000); //发送信号以设置24 * C
AC_Temp = 24;
}
当测得的温度为30°C时,交流电将被设置为24°C(因为所需温度为27)。同样,我们可以创建许多If循环,以根据所测温度设置不同的温度水平,如下所示。
if(Measured_temp == Desired_temperature-1)//如果AC接通且测量温度低于期望值
{
irsend.sendRaw(Temp28,sizeof(Temp28)/ sizeof(Temp28 [0]),khz); delay(2000); //发送信号以设置28 * C
AC_Temp = 28;
}
if(Measured_temp == Desired_temperature-2)//如果AC接通且测量温度非常低于所需值
{
irsend.sendRaw(Temp29,sizeof(Temp29)/ sizeof(Temp29 [0]),khz); delay(2000); //发送信号以设置29 * C
AC_Temp = 29;
}
if(Measured_temp == Desired_temperature-3)//如果AC接通且测量温度非常低,则期望值
{
irsend.sendRaw(Temp30,sizeof(Temp30)/ sizeof(Temp30 [0]),khz); delay(2000); //发送信号设置30 * C
AC_Temp = 30;
}
交流温度自动控制系统的工作原理:
当您的代码和硬件准备就绪时,将代码上传到开发板上,您应该注意到OLED会显示类似的内容。
现在,将电路置于空调的对面,您会注意到根据房间温度来控制空调的温度。您可以尝试提高DHT11传感器附近的温度,以检查是否控制了AC的温度,如下面的视频所示。
您可以调整程序以执行任何所需的操作。您只需要从示例草图中获得的代码即可。希望您理解这个自动温度控制器项目,并喜欢构建类似的东西。我知道这里有很多地方会卡住,但是请不要担心。只需使用论坛或评论部分来解释您的问题,这里的人一定会帮助您解决问题。
/*
Automatic AC Temperature control using Arduino and TSOP
Code by: Aswinth Raj B
Dated: 25-10-2017
Website: www.circuitdigest.com
S.No: Component Pin Arduino Pin
1 OLED – Vcc 5V
2 OLED – Gnd Gnd
3 OLED- SCK, D0,SCL,CLK 4
4 OLED- SDA, D1,MOSI, Data 3
5 OLED- RES, RST,RESET 7
6 OLED- DC, A0 5
7 OLED- CS, Chip Select 6
8 DHT11 – Vcc 5V
9 DHT11 – Gnd Gnd
10 DHT11 – Signal 13
11 TSOP – Vcc 5V
12 TSOP – Gnd Gnd
13 IR Led – Anode 9
14 IR Led – Cathode Gnd
*/
#include <IRremote.h> //Lib for IT Blaster and TSOP
#include <SPI.h> // Inbuilt Lib
#include <Wire.h> //Inbuilt Lib
#include <Adafruit_GFX.h> //Lib for OLED
#include <Adafruit_SSD1306.h> //Lib for OLED
#include <DHT.h> //Library for dht11 Temperature and Humidity sensor (Download from Link in article)
// Assign pins for OLED (Software config.)
#define OLED_MOSI 3
#define OLED_CLK 4
#define OLED_DC 5
#define OLED_CS 6
#define OLED_RESET 7
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
#define SSD1306_LCDHEIGHT 64 //Change if you are using a Different OLED
#define DHT11_PIN 13 //Sensor output pin is connected to pin 13
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHT11_PIN, DHTTYPE); //Sensor object named as DHT
#define Desired_temperature 27 //The desired temperature is 27*C at any time
//Decoded Remote Signals For my AC ##CHANGE IT FOR YOUR REMOTE
unsigned int ACoff[] = {2950, 1750, 400, 1100, 450, 1050, 450, 400, 400, 400, 400, 400, 450, 1100, 400, 400, 400, 400, 450, 1100, 400, 1100, 450, 350, 450, 1100, 400, 400, 400, 400, 450, 1100, 400, 1100, 450, 400, 400, 1100, 400, 1100, 450, 400, 400, 400, 400, 1100, 450, 350, 450, 400, 400, 1100, 450, 400, 400, 400, 400, 400, 450, 350, 450, 350, 450, 400, 400, 400, 450, 350, 450, 400, 400, 400, 400, 400, 450, 350, 450, 400, 400, 400, 400, 400, 450, 400, 400, 400, 400, 400, 450, 350, 450, 350, 450, 1100, 400, 400, 450, 400, 400, 1100, 450, 1050, 450, 400, 400, 400, 400, 400, 450, 350, 450, 400, 400, 400, 450, 350, 450, 400, 400, 400, 400, 1100, 450, 350, 450, 400, 400, 400, 400, 400, 450, 400, 400, 1100, 450, 350, 450, 400, 400, 400, 400, 400, 400, 1100, 450, 400, 400, 400, 450, 350, 450, 400, 400, 400, 400, 400, 450, 350, 450, 350, 450, 400, 400, 400, 450, 350, 450, 400, 400, 400, 400, 400, 450, 350, 450, 400, 400, 400, 450, 350, 450, 400, 400, 400, 400, 400, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 400, 400, 1100, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 1100, 450};
unsigned int ACon[] = {2950, 1700, 450, 1100, 400, 1100, 450, 350, 450, 350, 450, 400, 450, 1050, 450, 350, 450, 400, 450, 1050, 450, 1100, 400, 400, 450, 1050, 450, 350, 450, 400, 400, 1100, 450, 1100, 450, 350, 450, 1050, 450, 1100, 450, 350, 450, 350, 450, 1100, 450, 350, 400, 400, 450, 1100, 450, 350, 450, 350, 450, 400, 400, 400, 450, 350, 450, 350, 450, 400, 400, 400, 450, 350, 450, 350, 450, 400, 400, 400, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 1100, 400, 400, 450, 350, 450, 1100, 400, 400, 450, 350, 450, 1100, 400, 1100, 450, 350, 450, 400, 400, 400, 450, 350, 500, 300, 450, 400, 450, 350, 400, 400, 450, 1100, 400, 400, 450, 350, 450, 350, 450, 400, 400, 400, 450, 350, 450, 1100, 450, 350, 400, 400, 450, 350, 450, 400, 450, 350, 400, 400, 450, 400, 450, 350, 450, 350, 450, 350, 450, 400, 400, 400, 450, 350, 450, 400, 400, 400, 400, 400, 400, 400, 450, 350, 450, 400, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 350, 450, 400, 400, 400, 400, 400, 450, 350, 450, 400, 450, 350, 400, 400, 450, 350, 450, 400, 450, 350, 450, 350, 450, 350, 450, 400, 450, 350, 450, 1100, 400, 400, 400, 400, 450, 350, 450, 350, 450, 1100, 400, 400, 450};
unsigned int Temp23[] = {3000, 1650, 550, 950, 550, 1000, 500, 300, 550, 250, 550, 250, 550, 1000, 500, 300, 550, 300, 500, 1000, 550, 950, 550, 300, 550, 950, 550, 250, 550, 300, 500, 1000, 500, 1050, 500, 300, 500, 1000, 550, 1000, 500, 300, 500, 300, 550, 1000, 450, 350, 500, 300, 500, 1050, 450, 350, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 400, 400, 400, 450, 350, 450, 350, 450, 350, 450, 400, 400, 400, 400, 400, 450, 400, 400, 400, 400, 400, 450, 1100, 400, 400, 400, 400, 450, 1050, 450, 400, 400, 400, 450, 1100, 400, 1100, 400, 400, 450, 350, 450, 400, 400, 400, 400, 400, 450, 400, 400, 400, 400, 400, 450, 350, 450, 1100, 400, 400, 400, 400, 450, 350, 450, 400, 400, 400, 450, 1100, 400, 400, 400, 1100, 450, 1100, 400, 1100, 450, 350, 450, 400, 400, 400, 450, 350, 450, 350, 450, 400, 400, 400, 400, 400, 450, 350, 450, 400, 400, 400, 450, 350, 450, 400, 400, 400, 400, 400, 450, 350, 450, 400, 400, 400, 450, 350, 450, 350, 450, 400, 450, 350, 400, 400, 450, 350, 450, 400, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 350, 450, 400, 400, 400, 400, 400, 450, 350, 450, 1100, 400, 1100, 450, 1100, 400, 1100, 450, 1100, 400, 1100, 400, 400, 450};
unsigned int Temp24[] = {3000, 1650, 500, 1050, 500, 1000, 500, 300, 500, 300, 500, 350, 500, 1000, 500, 300, 500, 350, 500, 1000, 500, 1050, 500, 300, 500, 1000, 500, 300, 500, 350, 500, 1000, 500, 1050, 500, 300, 500, 1000, 500, 1050, 500, 300, 500, 300, 500, 1050, 500, 300, 500, 300, 500, 1050, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 1050, 500, 300, 500, 300, 500, 1050, 500, 300, 500, 300, 500, 1050, 500, 1000, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 1000, 500, 1050, 500, 1000, 500, 300, 500, 350, 450, 350, 500, 300, 500, 300, 500, 350, 500, 1000, 500, 300, 500, 1050, 500, 1000, 500, 1050, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 450, 350, 500, 350, 450, 350, 450, 350, 450, 350, 450, 400, 400, 400, 400, 400, 450, 400, 400, 400, 400, 400, 400, 400, 450, 350, 450, 400, 400, 400, 450, 350, 450, 400, 450, 350, 450, 350, 450, 350, 450, 400, 450, 350, 450, 350, 450, 350, 500, 350, 450, 1050, 500, 300, 500, 1050, 500, 1000, 500, 1050, 500, 1000, 500, 1000, 500, 350, 550};
unsigned int Temp25[] = {3050, 1650, 500, 1000, 550, 950, 550, 300, 500, 300, 500, 300, 550, 1000, 500, 300, 500, 300, 550, 1000, 550, 950, 550, 250, 550, 1000, 500, 300, 550, 250, 550, 1000, 500, 1000, 550, 300, 550, 950, 550, 950, 550, 300, 500, 300, 500, 1000, 550, 250, 550, 300, 550, 950, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 250, 550, 250, 600, 250, 500, 300, 550, 250, 550, 250, 550, 300, 550, 250, 500, 300, 550, 300, 500, 300, 500, 1000, 550, 250, 550, 300, 500, 1000, 550, 250, 550, 300, 500, 1000, 550, 1000, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 1000, 550, 950, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 950, 550, 300, 500, 1000, 550, 1000, 500, 1000, 500, 300, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 250, 550, 300, 550, 250, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 500, 350, 500, 1000, 500, 1000, 500, 1050, 500, 1000, 500, 1050, 500, 300, 550};
unsigned int Temp26[] = {3000, 1650, 500, 1000, 500, 1050, 500, 300, 500, 300, 500, 350, 500, 1000, 500, 300, 500, 350, 500, 1000, 500, 1050, 450, 350, 500, 1000, 500, 300, 500, 350, 500, 1000, 500, 1050, 500, 300, 500, 1000, 500, 1050, 500, 300, 500, 300, 500, 1050, 500, 300, 500, 300, 500, 1050, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 1050, 500, 300, 500, 300, 500, 1050, 450, 350, 500, 300, 500, 1050, 500, 1000, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 1000, 500, 300, 500, 1050, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 1050, 500, 300, 500, 1050, 450, 1050, 500, 1000, 500, 350, 500, 300, 500, 300, 500, 350, 450, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 450, 350, 500, 300, 500, 350, 450, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 300, 500, 350, 450, 1050, 500, 1000, 500, 350, 500, 1000, 500, 1000, 500, 1050, 500, 1000, 500, 350, 500};
unsigned int Temp27[] = {3050, 1600, 550, 1000, 500, 1000, 550, 300, 500, 300, 550, 250, 550, 1000, 500, 300, 550, 300, 500, 1000, 550, 1000, 500, 300, 550, 1000, 550, 250, 500, 300, 550, 1000, 500, 1050, 500, 300, 500, 1000, 550, 1000, 500, 300, 550, 250, 550, 1000, 550, 250, 550, 300, 500, 1000, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 1000, 550, 300, 500, 300, 550, 1000, 500, 300, 500, 300, 550, 1000, 550, 1000, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 1000, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 500, 350, 500, 300, 550, 250, 550, 1000, 500, 1000, 550, 1000, 500, 300, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 500, 300, 550, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 500, 300, 500, 350, 500, 300, 500, 350, 500, 300, 500, 300, 500, 1050, 500, 1000, 500, 1050, 500, 1000, 500, 350, 500}; // PANASONIC C4D3:64800024
unsigned int Temp28[] = {3100, 1600, 550, 950, 550, 1000, 550, 250, 550, 250, 550, 250, 550, 1000, 500, 300, 500, 300, 550, 1000, 500, 1000, 550, 250, 550, 1000, 500, 300, 550, 250, 550, 1000, 550, 950, 550, 300, 500, 1000, 550, 950, 550, 300, 550, 250, 500, 1000, 550, 300, 500, 300, 550, 950, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 550, 250, 500, 300, 550, 300, 500, 300, 500, 300, 550, 250, 550, 250, 600, 250, 500, 300, 500, 300, 550, 300, 500, 300, 500, 1000, 550, 300, 500, 300, 500, 1000, 550, 250, 550, 300, 500, 1000, 550, 1000, 550, 250, 550, 250, 550, 250, 550, 300, 500, 300, 550, 250, 550, 1000, 500, 1000, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 1000, 500, 300, 500, 1000, 550, 1000, 500, 1000, 550, 250, 550, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 250, 550, 300, 550, 250, 500, 300, 550, 250, 550, 250, 550, 300, 550, 250, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 550, 1000, 500, 300, 500, 300, 550, 950, 550, 1000, 500, 1000, 550, 1000, 500, 300, 550};
unsigned int Temp29[] = {3100, 1550, 600, 950, 500, 1000, 550, 300, 500, 300, 500, 300, 550, 950, 550, 300, 550, 250, 550, 1000, 500, 1000, 550, 250, 550, 1000, 500, 300, 550, 250, 550, 950, 600, 950, 550, 250, 550, 1000, 500, 1000, 550, 250, 600, 250, 550, 950, 550, 250, 550, 300, 550, 950, 550, 250, 550, 300, 550, 250, 550, 250, 550, 250, 550, 300, 550, 250, 550, 250, 550, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 550, 250, 550, 250, 600, 250, 550, 950, 550, 250, 550, 300, 500, 1000, 550, 250, 550, 300, 550, 950, 550, 1000, 500, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 550, 250, 550, 1000, 500, 300, 550, 250, 550, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 1000, 550, 250, 550, 1000, 500, 1000, 550, 1000, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 250, 550, 250, 550, 1000, 500, 1000, 550, 1000, 500, 1000, 550, 300, 500};
unsigned int Temp30[] = {3000, 1650, 500, 1000, 550, 1000, 500, 300, 500, 300, 550, 250, 550, 1000, 500, 300, 500, 300, 550, 1000, 550, 950, 550, 250, 550, 1000, 550, 250, 550, 250, 550, 1000, 550, 950, 550, 300, 500, 1000, 550, 950, 550, 300, 500, 300, 550, 950, 550, 300, 550, 250, 550, 1000, 500, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 300, 500, 300, 500, 300, 550, 950, 550, 300, 500, 300, 500, 1000, 550, 250, 550, 300, 550, 950, 550, 1000, 500, 300, 550, 250, 550, 250, 600, 250, 500, 300, 550, 250, 550, 1000, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 950, 550, 300, 500, 1000, 550, 950, 550, 1000, 500, 300, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 250, 550, 300, 500, 300, 550, 250, 550, 300, 500, 300, 500, 300, 550, 250, 550, 300, 500, 300, 550, 950, 500, 1050, 500, 1000, 500, 350, 500, 1000, 500, 1000, 500, 1050, 500, 300, 500};
//Change it for your remote
IRsend irsend;
int Measured_temp;
int Measured_Humi;
int AC_Temp;
char temp_error = 2;
int Pev_value;
boolean AC = false;
int khz = 38; // 38kHz carrier frequency for the NEC protocol
void setup()
{
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
}
void loop() {
dht.read(DHT11_PIN); //Read the Temp and Humidity
Measured_temp = dht.readTemperature() + temp_error;
Measured_Humi = dht.readHumidity();
// 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("%");
display.setCursor(0, 20);
display.print("AC Temp: "); display.print(AC_Temp); display.println("C");
display.display();
delay(500);
display.clearDisplay();
if ((Measured_temp <= (Desired_temperature - 3)) && AC == true) //If AC is turned on and temperature is less than 3 degree of Desired value #24 turn off
{
irsend.sendRaw(ACoff, sizeof(ACoff) / sizeof(ACoff[0]), khz); delay(2000);//Send signal to Turn Off the AC
AC_Temp = 0; AC = false;
}
if ((Measured_temp >= Desired_temperature + 4) && AC == false) //If AC is off and measured Temp is greater than Desired Temp
{
irsend.sendRaw(ACon, sizeof(ACon) / sizeof(ACon[0]), khz); delay(2000); //Send Signal to Turn On the AC
delay(2000);
irsend.sendRaw(Temp27, sizeof(Temp27) / sizeof(Temp27[0]), khz); //Send signal to set 27*C
AC_Temp = 27; AC = true;
}
if ( Measured_temp != Pev_value) //Change the temperature only if the measured voltage value changes
{
if (Measured_temp == Desired_temperature + 3) //If AC is ON and measured temp is very very high than desired
{
irsend.sendRaw(Temp24, sizeof(Temp24) / sizeof(Temp24[0]), khz); delay(2000);//Send signal to set 24*C
AC_Temp = 24;
}
if (Measured_temp == Desired_temperature + 2) //If AC is ON and measured temp is very high than desired
{
irsend.sendRaw(Temp25, sizeof(Temp25) / sizeof(Temp25[0]), khz); delay(2000);//Send signal to set 25*C
AC_Temp = 25;
}
if (Measured_temp == Desired_temperature + 1) //If AC is ON and measured temp is very high than desired
{
irsend.sendRaw(Temp26, sizeof(Temp26) / sizeof(Temp26[0]), khz); delay(2000);//Send signal to set 26*C
AC_Temp = 26;
}
if (Measured_temp == 27 ) //If AC is ON and measured temp is desired value
{
irsend.sendRaw(Temp27, sizeof(Temp27) / sizeof(Temp27[0]), khz); //Send signal to set 27*C
AC_Temp = 27;
}
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;
}
}
Pev_value = Measured_temp;
}