導航:首頁 > 編程知識 > 不會編程如何製作自動避障小車

不會編程如何製作自動避障小車

發布時間:2023-07-20 05:24:10

Ⅰ 求arino避障小車程序,急!(高額懸賞)

//舵機和超聲波調試代碼
#include <Servo.h>
#include <Metro.h>
Metro measureDistance = Metro(50);
Metro sweepServo = Metro(20);

unsigned long actualDistance = 0;

Servo myservo; //創建舵機
int pos = 60;
int sweepFlag = 1;

int URPWM = 3; //PWM輸出0-25000us,每50us代表1cm
int URTRIG= 10; // PWM trigger pin PWM串口為10
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command 距離測量命令

void setup(){ // Serial initialization 串列初始化
myservo.attach(9); //舵機串口為9
Serial.begin(9600); // Sets the baud rate to 9600
SensorSetup();
}

void loop(){
if(measureDistance.check() == 1){
actualDistance = MeasureDistance();
// Serial.println(actualDistance);
// delay(100);
}

if(sweepServo.check() == 1){
servoSweep();
}

}

void SensorSetup(){
pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG
digitalWrite(URTRIG,HIGH); // Set to HIGH
pinMode(URPWM, INPUT); // Sending Enable PWM mode command 發送使能控制模式命令
for(int i=0;i<4;i++){
Serial.write(EnPwmCmd[i]);
}
}

int MeasureDistance(){ // a low pull on pin COMP/TRIG triggering a sensor reading 觸發感測器讀數
digitalWrite(URTRIG, LOW);
digitalWrite(URTRIG, HIGH); // reading Pin PWM will output pulses 讀引腳脈寬調制將輸出脈沖
unsigned long distance=pulseIn(URPWM,LOW);
if(distance==50000){ // the reading is invalid.閱讀無效
Serial.print("Invalid");
}else{
distance=distance/50; // every 50us low level stands for 1cm
}
return distance;
}

void servoSweep(){
if(sweepFlag ){
if(pos>=60 && pos<=120){
pos=pos+1; // in steps of 1 degree 1度角度的轉動
myservo.write(pos); // tell servo to go to position in variable 'pos' 告訴舵機轉動的角度
}
if(pos>119) sweepFlag = false; // assign the variable again 重新分配變數
}else {
if(pos>=60 && pos<=120){
pos=pos-1;
myservo.write(pos);
}
if(pos<61) sweepFlag = true;
}
}

////////////////////////////////////////////////////////////

需要載入一個Metro.h的庫,這只是調試機器,餘下的完全看你的發揮了,加上電機

Ⅱ 51單片機紅外避障小車教程

你好,我以前參加過飛思卡爾智能小車競賽,程序已經找不到了,但我可以給回你一些建議。
尋路或者避障答,主要由光電和攝像頭兩種,如果你採用光電去做,你需要了解一寫光電感測器,距離感測器的知識。如果你選擇攝像頭去做,你需要了解一些AD轉換,圖像處理的知識
C程序應該包括電機驅動,舵機驅動,當前感測器狀態識別/當前圖像處理等內容

Ⅲ 請問怎樣使用tcrt5000光電開關實現智能小車自動避障,怎樣調節避障距離啊怎樣連接電路圖啊,謝謝!

我用昌仔胡十三個對管,舵機控制轉向,八個對管的話狀態改下就行,給你參考下,不明白可以追問我,qq 181325995
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint i,count;
uchar pro; //*驅動電機調速*//
uchar finish=0;//停車標志
sbit le1=P1^0; //*左邊感測器*//
sbit le2=P1^1;
sbit le3=P1^2;
sbit le4=P1^3;
sbit le5=P1^4;
sbit le6=P1^5;
sbit mid=P1^6;//*中間感測器*//
sbit ri6=P1^7;
sbit ri5=P2^3;
sbit ri4=P2^4;
sbit ri3=P2^5;
sbit ri2=P2^6;
sbit ri1=P2^7;//*右邊感測器*//
sbit ENA=P2^0; //驅動電機pwm//
sbit moto1=P2^1; //電機控制//
sbit moto2=P2^2;
sbit PWM=P3^5; //舵機pwm//
sbit bz=P3^7;//蔽障管耐攔
init()
{
TMOD=0x11;//設定雙定時器
EA=1;
TR0=1;
TR1=1;
TH0 = 0x0B1;//設定定時初始值,可去下載個定時器計算軟體,
TL0 = 0x0E0;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
ET0=1;
ET1=1;
ENA=1;
}
void delay(uint n)//延時函數
{
uchar a,b,c;
for(c=1;c>0;c--)
for(b=n;b>0;b--)
for(a=2;a>0;a--);
}
void delay2(uint z)
{
uchar a,b,c;
for(a=2;a>0;a--)
for(b=100;b>0;b--)
for(c=z;c>0;c--);
}
void qctyp(void) //光電管全無狀態時(脫離軌道),讀取前次狀態

{
le1=P1^0;
le2=P1^1;
le3=P1^2;
le4=P1^3;
le5=P1^4;
le6=P1^5;
mid=P1^6;
ri6=P1^7;
ri5=P2^3;
ri4=P2^4;
ri3=P2^5;
ri2=P2^6;
ri1=P2^7;
}
void hhig(uint y)//前進函數
{
pro=y;//變數y是改戚轎變小車速度這里范圍是0--39
moto1=1;
moto2=0;
}
void back(uint z)//後退函數
{
pro=z;//改變z 可改變行駛速度
moto1=0;
moto2=1;
}
void dj(uint m) //舵機控制
{
PWM=1;
delay(m); //改變m可改變舵機轉向角度,
PWM=0;
}
void check_stop()//檢測終點線,我用十三個對管,八個管停車狀態自己分析
{
uchar start_flag;
if((le3&&le4)&&(!le1&&!le6)&&mid&&(ri3&&ri4)&&(!ri1&&!ri6))
start_flag=1;
else if((le2&&le3)&&!le5&&(le6&&mid)&&(ri3&&ri4)&&(ri1&&ri6))
start_flag=1;
else if((le2&&le3)&&le6&&(!le5&&!mid)&&(ri3&&ri4)&&(ri1&&ri6))
start_flag=1;
else if((le2&&le3)&&!le4&&(le5&&le6)&&!mid&&(ri5&&ri4)&&ri1)
start_flag=1;
else if((le2&&le3)&&(!le4&&!le6)&&le5&&!mid&&!ri4&&(ri1&&ri2))
start_flag=1;
else if(le2&&!le3&&(le4&&mid)&&(le5&&le6)&&(ri1&&ri2))
start_flag=1;
else if((le3&&le4)&&le6&&(ri6&&mid)&&(ri2&&ri3)&&!ri5)
start_flag=1;
else if((le5&&le4)&&(!le1&&!mid)&&ri6&&(ri2&&ri3)&&!ri5)
start_flag=1;
else if((le5&&le6)&&(!le1&&!le2)&&ri5&&ri2&&!ri4)
start_flag=1;
else if((le5&&le4)&&(!le1&&!le2)&&(!mid||!ri6)&&ri5&&(ri1&&ri2)&&!ri4)
start_flag=1;
else start_flag=0;
if(start_flag)
{
count++;
delay2(50);
if (count==1)

else if(count==2)

else if(count==3)
{
count=0;
finish=1;
P0=0xa4;//加led顯示只是為了方便調試,兩圈之後停車
}
else
finish=0;
}
if(finish)
{
ENA=0;
TR1=0;//關定時器1,驅動電機停轉
}
}
void xunji()//循跡函數,讀取光電管狀態
{
if(!le1&&!le2&&!le3&&!le4&&!le5&&!le6&&mid&&!ri6&&!ri5&&!ri4&&!ri3&&!ri2&&!ri1)
{
dj(109);
hhig(39);
}
else if(le6&&mid&&!ri6&&!ri5&&!ri4&&!ri3&&!ri2&&!ri1)
{
dj(114);
hhig(35);
}


。//分析八個光電管狀態,看你的電路檢測到黑線輸出1或者是0
else
{
dj(109);//舵機歸中
hhig(25);
}
}
void main()
{
init();
while(1)
{
check_stop();
if(bz==0)//檢測到障礙,。。。
{
back(18);
}
}

}
void timer0() interrupt 1//產生pwm信號控制舵機,周期20ms
{
TH0=0xb1;
TL0=0xe0;
xunji();
}
void timer1() interrupt 3//產生pwm信號控制驅動電機速度
{
TH1=(65536-100)/256;
TL1=(65536-100)%256;
i++;
if(i<=pro)
{
ENA=1;
}
else
{
ENA=0;
}
if(i==40)
{
ENA=~ENA;
i=0;
}
}

閱讀全文

與不會編程如何製作自動避障小車相關的資料

熱點內容
python代碼過長換行 瀏覽:697
歐冠直播哪個app畫質最清楚 瀏覽:225
iphone6備份密碼 瀏覽:365
微信打碼賺錢安卓軟體 瀏覽:608
蘋果官換機買什麼版本 瀏覽:979
visio數據模型怎麼用 瀏覽:179
關於駕駛的app 瀏覽:92
多線程編程有什麼特點 瀏覽:453
iso文件系統 瀏覽:116
蘋果932攔截騷擾電話 瀏覽:765
盲盒開箱app有哪些 瀏覽:422
win10激活腳本之家 瀏覽:191
魔鬼作坊工具包 瀏覽:185
ae源文件下載 瀏覽:520
如何將照片內容轉換成pdf文件 瀏覽:137
浙里辦app如何更換手機號碼 瀏覽:244
電子資料文件有哪些 瀏覽:241
猥瑣貓表情教程 瀏覽:599
android音頻文件格式 瀏覽:458
漫畫臉app哪裡可以下載 瀏覽:959

友情鏈接