基于温湿度传感器的存储显示和透传实验
一、功能概述:
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个引脚,对应如下:
LCDVssVccVeeRsR/WEnDB4DB5DB6DB7AK
ArduGnd5VGndPin2GndPin3Pin5Pin6Pin7Pin95VGnd
(3)TF卡,采用SPI总线连接
TF读卡GNDCSMOSICLKMISOVCC
ArduinoGndPin4Pin11Pin13Pin125V
(4)蓝牙HC-02
蓝牙HC-02RXDTXDGNDVCC
ArduinoPin1 TXPin0 RXGnd3.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);
}
页:
[1]