Arduino温度控制-根据温度调整风扇速度

原文:https://circuitdigest.com/microcontroller-projects/automatic-temperature-controlled-fan-project

参考资料

  1. Arduino关于DHT11和DHT22湿度和温度传感器的完整指南
  2. Arduino操控1602 LCD液晶屏 https://blog.csdn.net/acktomas/article/details/117074531
  3. 1602-LiquidCrystal库https://blog.csdn.net/acktomas/article/details/117075021

Arduino温度控制-根据温度调整风扇速度

ARDUINO的

经过**萨达姆** 2015年8月3日99
在这里插入图片描述

在这个基于arduino的项目中,我们将使用Arduino构建 **温度控制风扇。**借助此电路,我们将能够根据室温来调节家庭或办公室中的风扇速度,并在16x2 LCD显示屏上显示温度和风扇速度的变化。为此,我们将使用Arduino UNO板,LCD,DHT11传感器模块和可通过PWM控制的DC风扇。让我们讨论更多有关此操作的信息,以便您可以自己构建一个。我们还建立了一个执行交流温度自动控制的项目 ,您也可以检查一下是否感兴趣。

所需组件

以下是使用Arduino执行基于温度的风扇速度控制所需的材料**。** 大多数组件应该可以在本地硬件商店轻松获得

  1. Arduino UNO
  2. DHT11传感器
  3. 直流风扇
  4. 2N2222晶体管
  5. 9伏电池
  6. 16x2液晶屏
  7. 1K电阻
  8. 连接线

使用温度传感器进行Arduino风扇速度控制

该项目包括三个部分。人们通过使用湿度和温度传感器即DHT11来感测温度。第二 部分读取dht11传感器模块的输出,并将温度提取为以摄氏度为单位的合适数值,并使用PWM控制风扇速度。系统的最后一部分在LCD和风扇驱动器上显示湿度和温度。

在此项目中,我们使用了传感器模块DHT11,该模块已经讨论了我们先前的项目“使用Arduino进行湿度和温度测量”。在这里,我们仅使用该DHT传感器来感测温度,然后根据要求对arduino进行编程。

这个项目的工作非常简单。我们在arduino的pwm引脚上创建了PWM,并将其应用于晶体管的基极端子。然后,晶体管根据PWM输入产生电压。
在这里插入图片描述
风扇速度和PWM值以及占空比值在给定表中显示

温度占空比PWM值风扇转速
<260%0离开
2620%5120%
2740%10240%
2860%15360%
2980%20480%
>29100%255100%

什么是PWM? PWM是一种通过使用我们可以控制电压或功率的技术。为了更简单地理解它,如果您施加5伏电压来驱动电动机,那么电动机将以一定速度运动,现在,如果我们将施加的电压减小2表示我们将3伏电压施加给电动机,那么电动机速度也会降低。该概念在项目中用于通过PWM控制电压。(要了解有关PWM的更多信息,请检查以下电路:1瓦LED调光器
在这里插入图片描述
PWM的主要功能是具有一定占空比的数字脉冲,该占空比负责控制速度或电压。

假设我们有一个占空比为50%的电池,这意味着它将提供我们施加电压的一半。

占空比的公式如下:

占空比(Duty Cycle)= Ton/T

其中 T= (total time) or (Ton+Toff)
Ton =脉冲的导通时间(means 1)
Toff =脉冲关闭时间(means 0)

50%占空比

10%占空比

90%占空比
在这里插入图片描述

Arduino温度控制风扇电路图

温度控制风扇电路的连接非常简单,此处使用液晶显示器显示温度和风扇速度状态。LCD以4位模式直接连接到Arduino(有关更多详细信息,请参阅本教程:LCD与Arduino Uno的接口)。LCD的引脚(即RS,EN,D4,D5,D6和D7)连接至Arduino数字引脚编号2、3、4、5、6、7DHT11传感器模块连接至Arduino的数字引脚12。数字引脚9用于控制通过晶体管的风扇速度。
在这里插入图片描述
如果您正在寻找简单且更具成本效益的产品,则可以使用LM35温控自动交流开关项目来检查 温控LED,它们都很容易构建并且不需要微控制器。

用于温控风扇的Arduino代码

首先,我们包括用于LCD和DHT传感器的库,然后为LCD,DHT传感器和风扇定义引脚。

#include <dht.h>      // Including library for dht
#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);//连接的引脚需要按“ RS,En,D4,D5,D6,D7”的顺序表示
#define dht_dpin 12
dht DHT;
#define pwm 9

然后在设置循环中初始化所有内容。然后通过使用dht功能读取DHT传感器,然后使用一些dht功能循环提取温度并将其显示在LCD上。

DHT.read11(dht_dpin);
  int temp = DHT.temperature;
  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.print(temp);   // Printing temperature on LCD
  lcd.write(1);
  lcd.print("C");
  lcd.setCursor(0, 1);

此后,我们将温度与预定义的温度数字进行比较,然后根据温度值生成PWM。
在这里插入图片描述

为了生成PWM,我们在8位中使用了“ analogWrite(pin,PWM value)”功能。如果PWM值等于模拟值,则表示平均值。因此,如果我们需要产生20%的占空比,则在“ analogWrite”函数中将255/5值作为PWM传递。

Code

#include <dht.h>      // Including library for dht
#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);//连接的引脚需要按“ RS,En,D4,D5,D6,D7”的顺序表示

#define dht_dpin 12
dht DHT;

#define pwm 9

byte degree[8] =
{
  0b00011,
  0b00011,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

void setup()
{
  lcd.begin(16, 2);
  lcd.createChar(1, degree);
  lcd.clear();
  lcd.print("   Fan Speed  ");
  lcd.setCursor(0, 1);
  lcd.print("  Controlling ");
  delay(2000);
  analogWrite(pwm, 255);
  lcd.clear();
  lcd.print("Circuit Digest ");
  delay(2000);
}

void loop()
{
  DHT.read11(dht_dpin);
  int temp = DHT.temperature;
  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.print(temp);   // Printing temperature on LCD
  lcd.write(1);
  lcd.print("C");
  lcd.setCursor(0, 1);
  if (temp < 26 )
  {
    analogWrite(9, 0);
    lcd.print("Fan OFF            ");
    delay(100);
  }

  else if (temp == 26)
  {
    analogWrite(pwm, 51);
    lcd.print("Fan Speed: 20%   ");
    delay(100);
  }

  else if (temp == 27)
  {
    analogWrite(pwm, 102);
    lcd.print("Fan Speed: 40%   ");
    delay(100);
  }

  else if (temp == 28)
  {
    analogWrite(pwm, 153);
    lcd.print("Fan Speed: 60%   ");
    delay(100);
  }

  else if (temp == 29)
  {
    analogWrite(pwm, 204);
    lcd.print("Fan Speed: 80%    ");
    delay(100);
  }
  else if (temp > 29)
  {
    analogWrite(pwm, 255);
    lcd.print("Fan Speed: 100%   ");
    delay(100);
  }
  delay(3000);
}
### Arduino PWM 控制直流电机转速教程 #### 1. 原理概述 PWM(Pulse Width Modulation,脉冲宽度调制)是一种常见的技术,用于通过改变信号的高电平持续时间来调节设备的工作状态。对于直流电机而言,PWM信号能够有效地控制其转速。当PWM信号的占空比增加时,传递给电机的有效电压也随之升高,从而提高电机的转速;反之,则降低转速[^2]。 #### 2. 所需硬件组件 为了实现这一功能,通常需要以下硬件组件: - **Arduino 开发板**:作为核心控制器。 - **L298N 或其他 H 桥驱动模块**:用于放大电流并保护 Arduino 的 I/O 引脚免受过载影响。 - **直流电机**:目标被控对象。 - **电源适配器或电池组**:为电机提供足够的功率支持。 - 连接线若干。 #### 3. 接线说明 按照安全规范完成电路连接至关重要。一般情况下,应遵循如下原则进行布线: - 将 L298N 的输入端 IN1 和 IN2 分别接到 Arduino 上指定用于生成 PWM 波形的数字引脚上; - 把 ENA 设置成另一个可产生固定频率方波输出的 GPIO 口以便进一步精细化管理速度参数; - 对于实际负载即马达本身来说,则要将其两根动力缆分别接入到对应的 OUT 点位上去形成闭合回路供电运转起来即可[^3]。 #### 4. 示例代码展示 下面给出一段基础版本的例子程序供参考学习: ```cpp const int motorPin = 9; // 定义PWM输出针脚 void setup() { pinMode(motorPin, OUTPUT); // 设定该针脚为输出模式 } void loop() { for (int i=0;i<=255;i++) { analogWrite(motorPin,i); delay(20); } for(int j=255;j>=0;j--){ analogWrite(motorPin,j); delay(20); } } ``` 上述片段实现了让电机从静止逐渐加速至最高速度后再慢慢减速回到初始状态这样一个周期性的过程演示效果[^1]。 #### 5. 注意事项 在实践过程中需要注意几点重要事项以保障项目的顺利实施以及人身财产的安全性: - 确认所选用的驱动芯片额定工作范围能覆盖当前应用场景下的需求规格; - 正确区分各接口定义防止错误插拔造成损害; - 测试阶段建议先从小幅度变化做起观察反应特性再逐步扩大调整区间直至达到理想成果为止。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值