ITEAD创易工作室 发表于 2014-9-2 14:34:31

(HC-SR04对比SDM-IO)串口LCD1602显示超声波测距

今天本来准备给之前的蓝牙遥控小车增加超声波壁障功能,可是手头有两款超声波模块,一个是大家最常见的的4pin HC-SR04,还有一款是3pin的SDM-IO。



在纠结使用哪款之前我决定先做个比较。

以下是本次对比用到的配件:



HC-SR04代码:

const int TrigPin = 2;
const int EchoPin = 3;
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.println("sc;");
Serial.println("sd0,0;");
Serial.println("ssHC-SR04:;");
Serial.println("sd0,8;");
Serial.print("ss");
Serial.print(cm);
Serial.println(";");
Serial.println("ssCM;");
delay(1000);
}

SDM-IO代码:

int pin = 8; // connected to the Trig on the module, this serves as both Trigger and Echo
unsigned long time;
unsigned long sizeofpulse;
float cm;

void setup()
{
Serial.begin(9600);
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH); // Trig pin is normally HIGH
}

void loop()
{
pinMode(pin, OUTPUT); //return digital pin to OUTPUT mode after reading
digitalWrite(pin, LOW);
delayMicroseconds(25);
digitalWrite(pin, HIGH); //Trig pin pulsed LOW for 25usec
time = micros(); //record timer
pinMode(pin, INPUT); //change pin to INPUT to read the echo pulse
sizeofpulse = pulseIn(pin, LOW, 18000); //should be approx 150usec, timeout at 18msec
time = micros() - time - sizeofpulse; // amount of time elapsed since we sent the trigger pulse and detect the echo pulse, then subtract the size of the echo pulse
cm=(time*340.29/2/10000)-3; // convert to distance in centimeters
Serial.println("sc;");
Serial.println("sd0,0;");
Serial.println("ssSDM-IO:;");
// Serial.println("sd1,0;");
Serial.print("ss");
Serial.print(cm);
Serial.println(";");
Serial.println("ssCM;");
delay(1000);
}


硬件连接和运行效果如下:









接下来开始对比,先把两款超声波模块固定在同一水平面。如下图:



用杜邦线试了一下,HC-SR04几乎检测不到,偶尔会有变化。SDM-IO测试稳定,上下移动均能检测到杜邦线。



以下是测试视频,用了一根筷子,呵呵:

http://player.youku.com/player.php/sid/XNzcwMzE0NzMy/v.swf

以上对比测试只是简单测试,可以看出,SDM-IO更灵敏,无盲区。当然这两款的价格还是有差距的。根据个人需要选择了。相关产品可以查阅以下资料。
HC-SR04:http://pan.baidu.com/s/1sjv0tK5
SDM-IO:http://pan.baidu.com/s/1ixG1S
串口1602LCD:http://pan.baidu.com/s/1pJ8vAxt

zoologist 发表于 2014-9-2 15:01:01

请教一下:超声波模块可以设置发生的频率么?如果可以的话那就有希望用很多在一起协同工作了。

另外 你们淘宝店的标题错了吧?

itead SDM-IO超声波模块 超声波传感器 测距避障 0~1500cm距离

ITEAD创易工作室 发表于 2014-9-2 18:05:49

zoologist 发表于 2014-9-2 15:01 static/image/common/back.gif
请教一下:超声波模块可以设置发生的频率么?如果可以的话那就有希望用很多在一起协同工作了。

另外 你们 ...

不可以设置发生频率哦。标题是错了,是150cm;P

zoologist 发表于 2014-9-2 19:24:23

ITEAD创易工作室 发表于 2014-9-2 18:05 static/image/common/back.gif
不可以设置发生频率哦。标题是错了,是150cm

恩 好像没看到能改的,这个容易修改么?

ITEAD创易工作室 发表于 2014-9-3 10:15:01

zoologist 发表于 2014-9-2 19:24 static/image/common/back.gif
恩 好像没看到能改的,这个容易修改么?

超声波频率是20kHz以上,没有上限。成品都是设置好频率了。可以查阅下超声波电路原理。

冰山 发表于 2014-11-25 07:45:39

问一下,能不用LCD,直接在Arduino1.0.5 界面上 显示距离么?为什么我通过serial Monitor 显示的不是距离?

ITEAD创易工作室 发表于 2014-11-25 09:43:14

冰山 发表于 2014-11-25 07:45 static/image/common/back.gif
问一下,能不用LCD,直接在Arduino1.0.5 界面上 显示距离么?为什么我通过serial Monitor 显示的不是距离?


Serial.print();这个是monitor打印的命令格式。
Serial.println("ssCM;"); 这个是在串口屏显示的命令格式。多了ln两个字母。

请叫我小萌兽 发表于 2014-12-7 14:46:07

学到了很多
:lol

小华盛顿 发表于 2014-12-26 13:51:08

LCD1602怎么只需要接4根线就行了?

ITEAD创易工作室 发表于 2014-12-30 14:08:40

小华盛顿 发表于 2014-12-26 13:51 static/image/common/back.gif
LCD1602怎么只需要接4根线就行了?

这个是串口通信的1602LCD。 加了一个串口转换部分。

FredKhoo 发表于 2014-12-31 09:40:56

加个温度补偿就更加准确了!~

avr2015 发表于 2015-1-3 01:51:17

蛮有趣的,mark.

安念念绵 发表于 2015-1-4 10:58:35

ITEAD创易工作室 发表于 2014-12-30 14:08 static/image/common/back.gif
这个是串口通信的1602LCD。 加了一个串口转换部分。

如果不加串口能做吗??

ITEAD创易工作室 发表于 2015-1-5 15:38:32

安念念绵 发表于 2015-1-4 10:58 static/image/common/back.gif
如果不加串口能做吗??

不加串口的也可以,就复杂很多了,需要接10根左右的线,还要重写代码。论坛里有这种没有转串口的LCD教程。

56832926 发表于 2015-1-5 16:34:21

谢谢楼主分享,很细致:)
页: [1] 2
查看完整版本: (HC-SR04对比SDM-IO)串口LCD1602显示超声波测距