組員:411214212李鍾銘、411214215葉仲傑、411214315謝定凱
動機:因為想要在實驗室打遊戲,可是怕老師會以專題進度為由禁止我打遊戲,為了不被發現想要打造一台可以打遊戲又不被發現的道具。
方法: HC-SR04 → Arduino → USB(Serial) → Python → 開啟網站
程式碼(arduino IDE):
const int trigPin = 9;
const int echoPin = 10;
const int threshold = 100;
bool lastState = false;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
long duration;
int distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
bool currentState = (distance < threshold && distance > 0);
if (currentState != lastState) {
if (currentState == true) {
Serial.println("1");
} else {
Serial.println("0");
}
lastState = currentState;
delay(200);
}
delay(50);
}
程式碼(python):
import serial
import webbrowser
import time
arduino = serial.Serial('/dev/ttyACM0', 9600)
time.sleep(2)
print("系統就緒")
try:
while True:
data = arduino.readline().decode('utf-8').strip()
if data == '1':
webbrowser.open('https://youtu.be/I8y8Fp8Abj0?si=jq5wyYUOJhPh1P-f')
elif data == '0':
pass
except KeyboardInterrupt:
arduino.close()
整個系統的原理是:Arduino 透過 HC-SR04 超音波感測器持續量測前方距離,利用超音波發射與回波返回的時間計算物體與感測器之間的距離,當距離小於設定的閾值時判定為「有物體」,並與前一次的狀態比較,只在狀態發生改變(例如由無物體變成有物體,或由有物體變成無物體)時,透過 USB 的序列通訊(Serial)向電腦送出對應的文字訊號
1 或 0;電腦端的 Python 程式則透過序列埠即時讀取 Arduino 傳來的資料,當接收到 1 時,呼叫作業系統的預設瀏覽器自動開啟指定的網站,從而完成由硬體感測觸發、經由序列通訊傳遞、再由軟體執行高階動作(開啟網頁)的整體流程。
線路圖:
經過測試,這一顆HC-SR04的有效偵測範圍大概在2.5米左右。
圖片為實裝在實驗室的照片,走廊寬度為2米,偵測距離也設定為兩米,照片拍攝角度之右前方為門口,後方為牆壁,感測器斜放偵測門口到座位之走廊。
因為實驗室這幾天有人在看書所以沒有在實驗室測試
沒什麼就是想硬控你們
感測器其實不管距離遠近他偵測其實都會不穩定,所以變成有時候會開很多網站出來,這是感測器的問題。
當然平常程式碼中不會放一些奇怪的網站,而是選擇正常的網站如某期刊等等,這樣才能符合我們做偷懶神器的初衷。
至於學長在期中提到的按鈕設計(按下按鈕可以直接打開某網站)在我們的討論下決定不裝,因為有時間按按鈕就有時間可以按Alt+Tab切換畫面。
如果打遊戲打的正激烈還需要做切螢幕的畫面就太影響操作了,所以決定只靠感測器的自動裝置。如果感測器失靈不論是按鈕還是使用鍵盤切屏我們認為是一樣的,應該不會有場景需要用到按鈕。
期末指導教授結算: