文档库 最新最全的文档下载
当前位置:文档库 › 手机蓝牙遥控智能小车

手机蓝牙遥控智能小车

手机蓝牙遥控智能小车
手机蓝牙遥控智能小车

模块化手机蓝牙遥控、超声波避障及人体检测智能小车

实用发明协会:徐鹏王鹏

一﹑小车说明

1小车采用传统51单片机控制,能实现手机蓝牙遥控﹑超声波避障及人体检测功能,各种状态能在LCD1602液晶屏上直观的显示出来。

2小车地盘采用四个直流电机驱动,装有蓝牙模块一个﹑超声波模块一个﹑单片机系统板一块﹑STC89C52RC单片机一块电池一块﹑LCD1602液晶屏一块﹑L9110电机驱动模块两块﹑稳压模块一块﹑人体红外传感器模块两块及装饰LED。

二﹑模块说明

1蓝牙模块:核心模块使用HC-06从模块,接口电平3.3V,可以直接连接各种单片机,配对以后当全双工串口使用,仅支持8位数据位、1位停止位、无奇偶校验的通信格式,自身的TXD 直接连接到单片机RXD,RXD接单片机TXD。

2超声波模块:使用电压5V,静态电流小于2mA,电平输出高5V低0V,感应角度不大于15度,探测距离2cm-450cm。

3 STC89C52RC:STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU

停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。

4 L9110电机驱动模块:模块供电电压2.5-12V,电机工作电压2.5v-12V之间,最大工作电流0.8A,可以同时驱动2个直流电机,或者1个4线2相式步进电机。通过单片机给逻辑电压从而控制直流电机的正反转。

5 LM2596S稳压模块:输入直流电压3V 至 40V,输出直流电压 1.5V 至 35V 电压连续可调,高效率最大输出电流为3A。使用SANYO固态电容,高Q值大功率电感。

6单片机系统板:全部引出P0﹑ P1﹑ P2及 P3接口, P0带上拉电阻,有5V电源接口,12MHz晶振,有RXD TXD GND接口方便STC单片机的串口下载,有ATMEL ISP下载端口,方便AT89S 系列单片机下载,单片机紧锁座方便更换单片机。

7人体红外传感器模块:HC-SR50热释电红外传感器是一种能检测人或动物发射的红外线而输出电信号的传感器,工作电压5v-20v之间,它由陶瓷氧化物或压电晶体元件组成在元件两个表面做成电极,在传感器监测范围内温度有ΔT的变化时,热释电效应会在两个电极上会产生电荷ΔQ,即在两电极之间产生一微弱的电压ΔV。

三﹑功能说明

1超声波避障:利用单片机从控制口发一个10US以上的高电平,就可以在接收口等待高电平输出,一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此

次测距的时间,方可算出距离,如果距离小于设定的值小车采取转弯避障。

2蓝牙遥控:手机连接小车,通过上位机发送命令控制小车。四﹑操作说明

1接通电源,打开单片机系统板开关,程序初始化开始。

2打开手机蓝牙,打开遥控软件界面如图1-1,等待和小车连接成功(蓝牙红色指示灯不再闪烁)。

3等待LCD1602界面显示select a function字样,第一次按键

小车开启手机蓝牙遥控功能,按下操作界面(图1-1)对

应按键小车即执行相应动作。第一次按键小车开启超声波避障功能此时小车自动前进,并遇到障碍物自动躲开,在执行避障过程中按键小车停止避障停在原地,再一次按键小车继续执行避障功能。

图1-1

五﹑注意事项

1电池正负极严禁接反。

2严禁乱改动线路。

3严禁卡死轮胎以免烧毁电机。

4严禁小车从高处掉下。

5两个功能之间切换需要复位单片机。

6小车严禁沾到水。

7手机软件在附带U盘中。

附源程序一份:

#include

#define uchar unsigned char

#define uint unsigned int

#define GPIO P2 //液晶数据输入口

uchar a,bai,shi,ge,int0,int1;

uint time,dist;

sbit LCDE=P3^5; //液晶使能端

sbit RW=P3^6; //写入数据与命令选择端sbit RS=P3^7; //读写选择端

sbit FLMA=P0^0; //电机逻辑电压接口

sbit FLMB=P0^1;

sbit FRMA=P0^2;

sbit FRMB=P0^3;

sbit BLMA=P0^4;

sbit BLMB=P0^5;

sbit BRMA=P0^6;

sbit BRMB=P0^7;

sbit trig=P1^0; //触发控制信号输入

sbit echo=P1^1; //回响信号输出

uchar code wel[]="Welcome you to"; //14欢迎uchar code exp[]="experience!!!"; //13体验uchar code ini[]="Initialize... "; //16初始化uchar code xup[]=" XuPeng Made"; //16徐鹏制作uchar code sel[]="Select function"; //15选择功能uchar code bul[]="BluetoothControl"; //16蓝牙控制uchar code avo[]="Avoid obstacle "; //16避障uchar code dis[]="Dist :"; //6距离

uchar code fow[]="Forward "; //14前进uchar code bac[]="Back "; //14后退uchar code tul[]="Turnleft "; //14左转uchar code tur[]="Turnright "; //14右转uchar code sto[]="Stop "; //14停止

void delay_20us() //延时20us

{

uchar a;

for(a=0;a<20;a++);

}

void forward() //前进

{

FLMA=1;

FLMB=0;

FRMB=0;

BLMA=1;

BLMB=0;

BRMA=1;

BRMB=0;

}

void back() //后退{

FLMA=0;

FLMB=1;

FRMA=0;

FRMB=1;

BLMA=0;

BLMB=1;

BRMA=0;

BRMB=1;

}

void turnleft() //左转{

FLMA=0;

FLMB=1;

FRMA=1;

FRMB=0;

BLMA=0;

BLMB=1;

BRMA=1;

BRMB=0;

}

void turnright() //右转{

FLMA=1;

FLMB=0;

FRMA=0;

FRMB=1;

BLMA=1;

BLMB=0;

BRMA=0;

BRMB=1;

}

void stop() //停止{

FLMA=0;

FLMB=0;

FRMA=0;

FRMB=0;

BLMA=0;

BLMB=0;

BRMB=0;

}

void cl() interrupt 4 //串口中断函数{

RI=0;

a=SBUF; //上位机为16进制}

void timer0(void) interrupt 1 //定时器0中断函数{

TH0=0;

TL0=0;

}

void init_wai0() interrupt 0 //外部中断0函数{

int0=1;

}

void init_wai1() interrupt 2 //外部中断1函数{

int1=1;

}

void check() //超声波检测函数{

trig=1;

delay_20us();

trig=0;

while(echo==0);

TR0=1;

ET0=1;

while(echo==1);

TR0=0;

ET0=0;

time=TH0*256+TL0; //计算时间

TH0=0;

TL0=0;

TF0=0;

dist=(time*1.7)/100; //计算距离

}

void Delay1ms(unsigned int a) // 延时1ms函数{

unsigned int i,j;

for(i=a;i>0;i--)

for(j=110;j>0;j--);

}

void LCDCom(unsigned char com) //LCD写入命令函数{

RW=0;

RS=0;

GPIO=com;

Delay1ms(10);

LCDE=1;

Delay1ms(10);

LCDE=0;

}

void LCDwriteDate(unsigned char dat) //LCD写入数据函数{

RS=1;

RW=0;

GPIO=dat;

Delay1ms(10);

LCDE=1;

Delay1ms(10);

LCDE=0;

}

void LCDInit() //LCD初始化函数{

LCDCom(0x38);

LCDCom(0x0c);

LCDCom(0x06);

LCDCom(0x01);

}

void main() //主函数

{

uchar i;

PCON=0x00; //波特率不加倍

SCON=0x50; //设置串口工作方式为1

TMOD=0x21; //定时器T1工作方式2,定时器T0工作方式1

TH1=0xfd; //定时器初值:9600波特率

TL1=0xfd;

TH0=0; //付初值

TL0=0;

trig=0;

TR1=1; //启动定时器1

IT0=1; //外部中断0下降沿触发

IT1=1; //外部中断1下降沿触发

EX0=1; //开外部中断0

EX1=1; //开外部中断1

EA=1; //开中断

ES=1; //允许串口中断

PT0=1;//定时器0中断优先级最高LCDInit();

LCDCom(0x80);

for(i=0;i<14;i++)

{

LCDwriteDate(wel[i]);

}

LCDCom(0x80+0x40);

for(i=0;i<13;i++)

{

LCDwriteDate(exp[i]);

}

Delay1ms(2000);

LCDCom(0x01);

LCDCom(0x80);

for(i=0;i<16;i++)

{

LCDwriteDate(ini[i]);

}

LCDCom(0x80+0x40);

for(i=0;i<16;i++)

{

LCDwriteDate(xup[i]);

}

Delay1ms(2000);

LCDCom(0x80);

for(i=0;i<15;i++)

{

LCDwriteDate(sel[i]);

}

while(1)

{

if(a==0x0e)

{

LCDCom(0x80);

for(i=0;i<16;i++)

{

LCDwriteDate(bul[i]);

}

while(1)

{

switch(a)

{

case 0x0e: {forward();

Delay1ms(70);

LCDCom(0x80+0x40);

for(i=0;i<14;i++)

{

LCDwriteDate(fow[i]);

}

}break; //前case 0x0c: {back();

Delay1ms(70);

LCDCom(0x80+0x40);

for(i=0;i<14;i++)

{

LCDwriteDate(bac[i]);

}

}break; //后case 0x0b: {turnleft();

Delay1ms(70);

LCDCom(0x80+0x40);

for(i=0;i<14;i++)

{

LCDwriteDate(tul[i]);

}

}break; //左case 0x09: {turnright();

Delay1ms(70);

LCDCom(0x80+0x40);

for(i=0;i<14;i++)

{

LCDwriteDate(tur[i]);

}

}break; //右case 0x04: {stop();

Delay1ms(70);

LCDCom(0x80+0x40);

for(i=0;i<14;i++)

{

LCDwriteDate(sto[i]);

}

}break; //停default:break;

}

if((int0==1)||(int1==1)||((int0==1)&&(int1==0))||((int0 ==0)&&(int1==1)))

{

int0=0;

int1=0;

LCDCom(0x80+0x40+0x0E);

LCDwriteDate('N');

LCDCom(0x80+0x40+0x0F);

LCDwriteDate('P');

}

else if((int0==0)&&(int1==0))

{

LCDCom(0x80+0x40+0x0E);

LCDwriteDate('H');

LCDCom(0x80+0x40+0x0F);

LCDwriteDate('P');

}

}

}

else if(a==0x0c)

{

LCDCom(0x80);

for(i=0;i<16;i++)

{

LCDwriteDate(avo[i]);

}

LCDCom(0x80+0x40);

for(i=0;i<6;i++)

{

LCDwriteDate(dis[i]);

}

while(1)

{

check();

if(dist<=40)

{

stop();

Delay1ms(400);

back();

Delay1ms(600);

turnright();

Delay1ms(400);

forward();

}

if(a==0x04)

{

stop();

}

else {forward();}

bai=dist/100;

shi=dist%100/10;

ge=dist%10;

LCDCom(0x80+0x46);

LCDwriteDate('0'+bai);

Delay1ms(10);

LCDCom(0x80+0x47);

LCDwriteDate('0'+shi);

LCDCom(0x80+0x48);

LCDwriteDate('0'+ge);

Delay1ms(10);

LCDCom(0x80+0x49);

LCDwriteDate('c');

LCDCom(0x80+0x4A);

Delay1ms(10);

LCDwriteDate('m');

LCDCom(0x80+0x4B);

LCDwriteDate(' ');

Delay1ms(10);

LCDCom(0x80+0x4C);

LCDwriteDate(' ');

Delay1ms(10);

LCDCom(0x80+0x4D);

LCDwriteDate(' ');

Delay1ms(10);

if((int0==1)||(int1==1)||((int0==1)&&(int1==0))||((int0

==0)&&(int1==1)))

{

int0=0;

int1=0;

LCDCom(0x80+0x4E);

LCDwriteDate('N');

LCDCom(0x80+0x4F);

LCDwriteDate('P');

}

else if((int0==0)&&(int1==0))

{

LCDCom(0x80+0x40+0x0E);

LCDwriteDate('H');

LCDCom(0x80+0x40+0x0F);

LCDwriteDate('P');

}

}

}

}

}

基于stm32f4的蓝牙控制小车

ARM-STM32校园创新大赛 项目报告 题目:基于stm32f4的蓝牙控制小车 学校:中南民族大学 指导教师: 视频观看地址:https://www.wendangku.net/doc/ef12679934.html,/v_show/id_XNjA3NTE4MzU2.html

题目:基于stm32f4的蓝牙控制小车 关键词:STM32F4 LM2940-5.0 L298N FBT06_LPDB 蓝牙串口通信android 摘要 “基于stm32f4的蓝牙控制小车”是一个基于意法半导体与ARM公司生产的STM32F4 DISCOVERY开发板的集电机驱动模块、电源管理模块、stm32f4主控模块、蓝牙串口通信模块、android控制端模块。电机驱动模块使用了两个L298N 芯片来驱动4路电机,使能端连接4路来自主控板的PWM波信号,8个输入端接主控板的8个输出端口;电源管理模块使用了LM2940-5.0芯片进行12V到5V 的转换,12V用于电机模块的供电,5V用于蓝牙模块、传感器等的供电;主控模块采用了MDK编辑程序,然后下载到主控板,实现硬件与软件的交互;蓝牙串口通信模块则是采用了FBT06_LPDB针插蓝牙模块,与主控板进行串口通信,同时与android手机进行通信;android控制端模块是一个集开启蓝牙、搜索蓝牙、控制小车等功能。用户可以通过android控制端进行控制小车的运动,实现一些用户需要的功能和服务。 1.引言 蓝牙的创始人是瑞典爱立信公司,蓝牙技术是一种无限数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。手机之间通过蓝牙实现数据共享成为常理,将手机变为遥控器为人们的生活带来无限方便。遥控小车在工业、国防、科研等领域应用越来越广泛,例如说:消防遥控小车、探测小车等。本文详细阐述了使用蓝牙通信的手机遥控小车前行、倒退、左转、右转和停止等功能的软硬件设计过程。 2.系统方案 该系统分为电机驱动模块、电源管理模块、主控板、蓝牙通信模块、android 控制端等5个模块,如图2.1所示:

成功实现手机蓝牙控制智能小车机器人!视频+程序源代码(Android)

上次成功实现了通过笔记本电脑蓝牙来控制智能小车机器人的运动,但是通过电脑控制毕竟不方便,于是乎~本人打算将控制程序移植到手机上。 目前主流的手机操作系统有塞班、安卓(Android)、Windows Mobile,对比了一下,首先,塞班是用C++写的,这么多门语言我唯独看到C++就头大···,放弃了···,Windows Moblie 其实和之前发的电脑端程序基本是一样的,也就没什么意思了,最后决定选择目前正火的Android手机作为控制平台。 Android是个开源的应用,使用Java语言对其编程。于是这次的开发我选用Eclipse作为开发工具,用Java语言开发手机端的控制程序,由于之前对Android的蓝牙通信这块涉及不多,一开始感觉有点小茫然,而网上也少有这方面的例程,有少数人做出了类似的东西,但是只传了个视频装X!雪特···· 经过几天的研究,最终确定了手机蓝牙通信其实就是Socket编程,再经过一番编写和调试,昨晚终于大功告成! 这是视频: 下面开始介绍Android手机端控制程序的编写: 首先打开Eclipse,当然之前的Java开发环境和安卓开发工具自己得先配置好,这里就不多说了,网上教程一大摞。 然后新建一个Android项目,修改布局文件main.xml,代码如下:

相关文档
相关文档 最新文档