WIFI遥控小车论文报告.docx
《WIFI遥控小车论文报告.docx》由会员分享,可在线阅读,更多相关《WIFI遥控小车论文报告.docx(47页珍藏版)》请在冰豆网上搜索。
WIFI遥控小车论文报告
中国地质大学(武汉)大学生
科研立项报告
项目名称基于手机WIFI技术的遥控小车
项目负责人
所在学院机械与电子信息学院
参加人员
联系电话
指导老师
中国地质大学(武汉)机电学院
二O一二年十月
引言……………………………………………………………………2
1设计任务及要求……………………………………………………3
1.1设计任务与要求----------------------------------------------------3
2系统总体设计………………………………………………………4
2.2总体框图--------------------------------------------------------------------------------------------5
3系统硬件设计………………………………………………………6
3.1手机端设计--------------------------------------------------6
3.1.1手机选择-----------------------------------------------------------6
3.1.2手机端软件开发环境-------------------------------------------------7
3.2小型路由器选择-----------------------------------------------------7
3.3单片机电路--------------------------------------------------7
3.3.1单片机选择---------------------------------------------------------8
3.3.2晶振选择----------------------------------------------------------10
3.3.3软件设计----------------------------------------------------------12
3.4显示系统---------------------------------------------------13
3.5电机驱动模块------------------------------------------------15
3.6电机-------------------------------------------------------15
3.7电源设计----------------------------------------------------15
4结束语………………………………………………………………20
附录
附录1部分电路原理图-------------------------------------------22
附录2液晶驱动程序---------------------------------------------23
附录3电机驱动程序---------------------------------------------25
附录4单片机主函数---------------------------------------------27
附录5手机端软件源代码-----------------------------------------27
引言:
智能手机现在已经全方位的进入了我们的生活,说到智能手机不得不提及他们操作系统的龙头的Android。
由于安卓操作系统的实际性和可操作性使得安卓迅速成为现在主流操作系统的原因,此外安卓的最大优点是开源,这样对于安卓软件的开发就没有了限制,使得用户可以用到广泛的免费软件,这样安卓软件的开发就有了空前的市场,安卓开发迎来了一轮热潮。
因为系统的开源性与可操作性,同时系统的流畅性以及大量的亲民化的可选择的设备,使得安卓系统在智能手机市场上占了头把交椅。
根据市场研究机构ComScore发布的最新调查显示,Android智能手机在美国的优势进一步扩大,市场份额达到43.7%,因此我们小组的基于安卓手机wifi技术的遥控小车有着广大的潜在用户,2011年11月数据,Android占据中国智能手机操作系统市场58%,其应用领域和市场份额也在急速向平板电脑、消费电子、智能家电领域扩张。
目前基于Android手机和WIFI技术开发的娱乐软件较多,而控制机电产品的软件和专利相对较少。
我们小组设计的“基于手机WIFI技术的遥控小车”将是以手机作为手持终端,通过WIFI传输指令的新型玩具小车,由于遥控器是手机,因此携带极其方便。
基于WIFI的控制系统不仅可以控制小车,稍做改动就可用来控制电脑、家用电器甚至探测、排爆机器人等,同时也可用于地质检测设备的手持终端。
因此,该项目的成果将不仅仅局限于一个遥控小车,更具有价值的是手机远程控制系统。
1设计任务及要求
1.1设计任务与设计要求
本课题要求利用基于Android(安卓)手机系统开发一个控制软件,该软件将实现用WIFI技术对玩具小车进行遥控控制,包括小车前进、后退、转弯等功能。
(1)实现手机与小车WIFI连接;
(2)能够通过手机对小车进行实时控制。
1.2设计时要考虑的问题
a、由于该课题的小车端是通过单片机串口通信接收收手机是控制指令,因此需要对单片机定时器初值进行设置,若采用常用12M晶振,初值不一定是整数,通信时便会产生积累误差,进而产生波特率误差,影响通信的同步性。
采用11.0592M晶振可以得到非常准确的数值,因此在制作过程中最好采用11.0592M或其整数倍的晶振。
我们采用的波特率为4800。
b、小车电机启动时电流较大,可能会将电源的电压瞬间拉低,导致单片机和路由器不能正常工作,因此必须设计一个可靠的供电系统。
c、由于Android系统所有源代码都已公开并且可以免费使用,各手机公司在开发自己产品时可以随意改动代码,进而在市场上出现了所谓的“基于Android的···改良系统”手机,这些手机对安卓手机软件兼容性有所差异,因此必须选择“安卓原版”的手机开发软件,我们采用了“安卓4.0”版本的操作系统。
d、由于单片机IO口电流为mA级,无法直接驱动电机,必须设计专门的电机驱动模块。
2系统总体设计
2.1方案论证
要实现手机通过WIFI控制小车,有两种方案可以实现:
方案一:
通过SIM卡来实现。
系统框图如下图所示:
转化为串口指令
方案二:
通过小型路由器来实现。
该方案是在小车端安装一个小型路由器,是小车周围一定范围具有WIFI覆盖,然后将手机连接到路由器IP地址,对其发送指令,路由器接收指令后对单片机串口发送数据指令,实现控制。
系统框图如下:
转化为串口指令
通过比较以上两种方案。
方案一虽然可以实现小车超远程控制,但开发成本较高,相对于大一学生来说技术难度较大,而且控制过程要消耗上网流量。
而方案二则相对简单,开发难度较低,适合制作玩具小车,因此我们选择了方案二。
2.2总体设计框图
遥控小车系统总框图如下所示
串口通信
3系统硬件设计
系统的硬件框图如图所示,包括六个部分组成。
下面将分别介绍该六个单元。
3.1手机端设计
3.1.1手机选择
由于安卓系统的极速发展,现在安卓智能机的价格已经能降到600元以下,基于安卓的应用软件层出不穷。
由于安卓系统所有源代码都已公开并且可以免费使用,各手机公司在开发自己产品时可以随意改动代码,进而在市场上出现了所谓的“基于Android的···改良系统”手机,源代码的改动会影响手机对安卓软件的兼容性,增大开发难度,因此必须选择“安卓原版”的手机开发软件,我们采用了“安卓2.3.3”版本的操作系统。
3.1.2手机端软件开发环境
Google公司提供的AndroidSDK中包括模拟硬件设备的Emulator,资源打包工具,调试监视服务,DX工具等。
Android应用程序使用Java语言编写,而使用Java必须有JDK,需要下载和安装JDK,如IBM公司的Eclipse平台。
可以使用AVD在电脑上模拟一个虚拟的真实设备,可以由用户自己配置硬件配置,版本的选择,设备的屏幕尺寸大小等。
通过Eclipse插件ADT便可以方便的创建一个Android应用。
3.2小型路由器选择
目前,专门用于制作WIFI小车的小型无线路由器可以再淘宝网上买到,已经刷有OP系统,安装好摄像头的驱动程序,安装路由与单片机通信的数据包,同时还带有上位机调试软件。
此外还带有相应的开发例程,方便用户使用,使用时只要参考他的例程编写单片机程序即可。
3.3单片机电路
3.3.1单片机选择
在这里,单片机要实现对电机驱动模块的控制,同时还要有路由器进行串口通信,为了能够控制电机转速,可以使用单片机的定时器来实现,利用单片机定时器功能控制IO口产生PWM波,通过调节占空比里调节电机转速。
考虑到单片机要实现以上功能,选择使用STC89C52来构成电路。
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
此外,STC89C52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
该单片机主要特性:
•8031CPU与MCS-51兼容
•8K字节可编程FLASH存储器(寿命:
1000写/擦循环)
•全静态工作:
0Hz-24KHz
•三级程序存储器保密锁定
•128*8位内部RAM
•32条可编程I/O线
•两个16位定时器/计数器
•6个中断源
•可编程串行通道
•低功耗的闲置和掉电模式
•片内振荡器和时钟电路
单片机TX\RX与路由器相连,P1.0~P1.5与电机驱动模块相连。
单片机的P3.4,P3.5口接到液晶屏的控制端,P1口接到液晶屏数据口。
设置定时/计数器0工作方式为16位计数器,并对中断做出定义。
其电路如下所示:
3.3.2晶振选择
由于该课题的小车端是通过单片机串口通信接收收手机是控制指令,因此需要对单片机定时器初值进行设置,若采用常用12M晶振,初值不一定是整数,通信时便会产生积累误差,进而产生波特率误差,影响通信的同步性。
采用11.0592M晶振可以得到非常准确的数值,因此在制作过程中最好采用11.0592M或其整数倍的晶振。
3.3.3软件设计
单片机应用系统设计与一般电子系统设计的差别在于,它既要构成硬件逻辑电路,也要设计相应的支持软件。
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,该系统全WINDOWS界面且库函数丰富,调试功能强大、生成代码率很高。
本程序的主要思路是,利用单片机的计数器计时,控制IO口产生PWM波用于控制电机转速。
利用P0口控制1602液晶显示。
其控制流程大致如下如所示:
否
是
否
是
3.4显示系统
显示系统既可以选择使用LED,也可以选择使用LCD。
就本系统的功能来说,使用LED已经可以实现功能,不过考虑到使用LCD,可以输出英文字符,从而使得显示系统能够更加美观,同时也能更好的达到提高自己的目的,所以最后选择使用液晶屏LCD。
由于本次设计所要显示的内容不多,并不需要太大的液晶屏来显示。
所以选择使用1602来进行显示。
1602液晶每次可以显示2行16个字符,总共32个字符,而且可以显示所有的ASCII码,包括标点,数字,英文大小写等,因此,使用该液晶屏可以很好的实现显示功能。
1602显示屏的主要技术指标如表3.4所示。
表3.41602液晶显示屏的主要技术指标
LCD1620显示容量:
16X2个字符
芯片工作电压:
4.5-5.5V
工作电流:
2.0mA(5V)
最佳工作电压:
5V
字符尺寸:
2.95X4.35(WXH)mm
1602液晶显示屏共有16个引脚,其各个引脚的功能如下表,表3.5中所示。
表3.51602液晶显示屏的各个引脚功能
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
DATAI/O
2
VDD
电源正极
10
D3
DATAI/O
3
VL
液晶显示偏压信号
11
D4
DATAI/O
4
RS
数据命令选择端(H/L)
12
D5
DATAI/O
5
R/W
读写数据端(H/L)
13
D6
DATAI/O
6
E
使能信号
14
D7
DATAI/O
7
D0
DATAI/O
15
BLA
背光源正极
8
D1
DATAI/O
16
BLK
背光源负极
使用1602,所设计的显示电路部分如下图所示:
3.5电机驱动模块
由于小车底盘电机额定电压为12V,度电机驱动模块选择了常用12V电机驱动芯片L298N。
L298N恒压恒流桥式2A驱动芯片,L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7V电压。
4脚VS接电源电压,VS电压范围VIH为+2.5~46V。
输出电流可达2.5A,可驱动电感性负载。
1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。
L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动。
3.6电机
12V138rpm直流电机
3.7电源设计
小车电机启动时电流较大,可能会将电源的电压瞬间拉低,导致单片机和路由器不能正常工作,因此必须设计一个可靠的供电系统。
解决该问题常用以下三种方法:
1)、选用性能更好的的电源:
2)、采用独立电源供电,即使用两个电源分别给单片机和电机供电;
3)、在电源附近并联一个较大值的电容,当电机启动时,电流较大,电容中的电可以补偿一部分电流,保证电压不至于太低。
以上三种方案中,方案1)成本过高,方案2)电路繁琐,均不适合小型设备的应用,所以我们选择了方案3)。
4结束语
该项目的独特创新之处在于小车的控制是通过手机来实现,而不是遥控手柄或电脑,从而使用更加方便,实现用WIFI技术对玩具小车进行遥控控制,包括小车前进、后退、转弯等功能。
该项目开发的Android软件和基于WIFI的控制系统不仅可以控制小车,稍做改动就可用来控制电脑、家用电器甚至探测、排爆机器人等,同时也可用于地质检测设备的手持终端。
因此,该项目的成果将不仅仅局限于一个遥控小车,更具有价值的是手机远程控制系统。
如今国外的几家公司推出了基于苹果手机控制航模和玩具赛车的产品。
目前基于Android手机和WIFI技术开发的娱乐软件较多,而控制机电产品的软件和专利相对较少。
2011年11月数据,Android占据中国智能手机操作系统市场58%,其应用领域和市场份额也在急速向平板电脑、消费电子、智能家电领域扩张。
WIFI具有较强的数据传输能力,普通智能手机完全能达到1M/S以上的速度。
因此,今后在此方面的的研究一定会大大增加,具有很好的实用价值。
参考文献
1.郭天祥《51单片机c语言教程》2009.1
2.张勇夏家莉等人《GoolgeAndroid开发技术》2011.10
3郭宏志《Android应用开发详解》2011.8
4(美)昊斯特曼著,叶乃文,邝劲筠,杜永萍译《java核心技术卷1-基础知识》2008.6
附录
附录1部分电路原理图
1602液晶显示单片机最想系统
电机驱动模块
电源模块
附录2液晶驱动程序
#defineucharunsignedchar
#defineuintunsignedint
sbitlcden=P3^4;
sbitlcdrs=P3^5;
sbitwela=P2^7;
sbitdula=P2^6;
uintnum;
ucharcodetable1[]="IAMWIFICAR";
ucharcodetable2[]="RX00000";
voidinit();
voiddelay(z);
voidwrite_com(com);
voidwrite_date(date);
voidwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidlcd_init()
{
charnum;
wela=0;
dula=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<13;num++)
{
write_date(table1[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<11;num++)
{
write_date(table2[num]);
delay(5);
}
write_com(0x0c);
}
voidwrite_date(uchardate)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voiddelay(intz)
{
intx,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--);
}
}
voidprint(ucharadd,uchardate)
{
write_com(0x80+0x40+add);
write_date(date);
}
附录3电机驱动程序
#defineucharunsignedchar
#defineuintunsignedint
/*********L298N**************/
sbitLEFT_IN1=P1^3;//左边电机
sbitLEFT_EN=P1^4;
sbitLEFT_IN2=P1^5;
sbitRIGHT_IN1=P1^0;//右边电机
sbitRIGHT_EN=P1^1;
sbitRIGHT_IN2=P1^2;
/**************PWM定义产生****************/
#definePWM_PERIOD100
ucharPWM_COUNTER=0;//pwm产生周期100*100us
ucharLEFT_PWM_DUTY=50;//左边电机占空比
ucharRIGHT_PWM_DUTY=50;//右边电机占空比
/************延时10us级**************/
voidDelay_10Us(uintus)
{
while(us--);
}
/************延时ms级*************/
voidDelayMs(uintms)
{
unsignedinti,j;
for(i=0;ifor(j=115;j>0;j--);
}
/**************************************************************
内部资源初始化
*******************************************************************/
voidmotor_init()
{
TMOD=0x22;//设定T1的工作模式为1:
16bit计数模式,设定T0的工作模式为2:
8bit重装初值模式
TH0=0x9c;//100us定时2^8-100=156=9cH
TL0=0x9c;
IP=0x03;//中断优先级:
定时器0,外部中断0优先
EA=1;//开总中断
EX1=1;//打开外部中断1
ET0=1;//定时器0允许中断
TR0=1;//启动定时器0
}
/***********定时器0中断服务函数**************
函数功能:
输出PWM波
******************************************/
voidTimer0(void)interrupt1
{
PWM_COUNTER++;
if(PWM_COUNTER{
if(PWM_COUNTER>LEFT_PWM_DUTY)LEFT_EN=0;
if(PWM_COUNTER>RIGHT_PWM_DUTY)RIGHT_EN=0;
}
else
{
PWM_COUNTER=0;
LEFT_EN=1;
RIGHT_EN=1;
}
}
/*************前进****************/
voidGoHead(ucharspeed_left,ucharspeed_right)
{
LEFT_IN1=1;
LEFT_IN2=0;
RIGHT_IN1=1;
RIGHT_IN2=0;
LEFT_PWM_DUTY=speed_left;
RIGHT_PWM_DUTY=speed_right;//走直线占空比校正