To be completed!

# 書面報告

  1. 主題:你的專案名稱
    手機使用提醒系統

  2. 動機:為什麼你想做這個專案?
    目的在幫助使用者更有效地管理和改善手機使用習慣,減少因不當使用所造成的眼睛疲勞或近視等視力問題,進而維持視力健康。同時也能監測周圍環境,提升使用者的生活品質。

  3. 功能:你的專案能做什麼?
    此系統結合多種感測器與元件,下方是各個功能與對應的說明:

功能說明
光線感測偵測環境亮度,若光線不足,自動開啟 LED,作為提醒用途。
距離感測偵測眼睛與手機的距離,若距離小於 25cm (感測到 50cm 以內),蜂鳴器響一聲作為警報。
蜂鳴器警示當眼睛靠螢幕過近時,蜂鳴器響 1 次(2 毫秒)。
溫濕度感測偵測環境溫度與濕度,若溫度高於 25°C 或濕度高於 60%,則啟動繼電器,打開小風扇。
  1. 外觀:展示你的專案設置的照片,顯示所有連接到 Arduino 板的元件。

接線說明

模組腳位接到 Arduino 的
LDR 模組A0A0
LED 燈負極Pin 3
超音波模組TrigPin 8
EchoPin 9
DHT11DATAPin 2
繼電器模組INPin 7
蜂鳴器(有源)正極Pin 6
負極GND
所有模組的 GND-GND
所有模組的 VCC / 電源-5V
  1. 材料:解釋每個感測器或系統的特性,它們在此專案中扮演什麼角色?
感測器或元件扮演的角色
光敏電阻器 (LDR)環境亮度的偵測器。
LED 燈作為提醒用途的元件。
超音波測距模組 (HC-SR04)偵測前方物體的距離。
蜂鳴器作為提醒用途的元件。
溫濕度感測器 (DHT11)偵測環境的溫度與濕度。
繼電器當作開關,用來控制小風扇的開關。
小電扇調節體感溫度,使空間更舒適。
  1. 程式碼說明:簡要說明你如何透過程式碼與每個感測器或系統互動。

6-1. 光敏電阻和 LED 的部分

// LDR, LED 設定
const int ldrPin = A0;
const int ledPin = 3;
// = Loop 裡面的部分 =
// LDR, LED 控制
int light = analogRead(ldrPin);
if (light < 900) {// 亮度設定
	digitalWrite(ledPin, HIGH);  // 光線不足,開燈
} else {
	digitalWrite(ledPin, LOW);   // 反之關燈
}

6-2. 超音波的部分

#include <Ultrasonic.h>
// 超音波設定
Ultrasonic ultrasonic(8, 9);
// 蜂鳴器設定
const int buzzerPin = 6;
// = Loop 裡面的部分 =
// 超音波感測
int distance = ultrasonic.read(); // 讀取距離 (cm)
// 距離觸發蜂鳴器
if (distance > 0 && distance < 50) {     // 若距離小於 50cm
	digitalWrite(buzzerPin, HIGH);
	delay(2);
	digitalWrite(buzzerPin, LOW);        // 關閉蜂鳴器
} else {
	digitalWrite(buzzerPin, LOW);        // 距離正常時關閉蜂鳴器
}

6-3. 溫濕度感測器和繼電器的設定

#include <DHT.h>
#include <DHT_U.h>
// DHT11 設定
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// 繼電器設定
const int relayPin = 7;
// = Loop 裡面的部分 =
// DHT11 感測
float h = dht.readHumidity();    // 濕度
float t = dht.readTemperature(); // 溫度
// 繼電器控制
if (!isnan(h) && !isnan(t)) {// 確認數值
	if (t > 25 || h > 60) {// 依溫濕度條件來決定要不要開
	  digitalWrite(relayPin, HIGH); // 開啟繼電器
	} else {
	  digitalWrite(relayPin, LOW); // 關閉繼電器
	}
} else {
	digitalWrite(relayPin, LOW); // 若讀取失敗,預設關閉
}
  1. 問與答:描述在專案中遇到的最困難的問題,你是如何克服這個問題的?
    遇到最困難的事是超音波感測器該如何穩定的掛在手機上,來偵測手機和眼睛的距離。
    最後的解決辦法是改成側向感測,當距離手機夠近時,超音波感測器讀到的數值會收斂到一定的大小,藉此當成感測的依據。

# 簡報

  1. 主要功能:簡要描述你的專案能做什麼。
  2. 硬體與軟體概覽:突顯使用的關鍵感測器、模組或系統,以及它們如何協同運作。
  3. 挑戰與解決方案:分享你遇到的最棘手的問題,以及你如何解決它。

必須:你必須錄製一段短影片(大約 30 秒)來展示你的專案運作情況。

  • 影片應該清楚地顯示你的專案功能。
  • 影片應該在報告中播放。
  • 你可以將影片嵌入簡報中,或上傳至 Google Drive 並提供分享連結於簡報中。

以下不用放到報告中

# 原始碼

#include <Ultrasonic.h>
#include <DHT.h>
#include <DHT_U.h>
// === LDR + LED 設定 ===
const int ldrPin = A0;
const int ledPin = 3;
// === 超音波設定 ===
Ultrasonic ultrasonic(8, 9);
// === 蜂鳴器設定 ===
const int buzzerPin = 6;
// === DHT11 設定 ===
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// === 繼電器設定 ===
const int relayPin = 7;
void setup() {
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT);
  pinMode(relayPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  
  Serial.println("DHT11, Ultrasonic, LDR Test Start");
  dht.begin();
}
void loop() {
  // === 光感測器 + LED 控制 ===
  int light = analogRead(ldrPin);
  if (light < 900) {
    digitalWrite(ledPin, HIGH);  // 光線不足,開燈
  } else {
    digitalWrite(ledPin, LOW);   // 光線充足,關燈
  }
  // === 超音波感測 ===
  int distance = ultrasonic.read(); // 讀取距離 (cm)
  // === 距離觸發蜂鳴器 ===
  if (distance > 0 && distance < 50) {     // 若距離小於 50cm
    digitalWrite(buzzerPin, HIGH);
    delay(2);
    digitalWrite(buzzerPin, LOW);          // 關閉蜂鳴器
  } else {
    digitalWrite(buzzerPin, LOW);          // 距離正常時關閉蜂鳴器
  }
  // === DHT11 感測 ===
  float h = dht.readHumidity();    // 濕度
  float t = dht.readTemperature(); // 溫度
  // === 繼電器控制(依溫濕度) ===
  if (!isnan(h) && !isnan(t)) {
    if (t > 25 || h > 60) {
      digitalWrite(relayPin, HIGH); // 開啟繼電器
    } else {
      digitalWrite(relayPin, LOW); // 關閉繼電器
    }
  } else {
    digitalWrite(relayPin, LOW); // 若讀取失敗,預設關閉
  }
  // === 序列埠輸出 ===
  Serial.print("Light: ");
  Serial.print(light);
  Serial.print(" | Distance: ");
  Serial.print(distance);
  Serial.print(" cm");
  if (isnan(h) || isnan(t)) {
    Serial.println(" | DHT11: Failed to read");
  } else {
    Serial.print(" | Humidity: ");
    Serial.print(h);
    Serial.print(" %");
    Serial.print(" | Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
  }
  delay(2000); // 每 2 秒讀取一次
}