一板网电子技术论坛

风筝
发表于: 2017-11-9 14:23:04 | 显示全部楼层

Automatic-AC-Temperature-Controller-using-arduino-and-ir-blaster.jpg

曾经被认为是奢侈品的空调,只能在大酒店、电影厅、餐厅等等看到。但是,现在几乎每个人家中都有一个AC来度过夏季/冬天,并且那些拥有它的人们都在担心一件共同的事情。那就是他们的高耗电量和充电器。在这个项目中,我们将制作一个小型自动温度控制电路,通过根据房间温度自动改变空调温度,尽量降低电力消耗。通过周期性地改变设定的温度,我们可以使空调长时间工作在较低的温度值,从而使它消耗更少的电力。


我们大多数人都会遇到这样的情况:我们不得不在一天中的不同时间将空调的设定温度改变成不同的值,以始终保持我们舒适。为了使这个过程自动化,这个项目使用一个温度传感器(DHT11)读取房间的当前温度,根据这个值,它将通过一个类似于空调遥控器的红外发射器向空调发送指令。空调将对这些命令作出反应,就好像它对遥控器反应一样,从而调节温度。随着房间温度的变化,Arduino也会调整空调设定温度,以保持你的温度。听起来很酷吗?...让我们看看如何建立一个这样的项目。


所需材料:

1.    Arduino Mega 2560开发板

2.    TSOP1738(或HS0038)

3.    IR发射器

4.    DHT11温度/湿度传感器

5.    任意彩色LED和1K电阻(可选)

6.    面包板

7.    连接导线


工作方法:

我们家里用来控制电视、家庭影院、空调等电器的所有遥控器都需要使用红外发射器。红外发射器只不过是一个红外发光二极管,它可以通过一些重复脉冲来发射信号;该信号将由电子设备中的接收器读取。对于遥控器上的每个不同的按钮,将会发射一个独有的信号,接收器读取后用于执行特定的预定义任务。如果我们能够读取来自遥控器的信号,那么当需要执行该特定任务时,我们可以使用红外LED模拟相同的信号。

IR-LED.jpg

TSOP1738是一个红外接收器,可用于解码来自遥控器的信号。这个接收器连接到Arduino开发板,以便解码每个按钮的信号,然后在有需要时,使用Arduino模拟信号。这样我们可以使用Arduino控制我们的空调。

TSOP1738_Image.jpg


现在剩下的就是使用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开发板的原因。

跳转到指定楼层
风筝
发表于: 2017-11-9 14:25:52 | 显示全部楼层

电路图和说明:

幸运的是,这个自动空调温度控制项目的硬件设置非常简单。您可以简单地使用面包板并按下图所示进行连接。

Automatic-AC-Temperature-Controller-using-arduino-circuit-diagram.png

下表也可以用来验证你的连接。

序号
组件引脚
Arduino引脚
1
OLED - Vcc
5V
2
OLED - Gnd
GND
3
OLED-SCK,D0,SCL,CLK
4
4
OLED-SDA,D1,MOSI,数据
3
5
OLED-RES,RST,RESET
7
6
OLED-DC,A0
5
7
OLED-CS,片选
6
8
DHT11 - Vcc
5V
9
DHT11 - Gnd
GND
10
DHT11 - 信号
13
11
TSOP - Vcc
5V
12
TSOP - Gnd
GND
13
红外LED - 阳极
9
14
红外线 - 阴极
GND

一旦连接完成后,应该看起来如下所示。我用面包板来连接,但是你也可以直接使用导线来连接所有的部件。

Automatic-AC-Temperature-Controller-using-arduino-with-OLED-display.jpg


解码您的空调遥控器信号:

控制空调的第一步是使用TSOP1738来解码空调遥控器的IR代码。按照电路图所示完成所有连接,并确保已经安装了所有提到的库。现在打开示例程序“IRrecvDumpV2”,它可以在File -> Examples -> IRremote - > IRrecvDumpV2中找到。将程序上传到Arduino Mega开发板并打开串行监视器。


将您的遥控器指向TSOP并按任意按钮,对于您按下每个按钮的相应信号,将由TSOP1738读取,由Arduino解码并显示在串行监视器中。对于您的遥控器上的每个温度变化,您将得到一组不同的数据。保存这个数据,我们将在我们的主程序中使用它。你的串口监视器看起来像这样,我也显示了保存复制的数据的Word文件。

Decoding-IR-signals-of-AC-remote-control.png


屏幕截图显示了我的空调遥控器的温度设置为26°C的代码。根据您的遥控器,您将得到一组不同的代码。同样复制所有不同温度级别的代码。您可以检查本教程结尾给出的Arduino代码中的所有空调遥控IR代码。


主要的Arduino程序:

完整的主要Arduino程序可以在这个页面的底部找到,但是你不能使用相同的程序。您必须更改刚刚从上面的示例框架中获取的信号代码值。在你的Arduino IDE上打开主程序,并向下滚动到下面显示的区域,你必须用你的遥控器获得的数值替换数组值。

IR-signals-of-AC-remote-control-in-arduino-program.png


请注意,我已经使用了10个数组,其中两个用于打开和关闭AC,而其余8个用于设置不同的温度。例如,Temp23用于设置AC上的23°C,因此请使用该阵列中的相应代码。一旦完成,您只需将代码上传到您的Arduino,并将其放置在您的空调对面,享受Cool Breeze。


代码的说明如下,首先我们必须使用DHT1温度传感器来读取温度和湿度并将其显示在OLED上。这由以下代码完成。

  1. DHT.read11(DHT11_PIN); //Read the Temp and Humidity
  2.   Measured_temp = DHT.temperature + temp_error;
  3.   Measured_Humi = DHT.humidity;

  4. // text display tests
  5.   display.setTextSize(1);
  6.   display.setTextColor(WHITE);
  7.   display.setCursor(0,0);
  8.   display.print("Temperature: "); display.print(Measured_temp);display.println("C");
  9.   display.setCursor(0,10);
  10.   display.print("Humidity: "); display.print(Measured_Humi);display.println("%");
复制代码

一旦我们知道房间的温度,我们只需要将其与期望的值进行比较。这个所需的值是一个常数值,在我的程序中设置为27°C(摄氏度)。所以基于这个比较,我们将设置相应的交流温度,如下所示:

  1. if (Measured_temp == Desired_temperature+3) //If AC is ON and measured temp is very high than desired
  2. {
  3.    irsend.sendRaw(Temp24, sizeof(Temp24) / sizeof(Temp24[0]), khz); delay(2000);//Send signal to set 24*C
  4.   AC_Temp = 24;
  5. }
复制代码

测量温度为30°C(因为所需温度为27°C),交流电会被设置为24°C。同样,我们可以创建许多If循环来根据测量的温度设置不同的温度级别,如下所示。

  1. if (Measured_temp == Desired_temperature-1) //If AC is ON and measured temp is low than desired value
  2. {
  3.   irsend.sendRaw(Temp28, sizeof(Temp28) / sizeof(Temp28[0]), khz); delay(2000);//Send signal to set 28*C
  4.   AC_Temp = 28;
  5. }

  6. if (Measured_temp == Desired_temperature-2 ) //If AC is ON and measured temp is very low than desired value
  7. {
  8.   irsend.sendRaw(Temp29, sizeof(Temp29) / sizeof(Temp29[0]), khz); delay(2000);//Send signal to set 29*C
  9.   AC_Temp = 29;
  10. }

  11. if (Measured_temp == Desired_temperature-3 ) //If AC is ON and measured temp is very very low desired value
  12. {
  13.   irsend.sendRaw(Temp30, sizeof(Temp30) / sizeof(Temp30[0]), khz); delay(2000);//Send signal to set 30*C
  14.   AC_Temp = 30;
  15. }
复制代码

自动空调温度控制系统的工作过程:

当您的代码和硬件准备就绪时,将代码上传到您的电路板,您应该注意OLED显示类似的东西。

Automatic-AC-Temperature-Controller-using-arduino-DHT11-and-ir-blaster.jpg


现在把电路放在空调的对面,你注意到空调的温度是根据房间的温度来控制的。 您可以尝试提高DHT11传感器附近的温度,以检查空调温度是否被控制。


您可以调整程序以执行任何所需的操作; 您所需要的只是您从示例框架中获得的代码。 希望你了解这个自动温度控制器项目,并喜欢制作非常相似的东西。 我知道这里有很多地方比较难懂,但不要担心。只需使用论坛来描述你的问题,这里的人肯定会乐于帮助您解决问题。


本文使用的完整代码: main.c (15.25 KB, 下载次数: 21)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 94 | 回复: 126



Archiver|手机版|小黑屋|

GMT+8, 2018-6-22 17:18 , Processed in 0.046875 second(s), 31 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 京ICP备16014155号 )

快速回复 返回顶部 返回列表