2021年6月25日金曜日

非接触スイッチのプロトタイピング

今日の午前中は約1ヶ月ぶりに出勤しました。朝は雨が降りそうでしたが、昼に帰宅するときは夏の日差しで汗かきました。マスクが息苦しかったです。気を付けないと熱中症になるのもわかります。

午後は代休を取ったので簡単な工作です。フォトリフレクタを使った非接触スイッチです。



まずまず想定していた動きになりました。

--21.06.27追記

回路図とスケッチです。無保証です。


//-----------------------------------------------------------------
//                                                   21.06.26 naka
// フォトリフレクタを使った非接触スイッチ
//-----------------------------------------------------------------
#define PHOTO1  2
#define PHOTO2  3
#define LED_PIN 4

#define TIMELAG_MIN   6
#define TIMELAG_MAX   100

int stat;
void setup(){

  // IOポート設定
  pinMode(PHOTO1, INPUT);
  pinMode(PHOTO2, INPUT);
  pinMode(LED_PIN, OUTPUT);

  // モニタLEDオフ
  digitalWrite(LED_PIN, LOW);
  stat = 0;
}

void loop(){
  int time_1st,timelag;
  
  int p1 = digitalRead(PHOTO1);
  int p2 = digitalRead(PHOTO2);
  int po;
  if (p1+p2==1) {                  // どちらか一方のみactive
    time_1st = millis();
    while(1) {
      if (p1==0)  po = digitalRead(PHOTO2);  // 他方のphoto refrector
      else        po = digitalRead(PHOTO1);
      timelag = millis() - time_1st;
      if (timelag > TIMELAG_MAX)     // 時間差が大きいので無効
        break;
      else if (po==0) {
        if (timelag < TIMELAG_MIN)   // 時間差が小さいので無効
          break;
        if (p1==0) stat = 1;         // オン
        else       stat = 0;         // オフ
        break;
       }
    }
    while(digitalRead(PHOTO1)==0);
    while(digitalRead(PHOTO2)==0);
  }
  
  if (stat==1) digitalWrite(LED_PIN, HIGH);
  else         digitalWrite(LED_PIN, LOW);

}

0 件のコメント:

コメントを投稿