Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有Arduino的多个超声波传感器_Arduino_Arduino Ultra Sonic - Fatal编程技术网

带有Arduino的多个超声波传感器

带有Arduino的多个超声波传感器,arduino,arduino-ultra-sonic,Arduino,Arduino Ultra Sonic,我正试图用三个HC-SR04超声波传感器和我的Arduino Pro Mini制造一个机器人,但我遇到了一些问题。简而言之,机器人的功能如下: 该机器人是双轮的,每个轮子由一个H型桥(SN754410)驱动 机器人两侧各有一个HC-SR04传感器,左侧传感器在检测到前面有一只手时启动左轮电机,右侧传感器则相反 i、 e.为了让机器人前进,我们将手靠近机器人的左右两侧,为了让它右转,我们移除右手并保持左手在原位,反之亦然,以便左转,等等 第三个HC-SR04位于机器人顶部,因此当用户的手悬停在机器

我正试图用三个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表示距离

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

    你的代码看起来不错

    祝你好运