用Arduino驱动两个超声波传感器

用Arduino驱动两个超声波传感器,arduino,Arduino,各位。 我在尝试使用Arduino uno驱动两个HC-SR04超声波传感器时遇到问题。 当a尝试显示每个传感器的两个测量值时,其中一个工作正常,但另一个显示值0 我的代码如下所示: } 情况是,在串行监视器上,“距离1”显示正确的值,而“距离2”始终为0 我发现,当“duration1”和“duration2”交换顺序时(这意味着duration2先运行,然后duration1运行),结果是distance1显示0,而distance2显示正确的值 当我使用“pulseIn”函数时,似乎出现了

各位。 我在尝试使用Arduino uno驱动两个HC-SR04超声波传感器时遇到问题。 当a尝试显示每个传感器的两个测量值时,其中一个工作正常,但另一个显示值0

我的代码如下所示: } 情况是,在串行监视器上,“距离1”显示正确的值,而“距离2”始终为0

我发现,当“duration1”和“duration2”交换顺序时(这意味着duration2先运行,然后duration1运行),结果是distance1显示0,而distance2显示正确的值

当我使用“pulseIn”函数时,似乎出现了一些问题,对吗


谁能帮我解决这个问题,谢谢

除了异步问题外,还可能存在一个问题,即传感器通过一个传感器的Ping信号到达两个传感器而相互干扰

要解决这个问题,您需要通过将传感器拉高来ping一个传感器,并读取长度。然后,您将需要它们之间的短暂延迟,以允许ping消失。然后,您应该对第二个传感器执行相同的操作


这使您能够获得最准确的读数。

还提出了其他问题:

  • 每个传感器都有其触发引脚,您应该在触发引脚发送信号并读取来自同一传感器的回波引脚,然后对另一个传感器重复此操作
  • 根据数据表(),必须执行读取时间,两次读取之间的间隔至少为60 ms
  • 使用中断使计时最精确

  • 试试这个

    int TriggerPIN1 = 9;
    int EchoPIN = 10;
    int TiggerPIN2 = 5;
    int EchoPIN2 = 4;
    
    void setup(){
      pinMode(TriggerPIN1,OUTPUT);
      pinMode(EchoPIN2,INPUT);
      pinMode(TriggerPIN2,OUTPUT);
      pinMode(EchoPIN2,INPUT);
      Serial.begin(9600); 
      }
    
    void loop(){  
      digitalWrite(TriggerPIN1,LOW);
      delayMicroseconds(2);
      digitalWrite(TriggerPIN1,HIGH);
      delayMicroseconds(2);
      digitalWrite(TriggerPIN1,LOW);
    
      long timedelay = pulseIn(EchoPIN1,HIGH);
      int distance1 = 0.0343 * (timedelay/2);
    
      Serial.print("Sensor 1 : ");
      Serial.println(distance1);
    
      delayMicroseconds(2);
    
      digitalWrite(TriggerPIN2,LOW);
      delayMicroseconds(2);
      digitalWrite(TriggerPIN2,HIGH);
      delayMicroseconds(2);
      digitalWrite(TriggerPIN2,LOW);
    
      long td = pulseIn(EchoPIN2,HIGH);
      int distance2 = 0.0343 * (td/2);
    
      Serial.print("Sensor 2 : ");
      Serial.println(distance2);
      }
    

    两个传感器并行工作,但脉冲星功能是串行执行的。这就是你的代码不能工作的原因。让我们想象一下,当你用右手抛两个球时,试着用右手一个接一个地接住它们。当你接住一个球并把它放进盒子里时,另一个球掉在了地上。这就是为什么第一个脉冲能得到正确的值,而第二个脉冲不能得到正确的值。要解决您的问题,请使用两个传感器串联,即触发第一个传感器,然后对第一个传感器使用脉冲信号,以获得第一个测量值,并对第二个传感器重复此操作。答案在注释中太糟糕了。现在这个问题无法回答。
    int TriggerPIN1 = 9;
    int EchoPIN = 10;
    int TiggerPIN2 = 5;
    int EchoPIN2 = 4;
    
    void setup(){
      pinMode(TriggerPIN1,OUTPUT);
      pinMode(EchoPIN2,INPUT);
      pinMode(TriggerPIN2,OUTPUT);
      pinMode(EchoPIN2,INPUT);
      Serial.begin(9600); 
      }
    
    void loop(){  
      digitalWrite(TriggerPIN1,LOW);
      delayMicroseconds(2);
      digitalWrite(TriggerPIN1,HIGH);
      delayMicroseconds(2);
      digitalWrite(TriggerPIN1,LOW);
    
      long timedelay = pulseIn(EchoPIN1,HIGH);
      int distance1 = 0.0343 * (timedelay/2);
    
      Serial.print("Sensor 1 : ");
      Serial.println(distance1);
    
      delayMicroseconds(2);
    
      digitalWrite(TriggerPIN2,LOW);
      delayMicroseconds(2);
      digitalWrite(TriggerPIN2,HIGH);
      delayMicroseconds(2);
      digitalWrite(TriggerPIN2,LOW);
    
      long td = pulseIn(EchoPIN2,HIGH);
      int distance2 = 0.0343 * (td/2);
    
      Serial.print("Sensor 2 : ");
      Serial.println(distance2);
      }