【Arduino】温湿度传感器(DHT11)控制设计 四位数码管,LCD1602,带蜂鸣器、LED灯报警,串口输入设定阈值

@[TOC](
【Arduino】温湿度传感器(DHT11)控制设计 四位数码管,LCD1602,带蜂鸣器、LED灯报警,串口输入设定阈值
)


一、实验器材

UNO控制板:1块
共阳极四位数码管:1个
面包板:1块
面包板跳线:若干
220Ω电阻:4个
有源蜂鸣器:1个
红色led灯-1
黄色led灯-1
DHT11:1个

二、连线示意图

在这里插入图片描述
请添加图片描述注意:A4接LCD1602的SDA、A5接LCD1602的SCL

三、代码如下

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht11.h>
dht11 dht11; 
char signal;
int dhtpin = A3;//DHT11温湿度传感数据读取端口  
int buzzerPin = A0;//蜂鸣器端口
int LED1 = A2;
int LED2 = A1;
 //设置初始温度湿度
int temperatureset=22;
int humidityset=20;
//设置阴极接口
int a = 2;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 7;
int g = 8;
int p = 9;
 //设置阳极接口
int d4 = 12;
int d3 = 13;
int d2 = 11;
int d1 = 10;
 //设置变量

float humidity;
float temperature;
int num4;
int num3;
int num2;
int num1;
// I2C地址, 一般为0x3F, 0x20或0x27
LiquidCrystal_I2C lcd(0x27,16,2);

void setup(){            
lcd.init();
lcd.backlight(); // 打开背光
 Serial.begin(9600);
 pinMode(d1, OUTPUT);
 pinMode(d2, OUTPUT);
 pinMode(d3, OUTPUT);
 pinMode(d4, OUTPUT);
 pinMode(a, OUTPUT);
 pinMode(b, OUTPUT);
 pinMode(c, OUTPUT);
 pinMode(d, OUTPUT);
 pinMode(e, OUTPUT);
 pinMode(f, OUTPUT);
 pinMode(g, OUTPUT);
 pinMode(p, OUTPUT);
 pinMode(buzzerPin,OUTPUT);
 pinMode(LED1,OUTPUT);//设置led引脚为输出引脚
 pinMode(LED2,OUTPUT);//设置led引脚为输出引脚
  lcd.setCursor(0,1); // line 1, pos 0
  lcd.print("H:     % T:");
  delay(1000);
}

void pickDigit(int x)  //定义pickDigit(x),其作用是开启dx端口
{
  digitalWrite(d1, LOW);
  digitalWrite(d2, LOW);
  digitalWrite(d3, LOW);
  digitalWrite(d4, LOW);
  
  switch(x)
  {
  case 1:
    digitalWrite(d1, HIGH);
    break;
  case 2:
    digitalWrite(d2, HIGH);
    break;
  case 3:
    digitalWrite(d3, HIGH);
    break;
  default:
    digitalWrite(d4, HIGH);
    break;
  }
}



void dispDec(int x)  //设定开启小数点
{
  digitalWrite(p, LOW);
}

void clearLEDs()  //清屏
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(p, HIGH);
}

void Num_0()  //定义数字0时阴极那些管脚开关
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}

void Num_1()  //定义数字1时阴极那些管脚开关
{
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void Num_2()  //定义数字2时阴极那些管脚开关
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
}

void Num_3()  //定义数字3时阴极那些管脚开关
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
}

void Num_4()  //定义数字4时阴极那些管脚开关
{
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void Num_5()  //定义数字5时阴极那些管脚开关
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void Num_6()  //定义数字6时阴极那些管脚开关
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void Num_7()  //定义数字7时阴极那些管脚开关
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void Num_8() //定义数字8时阴极那些管脚开关
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void Num_9()  //定义数字9时阴极那些管脚开关
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}
void dispose(int show){
  num4=show%10;
  show=show/10;
  num3=show%10;
  show=show/10;
  num2=show%10;
  show=show/10;
  num1=show%10;
}
void pickNumber(int n)   //定义pickNumber(x),其作用是显示数字n
{

 switch(n)
  {
   default:
   case 0:Num_0();
   break;
   case 1:Num_1();
   break;
   case 2:Num_2();
   break;
   case 3:Num_3();
   break;
   case 4:Num_4();
   break;
   case 5:Num_5();
   break;
   case 6:Num_6();
   break;
   case 7:Num_7();
   break;
   case 8:Num_8();
   break;
   case 9:Num_9();
   break;

  }
}
void tone1(){
  for(int i=0;i<100;i++){
    digitalWrite(buzzerPin,HIGH);
    delay(1);
    digitalWrite(buzzerPin,LOW);
    delay(3);
  }
}
void tone2(){
  for(int i=0;i<100;i++){
    digitalWrite(buzzerPin,HIGH);
    delay(6);
    digitalWrite(buzzerPin,LOW);
    delay(8);
  }
}
String inString="";
void loop()
{
  Serial.println("请输入字符'H'或'T'分别修改湿度和温度阈值:");
   if(Serial.available()>0){
    Serial.print("输入字符:");
    char signal=Serial.read();
    Serial.println(signal);
    delay(5000);
    if(signal=='H'){//修改湿度阈值
      if(Serial.available()>0){       
        int i = Serial.parseInt();  
        Serial.print("修改湿度阈值:");
        Serial.println(i);
        humidityset=i;
      }
    }
    if(signal=='T'){//修改温度阈值
      if(Serial.available()>0){
        int i = Serial.parseInt();  
        Serial.print("修改温度阈值:");
        Serial.println(i);
        temperatureset=i;
      }
     }
  }
  dht11.read(dhtpin);  // 读取 DHT11 传感器
  // 读取温度或湿度
  humidity=dht11.humidity;
  temperature=dht11.temperature;

  int show=humidity*100;
  dispose(show);
  clearLEDs();
  Serial.print("当前湿度:");
  Serial.print(humidity);
  Serial.println(" %\t");
  for(int k=2000;k>0;k--){
  clearLEDs();
  pickDigit(1);
  pickNumber(num1);
  clearLEDs();
  pickDigit(2);
  dispDec(2);
  pickNumber(num2);
  clearLEDs();
  pickDigit(3);
  pickNumber(num3);
  clearLEDs();
  pickDigit(4);
  pickNumber(num4); 
  }     
  Serial.print("当前温度:");
  Serial.print(temperature);
  Serial.println(" °C ");
  show=temperature*100;
  clearLEDs();
  dispose(show);
  for(int k=2000;k>0;k--){
  clearLEDs();
  pickDigit(1);
  pickNumber(num1);
  clearLEDs();
  pickDigit(2);
  dispDec(2);
  pickNumber(num2);
  clearLEDs();
  pickDigit(3);
  pickNumber(num3);
  clearLEDs();
  pickDigit(4);
  pickNumber(num4); 
  }      
  clearLEDs();
  if(temperature>temperatureset){
    digitalWrite(LED1,HIGH);
    tone1();
    Serial.println("温度超标,黄色报警灯亮");   //黄灯亮
  }else{
    digitalWrite(LED1,LOW);
  }
  if(humidity>humidityset){                //红灯亮
    digitalWrite(LED2,HIGH);
    tone2();
    Serial.println("湿度超标,红色报警灯亮");  
  }else{
    digitalWrite(LED2,LOW);
    }
  lcd.setCursor(0,0);
  lcd.print("S-H:  %");
  lcd.setCursor(4,0);
  lcd.print(humidityset);
  lcd.setCursor(8,0);
  lcd.print("S-T:  'C");
  lcd.setCursor(12,0);
  lcd.print(temperatureset);
  lcd.setCursor(2,1); // line 1, pos 0
  lcd.print(humidity);
  lcd.setCursor(11,1); // line 1, pos 0
  lcd.print(temperature);
//  delay(2000);
//移动
//      for (int positionCounter = 0; positionCounter < 13; positionCounter++)
//      {
//        lcd.scrollDisplayLeft();
//        delay(1000);
//      }
//      for (int positionCounter = 0; positionCounter < 29; positionCounter++)
//      {
//        lcd.scrollDisplayRight();
//        delay(1000);
//      }
//      for (int positionCounter = 0; positionCounter < 16; positionCounter++)
//      {
//        lcd.scrollDisplayLeft();
//        delay(1000);
//      }
//      //  下次移动的延迟
//      delay(10);
}

2.实物展示如下:

4月21日

参考链接
https://blog.csdn.net/qq_52201194/article/details/123685337?spm=1001.2014.3001.5501

### 回答1: 可以使用以下代码实现: #include <LiquidCrystal.h> #include <dht.h> dht DHT; #define DHT11_PIN 7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { lcd.begin(16, 2); lcd.print("Temp: "); lcd.setCursor(0, 1); lcd.print("Humidity: "); } void loop() { int chk = DHT.read11(DHT11_PIN); lcd.setCursor(6, 0); lcd.print(DHT.temperature); lcd.setCursor(10, 0); lcd.print("C"); lcd.setCursor(10, 1); lcd.print("%"); lcd.setCursor(10, 1); lcd.print(DHT.humidity); delay(2000); } 这个代码使用了dht库和LiquidCrystal库,通过读取DHT11传感器的数据,将度和湿度显示在LCD上。 ### 回答2: 要设计一个使用1个DHT11湿度传感器和1个1602液晶LCD的湿度计,首先需要连接这两个设备到Arduino开发板上。连接DHT11传感器时,将其VCC引脚连接到Arduino的5V引脚,将GND引脚连接到Arduino的GND引脚,将Data引脚连接到Arduino的数字引脚2。连接液晶LCD时,将其VCC引脚连接到Arduino的5V引脚,将GND引脚连接到Arduino的GND引脚,将SCL引脚连接到Arduino的A5引脚,将SDA引脚连接到Arduino的A4引脚。 编写代码时,首先需要引入DHT11和LiquidCrystal库。接着定义并初始化DHT11传感器和LCD对象。在setup函数中,通过调用lcd.begin函数初始化液晶LCD。在loop函数中,通过调用dht.read函数获取DHT11传感器的湿度数据,并将其分别存储在temperature和humidity变量中。然后,通过调用lcd.clear函数清空液晶LCD显示内容,并通过调用lcd.setCursor函数设置光标位置。最后,通过调用lcd.print函数将湿度数据显示在液晶LCD上。 设计完成后,可以将Arduino开发板连接到电源,并将湿度计的湿度数据显示在液晶LCD上。每当需要查看当前的湿度时,只需观察液晶LCD上显示的数值即可。这个湿度计可以用于多种应用,例如监控室内环境的湿度变化,或者用于气象观测等。 ### 回答3: 要设计一个湿度计,可以使用Arduino主控板配合DHT11湿度传感器和1602液晶LCD进行构建。 首先,将DHT11传感器与Arduino连接。DHT11传感器有3个引脚,分别是VCC(电源正极)、DATA(数据信号引脚)和GND(电源负极)。将传感器的VCC引脚连接到Arduino的3.3V或5V引脚,GND引脚连接到Arduino的GND引脚,DATA引脚连接到Arduino的数字引脚,例如11号引脚。 接下来,将1602液晶LCD与Arduino连接。LCD有16个引脚,其中8个用于数据传输,另外8个用于控制。将LCD的VCC引脚连接到Arduino的5V引脚,GND引脚连接到Arduino的GND引脚。然后,将LCD的RS引脚连接到Arduino的数字引脚,例如12号引脚,将LCD的RW引脚连接到GND引脚,将LCD的E引脚连接到Arduino的数字引脚,例如13号引脚。最后,将LCD的D4-D7引脚连接到Arduino的数字引脚,例如2-5号引脚。 在Arduino的开发环境中,编写程序进行湿度监测和显示。首先,导入并使用DHT库以及LiquidCrystal库。通过定义相应的引脚和调用库函数,读取DHT11传感器的湿度数值。然后,使用LiquidCrystal库中的函数,在LCD上显示度和湿度数值。最后,将这些数值通过串口输出,以备后续分析。 编译并上传代码到Arduino主控板,然后将湿度计连接到电源。LCD将显示实时的度和湿度数值,同时也可以通过串口监控输出。 通过这种设计,我们实现了一个简单的湿度计,能够准确测量并显示当前环境的度和湿度数值。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的小莲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值