
嘛,过来同样是地研所的子板块逛一下~ 顺便发出最近的拙作
单片机还是从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]
结果如下