在本文中,我们将构建几个简单的基于Arduino的自动温度控制直流风扇电路,当环境温度达到预先确定的阈值水平时,它将打开风扇或连接到它的任何其他小部件。这个项目我们将使用DHT11传感器和arduino。
概述
微控制器的美妙之处在于,我们可以非常精确地控制与它相连的外围设备。在本课题中,用户只需在程序中输入温度阈值,其余的功能由单片机来完成。
互联网上有大量基于非微控制器的自动温度控制器项目,例如使用比较器和晶体管。
它们非常简单,而且工作得很好,但是,当使用预置电阻器或电位器校准阈值电平时,出现了问题。
我们在校准它时有一个盲目的想法,用户可能需要进行试验和错误方法来找到甜蜜点。
这些问题被微控制器克服,用户只需要在这个项目中进入摄氏度的温度,因此无需校准。
本项目可用于电路内部温度需要稳定或防止过热的地方。
在图1中,我们将CPU风扇连接为输出。该设置可用于控制封闭电路的内部环境温度。
当达到阈值温度时,风扇打开。当温度低于阈值温度风扇时关闭。所以它基本上是一个自动化的过程。
在图2中,我们连接了一个继电器,用于在电源电压下运行的控制设备,如表风扇。
当室温达到阈值温度时,风扇打开,当房间冷却时,风扇打开并关闭。
这可能是最好的节约能源的方式,这是懒人的天堂,希望别人打开电扇时,他们感到温暖。
电路图显示直流风扇控制
可以部署此设置以用于括在盒子中的电路。当预设阈值水平达到并打开风扇时,LED接通。
连接继电器以控制更大的风扇
该电路是否具有上一电路的类似功能,现在风扇被继电器所取代。
该电路可以控制桌面风扇或吊扇或任何其他可以冷却环境温度的小工具。
当温度低于预设的阈值时,连接的设备立即关闭。
这里所示的温控直流风扇电路图仅仅是许多可能性的少数。您可以为自己的目的自定义电路和程序。
注1:#引脚7是输出。
注2:此程序仅与DHT11传感器兼容。
上述程序使用Arduino解释了自动温度调节器电路:
程序代码
注:在程序中 int th = 30;//设置阈值温度。 将“30”替换为所需的值。 第二种设计 下面讨论的第二个温控直流风扇电路方案,自动感知环境温度,调节风扇电机转速,使环境温度处于控制之下。这个自动处理是通过Arduino和温度传感器IC LM35完成的。 经过:Ankit Negi. 1).一旦周围温度升高超过25摄氏度(可根据需要在程序中更改此值,工作部分说明),电机开始运行。 2)。随着各种程度的温度升高,电机的速度也增加。 3)。电机一旦温度升高到40摄氏度,电机就会以其顶级速度运行(该值可以在程序中更改)。 为了实现上述任务,我们将使用TEMP。传感器LM35广泛使用,可轻松使用。 LM35有3个销,您可以在图中看到。 1. VIN - 该引脚连接到4到20 V之间的直流电源。 LM35,连接电源时感应周围环境温度并通过其输出管脚根据温度每上升一度发送等效电压。 lm35可以感知任何温度。在-50度至+150摄氏度之间,增加了10毫伏的输出量,温度升高10毫伏。因此,它可以给出的最大电压为1.5伏。 arduino需要将从LM35的输出引脚接收的模拟值更改为数字值,并将相应的数字输出(PWM)发送到MOSFET的基础。 我们也将使用Arduino命令打印温度,Arduino IDE串行监视器上的对应模拟值和数字输出。 如果不能运行高电流电机,该电路将没有使用。因此,运行这种电机使用功率MOSFET。 二极管用于保护MOSFET从电机产生的返回时从跑步产生。 1.LM35 2. Arduino. 3.功率MOSFET(IRF1010E) 4.二极管(1N4007) 5.风扇(电机) 6.风扇电源 如电路图所示进行连接。 a)将LM358的VIN PIN连接到Arduino的5V X - A)。变量 这只是PIN号码接收的模拟值。A0来自LM35的输出引脚。 b)。变量Y- 由于仅限该变量,我们的风扇电机根据相应的温度运行。该变量所做的是它将模拟值I.E.变量x更改为周围环境的相应温度。 Y = (500 * x) / 1023 C)。变量z- z =地图(x,0,1023,0,255); 请注意::我们知道LM35可以在TEMP提供最大1.5伏,也可以提供。是150°。这不实用。 这意味着40度Celsius我们得到0.40伏,我们获得0.25伏。由于MOSFET上适当的PWM非常低,因此我们需要将其乘以一个因素。 因此,我们将其乘以10,并将此值作为PWM引脚10的模拟输出,即。 ** Amplwwrite(10,Z * 10) 现在,0.25伏特的mosfet得到0.25*10 = 2.5伏特 对于.40伏MOSFET获得0.40 * 10 = 4伏,电机几乎以全速运行 案例1.当温度时。不到25度 在这种情况下,Arduino将0 PWM电压发送到引脚10,如最后的代码中 ** 别的 由于mosfet基础上的pwm电压为0,它保持关闭,电机从电路断开。 参见本例中的模拟电路。 你可以看到温度是20度 模拟值= 41 但由于温度低于25度,因此mosfet得到0伏特,如图所示(由蓝点表示)。 当温度达到25度时,当代码PWM信号中的规定被发送到MOSFET的基极并且在温度下升高时,该PWM电压也增加即,即 参见本例中的模拟电路。 正如您可以看到的,随着温度从20度从20度增加到40度,所有三个值都会发生变化和40摄氏度 模拟值= 82 由于温度大于25度,因此mosfet得到相应的PWM电压如图所示(用红点表示)。 因此,电机在25度时开始运行,每度温度相应上升;从引脚10到mosfet基极的PWM电压也增加。因此,电机速度随温度的增加而线性增加,并在40摄氏度时几乎达到最大值。 如果您对使用FAN和Arduino的上述自动温控直流风扇电路有任何进一步的查询,您可以随时使用下面的评论框并将您的想法发送给我们。我们将尽力回归。// ------------------由r.girish开发的程序---------------------/
#include
DHT DHT;
#定义DHTxxPIN A1
int p = a0;
int n = A2;
int应答;
Int op = 7; / /
int th = 30;//在摄氏中设置藏钢化件
void setup(){
Serial.Begin(9600);//测试后可以删除
PinMode(P,输出);
Pinmode(n,输出);
PinMode(OP,输出);
digitalWrite (op,低);
}
void循环()
{
DigitalWrite(p,1);
DigitalWrite(n,0);
ACK = 0;
int chk = dht.read11(dhtxxpin);
开关(CHK)
{
案例dhtlib_error_connect:
ACK = 1;
休息;
}
if(ack == 0)
{
//你可以在测试后删除这些行,从这里
并同时“温度(°C) = ");
serial.println(dht.temperature);
Serial.print(“湿度(%)=”);
serial.println(dht.humity);
并同时(“\ n”);
// 到这里
如果(DHT.temperature > = th)
{
延迟(3000);
if(dht.temperature> = th)DigitalWrite(OP,高);
}
如果(dht.temperature {
延迟(3000);
如果(DHT.temperature < th) digitalWrite (op,低);
}
}
if(ack == 1)
{
//可以在测试后从这里删除
serial.print(“无数据”);
serial.print(“\ n \ n”);
// 到这里
digitalWrite (op,低);
延迟(500);
}
}
//------------------------- 项目由R.Girish ---------------------//
我们的目标是:
温度传感器LM35:

2. VOUT - 此引脚以电压的形式输出。
3.GND——此引脚连接到电路的GND端子。为什么arduino用于这个直流风扇控制器项目?
电源MOSFET的作用是什么?
为什么使用二极管?
项目的零件清单:


电路图:

b)连接lm358的vout引脚到arduino的A0
c)将LM358的接地销连接到Arduino的GND
d)将mosfet底座连接到arduino的PWM引脚10代码:
//初始化变量
int y;
Z Z;
无效的设置()
{
pinMode (A0、输入);//初始化模拟引脚A0作为输入引脚
Serial.Begin(9600);//开始串行通信
PinMode(10,输出);//将数字引脚10初始化为输出引脚
}
void循环()
{
x = analogread(a0);//从传感器的输出引脚读取模拟值,连接到A0引脚
y=(500*x)/1023;//传感器接收到的模拟值到相应摄氏度的转换(*公式在工作部分说明)
z =地图(x, 0, 1023, 0255);//将模拟值转换为数字值
serial.print(“模拟价值”);
serial.print(x);//从传感器的输出引脚打印模拟值,连接到串行监视器上的A0引脚(称为“模拟值”)
serial.print(“温度”);
serial.print(y);//在串行监视器上打印温度(称为“温度”)
serial.print(“映射值”);
serial.print(z * 10);//乘以映射值10并打印它(称为“映射值”)
serial.println();
延迟(1000);//每次打印之间的1秒延迟。
如果(y> 25)
{Amplswrite(10,Z * 10);//临时。高于25°,将数字值乘以10并将其写入PWM引脚10(**在工作部分中解释)
}
别的
{analogWrite (10 0);//在任何其他情况下,PWM在引脚10必须是0
}
}工作(理解代码):
1.首先模拟值必须改变为相应的电压。
1023: 5伏
因此,(5000毫伏* x)/ 1023 v
2.现在我们知道,温度每升高一度,相应的电压输出增加10mv。
1度摄氏:10毫伏
因此,(5000毫伏*x)/(1023*10)度
这个变量改变PWM输出引脚10的模拟值为数字值。
//在任何其他情况下,引脚10上的PWM必须为0
} * *
温度= 20.
映射值= 100
案例2.当温度时。大于25度如果(y> 25)
{analogWrite z (10 * 10)
} z * 10。
温度= 40.
映射值= 200你也会喜欢:
读者互动
注释
你的评论太有价值了!但是请注意,它们是与上面的文章相关的,并且不是跑题的!
嗨洼地
谢谢你的指导,非常有用。在我的情况下,我使用lm35和4线PWM 12DC风扇,不需要mosfet。同样的代码在这种情况下是否可以工作。我要试一试,只是不确定是否需要修改。
谢谢尤金
Eugene,我不确定4线风扇如何配置在上述文章中的最后一个电路,因此我无法建议是否可以为您的特定应用程序使用相同的代码。
如果在第一个绘图中使用5V风扇,则需要哪些组件更改?如果您可以使用缩小绘图(例如PDF),因此它也很有用。
您只需用5 V电源(电池)更换12V电源
这是放大的图像:
//www.addme-blog.com/wp-content/uploads/2016/07/Auto2Bfan-1.jpg
C:\Users\Sri克里希纳\ \ Arduino文档\风扇、风扇。没有这样的文件或目录
当我尝试编译你的第一节目时,我收到了这个错误,请帮忙
谢谢
可能是缺少库,或者现有库与dth11不匹配
谷歌搜索以下短语:致命错误:dht.h,你将能够找到很多论坛讨论这个问题!
良好的创新沼泽先生。
能否寄一本学习ARDUINO程序/代码的书?
非常感谢。
谢谢SASA,我试图将它发送到您的电子邮件,但似乎您的电子邮件ID不正确或有问题。它返回我的电子邮件。
你好
我有加热器,但我必须在寒冷时手动将其打开。你能告诉我一个简单的解决方案,将整个夜晚保持室温温暖。我打算在冬天使用这个。
谢谢
Bhargav.
如果它也包括湿度作为变量,这将是更好的设计。当湿度为45%或更低时以及外部温度下降到环境温度下方时,我希望一个电路将激活继电器。因此,在满足两个条件时,继电器被激活
您可以参考以下帖子:
//www.addme-blog.com/2016/07/digital-temperature-humidity-meter.html