我正在尝试找出遥控玩具车经过两个超声波传感器的速度。我需要有关我的代码的帮助以及关于最大速度汽车的建议应该去记录时间。不考虑相反方向,理想情况下汽车会通过两个传感器而不会停下来。我知道激光阅读更适合这种模拟,但我需要它来进行两周内的演示。

使用超声波传感器记录 Ping 时间并计算速度

以下是我建议使用的步骤:

  1. 获取传感器 1 的脉冲持续时间并转换为距离
  2. 如果物体的距离在所需阈值内(您检测到某些东西)2a。记录检测到对象的系统时间 2b。启动传感器 2 的循环
  3. 在传感器 2 循环中不断获取持续时间/距离,直到检测到物体或已经过去了太多时间
  4. 如果检测到物体,记录系统时间
  5. 减去两个系统时间(来自传感器 1 和 2)并使用它来确定物体速度

    #define sensor_distance .111 //distance between two sensors in meters
    const int trigPin1 = 3;
    const int echoPin1 = 4;
    const int trigPin2 = 5;
    const int echoPin2 = 6;
    
    
    double first_time = 0;
    double second_time = 0;
    double final_time = 0;
    
    double vehicle_speed = 0;
    
    void setup() {
    
      pinMode(trigPin1, OUTPUT);
      pinMode(echoPin1, INPUT);
      pinMode(trigPin2, OUTPUT);
      pinMode(echoPin2, INPUT);
    
      Serial.begin(9600);
    }
    
    void loop() {
    
    double ping_time(int trig1, int echo1, double first_time);
    double ping_time(int trig2, int echo2, double second_time);
    
    final_time = second_time - first_time;
    vehicle_speed = sensor_distance/final_time;
    }
    
    double ping_time(int trig, int echo, double record_time) //function used to record time.
    {
      long duration, distance;
    
       digitalWrite(trig, LOW);
      delayMicroseconds(2);
      digitalWrite(trig, HIGH);
      delayMicroseconds(10);
      digitalWrite(trig, LOW);
    
      duration = pulseIn(echo, HIGH);
      distance = duration * 0.034 / 2;
    
      if (distance < 35) {
        Serial.print(distance);
        Serial.println("  cm");
        record_time = millis();
        record_time = record_time/100; //Divided by 100 to get time in seconds
    
        return record_time;
    
      }
      if (distance > 35) {
        Serial.println("OUT OF RANGE");
      }
      delay(20); 
    }