Arduino避障程序任务:接受GP2Y0A21红外测距传感器的采集数据,并把此数据转换为距离值。如果小车距离前方障碍物小于20cm,则机器人停止、后退、转弯,再前进,直到它又遇到障碍物,再重复执行避障动作。
#include <Servo.h> //申明舵机库文件
float distance_float;//存储由传感器读取值,通过算式处理后的浮点型距离值
int GP2D12 = 0;//把夏普GP2D12红外测距传感器连接在模拟量端口0
int val; //存储从GP2D12红外测距传感器读到的采样值
Servo myservo1; //定义左舵机对象
Servo myservo2; //定义右舵机对象
int power1 =93; //定义变量,用于存储360度舵机功率值
int power2 =93; //360度舵机功率值范围为0~180,零速功率值为93
int randNumber; //定义随机数变量
void setup()
{
myservo1.attach(7); // 连接左舵机到Arduino数字端口7
myservo2.attach(9); //连接右舵机到Arduino数字端口9
}
void advance()//小车前进
{
power1=180;
power2=0;
myservo1.write(power1);
myservo2.write(power2);
}
void back()//小车后退
{
power1=0;
power2=180;
myservo1.write(power1);
myservo2.write(power2);
}
void left()//小车左转
{
power1=93;
power2=0;
myservo1.write(power1);
myservo2.write(power2);
}
void right()//小车右转
{
power1=180;
power2=93;
myservo1.write(power1);
myservo2.write(power2);
}
void Stop()//小车停止
{
power1=93;
power2=93;
myservo1.write(power1);
myservo2.write(power2);
}
void loop() {
//GP2Y0A21红为10cm~80cm
//读取GP2D12红外测距传感器模拟量数据
val = ogRead(GP2D12);
//通过以下算式,把传感器读取值处理成浮点型距离值
distance_float=2547.8/((float)val*0.49-10.41)-0.42;
//如果小车距离障碍物大于20cm,则小车前进,直到小于20cm
//如果小车距离障碍物小于20cm,则小车后退,然后右转或者左转。
//当小车距离障碍物大于80cm,或者更远处,红外传感器会计算得到“负”值。
if (distance_float<=20 && distance_float>0)
{
Stop(); //小车停止0.2s
delay(200);
back(); //小车后退0.8s
delay(800);
randNumber = random(10);
//小车随机向左或者向右转动,2s
if(randNumber<5)
{
right(); //向右转动,2s
delay(2000);
}
else
{
left(); //向左转动,2s
delay(2000);
}
}
else //否则
advance();//小车前进
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-30758-2.html
霉菌给了中国加大岛礁建设的绝佳良机