首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino障碍物避免撞车,然后读取超声波传感器

Arduino障碍物避免撞车,然后读取超声波传感器
EN

Stack Overflow用户
提问于 2022-05-22 11:35:12
回答 1查看 67关注 0票数 0

我一直在研究一辆Arduino避障车,我使用了arduino uno,两台TT电机1:48,一个超声波传感器SR04,一个通用车轮和一个L298D模块来减速电机。

我使用串行监视器检查超声波测量厘米,似乎很好,除了有时抛出奇怪的值2300,2400厘米,这是不确定的,因为最大的测量距离是400厘米。如果我把手放在传感器上,我也可以强迫这些值。有办法避免这种情况吗?

另外,当我把车放在地板上时,它有时会检测到最小距离,汽车在撞车前停下来,但其他时候,它会撞车,然后读取传感器,然后执行一个例程,以防距离小于距离阈值。我不知道为什么会发生这种情况,当传感器读取距离最小距离,然后旋转以避免它时,难道不应该总是立即停止吗?

这是我的密码:

代码语言:javascript
复制
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);

}

}

我希望你能帮我

EN

回答 1

Stack Overflow用户

发布于 2022-05-23 10:28:03

我看不出代码有多大问题,但我确实有一些建议:

  1. 我建议使用NewPing库访问传感器。这将处理传感器触发,并返回距离厘米。它还处理任何错误-并返回0。它也可以做一些抽样-在那里它给你一系列测量的中位数,试图减少你看到的误差。
  2. 在测量距离和检查接近度之间有相当大的延迟( delay(100) )。一个机器人可以在100毫秒内行驶相当长的距离,我不认为这个延迟是必要的。
  3. 当你靠近物体时,我通常会减慢机器人的速度。例如,当你在15厘米以内时,也许可以达到你正常速度的60%。这让机器人有更多的时间来测量距离,并在接近障碍物时做出反应。
  4. 如果你接近障碍物--比如墙--在很大的角度上,这些传感器对测量距离是没有好处的。例如,在45度时,它根本看不到墙壁,很高兴撞上了它。所以你需要意识到这一点。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72337204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档