1101 智慧生活第三組 期末專題

主題:arduino冰箱 完成日期:20220121 作者:張瑞顯
 avatar
ida
plain_text
2 years ago
3.9 kB
2
Indexable
Never
//光敏電阻顯示
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);
  }
}