搜档网
当前位置:搜档网 › 蓝牙串口通信遥控小车

蓝牙串口通信遥控小车

蓝牙串口通信遥控小车
蓝牙串口通信遥控小车

蓝牙串口通信遥控小车

目录

1系统方案论证及方案选择

2 本系统软硬件设计

2.1单元硬件电路设计

2.2 软件部分设计

参考文献

附录1 原器件清单

附录2电路原理图及印制板图

附录3程序

1. 系统方案论证及方案选择

1.总体设计方案

题目要求设计一个蓝牙串口遥控小车,通过对电机转速的控制,调节速度的大小,改变小车角度,并能实现转弯和旋转。设计主要由主控单片机STC12C5A60S2驱动直流电机,使车轮工作,带动小车的转动。

2.基本工作原理

3.STC89C52RC有定时器T0 T1 T2,在自动控制领域经常把

T1作为串口通信了T0作PWM调速用因此有必要把T2定时器拿出来作定时器作为声音频谱程序。下面介绍T2的用法

STC89C52RC有定时器T2

?void main (void)

?{

?/* T2定时器赋预装载值,溢出16次就是1秒。*/ ?RCAP2H=(65536-5000)/256;

?RCAP2L= (65536-5000)%256;

?ET2=1; // 允许T2定时器中断

?EA=1; // 打开总中断

?TR2=1; // 启动T2定时器

?while(1); // 死循环,等待T2定时器的溢出中断

?}

?void Timer2_Server(void) interrupt 5

?{

?static uint Timer2_Server_Count;

?// 定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数)

?TF2=0;

?// T2定时器发生溢出中断时,需要用户自己清除溢出标记,而51的其他定时器是自动清除的

?Timer2_Server_Count++;

?if(Timer2_Server_Count==16) // T2定时器的预装载值为0x0BDC,溢出16次就是1秒钟。?{

?Timer2_Server_Count=0;

?P1_7=~P1_7; // LED11反转显示。

?}

?}

?void Timer2_Server(void) interrupt 5

?{

?static uint Timer2_Server_Count;

?// 定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数)

?TF2=0;

?// T2定时器发生溢出中断时,需要用户自己清除溢出标记,而51的其他定时器是自动清除的

?Timer2_Server_Count++;

?if(Timer2_Server_Count==16) // T2定时器的预装载值为0x0BDC,溢出16次就是1秒钟。?{

?Timer2_Server_Count=0;

?P1_7=~P1_7; // LED11反转显示。

?}

?}

二.本系统软硬件设计

系统主要由单片机产生PWM信号,通过电机驱动轮胎的旋转,对其的转速进行控制,使车子行驶前进。根据题目要求,我们的设计分硬件、软件两部分。

2.1 单元硬件电路设计

2.1.1 51单片机最小系统的制作方案设计

2.1.2 小车51系统+驱动(马达)+电池的接线

2.1.3 蓝牙与单片机和马达的接线

附录1主要元器件清单

附录2 电路原理图及印制电路板图1.

2.

3.

4.

5.超声波串口模块

附录3程序

1.主程序

#include

#define uchar unsigned char

#define uint unsigned int

uint ma,mb,mc,PWM=6000;

sbit out1 = P1^2 ; //motoA1

sbit out2 = P1^3 ; //motoA2

sbit out3 = P1^4 ; //motoB1

sbit out4 = P1^5 ; //motoB2

bit PWMIO;

void delay(uint t) //延时程序1

{

uchar j;

while(t--)

{for(j=1;j>0;j--);}

}

void init()

{

TMOD=0x21;//设置定时器1为工作方式2 设置定时器0为工作方式1

TH1=0xfd;

TL1=0xfd;

TH0=(65536-20000)/256; //20ms定时器T0中断一次

TL0=(65536-20000)%256;

SCON=0x50;

TR1=1;

EA=1;

ES=1;

ET0=1;

TR0=1;

}

void you () //右急弯

{

out1=1;

out2=0;

out3=0;

out4=1;

delay(100);

}

void zuo() //左急弯

{

out1=0;//右轮正转out2=1;

out3=1; //左轮反转out4=0;

delay(100);

}

void qian() //前进

{

out1=0;

out2=1;

out3=0;

out4=1;

delay(100);

}

void hou() //后退

{

out1=1;

out2=0;

out3=1;

out4=0;

delay(200);

}

void leftup() //左前{

out1=0;//右轮正转

out2=1;

out3=0;//左轮PWMIO输出调慢

out4=PWMIO;

}

void rightup() //右前

{

out1=0;//右轮PWMIO输出调慢

out2=PWMIO;

out3=0;//左轮正转

out4=1;

}

void leftdown() //左后

{

out1=1;//右轮后退

out2=0;

out3=PWMIO;;

out4=0;

}

void rightdown() //右后

{

out1=PWMIO;

out2=0;

out3=1;//左轮后退

out4=0;

}

void ting() //停止

{

out2=0;

out4=0;

out3=0;

out1=0;

}

void main()

{

init();

while(1)

{

if(RI)

{

RI=0;

ma=SBUF;

}

switch(ma)

{

case 'a':qian();break; //前

case 'b':hou();break; //后退

case 'c':zuo();break; //左急弯

case 'd':you();break; //右急弯

case 'e':leftup();break; //左前

case 'f':rightup();break; //右前

case 'g':leftdown();break; //左后

case 'h':rightdown();break; //右后

case 's':ting();break; //停

}

}

}

void TT0() interrupt 1

{

TH0=(65536-(20000-PWM))/256; //20ms定时器T0中断一次,进行PWM切换实现5ms高电平15ms低电平的PWM脉冲

TL0=(65536-(20000-PWM))%256;

PWM=20000-PWM;

PWMIO=~PWMIO;

}

void ser() interrupt 4

{

}

2.子程序

#include

#define uchar unsigned char

#define uint unsigned int

uint ma,mb,mc,PWM=6000;

sbit out1 = P1^2 ; //motoA1

sbit out2 = P1^3 ; //motoA2

sbit out3 = P1^4 ; //motoB1

sbit out4 = P1^5 ; //motoB2

bit PWMIO;

PWMA[3]={10,30,50};

PWMB[3]={10,30,50};

void delay(uint t) //延时程序1

{

uchar j;

while(t--)

{for(j=1;j>0;j--);}

}

void init()

{

TMOD=0x21;//设置定时器1为工作方式2 设置定时器0为工作方式1

TH1=0xfd;

TL1=0xfd;

TH0=(65536-20000)/256; //20ms定时器T0中断一次

TL0=(65536-20000)%256;

SCON=0x50;

TR1=1;

EA=1;

ES=1;

ET0=1;

TR0=1;

}

void you () //右急弯

{

out1=1;

out2=0;

out3=0;

out4=1;

delay(100);

}

void zuo() //左急弯

{

out1=0;//右轮正转

out2=1;

out3=1; //左轮反转

out4=0;

delay(100);

}

void qian() //前进

{

out1=0;

out2=PWMIO1;

out3=0;

out4=PWMIO2;

delay(100);

}

void hou() //后退

{

out1=1;

out2=0;

out3=1;

out4=0;

delay(200);

}

void leftup() //左前

{ PWM1=PWMA[1]; PWM2=PWMA[0];

out1=0;//右轮正转

out2=PWMIO1;

out3=0;//左轮PWMIO输出调慢

out4=PWMIO2;

}

void rightup() //右前

{

out1=0;//右轮PWMIO输出调慢

out2=PWMIO;

out3=0;//左轮正转

out4=1;

}

void leftdown() //左后

{

out1=1;//右轮后退

out2=0;

out3=PWMIO;;

out4=0;

}

void rightdown() //右后

{

out1=PWMIO;

out2=0;

out3=1;//左轮后退

out4=0;

}

void ting() //停止

{

out2=0;

out4=0;

out3=0;

out1=0;

}

void 3dang() //右后

{

i++;

PWM1=PWMA[i];

PMW2=PWMB[i];

if(i==3)

{i=0;}

}

void main()

{

init();

while(1)

{

if(RI)

{

RI=0;

ma=SBUF;

}

switch(ma)

{/*下面程序需要自行另外修改,添加前\后退\左转圈\右转圈\左前弯PWM\右前弯PWM\左自旋\右自旋\PWM换档位\双闪灯+鸣笛\播放音乐\显示运行时间\显示光强\超声波测距并避障等功能*/

case 'a':qian();break; //前

case 'b':hou();break; //后退

case 'c':zuo();break; //左急弯

case 'd':you();break; //右急弯

case 'e':leftup();break; //左前

case 'f':rightup();break; //右前

case 'g':leftdown();break; //左后

case 'h':rightdown();break; //右后

case 's':ting();break; //停

case 'x':3dang();break; //停

}

}

}

void TT0() interrupt 1

{

TH0=(65536-400)/256;

TL0=(65536-400)%256;

t++;

if(t>=PWM1) {PWMIO1=1;}

if(t>=PWM2) {PWMIO2=1;}

if(t==50) {t=0;PWMIO1=0;PWMIO2=0}

}

void ser() interrupt 4

{

}

3.串口通信的初始化

4.利用PWMIO的变化改变转弯幅度

5.PWMADJ()函数实现PWM值的加

void PWMADD()

{

PWM+=1;

if(PWM==4){PWM=1};

}

?case 'a':qian();break; //前

?case ‘b’:hou();break; //后退

?case ‘c’:zuo();break; //左转圈

?case ‘d’:you();break; //右转圈

?case ‘g’:leftdown();break; //左自旋

?case ‘h’:rightdown();break; //右自旋

?2ledbeep(); //双闪灯黄灯+鸣笛

?music(); //播放音乐

?bizhang(); //超声波测距并避障

6.主函数串口接收程序

基于stm32f4的蓝牙控制小车

ARM-STM32校园创新大赛 项目报告 题目:基于stm32f4的蓝牙控制小车 学校:中南民族大学 指导教师: 视频观看地址:https://www.sodocs.net/doc/584960471.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所示:

蓝牙串口通信遥控小车

蓝牙串口通信遥控小车

————————————————————————————————作者:————————————————————————————————日期:

蓝牙串口通信遥控小车 目录 1系统方案论证及方案选择 2本系统软硬件设计 2.1单元硬件电路设计 2.2软件部分设计 参考文献 附录1原器件清单 附录2电路原理图及印制板图 附录3程序 1. 系统方案论证及方案选择 1.总体设计方案 题目要求设计一个蓝牙串口遥控小车,通过对电机转速的控制,调节速度的大小,改变小车角度,并能实现转弯和旋转。设计主要由主控单片机STC 12C5A60S2驱动直流电机,使车轮工作,带动小车的转动。

2.基本工作原理

3.STC89C52RC有定时器T0 T1 T2,在自动控制领域经常把T1作为串口通信了T0作PWM调速用因此有必要把T2定时器拿出来作定时器作为声音频谱程序。下面介绍T2的用法 STC89C52RC有定时器T2 ?void main(void) ?{ ?/* T2定时器赋预装载值,溢出16次就是1秒。*/ ?RCAP2H=(65536-5000)/256; ?RCAP2L=(65536-5000)%256; ?ET2=1; //允许T2定时器中断 ?EA=1; //打开总中断 ?TR2=1; //启动T2定时器

?while(1); // 死循环,等待T2定时器的溢出中断 ?} ?void Timer2_Server(void) interrupt5 ?{ ?staticuint Timer2_Server_Count; ?// 定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数) ?TF2=0; ?// T2定时器发生溢出中断时,需要用户自己清除溢出标记,而51的其他定时器是自动清除的 ?Timer2_Server_Count++; ?if(Timer2_Server_Count==16)// T2定时器的预装载值为0x0BDC,溢出16次就是1秒钟。 ?{ ?Timer2_Server_Count=0; ?P1_7=~P1_7; // LED11反转显示。 ?} ?} ?voidTimer2_Server(void)interrupt5

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

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