时隔多日,我又来更新文章了。在大致系统地学习完Arduino后,终于腾出时间来。这一次是简单介绍超声波工作原理和示例代码。
此次超声波为SRF-04超声波传感器。该超声波有四个端口,电源端、接地端、触发端和反馈端。超声波,最直接最常见的作用是拿来测距。其原理是触发端(trige)发射超声波,反馈端(echo)接收反射回来的超声波,利用中间的时间差用公式算出得到距离。单位cm。用超声波作的扩展作用一般是设在小车前端测距,对距离设定范围判断是否遇到障碍物。
由此我们知道,一般超声波反馈端得到的数据写入另外的数字端,连接我们需要的元件,常见的是小车轮子上的直流电机。
超声波传感器和直流电机代码
const int TrigPin = 2; //超声波触发端口
const int EchoPin = 3;//超声波的反馈端口
float cm;
void setup()
{
Serial.begin(9600); //波特率
pinMode(TrigPin, OUTPUT); //超声波的触发端口为输出
pinMode(EchoPin, INPUT); //超声波的反馈端口为输出
}
void loop()
{
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0;
pinMode(4, OUTPUT);
if (cm > 5)//如果cm大于厘米
{digitalWrite(4, HIGH);
}
else//否则
{digitalWrite(4, LOW);
}
}
其中加粗的部分代码是超声波测距的程序,在利用超声波时可直接使用。
当然,该程序不能在串口监视器查看,想要加入串口监视,则要修改一下程序。
const int TrigPin = 2;
const int EchoPin = 3;
float distance;
void setup()
{ // 初始化串口通信及连接SR04的引脚
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin, INPUT);
Serial.println("Ultrasonic sensor:");
}
void loop()
{
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 检测脉冲宽度,并计算出距离
distance = pulseIn(EchoPin, HIGH) / 58.00;
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(1000);
}
以上是对超声波的简单介绍,实际具体情况编写的代码也会不同。