基于ADXL345的重力感应遥控器

基于ADXL345的重力感应遥控器

Abstract: This passage mainly describes a gravity sensor systems based on ADXL345 and HC-05 Bluetooth,introduces the overall design and system structure.
Key words: ADXL345;HC-05 Bluetooth
摘 要: 本文主要描述的是一种基于ADXL345和HC-05蓝牙的重力感应遥控器,介绍其整体的设计方案和系统结构。
关键词: ADXL345;HC-05蓝牙

1、简介

ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),测量范围达± 16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。ADXL345非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。如果平放的情况下,只在Z轴有一个向下的重力加速度,如果倾斜,那么重力将可以分解到XY方向,这样产生了XY方向的加速度,从而可以测得遥控器向哪边倾斜了。当达到某个方向的值后可以让其执行相应的功能,比如控制车前后左右,再通过PWM的调节使车随着倾斜度的增加而加速,也可以利用该遥控器去控制电脑中的极品飞车这款游戏的进行。

1.1、总体设计方案

系统的运行流程图:
在这里插入图片描述

2、硬件设计

采用STC12C2052AD系列单片机可以省掉复位电路、外部数据存储器(如24Cxx系列芯片),某些场合还可以省掉晶振,电路简单、价格低廉。一些指令执行速度是传统8051的24倍,最低的也是3倍。用该块单片机的另一个主要原因是它只有20个引脚,体积较其它的单片机大大的减小,用来做遥控器最适合不过。

2.1、电源模块(9V电池、AMS1117-5.0V转压芯片)

电源由变压部分、滤波部分、稳压部分组成。转压芯片是将9V电压转化为5V给单片机正常供电。考虑到电路的稳定性的原因,在转压之前还给AMS1117-5.0V分压,减少它的压降。用大电容装在电源、蓝牙两侧,起到滤波的作用,使数据传输更为稳定,准确。同时也防止了单片机在使用过程中,由于不稳定振荡断开蓝牙,从而导致的失控现象。
在这里插入图片描述

2.2、HC-05蓝牙模块

蓝牙模块实物如下,之所以选择该蓝牙,是因为其是主从一体,根据需要设置AT指令让其做主机或从机。使用AT命令进行控制,具有低功耗、体积小和收发灵敏等优点,还可以简化通行结构。因为该模块的传输距离较长,所以可以用来控制玩具小车。
在这里插入图片描述

2.3、3D外壳设计

从技术角度来看,3D打印是快速成型技术的一种。利用Soilworks 软件为其设计外观。然后通过Makebot软件转化为打印机识别的格式。因为到最后该款遥控器是要绑在手上进行控制,所以为其设计了这个3D外观。
在这里插入图片描述

2.4、PCB图

该PCB设计的时候尽量缩小其体积,使其可戴在手上
在这里插入图片描述

2.5、实物图

![](https://img-blog.csdnimg.cn/2019032222031572.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MjAyODcz,size_16,color_FFFFFF,t_70)
在这里插入图片描述

软件设计

//左右影响的是X,前后影响的是Y---//左负右正,后负前正
unsigned char Left=0x00;
unsigned char Stop=0x11;
unsigned char Back=0x22;
unsigned char Go=0x33;
unsigned char Right=0x44;
//发送数据
void Send(unsigned char CMD)				
{
	SBUF=CMD;
	while(!TI);
	TI=0;
}
//对数据进行处理,当倾斜至指定角度就发送相应数据
void Data_Process()					  
{
	XYZ_data[0]=BUF[1]<<8|BUF[0];//X
	XYZ_data[1]=BUF[3]<<8|BUF[2];//Y
	if(XYZ_data[0]<-110)
		Send(Left);
	else if(XYZ_data[0]>110)
		Send(Right);
	else if(XYZ_data[1]<-110)
		Send(Back);
	else if(XYZ_data[1]>110)
		Send(Go);
	else Send(Stop);
}
 void main()
{ 
											    	Delay50ms();	                   
	    UartInit();	
    	Init_ADXL345();                 	//初始化ADXL345
    	while(1)                         	//循环
   	{ 
       		Multiple_Read_ADXL345();       	//连续读出数据,存储在BUF中
       Data_Process();
       		Delay50ms();		//每50ms发送一次
    	}
}

4、结束语

该遥控器可用于电脑游戏的操作以及智能小车的控制,10米内控制效果较好,并且用IIC协议控制的ADXL345在很多方面得以应用。

参考文献

[1]ADXL345数据手册.pdf
[2] 蓝牙AT指令集.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老陈聊架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值