收藏 分销(赏)

基于手机蓝牙的遥控小车的设计与制作.doc

上传人:精**** 文档编号:3992654 上传时间:2024-07-24 格式:DOC 页数:15 大小:78.04KB
下载 相关 举报
基于手机蓝牙的遥控小车的设计与制作.doc_第1页
第1页 / 共15页
基于手机蓝牙的遥控小车的设计与制作.doc_第2页
第2页 / 共15页
基于手机蓝牙的遥控小车的设计与制作.doc_第3页
第3页 / 共15页
基于手机蓝牙的遥控小车的设计与制作.doc_第4页
第4页 / 共15页
基于手机蓝牙的遥控小车的设计与制作.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、南华大学电气工程学院 通信原理课程设计任务书设计题目:基于手机蓝牙的遥控小车的设计与制作专 业:电子信息工程学生姓名: 陈鹏 学 号:20124470115学生姓名: 唐愉晶学 号:20124470107学生姓名: 任凯学 号:20124470122学生姓名: 赵江哲学 号:20124470125学生姓名: 陈熙学 号:20124470120学生姓名: 陈方方学 号:20124470105起迄日期: 2015年5月5日指导教师: 李圣副教授系主任: 陈忠泽教授通信原理课程设计任务书1课程设计的内容和要求(包括原始数据、技术要求、工作要求等):(1)技术要求:设计和制作基于手机蓝牙遥控小车行走的

2、系统。手机蓝牙作为客户端、制作小车的蓝牙模块,并将之作为服务端。客户端采用Eclipse开发环境,J2ME编程,服务端采用单片机控制。双方通过串口仿真协议进行通信,单片机驱动直流电机控制小车的前进、倒退,转向和停止的动作。(2)工作要求:查阅参考文献,利用通信原理基本理论,分析系统工作原理,设计系统方框图;掌握计算机辅助设计方法, 熟悉通信系统的利用Multisim等EDA软件进行仿真设计,具备独立设计能力;调试和测量方法;掌握电子电路安装调试技术,选择合适的元器件搭接实际电路,掌握电路的测试和故障排除方法,提高分析问题和解决问题的能力。2对课程设计成果的要求包括图表(或实物)等硬件要求:设计

3、系统方框图,对系统方框图进行仿真,分析实验结果。撰写设计说明书,书写格式规范,语言流畅简洁,文字不得少于3000字。要求图表清晰,分析通彻,有理有据。3主要参考文献:1樊昌信。通信原理(第6版)M。北京:电子工业出版社,2012,12.2樊昌信,曹丽娜。通信原理教程(第3版)M。北京:国防工业出版社,2006,9.3刘学勇。详解MATLAB/Simulink通信系统建模与仿真M.北京:电子工业出版社,2011,11.4张水英,徐伟强。通信原理及MATLAB/Simulink仿真M。北京:人民邮电出版社,2012,9。5赵鸿图,茅艳.通信原理MATLAB仿真教程M。北京:人民邮电出版社,2010

4、,11。6赵静,张瑾.基于MATLAB的通信系统仿真M.北京:北京航空航天大学出版社,2010,1。7赵谦。通信系统中MATLAB基础与仿真应用M.西安:西安电子科技大学出版社,2010,3。8段吉海,黄智伟。 基于CPLD/FPGA的数字通信系统建模与设计M.北京:电子工业出版社,2004,8.9赵全利,肖兴达. 单片机原理及应用教程M。北京: 机械工业出版,2007, 6。10金纯,林金朝. 蓝牙协议及其源代码分析M。北京: 国防工业出版社,2006, 6.11黄智伟.基于NI Multisim的电子电路计算机仿真设计与分析(修订版)M。北京:电子工业出版社,2011, 6。12孙屹,戴妍

5、峰。 SystemView通信仿真开发手册M。北京:国防工业出版社,2004,11。13刘斌.JavaME使用详解用Eclipse进行移动开发M.北京: 电子工业出版社,2007,2.4课程设计工作进度计划:序号起 迄 日 期工 作 内 容12015。5。5系统方案设计22015。5。10利用EDA软件进行仿真设计,软件设计32.15。6.1硬件设计、调试和测量,排除故障,分析实验结果42015。6。25整理设计报告指导教师李圣日期: 2015年5月5日附件:通信原理课程设计设计说明书格式一、纸张和页面要求A4纸打印;页边距要求如下:页边距上下各为2.5 厘米,左右边距各为2.5厘米;行间距取

6、固定值(设置值为20磅);字符间距为默认值(缩放100,间距:标准).二、说明书装订页码顺序(1)任务书 (2)论文正文 (3)参考文献,(4)附 录三、课程设计说明书撰写格式 见范例范例引言 (黑体四号)(首行缩进两个字,宋体小四号)1(黑体四号)正文(首行缩进两个字,宋体小四号)1.1(空一格)(黑体小四号)正文(首行缩进两个字,宋体小四号)1。2 、正文(首行缩进两个字,宋体小四号)2 (黑体四号)正文(首行缩进两个字,宋体小四号)2。1 、, (黑体小四号)正文(首行缩进两个字,宋体小四号)2。1。1,, (楷体小四号)正文(首行缩进两个字,宋体小四号)(1)图1。 工作波形示意图(图

7、题,居中,宋体五号)5结论(黑体四号)(首行缩进两个字,宋体小四号)参考文献(黑体四号、顶格)参考文献要另起一页,一律放在正文后,不得放在各章之后。只列出作者直接阅读过或在正文中被引用过的文献资料,作者只写到第三位,余者写“等”,英文作者超过3人写“et al。几种主要参考文献著录表的格式为:专(译)著:序号著者。书名(译者)M。出版地:出版者,出版年:起止页码。期刊:序号著者.篇名J。刊名,年,卷号(期号):起止页码.论文集:序号著者。篇名A编者。论文集名C 。出版地:出版者,出版者.出版年:起止页码。学位论文:序号著者.题名D .保存地:保存单位,授予年.专利文献:专利所有者。专利题名P

8、。专利国别:专利号,出版日期.标准文献:序号标准代号标准顺序号发布年,标准名称S 。报 纸:责任者。文献题名N.报纸名,年-月-日(版次)。附 录(居中,黑体四号)(首行缩进两个字,宋体小四号)(另起一页。附录的有无根据说明书(设计)情况而定,内容一般包括正文内不便列出的冗长公式推导、符号说明(含缩写)、计算机程序、整体仿真原理图、系统仿真结果图等.引言本设计是基于手机蓝牙的遥控小车的设计与制作,蓝牙选择的是android手机的蓝牙,使用的是Eclipse + androidSDK IDE开发环境,使用JAVA语言进行开发。小车的控制是基于STM32控制器,通过串口接收指令来完成相应的控制。1

9、 手机蓝牙软件设计1.1 简介蓝牙:是一种无线技术标准,可实现固定设备,移动设备和楼宇个人域网之间的短距离数据交换(使用2.4-2。485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由爱立信公司于1994年创立,当时是作为RS232数据线的无线替代方案,蓝牙可连接多个设备,克服了数据同步的难题。1.2 通信协议电缆替代协议(RFCOMM)RFCOMM是基于ETSI-07。10规范的串行线仿真协议.它在蓝牙基带协议上仿真RS232控制和数据信号,为使用串行线传送机制的上层协议提供服务。点对点协议(PPP)在蓝牙技术中,PPP位于PFCOMM上层,完成点对点的连接。1.3 基于android

10、手机的蓝牙设计对android操作系统,在进行蓝牙开发之前需要先获得蓝牙权限。方法为在AndroidManifest.xml文件中添加 usespermissio android:name= ”android。permission.BLUETOOTH_ADMIN/ usespermission android:name=android.permission。BLUETOOTH”/然后是对软件界面的开发,使用的是RelativeLayout排布方法;完成图如下UI完成图2STM32串口通信设计2。1简介通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部

11、设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择.它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信.使用多缓冲器配置的DMA方式,可以实现高速数据通信.2.2USART功能概述接口通过三个引脚与其他设备连接在一起(见图248).任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX).RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它

12、的I/O端口配置。当发送器被激活,并且不发送数据时, TX引脚处于高电平.在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。 总线在发送或接收前应处于空闲状态 一个起始位 一个数据字(8或9位),最低有效位在前 0。5, 1。5, 2个的停止位,由此表明数据帧的结束 使用分数波特率发生器 12位整数和4位小数的表示方法。 一个状态寄存器(USART_SR) 数据寄存器(USART_DR) 一个波特率寄存器(USART_BRR), 12位的整数和4位小数 一个智能卡模式下的保护时间寄存器(USART_GTPR)在同步模式中需要下列引脚:CK:发送器时钟输出。此引脚输出用于同步传输的 时

13、钟, (在Start位和Stop位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。数据可以在RX上同步被接收。这可以用来控制带有移位寄存器的外部设备(例如LCD驱动器)。时钟相位和极性都是软件可编程的.在智能卡模式里, CK可以为智能卡提供时钟.在IrDA模式里需要下列引脚:IrDA_RDI: IrDA模式下的数据输入。IrDA_TDO: IrDA模式下的数据输出。下列引脚在硬件流控模式中需要: nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。 nRTS: 发送请求,若是低电平,表明USART准备好接收数据2。3USART编程设计串口设置的一般步

14、骤可以总结为如下几个步骤:1) 串口时钟使能, GPIO 时钟使能2) 串口复位3) GPIO 端口模式设置4) 串口参数初始化5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)6) 使能串口7) 编写中断处理函数其中,中断函数为本设计的关键,我们定义发送的指令以Q结尾,向左转为A,向右转为D,前进为W,后退为S,停止位P,所以下位机的程序流程图为:3系统调试3.1上位机的调试:刚开始时,蓝牙APP发送的数据不对,经过检查,发现回调函数不对,更改后正常了。3.2下位机的调试:下载好程序进行硬件调试,在串口中断中设置了断点,可发现当有数据从手机中发送过来时,下位机程序进不到串口

15、中断中,后来发现原来是串口通信的TX与RX线没有接对,刚开始时是天真的以为是TX与TX相连,RX与RX相连。对调连线后,下位机程序正常了。3。3系统总体调试:一切正常,但由于实验空间有限,车子运行起来容易撞墙,所以后来又自己新添加了一个超声波测距模块,这样便能很好的防止车子很快就被损坏.4总结要有团队合作精神,这次课设能按标准完成就是团队合作很好的表现。做任何事都要细心,特别是对于编程来说,你的任何一个不注意的错误可能会让你查一天都查不出来主要参考文献:1赵全利,肖兴达。 单片机原理及应用教程M。北京: 机械工业出版,2007, 6。2樊昌信.通信原理(第6版)M.北京:电子工业出版社,201

16、2,12.3金纯,林金朝。 蓝牙协议及其源代码分析M.北京: 国防工业出版社,2006, 6。4刘斌。JavaME使用详解用Eclipse进行移动开发M.北京: 电子工业出版社,2007,2。附实物图:附上位机串口中断处理程序:void USART1_IRQHandler(void) /串口1中断服务程序u16 set_speed;u8 Rx_lenth;u8 Res;u8 get_order;#ifdef OS_TICKS_PER_SEC/如果时钟节拍数定义了,说明要使用ucosII了.OSIntEnter(); #endifif(USART_GetITStatus(USART1, USAR

17、T_IT_RXNE) != RESET) /接收中断(接收到的数据是以Q结尾的)Res =USART_ReceiveData(USART1);/(USART1DR);/读取接收到的数据if(Res=Q) Rx_lenth=USART_RX_STA; if(Rx_lenth2) get_order=USART_RX_BUF0; if(get_order=D) if(dir=1830 )dir=5;TIM_SetCompare1(TIM4,dir);else; /left else if(get_order=S) if(speed0)GPIO_ResetBits(GPIOA, GPIO_Pin_4

18、 | GPIO_Pin_5);TIM_SetCompare3(TIM1,speed); TIM_SetCompare4(TIM1,speed);elseGPIO_SetBits(GPIOA, GPIO_Pin_4 | GPIO_Pin_5);set_speed=speed;TIM_SetCompare3(TIM1,set_speed); TIM_SetCompare4(TIM1,set_speed);else; /back else if(get_order=W) if(speed=3099 )speed=500;if(speed0)GPIO_ResetBits(GPIOA, GPIO_Pin

19、_4 GPIO_Pin_5);TIM_SetCompare3(TIM1,speed); TIM_SetCompare4(TIM1,speed);elseGPIO_SetBits(GPIOA, GPIO_Pin_4 GPIO_Pin_5);set_speed=-speed;TIM_SetCompare3(TIM1,set_speed); TIM_SetCompare4(TIM1,set_speed);else; /forward else if(get_order=P) speed=0;GPIO_SetBits(GPIOA, GPIO_Pin_4 GPIO_Pin_5);/急刹TIM_SetCo

20、mpare3(TIM1,3599); TIM_SetCompare4(TIM1,3599); /stop else USART_RX_STA=0;/接收数据错误,重新开始接收 elseUSART_RX_STA=0;/接收数据错误,重新开始接收elseUSART_RX_BUFUSART_RX_STA=Res ;USART_RX_STA+;if(USART_RX_STA(USART_REC_LEN-1))USART_RX_STA=0;/接收数据错误,重新开始接收 附蓝牙程序源码:?xml version=1。0 encoding=”utf8”? ImageButton android:id=”+i

21、d/imageButton2” android:layout_width=”wrap_content android:layout_height=”wrap_content” android:layout_below=”+id/imageButton3 android:layout_toRightOf=+id/imageButton4 android:contentDescription=”string/down android:src=”drawable/ic_down” / ImageButton android:id=+id/imageButton3” android:layout_wi

22、dth=wrap_content” android:layout_height=wrap_content” android:layout_below=+id/imageButton1” android:layout_toRightOf=+id/imageButton2 android:contentDescription=”string/right android:src=”drawable/ic_right” / /RelativeLayout获得本地蓝牙的句柄,从而操作手机的蓝牙设备BluetoothAdapter mBtAdapter = BluetoothAdapter。getDefa

23、ultAdapter();主要源码public class MainActivity extends Activity private final static int REQUEST_CONNECT_DEVICE = 1; private final static String MY_UUID = ”00001101-0000-1000800000805F9B34FB”; BluetoothSocket _Socket = null; BluetoothDevice _device = null; BluetoothSocket _socket = null; boolean _discov

24、eryFinished = false;private TextView text0; /private EditText edit0; /获得本地蓝牙适配器 private BluetoothAdapter bAdapter = BluetoothAdapter.getDefaultAdapter(); Override protected void onCreate(Bundle savedInstanceState) super。onCreate(savedInstanceState); setContentView(R。layout.activity_main); /蓝牙打开不成功 i

25、f(bAdapter = null)Toast.makeText(MainActivity。this, ”手机蓝牙打开不啊!大侠确定你手机有蓝牙?, Toast.LENGTH_LONG).show();finish();return; new Thread()public void run()if(!bAdapter.isEnabled())Intent enabler = new Intent(BluetoothAdapter。ACTION_REQUEST_ENABLE);int REQUEST_ENABLE = 1;startActivityForResult(enabler,REQUES

26、T_ENABLE ); .start(); public void onBluetoothButton(View V)if(!bAdapter.isEnabled()Toast。makeText(MainActivity。this,别急!蓝牙打开中.”, Toast.LENGTH_LONG)。show();return;/Button BluetoothButton = (Button)findViewById(R。id。imageButton6);if(_Socket = null)Intent serverIntent = new Intent(MainActivity。this, Dev

27、iceListActivity。class); /跳转程序设置startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE); /设置返回宏定义 elsetry _Socket.close();_Socket = null;/BluetoothButton。setText(”连接”); catch (Exception e) / TODO: handle exceptionreturn; /定义广播接收器 private BroadcastReceiver _foundReceiver = new BroadcastReceiver()

28、 public void onReceive(Context context, Intent intent) _device = intent。getParcelableExtra(BluetoothDevice。EXTRA_DEVICE);;text0。setText(”找寻到设备:”+_device。getName());;private BroadcastReceiver _discoveryReceiver = new BroadcastReceiver() Overridepublic void onReceive(Context context, Intent intent) /

29、卸载注册的接收器 */unregisterReceiver(_foundReceiver);unregisterReceiver(this);_discoveryFinished = true; /连接搜寻服务public void onSearchButtonClicked(View v)IntentFilter discoveryFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);registerReceiver(_discoveryReceiver, discoveryFilter);IntentFi

30、lter foundFilter = new IntentFilter(BluetoothDevice。ACTION_FOUND);registerReceiver(_foundReceiver, foundFilter);new Thread()public void run() /开始搜索 bAdapter。startDiscovery();for (;) if (_discoveryFinished) break;try Thread.sleep(100); catch (InterruptedException e).start();text0.setText(”正在搜寻设备。); /

31、接收活动结果,响应startActivityForResult() public void onActivityResult(int requestCode, int resultCode, Intent data) switch(requestCode)case REQUEST_CONNECT_DEVICE: /连接结果,由DeviceListActivity设置返回/ 响应返回结果 if (resultCode = Activity。RESULT_OK) /连接成功,由DeviceListActivity设置返回 / MAC地址,由DeviceListActivity设置返回 String

32、 address = data.getExtras() .getString(DeviceListActivity。EXTRA_DEVICE_ADDRESS); / 得到蓝牙设备句柄 _device = bAdapter。getRemoteDevice(address); / 用服务号得到socket try_socket = _device.createRfcommSocketToServiceRecord(UUID。fromString(MY_UUID); catch(IOException e)Toast。makeText(this, ”连接失败!, Toast。LENGTH_SHORT

33、).show(); /连接socketButton btn = (Button) findViewById(R.id。imageButton5); try_socket。connect();Toast。makeText(this, ”连接”+_device。getName()+”成功!”, Toast。LENGTH_SHORT)。show();btn.setText(”断开”); catch(IOException e)tryToast。makeText(this, 连接失败!”, Toast.LENGTH_SHORT).show();_socket。close();_socket = null;catch(IOException ee)Toast.makeText(this, 连接失败!”, Toast.LENGTH_SHORT)。show();return; break;default:break; /连接设备 public void onConenectButtonClicked(View v)try_socket.connect();text0。setText(成功建立连接,可以发送数据!+_device.getName();catch(IOException e)/text0。setText(e.toString());text0.setText(”连接失败”);

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服