最近鄙人學單片機一直想嘗試做東西實踐一下,于是就決定做一個常見的智能小車,用兩個紅外對管模塊和超聲波傳感器簡單做了避障的功能,但是就出現了問題,程序修改了幾次,也找同學一起研究了一下,還是想不到為啥,還望各位大佬指點迷津~
1.我用的紅外對管模塊,感覺這個模塊不怎么好,電壓5V電位調到最大,靈敏度只有12cm左右,大佬們都用過哪些更好的類似模塊?
2.運行程序之后,小車遇到障礙會停下轉彎,但是會有這種情況,前方明明沒有障礙,小車前進(0~兩三米)就會自動轉彎,這個問題讓我很糾結
IMG_7227.JPG (2.1 MB, 下載次數: 40)
下載附件
2018-10-23 21:22 上傳
單片機源碼:
- #include<reg52.h>
- #define uc unsigned char
- #define ui unsigned int
- sbit IN1=P2^1; //L298N
- sbit IN2=P2^2;
- sbit IN3=P2^3;
- sbit IN4=P2^4;
- sbit ENA=P2^0;
- sbit ENB=P2^5;
- ui count1=50,count2=50,time;
- ui timer,date;
- sbit trig=P3^7; //超聲波
- sbit echo=P3^6;
- sbit leftled=P3^5;
- sbit rightled=P3^4;
- void delay(ui i) //延時函數
- {
- while(i--);
- }
- void init0() //定時器0初始化,用于輸出PWM
- {
- TMOD = 0x01;
- TH0 = (65536 - 10)/256;
- TL0 = (65536 - 10)%256;
- TR0 = 1;
- EA = 1;
- ET0 = 1;
-
- }
- void init1() //定時器1初始化,用于超聲波測距
- {
- TMOD=0X01;
- TH1=0x00;
- TL1=0x00;
- }
- void super_start() //超聲波發送信號
- {
- trig=1;
- delay(10);
- trig=0;
- }
- void super_count() //計算距離
- {
- timer=TH1*256+TL1;
- TH1=0x00;
- TL1=0x00;
- date=(timer*1.7)/100;
-
- }
- void cargo() //小車前進
- {
復制代碼
|