我一直在研究一辆Arduino避障车,我使用了arduino uno,两台TT电机1:48,一个超声波传感器SR04,一个通用车轮和一个L298D模块来减速电机。
我使用串行监视器检查超声波测量厘米,似乎很好,除了有时抛出奇怪的值2300,2400厘米,这是不确定的,因为最大的测量距离是400厘米。如果我把手放在传感器上,我也可以强迫这些值。有办法避免这种情况吗?
另外,当我把车放在地板上时,它有时会检测到最小距离,汽车在撞车前停下来,但其他时候,它会撞车,然后读取传感器,然后执行一个例程,以防距离小于距离阈值。我不知道为什么会发生这种情况,当传感器读取距离最小距离,然后旋转以避免它时,难道不应该总是立即停止吗?
这是我的密码:
int distance = 0;
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // Clear the trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Sets the trigger pin to HIGH state for 10 microseconds
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Reads the echo pin, and returns the sound wave travel time in microseconds
return pulseIn(echoPin, HIGH);
}
void setup()
{
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
}
void loop()
{
// Speed always the same
analogWrite(10, 110);
analogWrite(11, 110);
distance = 0.01723 * readUltrasonicDistance(3, 2);
delay(100); // Wait for 100 millisecond(s)
if (distance < 8) {
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
delay(500); // Wait for 500 millisecond(s)
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
delay(500); // Wait for 500 millisecond(s)
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
analogWrite(10, 90);
analogWrite(11, 90);
delay(500); // Wait for 500 millisecond(s)
} else {
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
}
}我希望你能帮我
发布于 2022-05-23 10:28:03
我看不出代码有多大问题,但我确实有一些建议:
delay(100) )。一个机器人可以在100毫秒内行驶相当长的距离,我不认为这个延迟是必要的。https://stackoverflow.com/questions/72337204
复制相似问题