# 防疫門
## 重要日程
下周一錄製防疫門最終介紹影片
~~然後拆了他~~
### 稿
:::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;
}
}
```