一.超声波模块和舵机模块集成使用
- 超声波模块:HC-SR04
- 舵机模块:SG90
- 目的:通过Arduino UNO核心板控制舵机旋转到不同位置,同时获取不同位置超声波模块和障碍物间的距离,配合控制算法,进行基于超声波智能避障小车的制作。
二.源代码
#include <Servo.h>
#define trigPin 2
#define echoPin 3
#define pwmPin 9
Servo myServo;
void setup() {
// put your setup code here, to run once:
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
Serial.begin(9600);
myServo.attach(pwmPin);
}
void loop() {
// put your main code here, to run repeatedly:
float value1,value2,value3;
//舵机旋转到正前方
servoRun(90);
Serial.print("value1: ");
value1 = getDistance();
//舵机旋转到右前方45°处
servoRun(45);
Serial.print("value2: ");
value2 = getDistance();
//舵机旋转到左前方135°处
servoRun(135);
Serial.print("value3: ");
value3 = getDistance();
}
float getDistance()
{
//10us高电平脉冲触发超声波模块
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float valueCM = 0;
valueCM = float(pulseIn(echoPin,HIGH)*17/1000);
Serial.print(valueCM);
Serial.println("cm");
delay(100);
return valueCM;
}
//舵机旋转到不同的角度
void servoRun(int angle)
{
myServo.write(angle);
delay(500);//等待超声波模块稳定
}
说明:
- 舵机模块使用参考本专栏文章《基于Arduino的SG90舵机驱动》
- 超声波模块使用参考本专栏文章《基于Arduino的超声波测距模块HC-SR04》
三. 智能避障小车相关原理:
1)正常情况下,智能小车会沿直线行驶,当遇到前方有障碍物且小于一定距离时(设定距离可根据具体情况调整),智能小车立即停止运行。
2)舵机转动超声波模块探测右方45°和左方135°障碍物距离并返回给Arduino控制板。
3)Arduino控制板根据前方、右方、左方障碍物的距离,自动判断一条可以安全前进的路径,避开障碍物后,再继续沿直线行驶。