原文地址: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引脚
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 * CAC_Temp = 30;
}

交流温度自动控制系统的工作原理:

当您的代码和硬件准备就绪时,将代码上传到开发板上,您应该注意到OLED会显示类似的内容。

现在,将电路置于空调的对面,您会注意到根据房间温度来控制空调的温度。您可以尝试提高DHT11传感器附近的温度,以检查是否控制了AC的温度,如下面视频所示

您可以调整程序以执行任何所需的操作。您只需要从示例草图中获得的代码即可。希望您理解这个自动温度控制器项目,并喜欢构建类似的东西。我知道这里有很多地方会卡住,但是请不要担心。只需使用论坛或评论部分来解释您的问题,这里的人一定会帮助您解决问题。

/*Automatic AC Temperature control using Arduino and TSOPCode by: Aswinth Raj BDated: 25-10-2017Website: www.circuitdigest.comS.No: Component Pin Arduino Pin1 OLED – Vcc  5V2 OLED – Gnd  Gnd3 OLED- SCK, D0,SCL,CLK 44 OLED- SDA, D1,MOSI, Data  35 OLED- RES, RST,RESET  76 OLED- DC, A0  57 OLED- CS, Chip Select 68 DHT11 – Vcc 5V9 DHT11 – Gnd Gnd10  DHT11 – Signal  1311  TSOP – Vcc  5V12  TSOP – Gnd  Gnd13  IR Led – Anode  914  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 remoteIRsend 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 protocolvoid setup()
{Serial.begin(9600);display.begin(SSD1306_SWITCHCAPVCC);display.clearDisplay();
}void loop() {dht.read(DHT11_PIN); //Read the Temp and HumidityMeasured_temp = dht.readTemperature() + temp_error;Measured_Humi = dht.readHumidity();// text display testsdisplay.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 ACAC_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 ACdelay(2000);irsend.sendRaw(Temp27, sizeof(Temp27) / sizeof(Temp27[0]), khz); //Send signal to set 27*CAC_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*CAC_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*CAC_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*CAC_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*CAC_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*CAC_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*CAC_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*CAC_Temp = 30;}}Pev_value = Measured_temp;
}

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

  1. Arduino+DHT11温湿度传感器+12864oled显示温湿度

            本文利用arduino uno时时读取DHT11温湿度传感器的温度和湿度值,并将读取到的数值显示在OLED12864上. 元器件: arduino板 OLED12864显示屏 DHT1 ...

  2. 基于arduino的校园灯光控制_使用Arduino和晶闸管(TRIAC)控制交流风扇的速度

    在许多基于Arduino的自动化项目中,使用开关或使用某种控制很容易打开或关断家用电器.但是在很多应用中,我们需要控制交流电源,例如,控制风扇的速度或灯的亮度.在这种情况下,将使用到PWM技术,因此在 ...

  3. arduino智能浇花系统_自动浇花套件

    自动浇花套件(SKU:KIT0003) 目录 1 概述 2 技术规格 3 配送清单 4 组装示意图 5 单盆花的浇灌制作步骤 6 Arduino 样例程序 6.1 数据测量 6.2 水泵测试 7 产品 ...

  4. android温湿度传感节点指令源代码,Arduino+DHT11+OLED显示温湿度信息(附详细文档+源码)...

    设计者:STCode (公众号同名) 第一章 绪论 1.1实训设计背景与意义 随着生活水平的提高和科技水平的发展,人们对自身和家庭安全方面的考虑也越来越多,越来越多的安全监测系统和设备进入到人们的生活 ...

  5. BadUSB+ProMicro+Arduino做一个插入U盘自动攻击

    群里一些朋友比较喜欢BadUSB但苦于不知道从哪里开始做,于是我这个做群主的就自己动手买了个ProMicro的板子(花费我16元),结合Arduino和CMD模拟一下简易的过程 关于BadUSB Ba ...

  6. arduino麦轮转弯程序_Arduino 自动避障智能小车制作教程

    Arduino 自动避障智能小车制作教程 材料: Arduino UNO r3 L298N电机驱动模块 小车底盘一个,万向轮一个 2个电机及匹配的车轮 9V电池盒及6个1.5V电池 超声波测距模块及其 ...

  7. Arduino开发板点阵Led屏自动生成想要的图案教程--附【PCtoLCD】字模生成软件

    第一步:确保点阵屏与Arduino正确连接 首先点阵屏幕一定要正确连接上Arduino开发板,并通过上传代码,能够正确点亮Led屏幕. 第二步:用自动生成字模软件生成字模 在点阵屏显示文字教程的代码中 ...

  8. Arduino DHT11温湿度传感器模块的使用(安装对应库和代码)

    最近需要使用DHT11完成开发,发现arduino官方找不到dht11模块的对应库和驱动,网上搜寻很久,分享一个可以实际使用的方法. 1.安装下面的两个dht11库. 都在里面了,自行下载安装就可以 ...

  9. ESP32 Arduino DHT11温湿度

    一.接线 VCC接3.3V DATA 接任意可配置输入输出的引脚(下文以P18为例) 二.流程 1.起始信号 配置为输出引脚,保持18ms低电平后拉高,再配置为输入引脚 2. 读取40bits数据 保 ...

  10. Arduino DHT11温湿度模块 LCD1602A

    arduino 实现环境温湿度检测 涉及模块:DHT11模块,LCD1602A 接线图 LCD参考前面设计 实验代码 #include <dht11.h> #include <Liq ...

最新文章

  1. 北理工计算机学院专业确认,北理工 2021 强基计划报名增加确认环节,限报 1 校 1 专业...
  2. C语言菱形是怎么实现的?
  3. 客户端页面不更新CSS样式或JS脚本的方法 (2018-08-17 17:33)
  4. LESS实战::not与:hover混合使用
  5. IE浏览器怎么清理缓存
  6. it有啥好咨询的_小经验 | 埃森哲Accenture管理咨询+IT咨询实习
  7. 大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作
  8. 第 24 章 状态模式
  9. centos6.4 32位 详细安装Nginx
  10. ubuntu16.04中创建新用户
  11. 窦志成:从微软到人大,只为做有温度的AI
  12. php 考试座位编排系统,考试座位编排vba
  13. UG二次开发GRIP总结简明教程
  14. Linux可以打开cdr文件吗,CDR是什么格式
  15. vue PC端菜单优化(第一个菜单隐藏的时候,整个菜单都不显示)
  16. AutoCAD Civil 3D-用Civil 3D建立路面
  17. 今年春节,全国物流很稳!
  18. 你炒的肉丝为何又柴又老又难吃?
  19. 刨根问底:Windows CTF协议安全性研究
  20. 零售业进入立异时期:O2O榜首战

热门文章

  1. 【电路补习笔记】7、磁珠的工作原理、磁珠的分类、磁珠的模型、磁珠的参数、磁珠与电感的区别、磁珠的应用、磁珠的误区
  2. 最简单的方法二进制与16进制的转换
  3. proj4js 坐标转换
  4. Hierachy Viewer无法在真机上使用的解决方法
  5. raft算法 java_raft-java首页、文档和下载 - 分布式一致性算法 Raft 的 Java 实现 - OSCHINA - 中文开源技术交流社区...
  6. Python常用模块之 json模块
  7. 二进制模2除法(CRC循环冗余检验)
  8. 使用 Visual Studio 创建 .NET 类库
  9. 5G网络的关键技术及特点整理
  10. c语言银行卡六位密码编译,用c语言生成六位的随机密码。