【问题标题】:Arduino ultrasonic initialisation issueArduino超声波初始化问题
【发布时间】:2013-05-07 14:28:34
【问题描述】:

硬件:

  • Arduino MEGA 2560
  • 2 x 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可以启动,然后我可以给传感器供电。这对我来说似乎是一个拙劣的解决方法,如果有人能够提供的话,我想要一个硬编码的软件解决方案!

【问题讨论】:

    标签: initialization arduino sensors


    【解决方案1】:

    如果您查看传感器的特性,很明显您需要在 Rx 为 0 的情况下启动它们。看看这个link。这很可能是您在启动 Arduino 以使其工作后必须断开传感器的原因。您还需要确保已连接上拉电阻以避免读数不可靠。

    【讨论】:

    • 因为您是新来的,所以当您满意时不要忘记将您的首选答案标记为已接受。
    • 感谢您的回复,FeliceM。我有上拉电阻,并且我还在读数上使用了低通滤波器,因为读数的时间并不重要。话虽这么说,Tau 只有 2。你的建议是在 setup() 函数中移除 OUTPUT 引脚上的 LOW 拉动吗?我对数据表的理解(现在我已经重新阅读过)是初始校准需要将 RX 保持在高电平。当然,OUTPUT 和 INPUT 的 pinMode 声明也可以保留在 setup() 函数中吗?还是需要从 readSonar() 函数中调用它们?
    • 您应该总共有 4 根线(接地和 +5 V)+(校准和模拟)。在设置中,将用于校准的引脚配置为 OUTPUT。在 void 循环中,将用于校准的引脚升为高电平,然后延迟(120)并读取模拟引脚以进行测量,然后校准为低电平,我会再延迟一次( 50)。这应该就是全部了。加载草图后,断开 Arduino 的电源,然后连接它应该可以工作。
    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 2014-10-17
    • 2016-04-23
    相关资源
    最近更新 更多