循迹小车基本思路
1)基本车架:两个直流减速电动机;万向轮一个;模板一块;
2)基本模块:7.2V电源一块;输出为5V的稳压模块一个;单片机最小系统主控模块;L298电机驱动;光电传感器4个。
3)黑线循迹。
4)组装车型:
5)L298驱动内部电路:
6)调试程序:另附~。
#include<reg52.h>
7)#define uchar unsigned char
8)#define uint unsigned int
9)sbit PWM1=P1^0; //电机使能10)sbit PWM2=P1^1;
11)sbit IN1=P1^2; //电机输入控制12)sbit IN2=P1^3;
13)sbit IN3=P1^4;
14)sbit IN4=P1^5;
15)sbit RP1=P2^0; //传感器管脚声明16)sbit RP2=P2^1;
17)sbit RP3=P2^2;
18)sbit RP4=P2^3;
19)int num1,num2,s1,s2;
20)
21)void init()
22){
23)TMOD=0x01;
24)TH0=(65536-1000)/256;
25)TL0=(65536-1000)%256; 26)ET0=1;
27)EA=1;
28)TR0=1;
29)}
30)void delay(uint z)
31){
32)uint x,y;
33)for(x=z;x>0;x--)
34){for(y=110;y>0;y--);} 35)}
36)void forward1()//电机前进37){
38)IN1=0;
39)IN2=1;
40)}
41)void forward2()
42){
43)IN3=0;
44)IN4=1;
45)}
46)void back1() //电机后退47){
48)IN1=1;
49)IN2=0;
50)}
51)void back2()
53)IN3=1;
54)IN4=0;
55)}
56)void speed(num1,s1,num2,s2)//速度控制pwm; 57){
58)if(num1<s1)
59){PWM1=1;}
60)else
61){PWM1=0;}
62)if(num2<s2)
63){PWM2=1;}
64)else
65){PWM2=0;}
66)}
67)void turn(num1,s1,num2,s2)
68){
69)forward1();
70)forward2();
71)speed(num1,s1,num2,s2);
72)}
73)void back(num1,s1,num2,s2)
75)back1();
76)back2();
77)speed(num1,s1,num2,s2);
78)}
79)void kongzhi()
80){
81)if(RP1==1&&RP2==0&&RP3==1&&RP4==1) //微右偏82){forward1();forward2();speed(num1,2,num2,7);} 83)if(RP1==0&&RP2==1&&RP3==1&&RP4==1)//微左偏84){forward1();forward2();speed(num1,6,num2,5);}
85)if(RP1==0&&RP2==0&&RP3==0&&RP4==1)//左偏86){forward1();forward2();speed(num1,4,num2,8);}
87)if(RP1==0&&RP2==0&&RP3==1&&RP4==0) //右偏88){forward1();forward2();speed(num1,7,num2,5);}
89)if(RP3==1&&RP4==1&&RP1==0&&RP2==0) //直道90){forward1();forward2();speed(num1,9,num2,8);} 91)}
92)void main()
93){
94)init();
95)while(1)
97)kongzhi();
98)if(RP1==1&&RP2==0&&RP3==0&&RP4==0)
99){forward1();forward2();speed(num1,7,num2,4);}
100)if(RP1==1&&RP2==1&&RP3==0&&RP4==1)//dayou 101){forward1();forward2();speed(num1,10,num2,3);delay(100);} 102)if(RP1==0&&RP2==0&&RP3==0&&RP4==0)
103){forward1();forward2();speed(num1,10,num2,3);delay(100);} 104)if(RP1==1&&RP2==1&&RP3==1&&RP4==0)
105){forward1();forward2();speed(num1,10,num2,3);delay(100);} 106)/* if(RP1==1&&RP2==1&&RP3==1&&RP4==0)
107)
//{forward1();forward2();speed(num1,10,num2,15);delay(500);}
108)if(RP1==1&&RP2==1&&RP3==1&&RP4==0)
109){forward1();forward2();speed(num1,10,num2,6);delay(1000);} 110)if(RP1==1&&RP2==0&&RP3==1&&RP4==0)
111){forward1();forward2();speed(num1,10,num2,6);delay(1000);} */ 112)}
113)}
114)void time0()interrupt 1
115){
116)TH0=(65536-1000)/256;
117)TL0=(65536-1000)%256; 118)num1++;
119)num2++;
120)if(num1>=20)
121){num1=0;}
122)if(num2>=20)
123){num2=0;}
124)}
125)
126)。