用Cortex-M3与ADXL345做个重力感应遥控器

发布者:温柔微笑最新更新时间:2014-05-06 来源: 21ic关键字:Cortex-M3  ADXL345  重力感应遥控器 手机看文章 扫描二维码
随时随地手机看文章
已经是很久没有写文章了,因为没有时间,人家都说大四不考研,天天像过年,可我依旧没能有那份闲暇的时间。

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

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

接下来,M3通过IIC总线方式读取ADXL345测得的X轴的加速度数据,只要通过判断X轴方向的数据就可以判断基板往哪个方向倾斜了。下面是M3的测量代码

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

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

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

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

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

实测状况,因为这块小板原先的设计是微型四轴所以用的是电池供电,还是非常方便的,这块电池也是非常给力,就冲了一次电,我都拿它调试过很长的时间了,依旧有电。

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

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

关键字:Cortex-M3  ADXL345  重力感应遥控器 引用地址:用Cortex-M3与ADXL345做个重力感应遥控器

上一篇:Pebble智能手表采用STM32F205RE MCU
下一篇:一种迷你数控雕刻机系统的设计方案

推荐阅读最新更新时间:2024-03-16 13:39

ARM Cortex-M3 学习笔记(4-3)
最近在学ARM Cortex-M3,找了本号称很经典的书 An Definitive Guide to The ARM Cortex-M3 在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。 数据处理指令 Cortex-M3支持的数据处理指令非常多,这里就捡重要的、常用的来介绍。 四则运算指令 基本的加、减法运算有四条指令,分别是ADD、SUB、ADC、SBC ADD Rd,Rn, Rm ; Rd = Rn+Rm ADD Rd,Rm ; Rd += Rm ADD Rd,#imm ; Rd += imm ADC Rd,Rn, Rm ; Rd = Rn+Rm+C ADC Rd,Rm ; Rd
[单片机]
ARM <font color='red'>Cortex-M3</font> 学习笔记(4-3)
基于MDK RTX的Cortex-M3多任务应用设计
1 MDK RL RTX和COrtex M3概述 MDK开发套件源自德国Keil公司,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。MDKRL IUX是一个实时操作系统(RTOS)内核,完全集成在MDK编译器中。广泛应用于ARM7、ARM9和Cortex-M3设备中。它可以灵活解决多任务调度、维护和时序安排等问题。基于RL I订X的程序由标准的C语言编写,由Real View编译器进行编译。操作系统依附于C语言使声明函数更容易,不需要复杂的堆栈和变量结构配置,大大简化了复杂的软件设计,缩短了项目开发周期。 Cortex M3是一个32位的核。它是首个基于ARMv7M架构,主要针对价格敏感但又具备高系统效能需求的嵌
[单片机]
基于MDK RTX的<font color='red'>Cortex-M3</font>多任务应用设计
意法半导体(ST)在下一代32位微控制器内采用ARM CORTEX-M3处理器
ARM Cortex-M3 处理器为意法半导体开发低成本、低功耗的应用产品提供高性能的 32 位技术 中国  — 世界领先的微控制器开发商 意法半导体 ( 纽约证券交易所 : STM) 与 ARM 在 加州 圣克拉拉举行 的 ARM 开发商大会上 宣布 , 意法半导体将在其下一代 32 位微控制器系列产品内集成 ARM   Cortex - M3 处理器。 ST 是 ARM 开发新的 Cortex-M3 处理器的主要合作伙伴之一,通过签订这个许可证协议, ST 将能够加快市场从高端的 8 位、 16 位微控制器
[焦点新闻]
基于激光测距的车辆宽高检测系统设计
随着我国经济的快速发展,高速公路建设和公路运输规模都得到了前所未有的发展,由此带来的车辆超限超载现象也日益严重。超限运输一方面会缩短公路和桥梁的使用寿命,另一方面会造成车体形状的改变及车辆性能的下降,形成交通安全的严重隐患。目前,车辆超宽超高治理作为治超工作的重要组成部分,大多还处于人工阶段,主要由工作人员用卷尺或者竹竿实测宽高,既增加了工作人员的工作量,又降低了工作效率。为实现超竟超高治理工作的自动化和智能化,采用激光测距技术,选用基于ARM Cortex-M3内核的处理器LM3S8962,设计开发了一套智能车辆宽高检测系统。本系统可对行进车辆进行高精度动态扫描,实现宽高检测。 1 激光测距传感器的选择 激光以其高亮度、高方
[嵌入式]
基于ARM Cortex-M3的MODBUS协议实现及其应用
漏磁探伤作为非接触式的无损探伤技术,其具有检测速度快、灵敏度高、无需耦合剂、易于实现自动化等特点,是钢轨探伤技术的重点研究方向。为解决漏磁探伤研究中的实验仿真问题,研制了基于嵌入式系统的无损探伤试验仪,通过实现MODBUS协议与变频器通信,以此驱动交流电机与机械试验装置,完成运动控制并进行无损探伤试验。 针对无损探伤试验仪中变频器通信问题,依据MODBUS协议规定,利用RealView MDK开发了基于ARM Cortex-M3微控制器的嵌入式软件,实现了与变频器的MODBUS通信,完成变频调速的运动控制功能。 1 MODBUS协议 1.1 MODBOS协议简介 MODBUS是Gould Ine注册的通讯协议商标,该协议具
[单片机]
基于ARM <font color='red'>Cortex-M3</font>的MODBUS协议实现及其应用
关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题
在编译下面一段代码时: STACK_TOP EQU 0x20002000 AREA Reset,CODE,READONLY DCD 0x20002000 DCD Start ENTRY ; CODE16 Start ldr r2,=Test LDRD r0,r1, LDRD r0,r1, LDRD r0,r1, ; movs r0,r0 ; NOP ; align 4 Test DCD 0x12345678 END 我发现,如果加上NOP或align4,程序就不会跑飞,否则程序就跑飞了。
[单片机]
关于keil编译<font color='red'>cortex-m3</font>纯汇编时为什么问题使用align地址问题
STM32(Cortex-M3)中NVIC(嵌套向量中断控制)的理解
简介:STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。 1. 何为占先式优先级(pre-emption priority) 高占先式优先级的中断事件会打断当前的主程序/中断程序运行—抢断式优先响应,俗称中断嵌套。 2. 何为副优先级(subpriority) 在占先式优先级相同的情况下,高副优先级的中断优先被响应; 在占先式优先级相同的情况下,如果有低副优先级中断正在执行, 高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应—非抢断式响应(不能嵌套)。 3. 判断中断是否会被响
[单片机]
STM32(<font color='red'>Cortex-M3</font>)中NVIC(嵌套向量中断控制)的理解
Cortex-M3的第一个内嵌汇编函数(MDK环境)
#include memmap.h #include gpio.h #include Defination.c u8 i='a'; __asm u8 plus(u8 a) //注意是两个 _ { MOV R1,R0 //由于R0传递第一个参数,故将a的值赋给R1寄存器 ADD R1,#6 //将R1的值加6 MOV R0,R1 //返回值写入R0 BX LR //返回主程序 } int main(void) { *RCC_APB2ENR=0x00000018;//打开portb和portc的时钟 setPORT(&POR
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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