1101 智慧生活第三組 期末專題
主題:arduino冰箱 完成日期:20220121 作者:張瑞顯ida
plain_text
4 years ago
3.9 kB
12
Indexable
//光敏電阻顯示
const int P_resistor = A0;//讀取光敏電阻腳位
int light=0;//光敏電阻數值
//LED
const int LED_Rpin = 3;//燈泡腳位
//溫溼度顯示面板
#include <LiquidCrystal_PCF8574.h>
#include "DHT.h"
#define DHTPIN 9 //腳接pin 9
#define DHTTYPE DHT11
LiquidCrystal_PCF8574 lcd(0x27); // 設定i2c位址,一般情況就是0x27和0x3F兩種
DHT dht(DHTPIN, DHTTYPE);
//蜂鳴器
int speakerpin = 7; //腳接pin 7
//切換LCD顯示面板
int inPIN = 8; //腳接pin 8
int val = 0;
//超音波感應器
int trigPin = 11; //超音波感測器 Trig腳接 Arduino pin 11
int echoPin = 12; //超音波感測器 Trig腳接 Arduino pin 11
float duration, cm ; //宣告計算距離時,需要用到的兩個實數
//////以上為初始化區域//////
void setup() {
//將溫溼度設為input
pinMode(P_resistor, INPUT);
//將按鈕設為input
pinMode(inPIN, INPUT_PULLUP);
//將LED燈泡設為output
pinMode(LED_Rpin, OUTPUT);
//將蜂鳴器設為output
pinMode(speakerpin, OUTPUT); //Arduino對蜂鳴器送出電壓,使其鳴叫
//超音波感應器
pinMode(trigPin, OUTPUT); //Arduino 對外啟動距離感測器Trig腳,射出超音波
pinMode(echoPin, INPUT); //超音波被障礙物反射後,Arduino讀取感測器Echo腳的時間差
//LCD面板初始化
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin(); //初始化DHT
lcd.begin(16, 2); // 初始化LCD
lcd.setBacklight(255);
lcd.clear();
lcd.setCursor(0, 0); //設定游標位置 (字,行)
lcd.print("Open your");
lcd.setCursor(0, 1); //設定游標位置 (字,行)
lcd.print("Refrigerator~");
}
void loop() {
light=analogRead(P_resistor); //將讀取到的數值存入light
delay(50);
Serial.println(light); //在Serial port顯示light數值
//將按鈕設為讀取值
Serial.print(val);
val = digitalRead(inPIN);
//取得溫度濕度
float h = dht.readHumidity(); //取得濕度
float t = dht.readTemperature(); //取得溫度C
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C ");
//取得距離數值
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(val==LOW){ //當按鈕鬆開
delay(500);
lcd.clear();
lcd.setCursor(0, 0); //設定游標位置 (字,行)
lcd.print("RH :"); //Relative Humidity 相對濕度簡寫
lcd.setCursor(7, 0);
lcd.print(h);
lcd.setCursor(14, 0);
lcd.print("%");
lcd.setCursor(0, 1); //設定游標位置 (字,行)
lcd.print("Temp:"); //Temperature
lcd.setCursor(7, 1);
lcd.print(t);
lcd.setCursor(13, 1);
lcd.print((char)223); //用特殊字元顯示符號的"度"
lcd.setCursor(14, 1);
lcd.print("C");
delay(500);
}
if(val==HIGH){//當按鈕按住
delay(500);
lcd.clear();
lcd.setCursor(0, 0); //設定游標位置 (字,行)
lcd.print("light:"); //光敏度
lcd.setCursor(7, 0);
lcd.print(light);
lcd.setCursor(12,0);
lcd.print("lux"); //lux為每單位面積之光通量的SI單位
lcd.setCursor(0,1);
lcd.print("dis:"); //超音波所測得之距離distance
lcd.setCursor(7,1);
lcd.print(cm);
lcd.setCursor(14,1);
lcd.print("cm");
delay(500);
}
if(light>100){ //當光敏度值大於100 燈泡發亮 蜂鳴器過5秒後發出聲音
digitalWrite(LED_Rpin, HIGH);
delay(5000);
digitalWrite(speakerpin, HIGH);
}
if(light<40){ //當光敏度值小於40 燈泡不亮 蜂鳴器關閉
digitalWrite(LED_Rpin, LOW);
digitalWrite(speakerpin, LOW);
}
}Editor is loading...