工程技术综合实践项目设计报告-基于蓝牙控制的智能车 本文关键词:蓝牙,工程技术,实践,控制,智能
工程技术综合实践项目设计报告-基于蓝牙控制的智能车 本文简介:工程技术综合实践项目设计报告(电类)项目名称:基于蓝牙控制的智能车指导教师:戴世通周国玲戚东辉蔡文婷项目成员:贾航辉、赵全、杨濛雨、张锴西安理工大学工程训练中心*年*月*日目录工程技术综合实践课程任务书1项目组成员及分工2概述31总体设计31.1系统功能及技术指标功能:蓝牙遥控小车。技术指标:31.
工程技术综合实践项目设计报告-基于蓝牙控制的智能车 本文内容:
工程技术综合实践
项目设计报告
(电类)
项目名称:
基于蓝牙控制的智能车
指导教师:
戴世通
周国玲
戚东辉
蔡文婷
项目成员:
贾航辉、赵全、杨濛雨、张锴
西安理工大学工程训练中心*年*月*日
目录
工程技术综合实践课程任务书1
项目组成员及分工2
概述3
1
总体设计3
1.1
系统功能及技术指标
功能:蓝牙遥控小车。
技术指标:3
1.2
系统构成3
1.3主要设备及元器件选型3
1.4系统核心处理策略6
2
详细设计6
2.1功能划分
6
2.2
PCB设计7
2.3系统硬件资源清单8
3.软件设计9
3.1
软件功能模块9
3.2
源程序(见附录1)10
4
结构设计10
5
调试与测试10
5.1
调试10
5.2
测试10
5.3
调试测试后发现的不足10
6结论10
7
感想11
附录1
小车源程序12
装置总造价表15
工程技术综合实践课程任务书
项目名称
基于蓝牙控制的智能车
项目组号
L7
教师组组长
戴世通
电话
15388600332
[email protected]
指导教师
戴世通
周国玲
戚东辉
蔡文婷
项目组学生人数
4
项目内容:(包括功能描述、完成内容、技术要求、工艺要求等)
功能描述:
用手机终端作为遥控器,使用蓝牙技术与小车通讯,进而控制小车的运动。
完成内容:
项目管理;成本核算与记录;文档收集整理;项目分析与调研;确定项目方案;元器件选择与购买;硬件电路设计;PCB设计与制作;元器件安装与调试;编程与调试;壳体设计与制作;产品装配与调试。
技术要求:
产品基于AVR单片机,通过手机蓝牙和车载蓝牙实现数据的传输。
通过
ICCAVR编程。
车模要求:舵机控制转向,可适当添加减震装置。
通过手控和重力感应两种模式进行控制。
工艺要求:
(1)线路板各元件布局均匀、整齐、紧凑,尽量减小和缩短各元件之间的引线和连接。
(2)线路板焊盘、线、过孔的尺寸、间距符合标准,线拐弯处不得出现尖角。
(3)产品外形美观大方,便于操作使用。
涉及知识:
(1)AVR单片机编程,涉及ATmega16的PWM和串口通讯。
(2)舵机的使用。
(3)BTS7960电机驱动芯片的驱动电路。
(4)PCB原理图和封装的绘制
项目组成员及工作任务分配(序号1为项目组长)
序号
班
级
姓
名
工作内容
联系方式
1
自121
贾航辉
编写程序,整车的装配与调试。
18066702924
2
自121
赵全
电路的设计及PCB的绘制。
18292092074
3
自121
杨濛雨
线路板的焊接,工艺美化。
13669277254
4
自121
张锴
查阅资料收集文档,采购。
13572428364
5
6
课程指导组审批意见*年*月*日
项目组成员及分工
序
号
姓
名
学
号
班
级
工
作
内
容
备注
1
贾航辉
3120413021
自121
编写程序,设计电路,装配与调试。
2
赵全
3120413017
自121
PCB绘制。
3
杨濛雨
3120413014
自121
线路板的焊接,工艺美化。
4
张锴
3120413012
自121
查阅资料收集文档。
概述
本产品基于AVR
ATmega16单片机,用手机终端作为遥控器,使用蓝牙技术与小车通讯,通过PWM调速控制小车速度,舵机转向,控制小车飞快移动。
1
总体设计
1.1
系统功能及技术指标
功能:蓝牙遥控小车。
技术指标:
(1)线路板各元件布局均匀、整齐、紧凑,尽量减小和缩短各元件之间的引线和连接。
(2)线路板焊盘、线、过孔的尺寸、间距符合标准,线拐弯处不得出现尖角。
(3)产品外形美观大方,便于操作使用。
1.2
系统构成
ATmega16
蓝牙
电机驱动
舵机
图1-1
系统构成图
1.3主要设备及元器件选型
(1)ATmega16单片机,价格便宜,能输出4路相位正确的PWM波。简单易学。
ATmega16
有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512
字节EEPROM,1K
字节SRAM,32
个通用I/O
口线,32
个通用工作寄存器,用于边界扫描的JTAG
接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/
计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP
封装)
的ADC
,具有片内振荡器的可编程看门狗定时器,一个SPI
串行端口,以及六个可以通过软件进行选择的省电模式。
图1-2
Mega16引脚图
(2)HC-06蓝牙模块,有效控制距离15米。
图1-3
蓝牙模块
(3)舵机,用于小车转向,方便灵活,比差速效果好很多。
舵机选用MG995型舵机,优点是价格便宜,金属齿轮,耐用度高。
图1-4
MG995舵机
舵机的伺服系统由可变宽度的脉冲来进行控制,控制线是用来传送脉冲的。脉冲的参数有最小值,最大值,和频率。一般而言,舵机的基准信号都是周期为20ms,宽度为1.5ms。这个基准信号定义的位置为中间位置。舵机有最大转动角度,中间位置的定义就是从这个位置到最大角度与最小角度的量完全一样。最重要的一点是,不同舵机的最大转动角度可能不相同,但是其中间位置的脉冲宽度是一定的,那就是1.5ms。如下图:
图1-5
舵机控制波形图
当舵机接收到一个小于1.5ms的脉冲,输出轴会以中间位置
为标准,逆时针旋转一定角度。接收到的脉冲大于1.5ms情况相
反。
(4)BTS7960驱动芯片+360H电机,驱动能力强,提高小车的速度
1.4系统核心处理策略
手机APP软件通过蓝牙发送数据给单片机,单片机通过读取串口接收的不同数据做出相应的动作。蓝牙模块与手机之间通讯波特率为9600.手机发送相应的ASCII码,单片机通过蓝牙接收,A、B、C、D分别对应前后左右。其中左右转向即当单片机接收到CD信号时,通过PD7口(OC2)输出50HZ,不同占空比的PWM波控制舵机转向。同时,指令123分别用于电机调速。
1.5其他小车材质为亚克力板
。
2
详细设计
ATmega16
蓝牙
电机驱动
舵机
2.1功能划分
图2-1
功能模块图
2.12系统原理图及元器件清单
图2-2
系统原理图
2.2
PCB设计
图2-3
PCB-2D视图
图2-4
PCB-3D视图
2.3系统硬件资源清单
序号
名称
规格
型号
数量
1
AVR
单片机
DIP-40直插
Mega-16
1
2
单片机底座
锁紧座
1
3
自锁开关
6脚
1
4
复位开关
1
5
蓝牙模块
HC-06
1
6
BTS7960
贴片
2
7
7805稳压IC
1
8
7806稳压IC
1
9
整车模一套
亚克力板
1
10
充电电池组
1
表2-1
硬件资源清单
备注:电阻,电容,杜邦线等原件不一一列出。
3.软件设计
3.1
软件功能模块
开始
初始化
A
输入指令指令
输出
结束
B
C
D
E
1
2
3
前
后
左
右
清除
PWM输出
图3-1
程序流程图
3.2
源程序(见附录1)
4
结构设计
考虑到车模整体的美观,和后轮间距,最终决定做出10cm*10cm的PCB板。把电池放于下边以降低小车重心。由于联轴器与传动轴之间靠塑料机米固定连接,为了加强整体强度,在这些容易滑脱的地方通过AB胶粘合。
5
调试与测试
5.1
调试
舵机PWM调试
(1)舵机调中,实时改变舵机输入PWM的占空比,确定舵机归中的的占空比大小。
(2)确定舵机的左极限,右极限。
电机PWM调试
电机驱动使用两片BTS7960搭成全桥驱动电路,可通过大电流。给两片BTS7960输入不同占空比20K的PWM波.观察电机转速,设置3个速度档位,最快速度不超过普通人奔跑速度。最终确定最大速度为20K占空比40%的PWM输入。
组装调试。
舵机的左右摆角为左右极限时,前轮胎会卡在车体上。所以通过程序控制左右摆角为合适角度。
5.2
测试
实测效果良好,可达到预期目标。速度,操作灵活性,有效控制距离都达预期目标。
5.3
调试测试后发现的不足
(1)PCB板可以全换为贴片元件,能减小一半的板子面积。
(2)超出有效控制距离后失控,应该设置为失控后停车。
(3)受车体本身材料限制,为防止损坏车体,最大速度不能很大。
6结论
小车达到系统设计要求,可通过手机蓝牙实时控制PWM波调速。转向灵活、轻巧,控制简单。可在手动控制和重力感应控制之间切换。最大速度设置为50%占空比,已经超越人的跑步速度。考虑到车体为亚克力板材质,速度不再提高。由于此次PCB的绘制是第一次,难免出现许多问题。电容的引脚距离比实物小了些,误将串口与IO口连在了一起。不过在后期都一一校正。这里要感谢戴老师在PCB绘制方面的指点。
7
感想
发现无处不在,这辆小车是在无意中产生的。当时在调飞思卡尔,用车上的蓝牙向电脑,发送数据观测车的状态。突然想既然能发送数据,他也就能收数据,通过串口调试助手向蓝牙发送相应数据,果然可以控制小车。后期使用的手机的串口APP,蓝牙小车就这样诞生了。小车适合小孩玩耍使用,轻便灵活。造价低。性能高。
附录1
小车源程序
#
include
#
define
uint
unsigned
int
uint
i;
void
delay_100ms(
uint
k
)
{
while(
k>0
)
{
for(
i=42;
i>0;
i--
);
k--;
}
}
/*串口初始化*/
void
uart_init()
{
UCSRA=0x02;
//异步正常模式
UCSRB=0x18;
//允许发送接受中断和使能
UCSRC=0x06;
//8位数据
UBRRH=0x00;
UBRRL=12;
//波特率位9600
}
void
chushi()
{
PORTD
=
0b11111111;
DDRD
=
0b11111110;
PORTB
=
0b11111111;
DDRB
=
0b11111111;
}
void
init_pwm()
{
TCCR1A
=
0b10100010;//10100010
TCCR1B
=
0b00011001;
ICR1
=
100;
//1199周期
中值91
左极限
40
有极限150
OCR1A
=
00;
OCR1B
=
00;
TCCR2=0x6c;
OCR2=21;
}
void
main()
{
char
num;
double
n,j;
chushi();
init_pwm();
uart_init();
while
(1)
//16
21
28
{
num=UDR;
if(num==
1
)
{
OCR1A
=
20;
OCR1B
=
10;
}
else
if(num==
2
)
{
OCR1A
=
30;
OCR1B
=
10;
}
else
if(num==
3
)
{
OCR1A
=
100;
OCR1B
=
0;
}
switch(num)
{
case
C
:
OCR2=16;
OCR1A
=
30;
OCR1B
=
10;
break;
case
D
:
OCR2=26;
OCR1A
=
30;
OCR1B
=
10;
break;
case
A
:
OCR2=21;
OCR1A
=
30;
OCR1B
=
10;
break;
case
E
:
OCR2=21;
OCR1A
=
00;
OCR1B
=
00;
break;
case
B
:
OCR2=21;
OCR1A
=
10;
OCR1B
=30;
break;
}
for(n=210;n>=160;n--)
{
j=n/10;
OCR2=j;
delay_100ms(4);
}
for(n=160;n=210;n--)
{
j=n/10;
OCR2=j;
delay_100ms(4);
}*/
}
}
16
装置总造价表
组号
L7
项目名称
基于蓝牙控制的智能车
元器件费用(元)
80
线路板制作费(元)
100
外壳组装费用(元)
180
总造价(元)
360
填表人:*年*月*日
篇2:蓝牙电话网关系统综合开发-嵌入式实验报告
蓝牙电话网关系统综合开发-嵌入式实验报告 本文关键词:蓝牙,网关,嵌入式,综合开发,实验
蓝牙电话网关系统综合开发-嵌入式实验报告 本文简介:11嵌入式系统实验报告姓名:宁昭义组数:第5组学号:152108061456专业:信息与通信工程日期:2015年12月20日综合实验(蓝牙电话网关系统综合开发案例)一、实验目的1.熟练建立交叉编译环境。2.了解蓝牙电话网关实现的原理。3.通过编程实现通过建立的蓝牙链接实现对GSM模块功能的控制。二、
蓝牙电话网关系统综合开发-嵌入式实验报告 本文内容:
11
嵌入式系统实验报告
姓名:宁昭义
组数:第5组
学号:152108061456
专业:信息与通信工程
日期:2015年12月20日
综合实验(蓝牙电话网关系统综合开发案例)
一、实验目的
1.熟练建立交叉编译环境。
2.了解蓝牙电话网关实现的原理。
3.通过编程实现通过建立的蓝牙链接实现对GSM模块功能的控制。
二、实验内容
1.前言
在蓝牙电话网关系统中,嵌入式主机起到主控作用,Bluetooth模块则向N个蓝牙电话终端设备提供语音接入功能,GSM/GPRS模块提供语音呼出服务,使得任何一个蓝牙电话终端的呼叫请求都能够连接到公众语音网络,从而实现本系统内部的蓝牙电话终端与外部公众语音通信网络用户的通信。
本开发案例构建了完整的蓝牙电话网关系统,系统组成结构如上图所示。嵌入式蓝牙电话网关是本系统的核心设备,主要使用了本产品中的ARM9嵌入式主机、Bluetooth
和GSM/GPRS通信模块。
本实验通过蓝牙建立无线连接,控制板载GSM模块拨打电话,示意图如下所示。
2.具体任务
1)
开发板1的蓝牙与开发板2的蓝牙建立语音和数据链路。
2)
设置开发板1,使开发板1能控制GSM模块拨打电话。
3)
开发板2通过建好的蓝牙链路控制开发板1的GSM模块拨打电话。
3.实验设备与软件环境
硬件:SemitARM9200开发板、PC机PIII800MHz,256MB以上、串口线(公母)1根、网线1根,音频线一对,7.5V电源1个,以上设备均需2套。
软件:RedHat
9.0
Linux操作系统,SemitARM9200实验开发软件。
三、实验步骤
分别将开发板1与开发板2的DEBUG
COM与PC1和PC2的串口相连,开发板的网口与PC的网口相连。开发板接7.5V电源。启动开发板1与开发板2,并建立交叉编译环境。
在开发板1上插入SIM卡,打开开发板1上GSM开关,按下GSM
RESET键复位GSM,等到GSM
MODE灯闪烁之后说明GSM模块已经启动成功。
开发板1与开发板2分别输入sh
/etc/scripts_arm.sh启动蓝牙
输入hciconfig显示蓝牙地址
在开发板1:
输入cd
/mnt/SEMIT_Project/Bluetooth_Cellphone/Bluetooth_Cellphone_Server进入文件夹
输入./server
开发板2:
输入cd
/mnt/SEMIT_Project/Bluetooth_Cellphone/Bluetooth_Cellphone_Client进入文件夹
输入./client
00:06:6e:17:1c:30
开发板2将通过蓝牙与开发板1建立链接,屏幕上将出现please
select
the
function字样代表已经可以控制开发板2的板载GSM模块拨打电话,按操作界面提示信息进行操作。
四、附录(程序)
Client端
#ifdef
HAVE_CONFIG_H
#include
#endif
#define
DEBUG
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
“bluetooth/bluetooth.h“#include
“bluetooth/hci.h“#include
“bluetooth/hci_lib.h“#include
“bluetooth/l2cap.h“#include
“bluetooth/sdp.h“#include
“bluetooth/sdp_lib.h“#include
“bluetooth/sco.h“#include
“bluetooth/tcs.h“void
baswap(bdaddr_tdst,const
bdaddr_tsrc)
{
register
unsigned
chard
=
(unsigned
char)
dst;
register
const
unsigned
chars
=
(const
unsigned
char)
src;
register
int
i;
for
(i
=
0;
i
“);
memset(cmd_line,0,50);
scanf(“%s“,cmd_line);
ch
=
cmd_line[0];
switch(ch)
{
case
1
:
printf(“please
enter
the
number
to
call/n>“);
memset(phonenum,0,sizeof(phonenum)
);
scanf(“%s“,phonenum);
phonenum[strlen(phonenum)]
=
0;
phonenum_len
=
strlen(phonenum);
memcpy(cmd_line+1,phonenum,phonenum_len);
nwrite
=
write(
s,cmd_line,sizeof(cmd_line)
);
sleep(1);
break;
case
2
:
nwrite
=
write(s,“2“,1);
sleep(1);
close(sco_s);
break;
case
3
:
nwrite
=
write(s,“3“,1);
printf(“exiting
./n“);
exit(0);
default:
break;
}
}
}
int
main(int
argc,char*argv[])
{
memset(phonenum,0,sizeof(phonenum));
debug(“beginingnow./n“);
//tcs_con_bt*
tcs;
//tcs->tcs_cur_state
=
STATE_NULL;
tcs_dt_init(argc,argv);
return
0;
}
Server端
#ifdef
HAVE_CONFIG_H
#include
#endif
#define
DEBUG
#include
#include
#include
#include
#include
#include
#include
#include
/*
File
control
definitions/
#include
/*
Error
number
definitions/
#include
/*
POSIX
terminal
control
definitions/
#include
/*
Mluti-programming
definitions*/
#include
“bluetooth/bluetooth.h“#include
“bluetooth/hci.h“#include
“bluetooth/hci_lib.h“#include
“bluetooth/l2cap.h“#include
“bluetooth/sdp.h“#include
“bluetooth/sdp_lib.h“#include
“bluetooth/sco.h“#include
“bluetooth/tcs.h“#define
MAX_LEN
32
For
debug
#ifdef
DEBUG
void
debug(char
str)
{
printf(str);
}
#else
#define
debug(str)
#endif
void
baswap(bdaddr_tdst,const
bdaddr_tsrc)
{
register
unsigned
chard
=
(unsigned
char)
dst;
register
const
unsigned
chars
=
(const
unsigned
char)
src;
register
int
i;
for
(i
=
0;
i
0)
{
switch(
buf[0]
)
{
case
1
:
//
gw_add_sco();
printf(“received
call
commands/n“);
printf(“phone
num
is
%s,len
is
%d/n“,buf+1,strlen(buf+1)
);
memset(send_cmd,0,sizeof(send_cmd));
memcpy(send_cmd,“ATD“,3);
memcpy(send_cmd+3,buf+1,strlen(buf+1)
);
send_cmd[
strlen(send_cmd)
]
=
;
;
send_cmd[
strlen(send_cmd)
]
=
0x0D
;
write(
fd,send_cmd,sizeof(send_cmd)
);
printf(“calling
GSM/n“);
break;
case
2
:
//gw_close_sco();
printf(“received
release
command/n“);
memset(send_cmd,0,sizeof(send_cmd));
memcpy(send_cmd,“ATH“,3);
send_cmd[strlen(send_cmd)]
=
0x0D;
write(
fd,send_cmd,sizeof(send_cmd)
);
printf(“call
released/n“);
break;
case
3
:
exit(0);
default:
break;
}
}
}
close(client);
close(s);
}
int
main()
{
char
c=0x41;
char
tmp_buf[25];
pid_t
pid;
debug(“beginingnow./n“);
tcs_state
=
STATE_NULL;
fd=open_port(fd,3);
set_opt(fd,115200,8,N,1);
tcs_init();
gw_process();
return
0;
}