版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
....42-/NUM②电机的选择:小车底盘采用两层,每层长为250mm,宽为100mm,约重3mm*3.14*0.125*0.125*1.2*2=353.25g,再加上电池的重量303g以与其它器件的重量,小车约重750g左右,选用直径65mm的常用车轮,车轮与地面的滑动摩擦系数约为0.4,同时,电机的额定功率一般要大于负载功率的1.1~1.6倍,结合电机的参数即可计算出功率、转速等(P=F*V;V=W*R;P=F*R*W=T*W)。经费预算与人员安排4.1经费预算组别原件名称单价(元)数量总价硬件减速电机90.02180超声波传感器7.29643.74温湿度传感器10.59221.18烟雾传感器20.39240.78WIFI模块2091209车轮10220万向轮515亚克力板8432STM32F103VET625125钮扣电池313纽扣电池插座111串口母头111MAX232111PCB开板1601160锂电池1351135铜柱0.1202TLP521-45210LCD1286435135LM1117224LM2576224L298N919软件《疯狂安卓讲义》71.3171.3《STM32开发指南》57.5157.54.2人员安排组员负责任务王栋安卓软件部分何谦单片机软件部分东小车结构和电路设计露文档处理4.3进度安排时间计划任务7月初到7月中旬完成对小车整体设计方案的确立7月中旬到7月底分模块设计完成理论的论证8月中旬到8月底购买器件,制作pcb电路板和小车结构,完善并优化软件8月底到9月初完成小车的制作总结我们认为此项目的独特创新之处在于小车的控制是通过手机来实现,而不是遥控手柄或电脑,从而使得使用更加方便,实现用wifi技术对教育机器人的实时控制。稍微改动就可以用来控制电脑,家用电器等实现智能家居。因此该项目的成果将不仅仅局限于一个遥控小车,更具有价值的是手机远程遥控系统和智能家居。附录超声波蔽障代码#include"UltrasonicWave.h"#include"usart1.h"#include"TIM4.h"#define TRIG_PORTGPIOA #define ECHO_PORTGPIOA #define TRIG_PIN_AGPIO_Pin_1#define ECHO_PIN_AGPIO_Pin_0 #define TRIG_PIN_BGPIO_Pin_3#define ECHO_PIN_BGPIO_Pin_2#define TRIG_PIN_CGPIO_Pin_5#define ECHO_PIN_CGPIO_Pin_4#define TRIG_PIN_DGPIO_Pin_7#define ECHO_PIN_DGPIO_Pin_6unsignedshortintUltrasonicWave_Distance_A,UltrasonicWave_Distance_B;unsignedshortintUltrasonicWave_Distance_C,UltrasonicWave_Distance_D;//计算出的距离/**函数名:DelayTime_us*描述:1us延时函数*输入:Time 延时的时间US*输出:无 */voidDelayTime_us(intTime){unsignedchari;for(;Time>0;Time--)for(i=0;i<72;i++);}/**函数名:UltrasonicWave_Configuration*描述:超声波模块的初始化*输入:无*输出:无 */voidUltrasonicWave_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=TRIG_PIN_A|TRIG_PIN_B|TRIG_PIN_C|TRIG_PIN_D; //PC8接TRIGGPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //设为推挽输出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(TRIG_PORT,&GPIO_InitStructure); //初始化外设GPIOGPIO_InitStructure.GPIO_Pin=ECHO_PIN_A|ECHO_PIN_B|ECHO_PIN_C|ECHO_PIN_D; //PC9接ECH0GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //设为输入GPIO_Init(ECHO_PORT,&GPIO_InitStructure); //初始化GPIOA}/**函数名:UltrasonicWave_CalculateTime*描述:计算距离*输入:无*输出:无 */voidUltrasonicWave_CalculateTime_A(void){UltrasonicWave_Distance_A=TIM_GetCounter(TIM4)*5*34/2000;//TIM_GetCounter这个函数太有用了,但后面却是什么意思}voidUltrasonicWave_CalculateTime_B(void){UltrasonicWave_Distance_B=TIM_GetCounter(TIM4)*5*34/2000;}voidUltrasonicWave_CalculateTime_C(void){UltrasonicWave_Distance_C=TIM_GetCounter(TIM4)*5*34/2000;}voidUltrasonicWave_CalculateTime_D(void){UltrasonicWave_Distance_D=TIM_GetCounter(TIM4)*5*34/2000;}/**函数名:UltrasonicWave_StartMeasure*描述:开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间*输入:无*输出:无 */intUltrasonicWave_StartMeasure_A(){GPIO_SetBits(TRIG_PORT,TRIG_PIN_A); //送>10US的高电平DelayTime_us(20); //延时20USGPIO_ResetBits(TRIG_PORT,TRIG_PIN_A); //低电平while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN_A)); //等待高电平TIM_Cmd(TIM4,ENABLE);//开启时钟while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN_A)); //等待低电平TIM_Cmd(TIM4,DISABLE); //定时器2失能UltrasonicWave_CalculateTime_A(); //计算距离TIM_SetCounter(TIM4,0); //给定时器装入初值 returnUltrasonicWave_Distance_A;// printf("\r\ndistance:%d%dcm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256); }intUltrasonicWave_StartMeasure_B(){GPIO_SetBits(TRIG_PORT,TRIG_PIN_B); //送>10US的高电平DelayTime_us(20); //延时20USGPIO_ResetBits(TRIG_PORT,TRIG_PIN_B); //低电平while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN_B)); //等待高电平TIM_Cmd(TIM4,ENABLE);//开启时钟while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN_B)); //等待低电平TIM_Cmd(TIM4,DISABLE); //定时器2失能UltrasonicWave_CalculateTime_B(); //计算距离TIM_SetCounter(TIM4,0); //给定时器装入初值 returnUltrasonicWave_Distance_B;// printf("\r\ndistance:%d%dcm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256); }intUltrasonicWave_StartMeasure_C(){GPIO_SetBits(TRIG_PORT,TRIG_PIN_C); //送>10US的高电平DelayTime_us(20); //延时20USGPIO_ResetBits(TRIG_PORT,TRIG_PIN_C); //低电平while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN_C)); //等待高电平TIM_Cmd(TIM4,ENABLE);//开启时钟while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN_C)); //等待低电平TIM_Cmd(TIM4,DISABLE); //定时器2失能UltrasonicWave_CalculateTime_C(); //计算距离TIM_SetCounter(TIM4,0); //给定时器装入初值 returnUltrasonicWave_Distance_C;// printf("\r\ndistance:%d%dcm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256); }intUltrasonicWave_StartMeasure_D(){GPIO_SetBits(TRIG_PORT,TRIG_PIN_D); //送>10US的高电平DelayTime_us(20); //延时20USGPIO_ResetBits(TRIG_PORT,TRIG_PIN_D); //低电平while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN_D)); //等待高电平TIM_Cmd(TIM4,ENABLE);//开启时钟while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN_D)); //等待低电平TIM_Cmd(TIM4,DISABLE); //定时器2失能UltrasonicWave_CalculateTime_D(); //计算距离TIM_SetCounter(TIM4,0); //给定时器装入初值 returnUltrasonicWave_Distance_D;// printf("\r\ndistance:%d%dcm\r\n",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256); }重力感应核心代码package.example.wifi_car;importandroid.app.Activity;importandroid.content.Context;importandroid.hardware.Sensor;importandroid.hardware.SensorEvent;importandroid.hardware.SensorEventListener;importandroid.hardware.SensorManager;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.widget.EditText;importandroid.widget.TextView;publicclasszhongliganyingextendsActivity implementsSensorEventListener{ //定义系统的Sensor管理器 Handlerhandler; SensorManagersensorManager; TextViewwendu,shidu,COnongdu; ClientThreadclientThread; Override publicvoidonCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.zhongliganying); //获取程序界面上的文本框组件 wendu=(TextView)findViewById(R.id.wed); shidu=(TextView)findViewById(R.id.shi); COnongdu=(TextView)findViewById(R.id.co); //获取系统的传感器管理服务 sensorManager=(SensorManager)getSystemService( Context.SENSOR_SERVICE);//① handler=newHandler() { Override publicvoidhandleMessage(Messagemsg) { if(msg.what==0x123) { //show.append("\n"+msg.obj.toString()); } } }; clientThread=newClientThread(handler); newThread(clientThread).start(); } Override protectedvoidonResume() { super.onResume(); //为系统的加速度传感器注册监听器 sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);//② } Override protectedvoidonStop() { //取消注册 sensorManager.unregisterListener(this); super.onStop(); } //以下是实现SensorEventListener接口必须实现的方法 //当传感器的值发生改变时回调该方法 Override publicvoidonSensorChanged(SensorEventevent) { //floatx=event.values[SensorManager.DATA_X],y=event.values[SensorManager.DATA_Y],z=event.values[SensorManager.DATA_Z]; floatvalues[]=event.values; floatx=values[0],y=values[1],z=values[2]; Strings=null; StringBuildersb=newStringBuilder(); sb.append("X方向上的加速度:"); sb.append(values[0]); sb.append("\nY方向上的加速度:"); sb.append(values[1]); sb.append("\nZ方向上的加速度:"); sb.append(values[2]); //show.setText(sb.toString()); if(x<-3&&z>3)s="top"; elseif(x>3&&z>3)s="bottom"; elseif(y>3&&z>0)s="right"; elseif(y<-3&&z>0)s="left"; elses="stop"; try { Messagemsg=newMessage(); msg.what=0x345; msg.obj=s; clientThread.revHandler.sendMessage(msg); } catch(Exceptione) { e.printStackTrace(); } } //当传感器精度改变时回调该方法。 Override publicvoidonAccuracyChanged(Sensorsensor,intaccuracy) { }}sockets通信核心代码package.example.wifi_car;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStream;.Socket;.SocketTimeoutException;importandroid.app.Activity;importandroid.content.Context;importandroid.content.res.Resources;importandroid.os.Handler;importandroid.os.Looper;importandroid.os.Message;publicclassClientThreadimplementsRunnable{ privateSockets; //定义向UI线程发送消息的Handler对象 privateHandlerhandler; //定义接收UI线程的消息的Handler对象 publicHandlerrevHandler; //该线程所处理的Socket所对应的输入流 BufferedReaderbr=null; OutputStreamos=null; MyAppmy; Stringip=my.getIp(); Stringport=my.getPort(); publicClientThread(Handlerhandler) { this.handler=handler; } publicvoidrun() { try { s=newSocket(ip,Integer.parseInt(port)); br=newBufferedReader(newInputStreamReader( s.getInputStream())); os=s.getOutputStream(); //启动一条子线程来读取服务器响应的数据 newThread() { Overr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年PP热收缩膜袋项目投资价值分析报告
- 医疗器械广告服务合同范例
- EPC总承包项目总体实施方案
- 保税器材维修合同范例
- 买卖整栋房屋合同范例
- 出租车外包合同范例
- 临时用工项目合同范本
- 修理报废货车合同范本
- 2025年家电产品出口代理与分销合同
- 公对公购买合同范本
- 长江委水文局2025年校园招聘17人历年高频重点提升(共500题)附带答案详解
- 2025年湖南韶山干部学院公开招聘15人历年高频重点提升(共500题)附带答案详解
- 企业动火作业安全管理制度范文
- 信息安全意识培训课件
- 运动按摩全套课件
- 除锈、油漆检验批质量验收记录样表
- pp顾问的常见面试问题
- 法理学原理与案例完整版教学课件全套ppt教程
- 软体家具、沙发质量检验及工艺
- 电镀废水中各种重金属废水处理反应原理及控制条件
- Q∕GDW 12118.1-2021 人工智能平台架构及技术要求 第1部分:总体架构与技术要求
评论
0/150
提交评论