实验环境:
Arduino1.8.3 IDE
Arduino mega 2560
超声波传感器
超声波传感器用于超声波距离和障碍检测。超声波传感器有两种模式可选择:单线模式只需要一根信号线,大大减少IO口资源;双线模式与原有功能一样,需要一根输入和输出信号线。侦测距离和精度也有较大提高,可达1cm到500cm,其在有效探测范围内自动标定,无需人工调整就可以获得障碍物准确的距离。令你的机器人像蝙蝠一样通过声纳来感知周围的环境,你只需要在单片机、Arduino微控制器中编写一小段程序,就可以根据障碍物的距离精确的控制机器人的电机运行,从而使你的机器人轻松地避开障碍物,因此其是机器人领域常用的测距避障模块。
相关接口
超声波传感器的引脚定义:
* OUTPUT:响应信号输入
* INPUT:触发控制信号输入
* +:电源(VCC)
* -:地(GND)
双线模式接线图
INPUT、OUTPUT端口如图所示接到控制器的I/O口。5V 和GND分别接到电源的+5V和GND。
注:在使用双线模式时模式选择开关(Mode)拨到数字2侧。
演示程序:
硬件连接如图所示,数字口4 接超声波的OUTPUT 、数字口5 接超声波INPUT ,将开关拨到数字2 一侧超声波进入双线模式。
int inputPin = 4; // 接超声波的 output 引脚到数字D4脚
int outputPin = 5; // 接超声波的 input 引脚到数字D5脚
int ledpin = 13; // 定义 ledPin 引脚为D13脚
void setup()
{ //初始化串口及引脚的输入、输出模式
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
pinMode(inputPin, INPUT);
pinMode(outputPin, OUTPUT);
}
void loop()
{
unsigned int x1,x2;
digitalWrite(outputPin, LOW); //使发出发出超声波信号接口低电平2 μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); //使发出发出超声波信号接口高电平10μs ,这里是至少10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 保持发出超声波信号接口低电平
float distance1 = pulseIn(inputPin, HIGH); // 读出接收脉冲的时间
distance1 = distance1/58; // 将脉冲时间转化为距离(单位:厘米)
x1 = distance1 * 100.0;
distance1 = x1 / 100.0; //保留两位小数
Serial.print("x1 = ");
Serial.println(distance1); // 输出距离值
delay(150);
if (distance1 >=50)
{
digitalWrite(ledpin,HIGH); //如果距离大于50厘米小灯亮起
}
else
digitalWrite(ledpin,LOW); //如果距离小于50厘米小灯熄灭
}
程序效果:
打开串口监视器可以观察到输出的距离值为当前超声波距前方障碍物的实际距离。
Reference:
http://www.alsrobot.cn/wiki/index.php/SKU:RB-02S001A_RB_URF02%E8%B6%85%E5%A3%B0%E6%B3%A2%E4%BC%A0%E6%84%9F%E5%99%A8