math1as
基于arduino声波雷达(报警器)

嘛,过来同样是地研所的子板块逛一下~ 顺便发出最近的拙作

单片机还是从arduino上手,虽然微机原理课玩过stm32,但终究不是很喜欢。

首先是我们的声波检测模块hc-sr04

详细参数如下:

通过发射声波接受返回的方式来检测有无物体

需要在trin引脚用一个10ms的脉冲去激发

然后接受echopin的高电位时间,使用pluseIn()

根据公式除以58就是距离的厘米数了。

同时我们用led red来进行报警

并buzzer在200HZ~800HZ间蜂鸣

代码如下:

[mw_shl_code=c,true]const int echopin=3;

const int trigpin=2;

int buzzer=6;

int led = 5;

void setup() {

Serial.begin(9600);

pinMode(buzzer,OUTPUT);

pinMode(echopin,INPUT); //设定echo为输入模式

pinMode(trigpin,OUTPUT);//设定trig为输出模式

pinMode(led, OUTPUT);

}

void notice()

{

int i,j;

for(i=0;i<40;i++)//输出一个频率的声音

{

digitalWrite(buzzer,HIGH);//发声音

delay(1);//延时1ms

digitalWrite(buzzer,LOW);//不发声音

delay(1);//延时ms

}

for(i=0;i<50;i++)//输出另一个频率的声音

{

digitalWrite(buzzer,HIGH);//发声音

delay(2);//延时2ms

digitalWrite(buzzer,LOW);//不发声音

delay(2);//延时2ms

}

}

void warn()

{

for(int i=200;i<=800;i++)

{

pinMode(buzzer,OUTPUT);

tone(buzzer,i);

delay(5);

}

delay(4000);

for(int i=800;i>=200;i--)

{

pinMode(buzzer,OUTPUT);

tone(buzzer,i);

delay(10);

}

}

void loop() {

digitalWrite(trigpin,LOW);

delayMicroseconds(2);

digitalWrite(trigpin,HIGH);

delayMicroseconds(10);

digitalWrite(trigpin,LOW); //发一个10ms的高脉冲去触发TrigPin

float distance = pulseIn(echopin,HIGH);//接收高电平时间

distance = distance/58.0;//计算距离

Serial.print(distance); //输出距离

Serial.println("cm"); //输出单位

if(distance<60)

{

digitalWrite(led,HIGH);

warn();

}

else

{

digitalWrite(led,LOW);

}//距离小于100cm时,led写入高电平

delay(100);

}[/mw_shl_code]

结果如下