本項目由兩塊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, 下載次數: 49)
2020-3-5 22:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|