首页 文章

带Arduino的多个超声波传感器

提问于
浏览
1

我正在尝试使用三个HC-SR04超声波传感器和我的Arduino Pro Mini创建一个机器人,但我遇到了一些问题 . 简而言之,机器人的功能如下:

  • 机器人是双轮的,带有H桥(SN754410)驱动每个车轮 .

  • 机器人的每一侧都有一个HC-SR04传感器,左侧的传感器在检测到前面的一只手时激活左轮电机,反之亦然 .

即为了使机器人前进,我们将手放在机器人的左右两侧,使其向右转,我们移除右手并将左手保持在原位,反之亦然向左转,等等 .

  • 第三个HC-SR04位于机器人的顶部,这样当用户的手悬停在机器人上方时,它会激活第三个电机 .

我的测试代码如下:

#include <NewPing.h>

#define SONAR_NUM 3      // Number of sensors.
#define MAX_DISTANCE 20 // Maximum distance (in cm) to ping.

NewPing sonar[SONAR_NUM] = {   // Sensor object array.
  NewPing(4, 5, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping. 
  NewPing(6, 7, MAX_DISTANCE), 
  NewPing(8, 9, MAX_DISTANCE)
};

#define ena1 10   //trigger for left motor H-bridge
//#define ena2 11 //trigger for right motor
//#define ena3 12  //for top motor

long sensors[3]; //array to store sensor distances 

void setup() {
 Serial.begin (115200);

 pinMode(ena1, OUTPUT);
 //pinMode(ena2, OUTPUT);
 //pinMode(ena3, OUTPUT);
}

void loop() {

 for (uint8_t i = 0; i < SONAR_NUM; i++) { // Loop through each sensor and display results.
    delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
    sensors[i] = sonar[i].ping_cm(); 
  }

  Serial.println(sensors[0]);
  if (sensors[0] > 0 && sensors[0] <= 20){
  Serial.println("detected");
  digitalWrite(ena1, HIGH);
  }else{
  Serial.println("NA");
  digitalWrite(ena1,LOW);
  }
 }

如您所见,我正在使用NewPing.h库来收集传感器数据 . 在for循环的每次迭代之后,传感器检测到的距离存储在传感器阵列中 . 当手放置在离传感器约15-20厘米处时,arduino将数字“HIGH”触发信号发送到相应的H桥,激活相应的电机(我只有一个这样的引脚,“ena1”,启用在我的代码中,另外两个被评论用于测试) .

为了测试我的代码,我只需将H桥触发引脚“ena1”连接到LED,该引脚由传感器激活,其距离数据存储在变量“sensors [0]”中 . 然而,在我编译并上传我的代码之后,我注意到当我把手放在传感器前面时,LED只是微弱地闪烁 . 好像LED正在快速打开和关闭 .

串行监视器的输出如下:

15
detected 
0
NA
16
detected
0
NA
14
detected

如您所见,通过将手放在传感器前约15cm处,传感器返回正确的距离,并且“ena1”引脚设置为高(由“检测到”打印到屏幕上) .

但是,传感器总是在主循环的下一次迭代时返回“0”值(当我的手仍在传感器前面时),随后再次将“ena1”引脚设置为LOW,这可以解释为什么LED是被打开和关闭这么快 .

我不确定为什么会发生这种情况......有趣的是,通过从代码中删除digitalWrite行,传感器返回正确的值(即当我的手在传感器前面时没有“0”值) .

关于如何解决这个问题的任何想法?

提前致谢!

1 回答

  • 0

    这可能是硬件错误 . 我见过的情况是,如果HC-SR04的引脚是黄铜(金色),传感器倾向于抛出0距离 .

    我的建议是得到另一个超声波传感器,最好是带有更多银色的针脚 .

    你的代码看起来不错!

    祝好运!

相关问题