2

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

  1. 该机器人是双轮的,每个轮子都有一个 H 桥 (SN754410) 驱动。
  2. 机器人的每一侧都有一个 HC-SR04 传感器,左侧的传感器在检测到前面有一只手时激活左轮电机,右侧反之亦然。

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

  1. 第三个 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 会向相应的 H 桥发送一个数字“HIGH”触发信号,激活相应的电机(我只有一个这些引脚,“ena1”,启用在我的代码中,另外两个被注释为测试)。

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

串行监视器的输出如下:

15
detected 
0
NA
16
detected
0
NA
14
detected

如您所见,通过将我的手放在传感器前面约 15 厘米处,传感器返回正确的距离,并且“ena1”引脚设置为高电平(如“检测到”打印到屏幕上所证明的那样)。

然而,传感器在主循环的下一次迭代中总是返回一个“0”值(当我的手仍然在传感器前面时),随后再次将“ena1”引脚设置为低电平,这可以解释为什么 LED 是如此快速地打开和关闭。

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

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

提前致谢!

4

1 回答 1

0

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

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

你的代码看起来不错!

祝你好运!

于 2017-01-13T02:10:25.290 回答