# 防疫門 ## 重要日程 下周一錄製防疫門最終介紹影片 ~~然後拆了他~~ ### 稿 :::success 可以看到我們的消毒門和ig先前釋出的版本有~~一點點~~的不同,因為消毒門真的~~好重~~,所以我們將結構修改得更為精簡,可以將左右及上半部的結構分開,這是我們7130最擅長的快拆部分~~天啊是快拆ㄝ~~再來可以看到我們的升降結構,我們最一開始原本portotype使用拉繩,之後正式版本使用鍊條搭配775馬達,因為775電流過大且同步性不足因此我們,將機構修改為皮帶配上步進馬達,但因為步進馬達扭力不足,無法拉起消毒框,所以我們改用車窗馬達帶動,但車窗馬達同步性不足,因此我們決定將消毒框取消。最後我們決定使用特殊的皮帶傳動方式,搭配左右各一個噴頭,噴灑次氯酸水。 木頭+學弟 鍊條+775 皮帶+步進 皮帶+車窗 鍊條+車窗 皮帶+車窗 ::: ## 程式 :::danger 雖然不是及時更新XDDDDDDD ::: ```ino #include <Servo.h> Servo sparkl; Servo sparkr; //超音波變數 int trigPin = 4;//發射 int echoPin = 3;//接受 long duration, cm; //腳位變數 int lm = 5, rm = 6, pump = 7; int ul = 8, ur = 10, dl = 9, dr = 11; int r=14,g=15,b=16; //正反參數 int upd = 0, dod = 180; void setup() { Serial.begin(9600); //定義腳位輸入及輸出 //超音波 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); //spark sparkl.attach(lm); sparkr.attach(rm); //sw pinMode(ul, INPUT); pinMode(ur, INPUT); pinMode(dl, INPUT); pinMode(dr, INPUT); //relay pinMode(pump, OUTPUT); pinMode(pumprelay,OUTPUT); //led pinMode(r,OUTPUT); pinMode(g,OUTPUT); pinMode(b,OUTPUT); //回定位 sparkl.write(90); sparkr.write(90); digitalWrite(pump, HIGH); up(); } void loop() { if (digitalRead(in) == LOW) {//進入感測 down(); delay(100); up(); } } void up() { digitalWrite(pump, HIGH); sparkl.write(upd); sparkr.write(upd); while (digitalRead(ul) == LOW or digitalRead(ur) == LOW) { if (digitalRead(ul) == HIGH) { sparkl.write(90); } if (digitalRead(ur) == HIGH) { sparkr.write(90); } } sparkl.write(90); sparkr.write(90); } void down() { sparkl.write(dod); sparkr.write(dod); while (digitalRead(dl) == LOW or digitalRead(dr) == LOW) { if (people()) { digitalWrite(pump, LOW); } if (digitalRead(dl) == HIGH) { sparkl.write(90); } if (digitalRead(dr) == HIGH) { sparkr.write(90); } } sparkl.write(90); sparkr.write(90); } bool people() { digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); // 給 Trig 高電位,持續 10微秒 delayMicroseconds(10); digitalWrite(trigPin, LOW); pinMode(echoPin, INPUT); // 讀取 echo 的電位 duration = pulseIn(echoPin, HIGH); // 收到高電位時的時間 if (((duration / 2) / 29.1) > 1000) { digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); // 給 Trig 高電位,持續 10微秒 delayMicroseconds(10); digitalWrite(trigPin, LOW); pinMode(echoPin, INPUT); // 讀取 echo 的電位 duration = pulseIn(echoPin, HIGH); // 收到高電位時的時間 } else { cm = (duration / 2) / 29.1; } // 將時間換算成距離 cm 或 inch if (cm < 80) { return true; } else { return false; } } ```