极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25681|回复: 21

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

[复制链接]
发表于 2014-9-2 14:34:31 | 显示全部楼层 |阅读模式
今天本来准备给之前的蓝牙遥控小车增加超声波壁障功能,可是手头有两款超声波模块,一个是大家最常见的的4pin HC-SR04,还有一款是3pin的SDM-IO。



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

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



HC-SR04代码:

  1. const int TrigPin = 2;
  2. const int EchoPin = 3;
  3. float cm;
  4. void setup()
  5. {
  6. Serial.begin(9600);
  7. pinMode(TrigPin, OUTPUT);
  8. pinMode(EchoPin, INPUT);
  9. }
  10. void loop()
  11. {
  12. digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
  13. delayMicroseconds(2);
  14. digitalWrite(TrigPin, HIGH);
  15. delayMicroseconds(10);
  16. digitalWrite(TrigPin, LOW);

  17. cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
  18. cm = (int(cm * 100.0)) / 100.0; //保留两位小数
  19. Serial.println("sc;");
  20.   Serial.println("sd0,0;");
  21.   Serial.println("ssHC-SR04:;");
  22.   Serial.println("sd0,8;");
  23. Serial.print("ss");
  24. Serial.print(cm);
  25. Serial.println(";");
  26.   Serial.println("ssCM;");
  27.   delay(1000);
  28. }
复制代码


SDM-IO代码:

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

  5. void setup()
  6. {
  7. Serial.begin(9600);
  8. pinMode(pin, OUTPUT);
  9. digitalWrite(pin, HIGH); // Trig pin is normally HIGH
  10. }

  11. void loop()
  12. {
  13. pinMode(pin, OUTPUT); //return digital pin to OUTPUT mode after reading
  14. digitalWrite(pin, LOW);
  15. delayMicroseconds(25);
  16. digitalWrite(pin, HIGH); //Trig pin pulsed LOW for 25usec
  17. time = micros(); //record timer
  18. pinMode(pin, INPUT); //change pin to INPUT to read the echo pulse
  19. sizeofpulse = pulseIn(pin, LOW, 18000); //should be approx 150usec, timeout at 18msec
  20. 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
  21. cm=(time*340.29/2/10000)-3; // convert to distance in centimeters
  22. Serial.println("sc;");
  23.   Serial.println("sd0,0;");
  24.   Serial.println("ssSDM-IO:;");
  25. // Serial.println("sd1,0;");
  26. Serial.print("ss");
  27. Serial.print(cm);
  28. Serial.println(";");
  29.   Serial.println("ssCM;");
  30.   delay(1000);
  31. }
复制代码



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









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



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



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



以上对比测试只是简单测试,可以看出,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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-9-2 15:01:01 | 显示全部楼层
请教一下:超声波模块可以设置发生的频率么?如果可以的话那就有希望用很多在一起协同工作了。

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

itead SDM-IO超声波模块 超声波传感器 测距避障 0~1500cm距离
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-2 18:05:49 | 显示全部楼层
zoologist 发表于 2014-9-2 15:01
请教一下:超声波模块可以设置发生的频率么?如果可以的话那就有希望用很多在一起协同工作了。

另外 你们 ...

不可以设置发生频率哦。标题是错了,是150cm
回复 支持 反对

使用道具 举报

发表于 2014-9-2 19:24:23 | 显示全部楼层
ITEAD创易工作室 发表于 2014-9-2 18:05
不可以设置发生频率哦。标题是错了,是150cm

恩 好像没看到能改的,这个容易修改么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-3 10:15:01 | 显示全部楼层
zoologist 发表于 2014-9-2 19:24
恩 好像没看到能改的,这个容易修改么?

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

使用道具 举报

发表于 2014-11-25 07:45:39 | 显示全部楼层
问一下,能不用LCD,直接在Arduino1.0.5 界面上 显示距离么?为什么我通过serial Monitor 显示的不是距离?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-25 09:43:14 | 显示全部楼层
冰山 发表于 2014-11-25 07:45
问一下,能不用LCD,直接在Arduino1.0.5 界面上 显示距离么?为什么我通过serial Monitor 显示的不是距离?


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

使用道具 举报

发表于 2014-12-7 14:46:07 | 显示全部楼层
学到了很多

回复 支持 反对

使用道具 举报

发表于 2014-12-26 13:51:08 | 显示全部楼层
LCD1602怎么只需要接4根线就行了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-30 14:08:40 | 显示全部楼层
小华盛顿 发表于 2014-12-26 13:51
LCD1602怎么只需要接4根线就行了?

这个是串口通信的1602LCD。 加了一个串口转换部分。
回复 支持 反对

使用道具 举报

发表于 2014-12-31 09:40:56 | 显示全部楼层
加个温度补偿就更加准确了!~
回复 支持 反对

使用道具 举报

发表于 2015-1-3 01:51:17 | 显示全部楼层
蛮有趣的,mark.
回复 支持 反对

使用道具 举报

发表于 2015-1-4 10:58:35 | 显示全部楼层
ITEAD创易工作室 发表于 2014-12-30 14:08
这个是串口通信的1602LCD。 加了一个串口转换部分。

如果不加串口能做吗??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-5 15:38:32 | 显示全部楼层
安念念绵 发表于 2015-1-4 10:58
如果不加串口能做吗??

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

使用道具 举报

发表于 2015-1-5 16:34:21 | 显示全部楼层
谢谢楼主分享,很细致
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-23 18:31 , Processed in 0.048961 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表