math1as
贫民
贫民
  • UID637346
  • 粉丝0
  • 关注0
  • 发帖数0
阅读:0回复:0

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

楼主#
更多 发布于:2016-07-27 22:00
嘛,过来同样是地研所的子板块逛一下~ 顺便发出最近的拙作
单片机还是从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]
结果如下
游客

返回顶部