本项目由两块arduino nano搭建,具有遥控功能,直线自动跟随功能,避障功能(采用一个超声波,没有进行详细的计算,所有效果相对较差,将车速调慢会好很多) 三种模式可以由遥控切换。
以下为部分代码:
byte ad[8] = {0,0,0x6f,0,0,0,0,0};
int sx,sy;
//----------------------------------------- 避障
#define scanning_angle 90 //扫描角度
#define distance 50 //避障距离
#define jkl 45 //前进速度
int i=scanning_angle,j,cm;
int trig = 11;
int echo = 12;
int servoPin = 13;
boolean o=false;
void self_motion_init_pin() //引脚定义
{
pinMode(trig,OUTPUT);
pinMode(echo,INPUT);
pinMode(servoPin,OUTPUT);//设置舵机接口为输出接口
}
void self_motion_distance() //计算超声波距离
{
long us;
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
us = pulseIn(echo,HIGH);
cm = us*17/1000;
}
void self_motion_servo(int angle) //定义一个脉冲函数 发送50个脉冲 舵机
{
for(int i=0;i<50;i++){
int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值
digitalWrite(servoPin, HIGH); //将舵机接口电平至高
delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
digitalWrite(servoPin, LOW); //将舵机接口电平至低
delayMicroseconds(20000 - pulsewidth);
}
}
void self_motion_go() //车辆运行程序
{
digitalWrite(5,LOW); analogWrite(9,jkl); digitalWrite(6,LOW); analogWrite(10,jkl);//前进
if((i>60)&&(cm<distance))
{
analogWrite(9,jkl+40); digitalWrite(5,LOW); digitalWrite(6,LOW); analogWrite(10,jkl-20);//右转
}
if((i<60)&&(cm<distance))
{
digitalWrite(5,LOW); analogWrite(10,jkl-20); analogWrite(10,jkl+40); digitalWrite(6,LOW);//左转
}
if((i==60)&&(cm<(distance+10))&&(j>=5))
{
digitalWrite(9,LOW); digitalWrite(5,HIGH); digitalWrite(10,HIGH); digitalWrite(6,LOW);//左转
}
if((i==60)&&(cm<40)&&(j<5))
{
digitalWrite(9,HIGH); digitalWrite(5,LOW); digitalWrite(10,LOW); digitalWrite(6,HIGH);//右转
}
}
void self_motion_procedure() //控制舵机旋转角度 控制前进倒退 避障总程序
{
j=random(0,10); //随机数
if(i>=scanning_angle+60) o=true;
if(i<=scanning_angle-60) o=false;
if(o==1) i=i-15;
if(o==0) i=i+15;
self_motion_servo(i);
self_motion_distance();
self_motion_go();
}
全部资料51hei下载地址:
智能车.zip
(467.46 KB, 下载次数: 47)
|