使用Arduino,DHT11和IR Blaster的自动交流温度控制器

原文地址:https://circuitdigest.com/microcontroller-projects/arduino-automatic-ac-temperature-control

使用Arduino,DHT11和IR Blaster的自动交流温度控制器

ARDUINO的

经过**阿斯温斯·拉吉(Aswinth Raj)** 2017年11月2日30
在这里插入图片描述

曾经被认为是奢侈品的空调(AC)(空调)仅在大型酒店,电影院,餐厅等地方可以找到。但是,现在几乎每个人都在我们家中安装了空调,以击败夏季/冬天和那些拥有它的人,担心一件普通的事情。那就是他们的高电耗和充电器的缘故。在这个项目中,我们将制造一个小的自动温度控制电路,该电路可以根据房间温度自动改变交流温度,从而将充电器最小化。通过定期更改设定温度,我们可以避免长时间使交流电在较低的温度值下工作,从而降低功耗。

我们大多数人都会遇到这样的情况,我们必须在一天的不同时间将空调的设定温度更改为不同的值,以使我们始终保持舒适。为了使该过程自动化,该项目使用温度传感器(DHT11)读取房间的当前温度,并基于该值将通过类似于AC遥控IR blaster向AC发送命令。AC将对这些命令做出反应,就像它对其遥控器做出反应一样,从而调节温度。随着房间温度的变化,Arduino还将调整交流电的设定温度,以您想要的方式维持温度。听起来不错吧?…让我们看看如何构建一个。

所需材料:

  1. Arduino Mega 2560
  2. TSOP1738(HS0038)
  3. 红外LED
  4. DHT11温度/湿度传感器
  5. 任何彩色LED和1K电阻器(可选)
  6. 面包板
  7. 连接线

工作方法:

我们家里用来控制电视,家庭影院,空调等的所有遥控器均在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的新手,那么请回到下面的这些教程,在这里您可以学习基础知识以及如何开始使用它们。该列表似乎有点长,但是请相信我,它很简单并且值得学习,它还会为许多新项目打开大门。

  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. GFX图形库依赖的Adafruit BusIO库。在库管理器中搜索“ Adafruit BusIO”,或从https://github.com/adafruit/Adafruit_BusIO手动安装
  5. DHT11温度传感器传感器库
  6. DHT11温度传感器依赖的Adafruit统一传感器驱动程序

交流遥控器的工作方式:

在我们进行该项目之前,请花一些时间,并注意您的AC遥控器的工作方式。与电视,DVD红外遥控器相比,交流遥控器的工作方式略有不同。遥控器上可能只有10-12个按钮,但是它们将能够发送许多不同类型的信号。这意味着遥控器不会为相同的按钮每次发送相同的代码。例如,当您使用向下按钮降低温度使其达到24°C(摄氏度)时,您将获得带有一组数据的信号,但是当您再次按其将其设置为25°C时,您将不会得到相同的信号。数据,因为温度现在是25,而不是24。类似地,25的代码也会因风扇速度,睡眠设置等的不同而有所不同。 。

另一个问题是每次按下按钮时要发送的数据量,普通遥控器可以发送24位或48位,但是**AC遥控器最多可以发送228位,**因为每个信号都包含许多信息,例如温度,风扇速度,睡眠时间,Swing风格等。这就是为什么我们需要Arduino Mega以获得更好的存储选项的原因。

电路图和说明:

幸运的是,此自动交流温度控制项目的硬件设置非常简单。您可以简单地使用面包板并进行如下所示的连接。
在这里插入图片描述
下表也可以用于验证您的连接。

序号组件引脚Arduino引脚
1OLED – Vcc5V
2OLED – GndGnd
3OLED- SCK,D0,SCL,CLK4
4OLED- SDA,D1,MOSI,data3
5OLED- RES,RST,RESET7
6OLED- DC,A05
7OLED- CS,Chip Select6
8DHT11 – Vcc5伏
9DHT11 –GndGnd
10DHT11 –Signal13
11TSOP – Vcc5V
12TSOP –GndGnd
13红外LED –阳极 Anode9
14红外LED –阴极 CathodeGnd

连接完成后,其外观应如下图所示。我用面包板整理过东西,但是您也可以将公对母线直接连接到所有组件上
在这里插入图片描述

解码交流遥控信号:

控制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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值