0

NPN 出力の光電センサーが 2 つあります

2 つのセンサーは 152.4 mm 離して配置されています。基本的に、最初のゲートがトリガーされたときにタイマーを開始し、2 番目のゲートがトリガーされたときに終了し、設定距離 (152.4 mm) を各ゲート間を移動する時間で割り、速度をメートル秒で出力したいと考えています。センサーは 24 VDC 電源から電力を供給され、NPN 出力電圧はコレクターから 3V DC まで高くすることができます。最初にセンサーをテストして、センサーの前に物体が存在するときにオンボード LED を点滅させ、LED をトリガーすることができました。

    const int sensorPin = 3; // photoelectric sensor
    const int ledPin = 13;
    boolean state1 = LOW; // state at startup

    void setup() {
      pinMode(sensorPin, INPUT_PULLUP); // sensor input with internal pullup 
      resistor enabled
      pinMode(ledPin, OUTPUT); // initialize digital pin 13 as an output.
    }

    void loop() {
      state1 = digitalRead(sensorPin);
      if (state1 == HIGH) {
        digitalWrite(ledPin, HIGH);
      }
      else {
        digitalWrite(ledPin, LOW);
      }
    }

したがって、電圧は HIGH または LOW として読み取られる適切な範囲にあるようです。

というわけで、次は速度を読み取ってみます。コードは以下のとおりです。

const int PE_01 = 2;
const int PE_02 = 3;
unsigned long start, finish, speed;
float elapsed;
boolean state1 = LOW; //state at startup
boolean state2 = LOW; //state at startup

void setup() {
  // Initialize the serial communication at 9600 bits per second:
  Serial.begin(9600);
  pinMode(PE_01, INPUT_PULLUP); //sensor input with internal pullup 
  resistor enabled
  pinMode(PE_02, INPUT_PULLUP); //sensor input with internal pullup 
  resistor enabled
 }

void loop() {
  state1 = digitalRead(PE_01);
  state2 = digitalRead(PE_02);
   // time = millis ();
  if (state1 == HIGH){

    start = millis();
  }
if (state2 == HIGH) {
  finish = millis();
}
elapsed = finish - start;
speed = 76200/elapsed; // unit distance (micro meters) and time (milli 
seconds)
Serial.print("initial time (ms) = ");
Serial.println(start);
Serial.print("final time (ms) = ");
Serial.println(finish);
Serial.print("Speed of object (M/s) = ");
Serial.println(speed);
 delay(500);
}

ただし、シリアルモニターに表示されるのは次のとおりです。

10:31:07.632 -> initial time (ms) = 15502
10:31:07.666 -> final time (ms) = 15502
10:31:07.666 -> Speed of object (M/s) = 4294967295
10:31:08.109 -> initial time (ms) = 16002
10:31:08.144 -> final time (ms) = 15502
10:31:08.178 -> Speed of object (M/s) = 0

4294967295 は、オブジェクトが存在しない場合に表示され、存在する場合は 0 を出力するように見えます。方程式を数回調整しましたが、意味のあるものは何も得られないようです。どんな助けでも大歓迎です。ありがとうございました!

4

1 に答える 1