本篇文章,主要介绍如何使用DHT22温湿度传感器和继电器制作一款Arduino温控风扇。使用DHT22传感器获取温度值,然后将在LCD显示屏上显示此温度值。我们将检查温度值是否大于26,如果温度大于26,则启动继电器,风扇将开始旋转。
所需的硬件
● Arduino Uno 开发板
● DHT22 温湿度传感器
● LCD1602 显示屏
● 继电器
● 9V电池 //其他电池也可以
● 1K电阻
● 直流电机
● 小风扇
● 面包板
● 若干条连接导线
LCD1602 显示屏,连接如下:
● 将 “LCD1602 显示屏” 的 “VSS 引脚” 连接到 “Arduino Uno 开发板” 的 “GND 引脚” ;
● 将 “VDD 引脚” 连接到 “Arduino Uno 开发板” 的 “VCC(5v) 引脚” ;
● 将 “V0 引脚” 接 “1K电阻” 到 “GND (或者接电位器) 引脚” ;
● 将 “RS 引脚” 连接到 “Arduino Uno 开发板” 的 “引脚 12” ;
● 将 “R / W 引脚” 连接到 “Arduino Uno 开发板” 的 “GND 引脚”。此时, “LCD1602 显示屏” 处于读取状态;
● 将 “E(使能) 引脚” 连接到 “Arduino Uno 开发板” 的 “引脚 11” ;
● 将 “D4-D7 引脚” 分别连接到 “Arduino Uno 开发板” 的 “引脚10,9,8,7 引脚” ;
● 将 “A 引脚” 接 “1K电阻” 到 “VCC(5v) 引脚” ;
● 将 “K 引脚” 接 “GND 引脚” 。
然后将继电器模块 relayPin 连接到 Arduino Uno 开发板 。在继电器模块的输入端,连接如下:
● 将继电器模块的 “VCC 引脚” 连接到 “Arduino Uno 开发板” 的 “5V 引脚 " ;
● 将继电器模块的 “IN 引脚” 连接到 “Arduino Uno 开发板”的 “引脚 3” ;
● 将继电器模块的 “GND 引脚” 连接到 “Arduino Uno 开发板” 的 “GND 引脚”。
最后,按照以下方式连接DHT22温湿度传感器:
● 将 “DHT22” 的 “引脚 1(即VCC引脚)” 连接到 “Arduino Uno 开发板” 的 “5V 引脚” 。
● 将 “DHT22” 的 “引脚 2(数据引脚)” 连接到 “Arduino Uno 开发板” 的 “引脚 2” 。
● 将 “DHT22” 的 “引脚 3(数据引脚)” 置空。
● 将 “DHT22” 的 “引脚 4(接地引脚)” 连接到 “Arduino Uno 开发板” 的 “GND 引脚” 。
成品展示
源码
#define DHT11PIN 2 //定义温湿度针脚号为2号引脚
dht11 DHT11;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); //设置接口
int incomedate = 0;
int relayPin = 3; //继电器引脚
void setup()
{Serial.begin(9600); //连接到电脑串口监视器pinMode(relayPin, OUTPUT); //继电器输出模式pinMode(DHT11PIN,OUTPUT); //温湿度模块输出模式lcd.begin(16,2);lcd.clear(); //清屏delay(1000); //延时1000ms
}void loop ()
{ int chk = DHT11.read(DHT11PIN); //将读取到的值赋给chk
int tem=(float)DHT11.temperature; //将温度值赋值给tem
int hum=(float)DHT11.humidity;
Serial.print("Humidity:"); //打印出Humidity:
Serial.print(hum);
Serial.print("Tempeature:");Serial.print(tem); //使屏幕显示文字//打印出湿度结果
Serial.println("%");
delay(200);lcd.setCursor(0, 0) ; //设置光标位置为第1行第1个位置lcd.print("Tempeature:");lcd.print(tem); //使屏幕显示温度lcd.setCursor(0, 1) ;lcd.print("Humidity:"); lcd.print(hum); //使屏幕显示湿度if (tem >26) //如果温度大于26摄氏度{digitalWrite(relayPin, LOW); //继电器开,风扇开Serial.println(" OPEN!");} else{digitalWrite(relayPin,HIGH);Serial.println("CLOSE!");}delay(500); //延时0.1秒,这里也就是刷新速度。 }
注意:
此程序需要引用两个 “库文件” ,分别为:
● <LiquidCrystal.h> //直接在Arduino编译软件中添加
● <dht11.h> //需要在Arduino编译软件中另外增加库文件
链接: https://pan.baidu.com/s/1wHXLNhYdRS_h3CqHphllbw
提取码: 7vhi
运行代码
#include <LiquidCrystal.h>
#include <dht11.h>#define DHT11PIN 2 //定义温湿度针脚号为2号引脚
dht11 DHT11;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); //设置接口
int incomedate = 0;
int relayPin = 3; //继电器引脚
void setup()
{Serial.begin(9600); //连接到电脑串口监视器pinMode(relayPin, OUTPUT); //继电器输出模式pinMode(DHT11PIN,OUTPUT); //温湿度模块输出模式lcd.begin(16,2);lcd.clear(); //清屏delay(1000); //延时1000ms
}void loop ()
{ int chk = DHT11.read(DHT11PIN); //将读取到的值赋给chk
int tem=(float)DHT11.temperature; //将温度值赋值给tem
int hum=(float)DHT11.humidity;
Serial.print("Humidity:"); //打印出Humidity:
Serial.print(hum);
Serial.print("Tempeature:");Serial.print(tem); //使屏幕显示文字//打印出湿度结果
Serial.println("%");
delay(200);lcd.setCursor(0, 0) ; //设置光标位置为第1行第1个位置lcd.print("Tempeature:");lcd.print(tem); //使屏幕显示温度lcd.setCursor(0, 1) ;lcd.print("Humidity:"); lcd.print(hum); //使屏幕显示湿度if (tem >26) //如果温度大于26摄氏度{digitalWrite(relayPin, LOW); //继电器开,风扇开Serial.println(" OPEN!");} else{digitalWrite(relayPin,HIGH);Serial.println("CLOSE!");}delay(500); //延时0.1秒,这里也就是刷新速度。 }
编译完成