基于cortex-M3、ADXL345的重力感应遥控器的实现

发布者:omicron25最新更新时间:2017-11-04 来源: eefocus关键字:cortex-M3  ADXL345  重力感应遥控器 手机看文章 扫描二维码
随时随地手机看文章

已经是很久没有写文章了,因为没有时间,人家都说大四不考研,天天像过年,可我依旧没能有那份闲暇的时间。

现在几乎人人的手里都是一款安卓智能机这是我非常羡慕的,而我手里只有上学期用380元买的一台二手诺基亚N96,虽然也称得上智能机但是远远没有如今安卓智能的优秀,其中一个功能就是通过重力感应玩赛车游戏,我想这个大家都不陌生,只要把手机歪一歪斜一斜就可以控制赛车方向了,这个功能令桥哥好生羡慕嫉妒恨,可惜自己的手机不能玩,上周突来灵感何不自己做一个玩玩。正好上学期开始着手给侄子做的四轴飞行器的基板基本调试完成,核心的芯片就是一块M3微控器,一块三轴加速度传感器ADXL345,一块三轴数字陀螺仪。而要做一个简单的重力感应遥控器用M3结合ADXL345就可以实现了。实际上由于之前调试把芯片的控制函数都写好了,而且上位机的程序又有之前给学长做毕设的时候写的程序的基础,所以花的时间很少也就两个下午的时间。

基于cortex-M3、ADXL345的重力感应遥控器的实现

要实现一个控制电脑游戏的重力感应遥控器原理也非常简单,无非就是判断此时遥控器倾斜角度,然后M3将指令迅速传给电脑,电脑根据指令给出跟敲击键盘方向键一样的指令就完事了。检测倾斜角度由ADXL345实现,三轴加速度传感器能够测出静态时xyz方向的加速度,如果平放的情况下,只在z轴有一个向下的重力加速度,如果倾斜,那么重力将可以分解到xy方向,这样产生了xy方向的加速度,从而可以测得遥控器向哪边倾斜了。

基于cortex-M3、ADXL345的重力感应遥控器的实现

接下来,M3通过IIC总线方式读取ADXL345测得的X轴的加速度数据,只要通过判断X轴方向的数据就可以判断基板往哪个方向倾斜了。下面是M3的测量代码基于cortex-M3、ADXL345的重力感应遥控器的实现

    M3判断出倾斜方向之后立即通过57600波特率的串口向电脑上位机发送指令,为了提高遥控器灵敏度和反映速度,我这里指令只用了一个字符,L代表左,R代表右,并且不使用校验,也不需要上位机回应M3,M3只管往上位机不断发指令就可以了,可以大大提高效率,实际测试中,这种波特率情况下即保证了传输速率,误码率也是较低的。

    接下来上位机接收到方向指令后就得通过代码来模拟我们平时敲击键盘的动作,程序也是非常简单。跟我以前做的无线鼠标的实现代码非常的类似。

基于cortex-M3、ADXL345的重力感应遥控器的实现

通过这段代码可以发现,除了左键右键的指令外,还有一个名为’X’的空白指令,代表的是当遥控器水平放置的时候释放按键。

VC写的上位机界面如下所示

基于cortex-M3、ADXL345的重力感应遥控器的实现

  看起来比较的粗糙,外观上我就不做什么修饰了,毕竟做的是电子而不是软件开发,只要能够实现我需要的功能,软件难看一点就将就吧。中间的四个方向按键作用是为了满足有些游戏是需要一直按下某个按键玩的,比如极品飞车你就得一直按着方向键才能走吧呵呵,当然就目前来讲我只判断了ADXL345的X轴数据,如果联合Y轴数据来判断,就可以同时控制上下左右四个方向了,这点我就先不再做,因为最近还是忙。最右边的调试数窗口用来做开发的时候监测串口数据用的,也可以用于系统的后续开发的调试使用。

基于cortex-M3、ADXL345的重力感应遥控器的实现

    实测状况,因为这块小板原先的设计是微型四轴所以用的是电池供电,还是非常方便的,这块电池也是非常给力,就冲了一次电,我都拿它调试过很长的时间了,依旧有电。板载电源芯片用的是TI的一款超低压降的3.3V稳压芯片,电池原本电压标称是3.7V,实测充电完成有4.2V左右。

基于cortex-M3、ADXL345的重力感应遥控器的实现

遥控器通过串口跟电脑连接以后,打开软件然后打开串口,然后把软件最小化之后就可以使用了,已经过了一把重力感应玩赛车的隐。

    我现在还用的是有线串口实现通信,如果是无线的遥控器那将会更加完美,实际上我的板子上设计有2.4G无线通信模块接口,但是向无线模块写入发送数据,然后另一方还得有接收然后再通过串口传给电脑,这中间就额外增加了一段时间,或许会给遥控器的灵敏度带来下降,当然我还没有实测过,这是后续开发的事,我已经没有太多的时间放在此处,接下来我的重心将放在四轴飞行器上边,或许最好的结果是在今年过年可以让小侄看到能够飞起来的四轴,当然很可能也是他什么都看不到,我只能尽力了况且还有好多任务做真心忙。


关键字:cortex-M3  ADXL345  重力感应遥控器 引用地址:基于cortex-M3、ADXL345的重力感应遥控器的实现

上一篇:基于MSP430、STM32的2.4G无线游戏遥控器实现
下一篇:STM32学习笔记之中断调试

推荐阅读最新更新时间:2024-03-16 15:43

Cortex-M3向量表
Cortex-M3支持大量的中断和异常,其中包括CM3固有的和芯片本身所特有的,具体有多少个中断得由芯片制造商决定。 向量表: 向量表其实是一个word(32位)型数组,其中每一项代表一种异常的起始地址,当有异常发生时,相应的异常处理函数将被执行。向量表是可以重定位的,重定位由NVIC来控制。复位时,重定位控制寄存器初始值为0,所以在复位时,向量表必须存放在0地址处。向量表定义如下: 复位时序: 当处理器复位之后,会从存储器中读取两个word的数据。地址0x00000000数据为SP(栈寄存器)初始值,地址0x00000004数据为程序的起始地址,也就是说复位之后,程序将从该处开始执行。例如:
[单片机]
<font color='red'>Cortex-M3</font>向量表
Cortex-M3 and Cortex-M4 Memory Organization
The Cortex-M3 and Cortex-M4 have a predefined memory map. This allows the built-in peripherals, such as the interrupt controller and the debug components, to be accessed by simple memory access instructions. Thus, most system features are accessible in program code. The predefined memory map also allows the Cortex-M3
[单片机]
<font color='red'>Cortex-M3</font> and Cortex-M4 Memory Organization
μCOSII在Cortex-M3核ARM处理器上的移植
  目前,嵌入式技术已被广泛应用到汽车电子、无线通信、数码产品等各个领域。嵌入式操作系统及嵌入式处理器技术发展迅猛,嵌入式操作系统典型代表有μCOS—II、μClinux、Winclow CE、VxWorks等;嵌入式处理器包括ARM、MIPS、PowerPC等。随着软硬件技术的发展,人们开始意识到基于嵌入式操作系统的程序开发模式的便利性及可靠性,并且在程序开发过程中开始倾向于从传统超循环开发模式转向基于嵌入式操作系统的开发模式。    1 软硬件开发环境及处理器介绍   1.1 软件硬开发环境   本移植过程使用的软件环境是RealView MDK开发套件,此产品是ARM公司最新推出的针对各种嵌入式处理器的软件开发工
[嵌入式]
STM32中用到的Cortex-M3寄存器说明
在STM32中用到了Cortex-M3定义的三组寄存器,有关这三组寄存器的说明不在STM32的技术手册中,需要参考ARM公司发布的Cortex-M3 Technical Reference Manual (r2p0)。 在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下: 一、NVIC寄存器组 STM32的固件库中有如下定义: typedef struct { vu32 ISER ; u32 RESERVED0 ; vu32 ICER ; u32 RSERVED1 ; vu32 ISPR ; u32 RESERVED2 ;
[单片机]
cortex-m3 栈的8字节对齐
一、什么是栈对齐? 栈的字节对齐,实际是指栈顶指针须是某字节的整数倍。因此下边对系统栈与MSP,任务栈与PSP,栈对齐与SP对齐 这三对概念不做区分。另外下文提到编译器的时候,实际上是对编译器汇编器连接器的统称。 之前对栈的8字节对齐理解的不透,就在网上查了好多有关栈字节对齐、还有一些ARM对齐伪指令的资料信息,又做了一些实验,把这些零碎的信息拼接在一起,总觉得理解透这个问题的话得长篇大论了。结果昨天看了AAPCS手册、然后查到了没有使用PRESERVE8伪指令出现错误的实例,突然觉得长篇大论不存在了,半篇小论这问题就能理顺了。 二、AAPCS栈使用规约 在ARM上编程,但凡涉及到调用,就需要遵循一套规约AAPCS:《Proce
[单片机]
STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
ADXL345 ADXL345是一款常见的的3轴加速度计, Analog Device生产. 13位分辨率, ±16 g测量范围, 分辨率3.9 mg/LSB. 可通过SPI(3线或4线)或I2C接口访问. 主要用于倾斜检测, 静态重力加速度测量, 以及运动或冲击导致的动态加速度测量. 能够测量不到1.0°的倾斜角度变化. 可以对单击, 双击, 自由落体等情况设置中断. 模块与STC8H的接线 市面上的模块, 一般是8个pin脚, 在使用SPI接线方式的情况下, 与STC8H的接线方式如下. 除了SPI用到的CS, MISO, MOSI, SCLK以外, STC8H还需要提供两个中断输入, 因为INT0, INT1已经
[单片机]
STC8H开发(六): SPI驱动<font color='red'>ADXL345</font>三轴加速度检测模块
Cortex-M3学习日志(八)-- TFT实验Part(a)
自己用的LPC1768的开板带有一块2.4寸的TFT彩色液晶屏,虽然自己工作中还用不过显示屏,但是晚上闲着也是闲着,于是继续玩咱的LPC1768吧。 我的开发板上的液晶屏的用的是SPI接口,当然你也可以把它设计成并行口,其接口电路如下所示: 话说这个液晶屏的驱动芯片是ILI9325,在网上下载了该芯片的数据手册,好家伙有111页,全是E文呀,没办法,谁让咱是小电工呢,就慢慢啃吧。ILI9325这个芯片的寄存器比较多,不过没关系,我们暂时用到的不是太多,这里只要简要的总结,剩下的还是日后用到了再好好研究吧。 1、寄存器03H(Entry Mode),该寄存器主要设置图像的显示模式,包括屏幕的扫描方式(水平扫描或垂直扫描)
[单片机]
<font color='red'>Cortex-M3</font>学习日志(八)-- TFT实验Part(a)
什么是STM32以及如何学习?
STM32的核心Cortex-M3处理器是一个标准化的微控制器结构,希望思考一下,何为标准化?简言之,Cortex-M3处理器拥有32位CPU,并行总线结构,嵌套中断向量控制单元,调试系统以及标准的存储映射。 嵌套中断向量控制器(Nested Vector Interrupt Controller,简称NVIC)是Cortex-M3处理器中一个比较关键的组件,它为基于Cortex-M3的微控制器提供了标准的中断架构和优秀的中断响应能力,为超过240个中断源提供专门的中断入口,而且可以赋予每个中断源单独的优先级。利用NVIC从可以达到极快的中断响应速度,从收到中断请求到执行中断服务的第一条指令仅需12个周期。这种极快的响应速度一方
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved