To be completed!
# 書面報告
主題:你的專案名稱
手機使用提醒系統動機:為什麼你想做這個專案?
目的在幫助使用者更有效地管理和改善手機使用習慣,減少因不當使用所造成的眼睛疲勞或近視等視力問題,進而維持視力健康。同時也能監測周圍環境,提升使用者的生活品質。功能:你的專案能做什麼?
此系統結合多種感測器與元件,下方是各個功能與對應的說明:
| 功能 | 說明 |
|---|---|
| 光線感測 | 偵測環境亮度,若光線不足,自動開啟 LED,作為提醒用途。 |
| 距離感測 | 偵測眼睛與手機的距離,若距離小於 25cm (感測到 50cm 以內),蜂鳴器響一聲作為警報。 |
| 蜂鳴器警示 | 當眼睛靠螢幕過近時,蜂鳴器響 1 次(2 毫秒)。 |
| 溫濕度感測 | 偵測環境溫度與濕度,若溫度高於 25°C 或濕度高於 60%,則啟動繼電器,打開小風扇。 |
- 外觀:展示你的專案設置的照片,顯示所有連接到 Arduino 板的元件。
接線說明
| 模組 | 腳位 | 接到 Arduino 的 |
|---|---|---|
| LDR 模組 | A0 | A0 |
| LED 燈 | 負極 | Pin 3 |
| 超音波模組 | Trig | Pin 8 |
| Echo | Pin 9 | |
| DHT11 | DATA | Pin 2 |
| 繼電器模組 | IN | Pin 7 |
| 蜂鳴器(有源) | 正極 | Pin 6 |
| 負極 | GND | |
| 所有模組的 GND | - | GND |
| 所有模組的 VCC / 電源 | - | 5V |
- 材料:解釋每個感測器或系統的特性,它們在此專案中扮演什麼角色?
| 感測器或元件 | 扮演的角色 |
|---|---|
| 光敏電阻器 (LDR) | 環境亮度的偵測器。 |
| LED 燈 | 作為提醒用途的元件。 |
| 超音波測距模組 (HC-SR04) | 偵測前方物體的距離。 |
| 蜂鳴器 | 作為提醒用途的元件。 |
| 溫濕度感測器 (DHT11) | 偵測環境的溫度與濕度。 |
| 繼電器 | 當作開關,用來控制小風扇的開關。 |
| 小電扇 | 調節體感溫度,使空間更舒適。 |
- 程式碼說明:簡要說明你如何透過程式碼與每個感測器或系統互動。
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); // 若讀取失敗,預設關閉 | |
} |
- 問與答:描述在專案中遇到的最困難的問題,你是如何克服這個問題的?
遇到最困難的事是超音波感測器該如何穩定的掛在手機上,來偵測手機和眼睛的距離。
最後的解決辦法是改成側向感測,當距離手機夠近時,超音波感測器讀到的數值會收斂到一定的大小,藉此當成感測的依據。
# 簡報
- 主要功能:簡要描述你的專案能做什麼。
- 硬體與軟體概覽:突顯使用的關鍵感測器、模組或系統,以及它們如何協同運作。
- 挑戰與解決方案:分享你遇到的最棘手的問題,以及你如何解決它。
必須:你必須錄製一段短影片(大約 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 秒讀取一次 | |
} |