目录
一、题目
二、示意图
三、流程图
四、硬件连接
1、舵机
电源线正极接在VCC上,电源负极接在GND上,信号线接在D12脚。
2、超声波
电源线正极接在VCC上,电源负极接在GND上,Trig信号线接在D3脚,Echo信号线接在D2脚。
3、LED灯
LED_A灯模块用红色,负极接在GND上,正极接在D6脚。
LED_B灯模块用绿色,负极接在GND上,正极接在D7脚。
五、程序
#include <Servo.h>
Servo myServo; //声明Servo对象
int distance; //声明距离变量,用于存储超声波测得障碍物距离
int angle; //声明舵机角度变量
const int servoPin=12; //设置舵机信号引脚
const int TrigPin=3; //设置Trig信号引脚
const int EchoPin=2; //设置Echo信号引脚
const int LED_A=6; //设置LED_A引脚
const int LED_B=7; //设置LED_B引脚
int delaytime=10; //设置舵机转到延时
//初始化函数
void setup() {
pinMode(LED_A,OUTPUT); //设置LED_A引脚为输出模式
pinMode(LED_B,OUTPUT); //设置LED_B引脚为输出模式
pinMode(TrigPin,OUTPUT); //设置TrigPin引脚为输出模式
pinMode(EchoPin,INPUT); //设置EchoPin引脚为输入模式
myServo.attach(servoPin); //绑定舵机引脚
myServo.write(90); //初始化舵机旋转到90度
digitalWrite(LED_A,LOW); //初始化LED_A熄灭
digitalWrite(LED_B,LOW); //初始化LED_B熄灭
}
//循环函数
void loop() {
//以下6行程序作用:读取超声波传感器前方障碍物距离
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
distance=pulseIn(EchoPin,HIGH)/58.0;
//如果障碍物距离在欢送区内
if(distance>=5 && distance<=15)
{
digitalWrite(LED_B,LOW); //LED_B灯熄灭
digitalWrite(LED_A,HIGH); //LED_A灯点亮
//以下for循环作用:舵机从30度旋转到90度
for(angle=30;angle=90;angle++)
{
myServo.write(angle);
delay(time);
}
digitalWrite(LED_A,LOW); //LED_A灯熄灭
//以下for循环作用:舵机从90度旋转到30度
for(angle=90;angle>=30;angle--)
{
myServo.write(angle);
delay(time);
}
}
//如果障碍物距离在欢迎区内
else if(distance>15 && distance<=25)
{
digitalWrite(LED_A,LOW); //LED_A灯熄灭
digitalWrite(LED_B,HIGH); //LED_B灯点亮
//以下for循环作用:舵机从90度旋转到150度
for(angle=90;iangle=150;angle++)
{
myServo.write(angle);
delay(time);
}
digitalWrite(LED_B,LOW); //LED_B灯熄灭
//以下for循环作用:舵机从150度旋转到90度
for(angle=150;angle>=90;angle--)
{
myServo.write(angle);
delay(time);
}
}
//如果障碍物距离不在欢迎区和欢送区内
else
{
myServo.write(90);
digitalWrite(LED_A,LOW);
digitalWrite(LED_B,LOW);
}
}