曾经被认为是奢侈品的空调(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图形库
- DHT11温度传感器传感器库
交流遥控器的工作方式:
在我们进入项目之前,请花一些时间,并注意您的交流遥控器的工作方式。与电视,DVD红外遥控器相比,交流遥控器的工作方式略有不同。遥控器上可能只有10-12个按钮,但是它们将能够发送许多不同类型的信号。这意味着遥控器不会每次都为同一按钮发送相同的代码。例如,当您使用向下按钮降低温度以使其达到24°C(摄氏度)时,您将获得带有一组数据的信号,但是当再次按其将其设置为25°C时您将不会得到相同的信号。数据,因为温度现在是25,而不是24。类似地,25的代码也会因风扇速度,睡眠设置等的不同而有所不同。 。
另一个问题是每次按下按钮时要发送的数据量,普通遥控器可以发送24位或48位,但是AC遥控器最多可以发送228位,因为每个信号都包含许多信息,例如温度,风扇速度,睡眠时间,Swing风格等。这就是为什么我们需要Arduino Mega才能提供更好的存储选项的原因。
电路图和说明:
幸运的是,此自动交流温度控制项目的硬件设置非常简单。您可以简单地使用面包板并进行如下所示的连接。
下表也可以用于验证您的连接。
序号 |
组件引脚 |
Arduino引脚 |
1个 |
OLED – Vcc |
5伏 |
2 |
OLED – Gnd |
nd |
3 |
OLED- SCK,D0,SCL,CLK |
4 |
4 |
OLED- SDA,D1,MOSI,数据 |
3 |
5 |
OLED- RES,RST,复位 |
7 |
6 |
OLED- DC,A0 |
5 |
7 |
OLED- CS,片选 |
6 |
8 |
DHT11 – Vcc |
5伏 |
9 |
DHT11 –地精 |
nd |
10 |
DHT11 –信号 |
13 |
11 |
TSOP – Vcc |
5伏 |
12 |
TSOP –地名 |
nd |
13 |
红外LED –阳极 |
9 |
14 |
红外LED –阴极 |
nd |
连接完成后,其外观应如下图所示。我用面包板整理过东西,但您也可以将公对母线直接连接所有组件
解码交流遥控信号:
控制AC的第一步是使用TSOP1738解码AC遥控器IR代码。按照电路图所示进行所有连接,并确保已安装所有提到的库。现在打开示例程序“ IRrecvDumpV2 ”,该程序可以在 文件->示例-> IRremote-> IRrecvDumpV2中找到 。将程序上传到Arduino Mega并打开串行监视器。
将遥控器指向TSOP,然后按任意按钮,对于每个按钮,按其各自的信号将由TSOP1738读取,由Arduino解码并显示在串行监视器中。对于遥控器上的温度变化,您将获得不同的数据。保存此数据,因为我们将在主程序中使用它。您的串行监视器将如下所示,我还显示了保存复制数据的Word文件。
屏幕截图显示了用于将AC遥控器的温度设置为26°C的代码。根据您的遥控器,您将获得不同的代码集。类似地,复制所有不同温度水平的代码。您可以在本教程末尾提供的Arduino代码中查看所有空调遥控器IR代码。
Arduino主要程序:
在完整的主Arduino的程序可以在这个页面的底部找到,但你不能使用相同的程序。您必须更改我们刚刚从上面的示例草图获得的信号代码值。在Arduino IDE上打开主程序,然后向下滚动到下面显示的该区域,在该区域中必须用为远程获取的值替换数组值。
请注意,我使用了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),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),khz); delay(2000); //发送信号以设置28 * C AC_Temp = 28; } if(Measured_temp == Desired_temperature-2)//如果AC接通且测量温度非常低于所需值{irsend.sendRaw(Temp29,sizeof(Temp29)/ sizeof(Temp29),khz); delay(2000); //发送信号以设置29 * C AC_Temp = 29; } if(Measured_temp == Desired_temperature-3)//如果AC接通且测量温度非常低,则期望值{irsend.sendRaw(Temp30,sizeof(Temp30)/ sizeof(Temp30),khz); delay(2000); //发送信号以设置30 * C AC_Temp = 30; }
自动交流温度控制系统的工作:
当您的代码和硬件准备就绪时,将代码上传到开发板上,您应该注意到OLED会显示类似的内容。
现在,将电路置于空调的对面,您会注意到根据房间温度控制空调的温度。您可以尝试提高DHT11传感器附近的温度,以检查AC的温度是否如以下视频所示那样受到控制。
您可以调整程序以执行任何所需的操作;您只需要从示例草图中获得的代码即可。希望您理解此自动温度控制器项目并喜欢构建非常相似的东西。我知道这里有很多地方会卡住,但是请不要担心。只需使用论坛或评论部分来解释您的问题,这里的人一定会帮助您解决问题。