董董soul 发表于 2016-4-13 11:25:35

OCROBOT智能小车(五)——超声波测距

前几天帮人测试代码的时候,稍微学习了一下超声波模块,实现了小车测距,快接近障碍物时转弯,否则直行。
先来一张超声波模块的图:

有4个引脚,CVV、GND、TRIGGER、ECHO。前两个是接地、接电源,后面两个就随便选两个IO口接,就好了。
分享一个超声波的库,里面有个NewPing example ,打开上传即可。
在测试的过程中,接线引脚对应的OK,但是出现了0、0、0、0、0的反馈,说明TRIGGER、ECHO没有数据传输。
于是我开始查找问题所在:
第一,超声波坏了
这个可能性很大,手上一共有4块超声波,于是我换了第二个超声波,不行,还是0、0、0,于是换第三块、第四块,都是0、0、0!!!

然后我蒙了,4块都是坏的么?这概率……不会吧!
第二,杜邦线坏了
于是,果断换线,这下,恩,出来数据了,如图:

问题就在杜邦线上面!
解决了超声波问题之后,开始写程序,代码如下:
const int TrigPin = 12;
const int EchoPin = 11;
float cm;

void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);

}

void loop()
{
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);

cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
//Serial.print(cm);
Serial.print("cm");
Serial.println(cm);//串口打印输出CM
// delay(50);

    if (cm > 10)
    {
      digitalWrite(3, HIGH);       //松开电机A的制动
      digitalWrite(4, LOW);       //松开电机B的制动
      digitalWrite(5, HIGH);      //采用全功率输出
      digitalWrite(6, LOW);   //设置方向为正向

    }
    if (cm < 10)//小于10厘米就拐右边
    {
      digitalWrite(3, HIGH);       //松开电机A的制动
      digitalWrite(4, LOW);       //松开电机B的制动
      digitalWrite(5, LOW);      //采用全功率输出
      digitalWrite(6, LOW);   //设置方向为正向
       Serial.println("guai");
    }
   
}


电机转动的部分,按实际情况写入你的代码。
到此,一个基本的效果就实现了。但是,迷你强大神说过,这种便宜的超声波测距是会因为周围环境的变化而变化的,也就是说程序里面说的10cm,到实际上就不是10cm了……
忽略忽略……O(∩_∩)O哈哈哈~

最后,把测试超声波的库给大家附上,

骑着蜗牛游世界 发表于 2016-4-13 16:26:19

:D:D:D:D:D:D:D:D:D

GEU78 发表于 2016-5-11 23:13:29

:):):):):):):):)
页: [1]
查看完整版本: OCROBOT智能小车(五)——超声波测距