//***lcd***//
#include<Wire.h>
#include<LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//***DHT***//
#include <DHT.h>
#define DHTPIN 9
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
//***control***//
int ledpin = 13;
int buttonpin = 2;
int buttonstate = 0;
int klick = 0;
int motor = 8;
//***Declare UltraSonic&&Buzzer***//
int trigPin = 11; // 超音波感測器 Trig腳接 Arduino pin 11
int echoPin = 12; //超音波感測器 Echo 腳接 Arduino pin 12
int speakerpin = 7; //蜂鳴器 + 腳接 Arduino pin 7
float duration, cm ; //宣告計算距離時,需要用到的兩個實數
//***declare LDR***//
#define LDR 0 //A0腳位
int readLDR = 0; //用以儲存光敏電阻之數值
//////////////////////以上為初始化區域//////////////////
void setup()
{
Serial.begin(9600);
dht.begin(); //初始化DHT
pinMode(motor,OUTPUT); //馬達為輸出訊號
pinMode(buttonpin,INPUT_PULLUP); //設定按鈕為上拉電阻
pinMode(ledpin,OUTPUT); //led輸出
pinMode(trigPin, OUTPUT); //Arduino 對外啟動距離感測器Trig腳,射出超音波
pinMode(echoPin, INPUT); //超音波被障礙物反射後,Arduino讀取感測器Echo腳的時間差
pinMode(speakerpin, OUTPUT); //Arduino對蜂鳴器送出電壓,使其鳴叫
lcd.init();
lcd.begin(16, 2); // 初始化LCD
lcd.setBacklight(255);//背光設置為255
lcd.clear();
lcd.setCursor(0, 0); //設定游標位置 (字,行)
lcd.print("*Welcome to "); //lcd顯示:“歡迎來到”
lcd.setCursor(0, 1);
lcd.print("Sweet H0me!!"); //lcd顯示:“溫暖的家!!”
}
void loop()
{
//****************************風扇=可變電阻+直流馬達************************//
int vr = analogRead(2); //讀取可變電阻之類比訊號
if(vr > 512){ //如果訊號大於512,則啟動直流馬達
digitalWrite(motor,HIGH);
}
else {
digitalWrite(motor,LOW);
}
delay(390);
//**************************************溫濕度************************//
float h = dht.readHumidity(); //讀取濕度
float t = dht.readTemperature(); //讀取溫度
//************************************防盜器=超音波加光敏加蜂鳴器*********************************//
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH); //來回時間長
cm = (duration/2) / 29.1; //計算距離
Serial.println(cm);
if (20< cm&&cm <1500||h>75){ // 當超音波偵測到窗戶開啟或濕度過高,則蜂鳴器會斷斷續續的叫,每次叫0.1秒
digitalWrite(speakerpin, HIGH);
delay (100);
digitalWrite(speakerpin, LOW);
delay (100);
}
//***************************光敏*********************************//
readLDR = analogRead(LDR);
Serial.print(readLDR);
//***************************按鈕切換lcd顯示**********************//
buttonstate = digitalRead(buttonpin); //讀取按鈕電位
Serial.print(buttonstate);
//***當按鈕未被按下***//
if(buttonstate ==LOW){
delay(100);
digitalWrite(ledpin,HIGH);
delay(100);
//***display***//
lcd.clear();
lcd.setCursor(0,0);
lcd.print("humid:");
lcd.setCursor(7,0);
lcd.print(h);
lcd.print(14,0);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temp:"); //Temp = abbrevitation for Temperature
lcd.setCursor(7,1);
lcd.print(t);
lcd.setCursor(13, 1);
lcd.print((char)223); //用特殊字元顯示符號的"度"
lcd.print(14,1);
lcd.print("c");
delay(1000);
}
//***當按鈕已被按下***//
if(buttonstate == HIGH){
delay(100); //to prevent from debouncing, we set a time interval of 100 millisecond as an precautionary measure.
//***Display :distance +illuminance***//
lcd.clear();
lcd.setCursor(0,0);
lcd.print("dis:"); //超音波所測得之距離distance
lcd.setCursor(7,0);
lcd.print(cm);
lcd.print(14,0);
lcd.print("cm");
lcd.setCursor(0,1);
lcd.print("E:"); //照度
lcd.setCursor(5,1);
lcd.print(readLDR); // 光敏電阻所讀取之數值
lcd.print(13,1);
lcd.print("lux"); //lux為每單位面積之光通量的SI單位
delay(1000);
}
}