繁体   English   中英

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

[英]Driving two Ultrasonic sensor with Arduino

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

我的代码如下所示:

int trigPin=12; // this pin work as the output of the two trig pin of the two sensor
int echoPin1=8;
int echoPin2=13;

 void setup()
 {
   Serial.begin (9600);
   pinMode(trigPin, OUTPUT);
   pinMode(echoPin1, INPUT);
   pinMode(echoPin2, INPUT);
 }
 void loop()
{
   float duration1, distance1, duration2, distance2;

  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW); //trig:10 microsecond TTL pulse

  duration1 = pulseIn(echoPin1, HIGH);
  duration2 = pulseIn(echoPin2, HIGH);

  distance1 = duration1/2/29.1;
  distance2 = duration2/2/29.1;
  Serial.print(distance1);
  Serial.print(',');
  Serial.println(distance2);
  delay(20);

}

情况是在串行监视器上,“distance1”显示正确的值,但“distance2”始终为 0。

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

我在使用函数“pulseIn”时似乎有一些问题,是吗?

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

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

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

这使您可以获得最准确的读数。

还提出了其他问题:

  1. 每个传感器都有其触发引脚,您应该在触发引脚发送信号并读​​取来自同一传感器的回波引脚,然后对另一个传感器重复此操作。
  2. 您必须执行读取时间,根据数据表( HC-SR04 数据表),两次读取之间至少间隔 60 毫秒。
  3. 使用中断使计时最准确的措施。

尝试这个

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);
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM