---
# System prepended metadata

title: 防疫門

---

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