带有Arduino的多个超声波传感器
我正试图用三个HC-SR04超声波传感器和我的Arduino Pro Mini制造一个机器人,但我遇到了一些问题。简而言之,机器人的功能如下:带有Arduino的多个超声波传感器,arduino,arduino-ultra-sonic,Arduino,Arduino Ultra Sonic,我正试图用三个HC-SR04超声波传感器和我的Arduino Pro Mini制造一个机器人,但我遇到了一些问题。简而言之,机器人的功能如下: 该机器人是双轮的,每个轮子由一个H型桥(SN754410)驱动 机器人两侧各有一个HC-SR04传感器,左侧传感器在检测到前面有一只手时启动左轮电机,右侧传感器则相反 i、 e.为了让机器人前进,我们将手靠近机器人的左右两侧,为了让它右转,我们移除右手并保持左手在原位,反之亦然,以便左转,等等 第三个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);
}
}
15
detected
0
NA
16
detected
0
NA
14
detected
如您所见,将我的手放在传感器前面约15厘米处,传感器返回正确的距离,“ena1”引脚设置为高(如屏幕上打印的“检测到”所示)
然而,在主回路的下一次迭代中,传感器总是返回一个“0”值(而我的手仍在传感器前面),随后将“ena1”引脚再次设置为低,这可能解释了为什么LED如此快速地打开和关闭
我不知道为什么会这样。。。有趣的是,通过从代码中删除digitalWrite行,传感器返回正确的值(即,当我的手在传感器前面时,没有“0”值)
有没有办法解决这个问题
提前谢谢 这可能是硬件错误。我见过这样的情况,如果HC-SR04的引脚是黄铜(金黄色)颜色,则传感器倾向于抛出0表示距离 我的建议是另买一个超声波传感器,最好是带更多银色的针 你的代码看起来不错 祝你好运