2013-05-07 93 views
2

设备:Arduino的超声波初始化问题

  • Arduino的MEGA 2560
  • 2×MaxBotix MaxSonar-EZ0

软件(与超声波,绝不是整个程序):

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

    //Ultrasonic Left 
    pinMode(26, OUTPUT); 
    pinMode(2, INPUT); 
    digitalWrite(26, LOW); 

    //Ultrasonic Right 
    pinMode(27, OUTPUT); 
    pinMode(3, INPUT); 
    digitalWrite(27, LOW); 
} 

void readSonar() { 
    digitalWrite(26, HIGH); 
    delayMicroseconds(25); 
    digitalWrite(26, LOW); 
    data[0] = pulseIn(2, HIGH); 

    digitalWrite(27, HIGH); 
    delayMicroseconds(25); 
    digitalWrite(27, LOW); 
    data[1] = pulseIn(3, HIGH); 

    return data; 
} 

问题:

  • Arduino第一次启动时,两个超声波传感器的读数没有被更新。它们报告为非零值,通常在500-1500的范围内。它们波动很小(很可能是由于电源噪声),但往往保持在它们初始值附近。
  • 根据这些传感器的数据表,在初始化阶段传感器的14英寸内没有障碍物。
  • 通过简单地断开并重新连接到传感器的电缆(从传感器背面,而不是直接连接到Arduino输入),我可以立即接收来自传感器的精确读数。

有没有人有过这个问题?我的setup()函数在我看过的例子中看起来很“正常”。为了解决这个问题,我连接了一个用于两个传感器有效线路的开关。这样Arduino可以启动,然后我可以给传感器供电。这对我来说似乎是一个拙劣的解决方法,如果有人能提供一个硬编码的软件解决方案,我想要一个!

回答

0

如果你看看传感器的特性,它看起来很清楚,你需要以Rx为0来启动它们。看看这个link。这很可能就是你启动Arduino使其工作后必须断开传感器的原因。您还需要确保连接有上拉电阻,以避免读数不可靠。

+0

因为你是新来的人,当你满意时,不要忘记标记你的首选答案。 – FeliceM 2013-05-09 04:13:13

+0

感谢您的回复,FeliceM。我有上拉电阻,而且我还在读数上使用低通滤波器,因为读数的时序并不重要。话虽如此,Tau只有2个。您的建议是去除setup()函数中的OUTPUT引脚的LOW拉低吗?我对数据表的理解(现在我已经重新阅读)是,RX在初始校准时需要保持高位。当然,针对OUTPUT和INPUT的pinMode的声明可以保留在setup()函数中吗?还是需要从readSonar()函数中调用它们? – Bob 2013-05-09 12:57:48

+0

您应该共有4根导线(接地和+5 V)+(校准和模拟)。在设置中,将校准引脚配置为OUTPUT。在无效环路中,将引脚用于校准HIGH,然后延迟(120)并读取模拟引脚以获取您的测量结果,然后校准LOW,然后再将延迟50)。这应该是全部。加载草图后,断开Arduino的电源,然后连接并应该工作。 – FeliceM 2013-05-09 15:19:04