2
- 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可以启动,然后我可以给传感器供电。这对我来说似乎是一个拙劣的解决方法,如果有人能提供一个硬编码的软件解决方案,我想要一个!
因为你是新来的人,当你满意时,不要忘记标记你的首选答案。 – FeliceM 2013-05-09 04:13:13
感谢您的回复,FeliceM。我有上拉电阻,而且我还在读数上使用低通滤波器,因为读数的时序并不重要。话虽如此,Tau只有2个。您的建议是去除setup()函数中的OUTPUT引脚的LOW拉低吗?我对数据表的理解(现在我已经重新阅读)是,RX在初始校准时需要保持高位。当然,针对OUTPUT和INPUT的pinMode的声明可以保留在setup()函数中吗?还是需要从readSonar()函数中调用它们? – Bob 2013-05-09 12:57:48
您应该共有4根导线(接地和+5 V)+(校准和模拟)。在设置中,将校准引脚配置为OUTPUT。在无效环路中,将引脚用于校准HIGH,然后延迟(120)并读取模拟引脚以获取您的测量结果,然后校准LOW,然后再将延迟50)。这应该是全部。加载草图后,断开Arduino的电源,然后连接并应该工作。 – FeliceM 2013-05-09 15:19:04