1.实验目的和任务
实验目的:
本实验为设计性实验,其目的是掌握使用Arduino对各种主流传感器的数据采集方法,掌握DHT11温湿度传感器、光敏电阻的原理和使用方法。
设计性任务:
使用1个光敏电阻和1个LED,设计一个光控夜灯,使用1个DHT11温湿度传感器、1个1602液晶LCD,设计一个温湿度计具体要求如下:
- 当亮度较高时(例如用手机强光照射时),LED自动灭掉;当亮度很暗时,LED自动亮起来。
- 对于亮度大小的判断,可以根据实际情况自己决定(提示:先利用串口回显观察不同亮度下传感器的数值);
- LCD的显示内容清晰,对比度可调;
- LCD的第一行显示温度和湿度(温度数据仅保留小数位一位,湿度数值是整数)。显示格式的示例: T:23.4C H:52%
- 当温度和湿度发生变化时,显示的数据能实时变化 2.主要仪器设备(实验用的软硬件环境)
- 实验的硬件环境是:
- PC机一台
- Arduino开发套件一套(含Arduino主板、USB数据线、面包板、面包板线若干、电阻若干)
- DHT11温湿度传感器1个、光敏电阻1个、LED灯1个、电位器等
- Arduino IDE软件(免安装的绿色软件)
3.代码如下:
#include <DHT.h>
#include <LiquidCrystal.h>
const int ldrPin = A0;
const int ledPin = 13;
const int threshold =300;
#define DHTPIN 2
#define LCD_RS 12
#define LCD_EN 11
#define LCD_D4 5
#define LCD_D5 4
#define LCD_D6 3
#define LCD_D7 10
DHT dht(DHTPIN, DHT11);
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
byte temperturechar[8] = {
0b10000,
0b00110,
0b01001,
0b01000,
0b01000,
0b01001,
0b00110,
0b00000,
};
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
dht.begin();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
delay(1000);
lcd.clear();
lcd.createChar(6, temperturechar);
}
void loop() {
int ldrValue = analogRead(ldrPin);
Serial.println(ldrValue);
if (ldrValue < threshold) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(100);
//温度
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error");
delay(1000);
return;
}
char tempStr[6];
dtostrf(t, 4, 1, tempStr);
char humiStr[4];
dtostrf(h, 0, 0, humiStr);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.setCursor(2, 0);
lcd.print(tempStr);
lcd.write(byte(6));
lcd.setCursor(8, 0);
lcd.print("H:");
lcd.setCursor(10, 0);
lcd.print(humiStr);
lcd.print("%");
delay(1000);
}
4.实物图