项目介绍

小组成员

设计原理

心得体会

 

  科创3C C05      
 
  项目介绍

前言

   随着智能手机的普及,智能手机提供了一个供我们利用的强大平台,其中的许多功能等着我们去开发。本次科技创新就是利用智能手机的安卓系统进行开发。蓝牙技术是一种无线数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。其程序写在一个9 x 9 mm的微芯片中。Android是以Linux为核心的手机操作平台,作为一款开放式操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。

 

 
  简介

   利用手机蓝牙控制小车遥控器,遥控器再控制小车,实现小车行进,转弯等基本功能。

                                          Back

 
  小组成员

   

    组长:张主超

    分工:单片机系统编程

 

    组员:龚旭诚

    分工:硬件系统组装,电焊,网页制作

 

    组员:蔡正祥

    分工:安卓系统编程

                                          Back

 
  设计原理

控制回路

   安卓系统手机重力感应

   手机蓝牙发送

   遥控器蓝牙模块接受

   单片机将信息发送给遥控器执行

   小车上接受器接受指令

 

 
  硬件部分

简要说明

1、J1为遥控器的电源输入,根据不同的遥控器型号,为9V或3V两种。 Vsel端上下符号标反了,对9V遥控器电池,跳线帽接中间与下面(3vin),此时,系统电源通过7805转为5V,再通过REG1117-3.3转为3.3V提供系统电源,3V遥控器电池,跳线帽接中间与上面(9in),遥控器电源直接进入系统进行供电。 请务必注意,以免烧毁单片机。以上不能选错。

2、ON_OFF跳线为单片机电源开关,连上时单片机处于上电状态,供烧写程序使用。

3、J3 PROG为单片机编程口,需与USB-TTL线相连,线的黑色为地,连接J3的1脚G,红色为线的TXD,需与J3的3脚T相连,白线为线的RXD,与J3的R相连。

4、J4为蓝牙模块接口,与实验室配套的蓝牙板相连,提供蓝牙功能。

5、J2为遥控器的控制线,与遥控器上U,D,L,R四个金属片连接。

 

 
 

用于控制遥控器的单片机及蓝牙模块

 

 
 

 

单片机和遥控器接线

 

 
 

蓝牙模块(左上)

 

 
 

单片机接线

 

 
  软件部分

单片机部分程序源代码

#include <REG51.H>
//#include <absacc.h>
#include <intrins.h>

#define FOSC 11059200;
#define BAUD 4800

sbit up = P3^2;
sbit down = P3^3;
sbit left = P3^4;
sbit right = P3^5;
sfr AUXR = 0x8E;
sfr AUXR1 = 0xA2;
sfr CLK_DIV = 0x97;
#define UART_M0x6 0x10
#define T1x12 0x40

void InitSerialCom()
{
AUXR1 |= 0x80;
//AUXR |= UART_M0x6;
//AUXR &= ~T1x12;
//CLK_DIV = 0x00;
//AUXR = 0x00;
TMOD=0x20;
PCON=0x80;
SCON=0x50;
TL1=0xFA;//FOSC*2/12/32/BAUD;
TH1=0xFA;
TR1=1;
SBUF=0x00;
}

void SerialComSendData(unsigned char uData)//发送信息

{

while(!TI);
SBUF=uData;
while(!TI);
TI=1;
}



unsigned char SerialComRecvData()//接受信息
{
unsigned char ucData;
ucData=0;
if(RI)
{
RI=0;
ucData=SBUF;
}
return ucData;
}

void delay(unsigned int sec)//延时函数
{
unsigned int j;
for (;sec>0;sec--)
{
for (j=50000;j>0;j--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}

void InitPoart(void)
{
InitSerialCom();
}


void main(void)
{
unsigned char ucNum;
up = 1;
down = 1;
left = 1;
right = 1;
InitPoart();
while(1)
{
ucNum=SerialComRecvData();
if(ucNum)
{
switch(ucNum)//控制小车
{
case 2: //
{
down = 1;
left = 1;
right = 1;
up = 0;
SerialComSendData('w');
break;
}
case 5: //x
{
up = 1;
left = 1;
right = 1;
down = 0;
SerialComSendData('x');
break;
}
case 7: //a
{
up = 1;
down = 1;
right = 1;
left = 0;
SerialComSendData('a');
break;
}
case 8: //d
{
up = 1;
down = 1;
left = 1;
right = 0;
SerialComSendData('d');
break;
}
case 1: //q
{
down = 1;
right = 1;
left = 0;
up = 0;
SerialComSendData('q');
break;
}
case 3: //e
{
down = 1;
left = 1;
right = 0;
up = 0;
SerialComSendData('e');
break;
}
case 4: //z
{
up = 1;
right = 1;
left = 0;
down = 0;
SerialComSendData('z');
break;
}
case 6: //c
{
up = 1;
left = 1;
right = 0;
down = 0;
SerialComSendData('c');
break;
}
case 9: //s
{
up = 1;
down = 1;
left = 1;
right = 1;
SerialComSendData('s');
break;
}
default: SerialComSendData(ucNum);
}
}
}
}

安卓系统程序下载

                                          Back

 
  心得体会

张主超:

   当初选课,是冲着手机控制这一点选了这门课。随着手机的功能越来越丰富,配置越来越高端,手机作为一个每个人都有的终端,能够实现强大的功能。选了这门课,希望了解手机平台上编程方法以及手机硬件如何使用。

开学时,听完老师介绍完任务后,觉得任务挺简单的,关键问题只有两个,一个是蓝牙通讯,一个是手机开发。

原本设想,任务比较简单,可以在小车上和控制上做做改装之类的,比如将控制板直接控制小车的两个电机,用8个继电器或者8个光耦(光耦貌似电能损耗较大)搭两个H桥即可。但不知道电路板如何设计,小车的控制又是基于控制板的,因此这一设想没能实现。

剩下的只有编程的任务了。觉得编程任务对我来说比较简单,于是我将两个任务分别交给了我的两个组员,自己作为后台技术支持。而且时间相较充裕,觉得靠他们自己问题能够解决的。没料想到这对我的队友来说是个比较大的挑战。

打酱油到了临近期末,发觉队友的成果出不来。。急急忙忙地把例子看了看。幸好Android平台将硬件库封装得十分完善,再加上Eclipse类似MFC的设计方法,比较容易的上手。于是自己瞎忙活了一阵后,把卡住的问题解决了。只是没有很好地帮上队友。

最后,完成了老师的要求,加了个重力感应控制(网上搜的例程都有些问题,多亏EclipseAndroid包里有很详细的帮助文档),自己感觉做的一般,原创的东西不多。

略带遗憾的完成了科创3C课程,当了回不称职的组长,收获挺大的~感谢队友的支持,尤其是蔡正祥和他高级的平板~十分感谢张士文老师不厌其烦的帮助~

 

龚旭诚:

   在本次的科创3C中,我主要负责硬件及部分程序。在硬件方面,电焊技术是十分重要的。一块电路板上的元件需要正确的焊接,而所用的贴片电阻,电容,二极管等都是极小的元件, 电焊时难度高,焊接质量差,可能造成假焊,或焊点高电阻。

   总的体会是以前参加过很多次的科创项目,这次的题目让我感觉很新鲜,自主,主要靠自己的自学,尤其是编程方面。拓展部分也有一定的难度,对我们所学的知识从理论到实践存在考验。

    总结这一个学期以来的开发,我对单片机编程又有了进一步的了解。在编程中所须注意的事项也有一点头绪。希望今后还能参加类似的课程,促进课外自主学习。

 

蔡正祥:

很快地,一学期的科创课程有一次结束了。之前也选过一门科创课程,一直觉得类似动手的课程十分具有原创性,也十分有乐趣。动手的过程,就像是完全凭感觉的创作,当然也有参考的过程,但是方案的起始是自拟的。

我们组并没有非常明确的分工,每个人都积极的参与,但是组长干的是最多的,几乎每部分都是他扛着大梁。

我被主要分派到Android编程这块;仅有C++编程基础,完全对Java陌生,不了解对象和类编程,让我面对这项任务觉得困难重重,事实证明,确实如此。我们手头仅有一个简单的Android界面框架,我们的既定目标是利用重力感应控制小车的各种动作,其中的跨度虽不大,但也有不少挑战。

在摸索的过程中,我翻阅了几本基础编程书,也利用网络找到了相关的代码,在重力感应传感器的使用上,算是基本做到了。但是在放入程序框架之后,程序依旧不知名的“被迫退出”。在自己的反思和组长的大力帮助下,我们终于突破了这层困难。

最后,最让我们鼓舞的还是试车过程;看着自己的实验成果完美的按照指令动作的时候,是兴奋感、成就感充斥的心情。

很高兴参加科创3C的课程,感谢这几位互帮互助、为人诚恳的队友,也感谢张士文老师无微不至的帮助和指导,谢谢。

                                          Back