基于蓝牙的遥控小车设计
1 引言
图片附件里有
最近几年,基于单片机和传感器的开发不断升温,加上智能手机的快速普及,各种智能设备逐渐走进了人们的和视野。因此,为了迎合时代的发展,我们从最简单的蓝牙无线模块开始,一步步打造一台智能小车。我们的车架是采用市面上常见的双层圆形车架,配合硬件电路,最终实现了一辆在开阔的场地上,能响应智能手机发出的蓝牙指令,执行前进,后退,左转,右转,停止等多项动作的遥控小车。实测30米外隔三堵墙仍能有效控制。
小车的控制器是以单片机STC89C52RC为核心,配有蓝牙模块,电机,电池,以及相应的驱动电路。蓝牙小车全图如图1所示:
我们的小车主要有分为单片机模块,蓝牙模块,电机与驱动模块,电源模块四部分构成。其中以单片机为核心,电机与驱动电路构成了系统的硬件,信息处理由运行在单片机上的控制软件完成。因此,小车的控制器设计可以分为硬件电路设计和控制软件两部分。
硬件电路是整个设计的基础。系统结构由图2所示。
图2
硬件电路设计至少分为以下四个部分:
1 STC89C52RC单片机最小系统:主要包括STC89C52R,,C单片机,12MHz晶振以及引出的必要的I/O口,负责系统的总体控制。
2 蓝牙模块:主由蓝牙接收芯片与蓝牙转串口芯片构成,负责接收智能手机端发来蓝牙的信号,转换后送入单片机进一步处理。
3 后轮电机与驱动电路:主要由两个小型直流电机与L298N驱动电路两部分构成,负责响应单片机输出的控制信号,执行相应的操(前进后退等)
4 电源电路:主要由四节1.2V镍氢电池构成,负责为各个模块供电
3 硬件设计
3.1单片机STC89C52RC最小系统
国产51系列单片机,价格低廉,应用广泛,也是市面上采用最多的单片机系列。因此,我们采用了比较常见的STC89C52RC单片机,配合外部晶振,实现了一个单片机运行的最小系统,作为小车系统的控制核心。电路全貌如图3所示:
图3
除了单片机之外,这个最小系统板的外围电路主要由四部分构成:
1 由12MHz晶振X1,两个33PF电容C1、C2以及单片机XTAL1,XTAL2引脚构成的时钟电路
2 由1K电阻R1,发光二极管D1以及VCC、GND构成的电源指示灯回路
3 由RXD、TXD引脚连接的蓝牙模块
4 由P0—P3引脚连接的电机驱动模块
3.2.1蓝牙模块
小车的蓝牙模块,我们采用了市面上常见的HC-06蓝牙串口模块,它的核心由两片芯片构成:
1 CSR BC417143b 蓝牙芯片
2 AL008D70BF102 芯片
其参考电路图见图4:
图4
它可以实现两个功能:
1 其他蓝牙设备发来的数据转化为串口信号,然后通过TXD引脚传出
2 通过RXD引脚接收单片机发出的串口信号,化为蓝牙信号无线发射到其他蓝牙装置
因此,通过RXD与TXD引脚,我们可以实现蓝牙与51单片机的通信。于是,我们将蓝牙模块的RXD引脚与单片机的TXD引脚相连,TXD引脚与单片机的RXD引脚相连,再连接电源供电,蓝牙部分的电路就搭建好了。
3.3电机与驱动电路
我们采用两个小型直流电机与车轮作为动力输出,L298N驱动模块为驱动电路,构成了电机与驱动模块。实物见图5 :
电路图见图6:
图6
将电机引线接入对应的端口,使用驱动电路的IN1-IN4,以及ENA、ENB六个接口,就可以实现对两个电机的控制。其中,ENA、ENB分别为左右电机的使能端,接VCC有效;IN1与IN2控制左电机,IN3与IN4控制右电机。对于单个电机,以左电机为例,控制效果见表1:
IN1 |
IN2 |
操作 |
0 |
0 |
不动 |
0 |
1 |
逆时针转 |
1 |
0 |
顺时针转 |
1 |
1 |
不动 |
表1
对于小车来说,通过控制两个轮不同的转向,就可达到控制前进方向的目的,其中两轮转向相反时(一个顺时针一个逆时针转时),小车前进或后退;相同时,则实现左转或者右转。因此,具体控制功能表见表2:
|
IN1 |
IN2 |
IN3 |
IN4 |
前进 |
0 |
1 |
1 |
0 |
后退 |
1 |
0 |
0 |
1 |
左转 |
0 |
1 |
0 |
1 |
右转 |
1 |
0 |
1 |
0 |
停止 |
0 |
0 |
0 |
0 |
表2
3.4电源电路
电源电路主要由4节1.2v镍氢充电电池构成,直接给单片机模块,电机与驱动模块,蓝牙模块供电。其中单片机模块电压要求为5V,电机驱动模块电压要求为5V,蓝牙模块电压要求为3.3V——6V,经实际测试,四节充电电池4.8V电源可以满足各模块需要。
4 软件设计
软件部分,主要涉及单片机控制的两个基本操作:I/O口的输出控制和串口通信。
4.1 通用I/O口控制部分
我们使用了STC89C52RC单片机的六个通用I/O,对应的连接见表:
I/O口 |
连接端 |
I/O口 |
连接端 |
P1.0 |
驱动模块IN1 |
P1.3 |
驱动模块IN4 |
P1.1 |
驱动模块IN2 |
P3.0(RXD) |
蓝牙模块TXD |
P1.2 |
驱动模块IN3 |
P3.1(TXD) |
蓝牙模块RXD |
表3
其中,P1.0-P1.3连接电机驱动模块的IN1-IN4,通过不同的输出组合实现表2的功能,因此,其功能表见表4:
|
P1.0 |
P1.1 |
P1.2 |
P1.3 |
前进 |
0 |
1 |
1 |
0 |
后退 |
1 |
0 |
0 |
1 |
左转 |
0 |
1 |
0 |
1 |
右转 |
1 |
0 |
1 |
0 |
停止 |
0 |
0 |
0 |
0 |
表4
对应的程序实现如下:
sbit CHE1 = P1 ^ 0;
sbit CHE2 = P1 ^ 1;
sbit CHE3 = P1 ^ 2;
sbit CHE4 = P1 ^ 3;
//前进
void ahead(){
CHE1 = 0;
CHE2 = 1;
CHE3 = 1;
CHE4 = 0;
}
//后退
void back(){
CHE1 = 1;
CHE2 = 0;
CHE3 = 0;
CHE4 = 1;
}
//左转
void left(){
CHE1 = 0;
CHE2 = 1;
CHE3 = 0;
CHE4 = 1;
}
//右转
void right(){
CHE1 = 1;
CHE2 = 0;
CHE3 = 1;
CHE4 = 0;
}
//停止
void stop(){
CHE1 = 0;
CHE2 = 0;
CHE3 = 0;
CHE4 = 0;
}
4.2串口通信与控制部分
通过蓝牙模块,我们实现串口通信功能,控制信号流向见图7:
根据不同的控制信号执行不同的操作,具体程序流程如下:
1 首先,进行端口初始化:
void init(){
TMOD = 0x20;//定时器1设定为方式2 8位数据自动从装
TH1 = 0xfd;//对定时器赋值,高8位与低低8位相同
TL1 = 0xfd;//波特率设为9600
TR1 = 1;//打开定时器1
SM0 = 0;//设置串口的工作方式1
SM1 = 1;
REN = 1;//允许串口
EA = 1;//开总中断
ES = 1;//打开串口中断
}
2 外界发来信息时,执行串口中断函数,接收信号:
void communication() interrupt 4
{
RI = 0;//取消本次串口的响应
a = SBUF;//接受缓冲区的数据
flag = 1;//接收标记置1
}
先取消串口响应的目的是只处理当前信号,不再接受新的信号。用a变量储存缓存区中接收到的数据,同时把flag置1,方便后续的工作。
3 根据收到的信号,控制小车的动作。这里我们指定0为前进,1 为后退,2为左转,3为右转,4为停止:
while (1){
if (flag == 1){
ES = 0;//关闭串口
if (a == 0x00){
ahead();
}
if (a == 0x01){
back();
}
if (a == 0x02){
left();
}
if (a == 0x03){
right();
}
if (a == 0x04){
stop();
}
flag = 0;//清除标志位
ES = 1;//打开串口中断
}
}
所有的程序如下:
#include<REG52.h>
//设置4个输出位分别控制小车2轮驱动
sbit CHE1 = P1 ^ 0;
sbit CHE2 = P1 ^ 1;
sbit CHE3 = P1 ^ 2;
sbit CHE4 = P1 ^ 3;
char flag = 0;//设置标志位,通过该标志位判断单片机是否接受到外部中断信号。
char a;//缓冲接受字符
void init();//初始化程序
void ahead();
void back();
void left();
void right();
void stop();
void main(){
init();//初始化中断器
while (1){
if (flag == 1){
ES = 0;//关闭串口
if (a == 0x00){
ahead();
}
if (a == 0x01){
back();
}
if (a == 0x02){
left();
}
if (a == 0x03){
right();
}
if (a == 0x04){
stop();
}
flag = 0;//清除标志位
ES = 1;//打开串口中断
}
}
}
//前进
void ahead(){
CHE1 = 0;
CHE2 = 1;
CHE3 = 1;
CHE4 = 0;
}
//后退
void back(){
CHE1 = 1;
CHE2 = 0;
CHE3 = 0;
CHE4 = 1;
}
//左转
void left(){
CHE1 = 0;
CHE2 = 1;
CHE3 = 0;
CHE4 = 1;
}
//右转
void right(){
CHE1 = 1;
CHE2 = 0;
CHE3 = 1;
CHE4 = 0;
}
//停止
void stop(){
CHE1 = 0;
CHE2 = 0;
CHE3 = 0;
CHE4 = 0;
}
设置串口中断的工作方式
void communication() interrupt 4
{
RI = 0;//取消本次串口的响应
a = SBUF;//接受缓冲区的数据
flag = 1;//标记位
}
void init(){
TMOD = 0x20;//定时器1设定为方式2 8位数据自动从装
TH1 = 0xfd;//对定时器赋值,高8位与低低8位相同
TL1 = 0xfd;//波特率设为9600
TR1 = 1;//打开定时器1
SM0 = 0;//设置串口的工作方式1
SM1 = 1;
REN = 1;//允许串口
EA = 1;//开总中断
ES = 1;//打开串口中断
}
5 不足和展望
作为我们的第一款产品,这辆小车有以下几点不足:
1 车体设计不合理
2 电池电压较低,车速不够
3 控制效果单一,没有加速效果
4 手机端控制软件有待开发
后期我们计划为增加以下几点功能:
1 改进车架设计,如使用四驱车型外壳
2 使用电压更高的电源,并提高车速
3 改进控制程序,实现多种车速以及加速、制动等效果。
4 拓展wifi+摄像头功能,配合Kinect控制
Wifi模块
6 总结
第一次自己设计电子产品,历时十天左右,感觉还是有收获很大的。总结以下几点收获:
1 要注意连线细节,如蓝牙的RXD要连单片机的TXD,蓝牙的TXD要连单片机的RXD,
2 烧录程序是避免RXD与TXD引脚连接其他元件(如蓝牙),否则可能烧毁该元件(-.-血的教训)
3 设计硬件不能心急,应该认真阅读芯片的DataSheet,了解后再使用
4 硬件也可以像软件一样模块化,搞懂了每部分后可以灵活组合
相关推荐
总结,慧净蓝牙小车HJ-E教程涵盖了蓝牙小车的基础知识、Android设备的配合使用、源码解析和编程实践,以及进阶的项目挑战。通过深入学习和实践,用户不仅可以操控小车,还能培养编程思维和技术应用能力。
《基于51单片机控制的蓝牙小车详解》 51单片机,作为微控制器领域的经典之作,因其结构简单、易于上手而广泛应用于各类电子设备中。本项目中,51单片机被用于构建一个智能蓝牙小车,通过蓝牙通信技术实现远程控制。...
根据提供的Arduino蓝牙小车程序的信息,我们可以详细地探讨与该程序相关的知识点,包括硬件配置、软件编程逻辑以及蓝牙通信的基本原理。 ### Arduino蓝牙小车硬件配置 #### L298N电机驱动模块 在该程序中,可以...
总结起来,蓝牙小车APP的实现涉及了蓝牙通信协议、单片机编程、APP开发等多个领域,是一个融合了硬件与软件的综合项目。通过这样的实践,不仅可以提升开发者的技术能力,也能让他们体验到创新的乐趣,进一步推动科技...
总结来说,STM32蓝牙小车项目是一个涵盖嵌入式系统设计、无线通信、电机控制等多个方面的实践案例。通过这个项目,你可以深入了解STM32的开发流程,掌握蓝牙模块和电机驱动器的应用,并锻炼编程和调试能力。同时,它...
标题 "蓝牙控制小车(QT on Android)源码" 描述了一个使用QT框架在Android平台上实现的通过蓝牙技术控制小型车辆的应用程序。这个项目的核心在于利用QT的跨平台能力,结合Android系统的蓝牙API,实现了一个用户界面,...
### 蓝牙小车代码解析与51单片机应用 #### 一、概述 本文档主要介绍了基于STC51单片机的蓝牙小车控制程序的设计思路与实现方法。蓝牙小车通过智能手机APP与HC-02蓝牙芯片进行串口通信,并通过单片机来控制小车的...
总结,这个"手机蓝牙控制小车Android源码"项目涉及到Android蓝牙API的使用、设备连接与数据传输、用户界面设计、安全性和用户体验等多个方面。对于想要学习Android硬件交互或物联网应用开发的程序员来说,这是一个很...
### 蓝牙小车程序:手机电脑实时控制解析 #### 核心概念与功能 在探讨蓝牙小车程序之前,我们首先理解其核心概念。蓝牙小车是一种通过蓝牙技术进行无线控制的小型机器人,主要由微控制器、电机驱动电路、蓝牙模块...
《蓝牙小车技术详解》 ...总结来说,蓝牙小车的运作涉及了无线通信、微控制器编程、电机控制等多个领域的知识。通过理解并掌握这些技术,我们可以自行设计和制作蓝牙小车,既锻炼了动手能力,又深化了对科技的理解。
### 89C52蓝牙小车程序(PWM调速) #### 一、概述 本文档将详细介绍一个基于89C52单片机的蓝牙小车程序,该程序利用了脉冲宽度调制(PWM)技术来实现对小车速度的精确控制。通过蓝牙接收指令,可以远程控制小车的...
论文文档“基于stm32f4的蓝牙控制小车_论文.doc”通常会详细阐述项目的背景、目标、系统架构、硬件选型理由、软件设计思路、实验结果和分析等,是整个项目的重要总结和理论支撑。 这个项目不仅涵盖了电子工程的基本...
【MSP430 单片机四驱PID速度调节与蓝牙小车代码程序详解】 在电子工程领域,MSP430系列单片机由德州仪器(TI)开发,以其低功耗、高性能和丰富的功能集而备受青睐。本项目中,我们探讨的是基于MSP430的四驱PID速度...
总结,这个项目不仅展示了Android应用开发的基本流程,还涵盖了蓝牙通信技术及嵌入式系统控制,对于学习移动设备与硬件交互的开发者来说具有很高的参考价值。通过实践这样的项目,不仅可以提升编程技能,还能加深对...
总结来说,《蓝牙小车控制《走你》安卓APP》是利用蓝牙技术实现对小型蓝牙驱动车辆的无线遥控,通过提供直观的控制界面和多种功能,为用户提供便捷的操控体验。安装并使用这款APP,可以将用户的智能手机转变为一款...
《基于E4A的蓝牙小车控制应用详解》 在当今科技日新月异的时代,无线通信技术的应用已经深入到我们生活的方方面面。其中,蓝牙技术以其低功耗、短距离传输的特点,在物联网设备中占据了一席之地。本文将详细介绍一...
总结来说,蓝牙小车结合了蓝牙通信、微控制器技术、电子硬件和软件编程,提供了一个有趣且富有挑战性的学习平台,适合电子爱好者和初学者探索物联网和自动化控制领域的知识。通过深入理解和实践,不仅可以掌握蓝牙...
总结来说,【蓝牙小车资料-全部软硬件】涵盖了蓝牙通信技术、移动应用开发、嵌入式系统编程、电源管理及硬件设计等多个领域。无论是软件工程师还是硬件工程师,都能从中学习到丰富的知识,并通过实践提升自己的技能...