手把手教做智能小车
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
手把手教做智能小车
我们学习完51单片机入门之后,一定要多做一些有意思的小制作,才能将单片机知识理解的更加深刻,而智能小车不失为一个不错的选择,今天将全程介绍智能小车的制作过程。一般而言,常见的智能小车分为:蓝牙遥控、超声波避障、光电寻迹等。这次主要介绍蓝牙遥控和超声波避障。
1.蓝牙遥控小车1.1功能要求使用手机串口软件和小车上
的蓝牙芯片进行通信,控制小车转向、前进、后退、停止、启动等。1.2元器件准备STC89C52单片机一片(其他型号的51同样可以,注意要有配套的下载器或者开发板,下载程序比较方便);L298N驱动模块两个;亚克力板车架一个(淘宝有卖,配有电机、轮胎);蓝牙模块一个(型号HC06);电池盒、电池(建议两节18650电池);杜邦线若干;上述所有的原材料淘宝均有卖,请自行选购。1.3小车拼装购买齐备上述原材料之后,可以查看卖家提供的说明或者相应芯片的Datasheet,并使用杜邦线将各部分电路连接起来。既然选择学习单片机和电子制作,就要有一定的探索精神和钻研精神,小车拼装过程比较简单,就不再一一赘述,拼装完如下:这是我几年之前做的,比较简陋,刚开始使用的是四节小电池,动力不够强劲,后来改成两节18650就跑的飞起。1.4程序设计部分小车的基本功能要求
有了,主体也实现了,接下来当然是程序设计了。下面以STC89C52单片机为例,以KEIL2为开发软件,程序如下,比较简单,自行理解:#includesbit IN1=P1^0;sbit
IN2=P1^1;sbit IN3=P1^2;sbit IN4=P1^3;sbit IN5=P1^4;sbit IN6=P1^5;sbit IN7=P1^6;sbit IN8=P1^7;#define left_go {IN1=1,IN2=0,IN3=1,IN4=0;}//P1:0-3控制左边#define
left_back {IN1=0,IN2=1,IN3=0,IN4=1;}#define left_stop {IN1=0,IN2=0,IN3=0,IN4=0;}#define right_go
{IN5=1,IN6=0,IN7=1,IN8=0;}//P1:4-7控制右边#define right_back {IN5=0,IN6=1,IN7=0,IN8=1;}#define right_stop {IN5=0,IN6=0,IN7=0,IN8=0;}#define uchar unsigned
char#define uint unsigned intvoid run();void backrun();void leftrun();void rightrun();void stoprun();void delay(uchar time);void init();uchar flag,com;void main(){ init(); while(1) { if(flag==1) { switch(com) { case 1: run(); break; case 2: backrun(); break; case 3: leftrun(); break; case 4: rightrun(); break; case 5: stoprun(); break; default: break; } }
RI=1; }}void init(){ TMOD=0x20; TH1=0xfd; TL1=0xfd;
TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1;
flag=0;}void run(){ left_go; right_go;}void
backrun(){ left_back; right_back;}void leftrun(){ left_back; right_go;}void rightrun(){ left_go; right_back;}void
stoprun(){ left_stop; right_stop;}void ser() interrupt 4{ RI=0; com=SBUF; flag=1;} 几年前初学单片机写的C51程序,献丑了!1.5 完成至此,蓝牙小车就初步完成,在网上找一个串口软件,连上小车上的蓝牙芯片,就可以实现相应的功能。
2.超声波避障小车超声波避障小车的构造基本和蓝牙小车一样,就是需要添加超声波模块,具体用的是HC-SR04,按照说明文档,连接到单片机上,拆掉蓝牙模块。程序如下:#includesbit IN1=P1^0;//P1口控制直流电机sbit
IN2=P1^1;sbit IN3=P1^2;sbit IN4=P1^3;sbit IN5=P1^4;sbit IN6=P1^5;sbit IN7=P1^6;sbit IN8=P1^7;sbit ENA=P2^1;//
使能左右电机sbit ENB=P2^2;sbit ENC=P2^3;sbit
END=P2^4;sbit trig=P0^1;sbit echo=P0^2;#define left_go {IN1=1,IN2=0,IN3=1,IN4=0;}//P1:0-3控制左边#define
left_back {IN1=0,IN2=1,IN3=0,IN4=1;}#define left_stop {IN1=0,IN2=0,IN3=0,IN4=0;}#define right_go
{IN5=1,IN6=0,IN7=1,IN8=0;}//P1:4-7控制右边#define right_back {IN5=0,IN6=1,IN7=0,IN8=1;}#define right_stop {IN5=0,IN6=0,IN7=0,IN8=0;}#define enable
{ENA=1,ENB=1,ENC=1,END=1;}//使能端#define disable {ENA=0,ENB=0,ENC=0,END=0;}//停止使能#define uchar unsigned char#define uint unsigned intvoid run();void backrun();void leftrun();void rightrun();void stoprun();void