基于温湿度传感器的存储显示和透传实验-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8333|回复: 0

基于温湿度传感器的存储显示和透传实验

[复制链接]
发表于 2019-3-17 16:15 | 显示全部楼层 |阅读模式

一、功能概述:

1、DHT11温湿度传感器获取环境温湿度数据,传输给Arduino主板

2、Arduino主板将温湿度数据显示在Lcd1602上,实现数据显示

3、Arduino主板将温湿度数据存储在TF卡中,实现数据存储

4、Arduino主板将温湿度数据通过蓝牙HC-02透传到配有HC-05蓝牙的电脑,实现数据无线传输

5、计算机通过HID串口助手实时显示HC-05蓝牙接收到的数据

二、需要的硬件

(1)DHT11温湿度传感器   (2)Lcd1602 显示屏   (3)Arduino UNO R3主板

(3)TF卡和TF卡读卡模块 (4)蓝牙HC-02和蓝牙HC-05和HC-USB-T

三、硬件电路连接

(1)DHT11共四个针脚,三个针脚接 GND ,VCC(5V),Pin8(数据输出);

(2)Lcd1602共16个引脚,采用4条数据线接入法,共接12个引脚,对应如下:

    
LCD
    
  
Vss
  
  
  
Vcc
  
  
  
Vee
  
  
  
Rs
  
  
  
R/W
  
  
  
En
  
  
  
DB4
  
  
  
DB5
  
  
  
DB6
  
  
  
DB7
  
  
  
A
  
  
  
K
  

    
Ardu
    
  
Gnd
  
  
  
5V
  
  
  
Gnd
  
  
  
Pin2
  
  
  
Gnd
  
  
  
Pin3
  
  
  
Pin5
  
  
  
Pin6
  
  
  
Pin7
  
  
  
Pin9
  
  
  
5V
  
  
  
Gnd
  

(3)TF卡,采用SPI总线连接

    
TF读卡
    
  
GND
  
  
  
CS
  
  
  
MOSI
  
  
  
CLK
  
  
  
MISO
  
  
  
VCC
  

    
Arduino
    
  
Gnd
  
  
  
Pin4
  
  
  
Pin11
  
  
  
Pin13
  
  
  
Pin12
  
  
  
5V
  

(4)蓝牙HC-02

    
蓝牙HC-02
    
  
RXD
  
  
  
TXD
  
  
  
GND
  
  
  
VCC
  

    
Arduino
    
  
Pin1 TX
  
  
  
Pin0 RX
  
  
  
Gnd
  
  
  
3.3V
  

(5)HC-05通过HC-USB-T和电脑连接,在电脑打卡HID助手,这样数据可以透传到电脑。

注:各个模块都有额定电压,额定电压连接错误或者硬件连线错误会出现各种莫名其妙的错误。比如,开始TF读卡模块接3.3V电压,部分程序可以运行,但是写文件出现乱码。如果GND接地不好,会报错 Could not find FAT16/FAT32 partition.而蓝牙HC-02和HC-05必须使用3.3V电压,否则容易烧坏器件。另外蓝牙传输要注意波特率设置。只要设置正确,HC-05和HC-02会自动配对,无需其它操作。将数据直接写入硬件串口,就可以直接通过蓝牙透传到计算机。


四、程序



#include<LiquidCrystal.h>

#include<dht11.h>

#include<SPI.h>

#include<SD.h>


dht11DHT11;


//设置 DHT 引脚 为 Pin8

#defineDHT11PIN 8

//定义液晶

constint numrows=2;

constint numcols=16;

constint chipselect=4;

LiquidCrystallcd(2,3,5,6,7,9);


voidsetup() {

  //串口输出

  Serial.begin(9600);

  Serial.println("DHT11 TESTPROGRAM");

  // output, even if you don't use it:

  pinMode(10, OUTPUT);

  //液晶输出

  lcd.begin(numcols,numrows);

  // 输出 DHT 库的版本号

   Serial.println(DHT11LIB_VERSION);

   Serial.println();

   Serial.println("Initializing SDcard");

   if(!SD.begin(chipselect))

   {

     Serial.println("initializationfailed!");

     while(1);

   }

   Serial.println("initializationdone");

}


voidloop() {

  Serial.println("\n");


  int chk = DHT11.read(DHT11PIN);

  // 测试 DHT 是否正确连接

  Serial.print("Read sensor: ");

  switch (chk)

  {

    case DHTLIB_OK:

    Serial.println("OK");

    break;

    case DHTLIB_ERROR_CHECKSUM:

    Serial.println("Checksum error");

    break;

    case DHTLIB_ERROR_TIMEOUT:

    Serial.println("Time out error");

    break;

    default:

    Serial.println("Unknown error");

    break;

  }

  // 获取测量数据

  Serial.print("Humidity (%): ");

  Serial.println((float)DHT11.humidity, 2);

  //液晶定位到第一行第一列,输出湿度

  lcd.setCursor(0,0);

  lcd.print("Hum ");

  lcd.print((float)DHT11.humidity, 2);

  Serial.print("Temperature ): ");

  Serial.println((float)DHT11.temperature, 2);

  //液晶定位到第二行第一列,输出温度

  lcd.setCursor(0,1);

  lcd.print("T ");

  lcd.print((float)DHT11.temperature, 2);

  //save data to TF

  Serial.println("open file and writedata");

  FiledataFile=SD.open("data.txt",FILE_WRITE);

  if (dataFile)

  {

    dataFile.print(DHT11.humidity);

    dataFile.print(",");

    dataFile.print(DHT11.temperature);

    dataFile.close();

    Serial.println(DHT11.humidity);

    Serial.println(DHT11.temperature);

  }

  else

  {

    Serial.println("error openingdatal.txt");

  }

  Serial.println("Wait for nextloop");

  delay(10000);

}




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

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-30 23:57 , Processed in 0.072554 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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