一板网电子技术论坛

风筝
发表于: 2019-1-17 17:06:20 | 显示全部楼层

在本篇文章中,我们将主要介绍如何使用DHT22传感器和继电器制作一款Arduino温控风扇。使用DHT22传感器获取温度值,然后将在LCD显示屏上打印此温度值。我们将检查温度值是否大于35,如果温度大于35,则启动继电器,风扇将开始旋转。


所需的硬件

●    Arduino Uno开发板

●    LCD1602显示屏

●    DHT22温湿度传感器

●    直流电机

●    9V电池

●    10K电位器

●    连接导线

●    面包板


硬件部分

首先,我们按照以下方式将LCD模块连接到Arduino开发板:

●    将LCD的VSS引脚连接到Arduino的GND。

●    将VDD引脚连接到Arduino的5V。

●    将V0引脚连接到10K电位器的中心引脚。将电位器的其他两个引脚连接到5V和GND。

●    将RS引脚连接到Arduino的引脚2。

●    将R / W引脚连接到Arduino的地。这将使LCD处于读取模式。

●    将E(使能)引脚连接到Arduino的引脚3。

●    将D4-D7引脚分别连接到Arduino的引脚4、5、6、7。

●    将LED背光的正极引脚15通过串联一只220欧电阻连接到5V。

●    将LED背光的负极引脚16连接到Arduino的GND。


然后将继电器模块Keyes_ST1y连接到Arduino开发板。在继电器模块的输入端,连接如下:

●    将继电器模块的VCC引脚连接到Arduino的5V引脚。

●    将继电器模块的IN引脚连接到Arduino的引脚9。

●    将继电器模块的GND引脚连接到Arduino的GND。


在继电器模块Keyes_SR1y的输出侧,将9V电池的负极连接到继电器模块的公共端(C),并将继电器模块的NC连接到风扇负极。然后将电池正极连接到风扇正极。


最后,按照以下方式连接DHT22温湿度传感器:

●    将DHT22的引脚1(即VCC引脚)连接到Arduino的5V

●    将DHT22的引脚2(数据引脚)连接到Arduino的引脚8。

●    将DHT22的引脚4(接地引脚)连接到Arduino的GND。

connections.png


代码说明

首先我们需要包含用于DHT22传感器和LCD的库文件。


这些库将有助于简化代码。由于我们使用库,必须确保使用的库安装在Arduino IDE中。要在Arduino IDE中安装,请转到Sketch选项卡,下拉到Include Library,然后单击Manage Library。在Library Manager中搜索DHT和LiquidCrystal,然后安装。

  1. #include “DHT.h”
  2. #include “LiquidCrystal.h”
复制代码

library.jpg

通过库管理器将这两个库添加到Arduino IDE中。


然后我们初始化了连接LCD和DHT22传感器的引脚。之后,我们定义了DHT传感器的类型,我们使用的是DHT22传感器。还有许多其他类型的DHT传感器可供选择,如DHT11,因此在此定义类型非常重要。

  1. LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

  2. #define DHTPIN 8

  3. #define DHTTYPE DHT22
  4. DHT sensor(DHTPIN, DHTTYPE);
复制代码

setup()函数中,我们将命令发送到DHT22和LCD,开始与Arduino通信。然后我们将继电器引脚声明为输出引脚,因为我们将从Arduino向继电器提供电压以起送继电器。继电器反向工作(高电平表示继电器低电平)。

  1. lcd.begin(16,2);

  2. sensor.begin();

  3. pinMode(relay_pin, OUTPUT);

  4. digitalWrite(relay_pin, HIGH);
复制代码

loop()函数中,我们清除LCD显示,然后从传感器读取温度值。

  1. lcd.clear();

  2. float t = sensor.readTemperature(); //reading the temperature from the sensor

  3. // Checking if the sensor is sending values or not

  4. if (isnan(t)) {

  5. lcd.print("Failed");

  6. delay(1000);

  7. return;

  8. }
复制代码

然后我们在LCD上打印此温度值,如果温度值大于35,则启动继电器,风扇开始旋转。

  1. lcd.setCursor(0,0);

  2. lcd.print("Temp: ");

  3. lcd.print(t);
  4. lcd.print(" C");

  5. if (t > 35){

  6. digitalWrite(relay_pin, LOW);

  7. lcd.setCursor(0,1);

  8. lcd.print("Fan is ON ");

  9. delay(10);

  10. }
复制代码

以下是本文的完整代码: main.rar (507 Bytes, 下载次数: 454)

跳转到指定楼层
Jack01
发表于: 2019-3-26 19:42:15 | 显示全部楼层

感謝,很有用
回复

使用道具 举报

AAA
发表于: 2019-5-10 21:56:55 | 显示全部楼层


你好请问你做了实物出来吗
回复

使用道具 举报

freegps
发表于: 2019-5-16 11:10:32 | 显示全部楼层

pinMode(relay_pin, OUTPUT);

写high输出应该3.3V, 继电器应该吸合吧?
回复

使用道具 举报

Tomato
发表于: 2019-6-10 20:33:53 | 显示全部楼层

代码编译不了的    无法编译DHT这个库文件   只有DHT11这个库   楼主可以做一个使用DHT11的温度传感器的温控风扇教程么?
回复

使用道具 举报

amy
发表于: 2019-6-11 16:40:42 | 显示全部楼层

您好,  看了您的文章。感觉写的非常好。我最近在找合作写手,为我们的产品长期写文章。 这是我的qq:947545626  期待您的消息。
回复

使用道具 举报

ilw99933
发表于: 2019-7-13 09:35:37 | 显示全部楼层

不错不错,学习一下
回复

使用道具 举报

lala5
发表于: 2019-7-18 11:35:44 | 显示全部楼层

建议设置一个温度的区间 这样避免在临界值的时候继电器的来回跳动~
回复

使用道具 举报

yfw
发表于: 2021-7-6 18:37:15 | 显示全部楼层

我用了dht11后,(代码已改版本号)传感器没有数据,lcd也只有亮屏没有数据,这样该咋整啊
回复

使用道具 举报

风筝
发表于: 2021-7-7 09:18:11 | 显示全部楼层

yfw 发表于 2021-7-6 18:37
我用了dht11后,(代码已改版本号)传感器没有数据,lcd也只有亮屏没有数据,这样该咋整啊 ...

可以参考以下链接:

Arduino开发板使用DHT11温湿度传感器的方法

Arduino开发板使用DHT11/DHT22温湿度传感器的初学指南
回复

使用道具 举报

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

本版积分规则

主题 565 | 回复: 1115



手机版|

GMT+8, 2021-8-1 11:53 , Processed in 0.031544 second(s), 10 queries , MemCache On. Powered by Discuz! X3.4

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

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