liweisgg 发表于 2013-6-12 13:40:09

Arduino超声波测距模块控制蜂鸣器

Arduino超声波测距模块控制蜂鸣器


这里和大家分享下使用Arduino超声波测距模块控制蜂鸣器,通过简单的程序来作为超声波控制的一个教学例程,希望大家多多批评。
测试对象是SRF-04超声波传感器,有四个脚:5v电源脚(Vcc),触发控制端(Trig),接收端(Echo),地端(GND)
对于超声波的相关技术文件大家了在网上搜,资源很多,只要多花几分钟看看,都可以掌握的,这里就不多说了。
电路连接原理如下:


程序如下:

const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(8,OUTPUT);
}
void loop()
{
digitalWrite(8, LOW);

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; //保留两位小数
if (cm>=2 && cm<=10)
digitalWrite(8, HIGH);
}

不够有才 发表于 2013-6-12 17:29:24

我想请问一下楼主 frizing的这几个传感器都是怎么画出来的是楼主自己画的么 还是有数据库从网上下载的呢求链接啊 3q~~

smching 发表于 2013-6-12 22:33:06

不够有才 发表于 2013-6-12 17:29 static/image/common/back.gif
我想请问一下楼主 frizing的这几个传感器都是怎么画出来的是楼主自己画的么 还是有数据库从网上下载的呢...

AdaFruit Fritzing Library添加了98个元件。其中包含了两个超声波测距模块。但与LZ的不同样。

code-AR 发表于 2013-6-13 18:41:38

smching 发表于 2013-6-12 22:33 static/image/common/back.gif
AdaFruit Fritzing Library添加了98个元件。其中包含了两个超声波测距模块。但与LZ的不同样。

谢谢你的链接那,不知道你还有元件库了?

smching 发表于 2013-6-13 21:00:38

code-AR 发表于 2013-6-13 18:41 static/image/common/back.gif
谢谢你的链接那,不知道你还有元件库了?

没有了。
如有兴趣,你可以使用Fritzing parts editor自己设计。

我就是阳光 发表于 2013-9-8 21:45:40

楼主我请问您一个问题哈,我想把这个程序稍微改一下,改成距离小于十五厘米的时候电动机停转,应该怎么改啊?

Turbo 发表于 2014-1-23 14:13:02

弱弱问下楼主cm = pulseIn(EchoPin, HIGH) / 58.0;为什么是除58??

liweisgg 发表于 2014-4-4 20:40:56

工作折腾了大半年,这个论坛也有半年没进了,关于为什么除以58是这么计算的:声速是340m/s换算一下就是29ms/cm,这里需要的是每厘米所需的时间,因为我们的程序里时间单位为毫秒,距离单位为厘米,所以再除以2(我们只要单程)就是58了。

liweisgg 发表于 2014-4-4 20:42:33

不够有才 发表于 2013-6-12 17:29 static/image/common/back.gif
我想请问一下楼主 frizing的这几个传感器都是怎么画出来的是楼主自己画的么 还是有数据库从网上下载的呢...

传感器啊,网上有的我就直接用了,蜂鸣器和引线是用FLASH CS5画的

liweisgg 发表于 2014-4-4 20:46:42

我就是阳光 发表于 2013-9-8 21:45 static/image/common/back.gif
楼主我请问您一个问题哈,我想把这个程序稍微改一下,改成距离小于十五厘米的时候电动机停转,应该怎么改啊 ...

这个很简单,你用一个输出口作为电机电源的开关,如果你的电机功率比较大那就外接一个继电器开关,输出口控制继电器,继电器控制电机的电源,软件部分只要修改下判断语句就行了,很简单。

liweisgg 发表于 2014-4-4 20:47:39

Turbo 发表于 2014-1-23 14:13 static/image/common/back.gif
弱弱问下楼主cm = pulseIn(EchoPin, HIGH) / 58.0;为什么是除58??

声速是340m/s换算一下就是29ms/cm,这里需要的是每厘米所需的时间,因为我们的程序里时间单位为毫秒,距离单位为厘米,所以再除以2(我们只要单程)就是58了。

111222333 发表于 2015-2-8 09:58:27

const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(4,OUTPUT);
}
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();
if(cm>100.0)
{
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4,LOW);
delay(1000);
}
if(cm>20.0 && cm<100.0)
{
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4,LOW);
delay(1000-(100-cm)*12.5);
}
if(cm<20.0)
{
digitalWrite(4,HIGH);
}
}
没事闲着做的,
大家请见谅

snoopy0225 发表于 2015-4-23 10:16:21

楼主为什么读的高电平时间,从发射到返回。这段时间接收端没信号不是低电平吗。

liweisgg 发表于 2015-5-21 10:14:34

snoopy0225 发表于 2015-4-23 10:16 static/image/common/back.gif
楼主为什么读的高电平时间,从发射到返回。这段时间接收端没信号不是低电平吗。

发射端要发一个低高低脉冲电平,经过障碍物反射后,接收端接收到这段高低电平后计算发射和接收的时间差来计算距离,而发射端发出脉冲后,接收端确实是低电平,但是计算公式里需要的是低高低脉冲返回的时间!那么肯定是采集低高低电平里的高电平来计算时间了,所以cm = pulseIn(EchoPin, HIGH) / 58.0; 这条检测语句肯定要是高电平检测计算了,明白?

missbear 发表于 2015-5-21 23:46:01

求助楼主会不会编超声波测距控制蜂鸣器的乐器的程序啊
具体问题在这里http://www.geek-workshop.com/thread-15034-1-1.html
多谢
页: [1] 2
查看完整版本: Arduino超声波测距模块控制蜂鸣器