工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->综合电路图->DIY小设计:基于iNEMO的3D无线鼠标的软硬件实现方案,附详细器件选型

DIY小设计:基于iNEMO的3D无线鼠标的软硬件实现方案,附详细器件选型

作者:angelazhang时间:2015-07-29

摘要:基于平坦表面工作的传统鼠标,应用范围受到极大限制。当需要在移动中使用鼠标设备时,平坦表面缺失,传统鼠标将无法满足使用要求。在考察了iNEMO开发板特性后,我们提出了一个在三维空间中动作的3D鼠标方案。该方案可以使得鼠标脱离固定工作表面,在三维空间中使用。该设备通过iNEMO开发板内置加速度计检测手在空间的动作,并以此控制鼠标。此方案使鼠标从二维表面走向到更灵活的3D空间,带来全新的用户体验和良好便携性的同时,更有良好的市场前景,将使鼠标向全新的空间控制领域迈进。


2系统概述

2.1研究背景与项目价值

在如今PC普及、笔记本风头正劲、电子竞技风靡数年、HTPC及高清等家庭多媒体娱乐方兴未艾的时候,鼠标——这一从PC初生阶段就诞生的输入设备发展至今,呈现出了历久弥新的强劲姿态。 经典的鼠标产品不断传承,成为玩家和用户口中和手中的传奇。而厂商的进取和市场的厮杀从未停歇,如今的无线键鼠、游戏键鼠、普通鼠标依然是兵家必争之地,无论什么样的鼠标产品,总能不断给消费者以惊喜,这,正是这个行业的魅力。


放眼市场,各类传统光电、机械鼠标和新型3维鼠标、传感器鼠标都是基于二维平坦表面工作的,对鼠标设备的使用带来了极大的限制。当需要在移动中使用鼠标设备时,此类鼠标将无法满足使用要求。我们在考察了iNEMO开发模块中加速度计、陀螺仪等模块特性后,提出了这一款脱离固定表面使用的在三维空间中控制的3D鼠标方案,对传统鼠标的使用盲区加以补充。


传统鼠标缺陷,在于其必须依附于平坦表面工作,在一些特别场合或特别要求下无法实现正常功能。比如教师在讲台上授课需要来回走动,传统鼠标无法跟随教师移动工作;用户不坐在电脑桌前即不能通过鼠标控制电脑;行动不便的用户希望有一款精巧方便的遥控式鼠标满足需求等。与此同时,操作者的手臂必须保持和鼠标同一个平面,长时间保持相似的姿势使操作者无法舒适工作,甚至引发腱鞘炎等疾病。传统鼠标为满足“手握式”的特点,以便携为出发点,存在携带不便等问题,应用受到极大限制。


该设备方案通过佩戴于两个手指的加速度计,以及一块佩戴于手背的iNEMO开发模块感应手部运动和控制动作,使其在三维空间运动,配合不同控制动作达到灵活的操控能力,脱离二维表面的限制。


使用iNEMO可以测出全空间微小移动加速度、角度等信号,采集信号并做处理,实现光标与3D鼠标在整个三维空间同步移动和控制;同时利用加速度传感器检测手指动作,实现鼠键功能。这样的设备具有更优的的操作性,可以在全空间进行操作,更具自由化和方便性。


现有的加速度传感器鼠标方案以及其他传感器、其他技术的鼠标方案,大多都是在二维表面活动,鲜有人设计出基于三维全空间的鼠标产品。我们提出“基于iNEMO的3D无线鼠标”就要打破这一行业壁障,使PC更自由、更灵活的受控,带来鼠标从二维表面向三维空间的技术、理念的革新。


2.2设计要求

系统在3D空间中运动,实现传统鼠标的光标位移、单击、双击、拖曳等基本功能,在此基础上开发更多的组合动作,通过动作组合开发更多便利创意功能,并使用户可以对组合动作进行自定义,提高人机互动能力;定位精度度达到1000—2000cpi级别,操作流畅,解决光标漂移、定位不准等现象;适用温度范围-5到85摄氏度;工作状态稳定。


3方案设计

3.1硬件设计

3.1.1硬件概述

 

图3.1-1-1 系统手部模型示例


鼠标外观为两枚“指环(加速度传感器)”、一个“手背设备(iNEMO)”、PC端一个无线接收NANO模块。设备符合美学设计,观赏性强;人性化设计方案使其并不影响手部运动,不会带来疲劳感,符合人体工学和舒适性要求。


图示系统分为两个大模块:手部模块和PC端模块。其中手部模块含动作感应(iNEMO及三轴加速度计)、电源、无线发送和防丢失模块;PC端模块含主MCU、无线接收装置、USB等模块。


指尖安装两个三轴加速度计装置,分别佩戴于右手食指与中指,通过该模块采集手指不同运动状态和运动组合信息,作为鼠标的控制信息对PC端进行控制;主系统、电源和射频端设计为环形,佩戴于手腕处,并通过两条伸缩螺旋线与指尖系统连接,螺旋线有传输信号、供电、模块连接的作用;由于手部设备不和PC端直连,为防止遗失,设计防丢失装置,当无线设备不慎遗失在附近时,通过被控PC逆向控制鼠标设备LED等和扬声器发出声光信号,使用户容易找回设备。


3.1.2结构框图

3.1.2-1  手部系统框图


3.1.2-2  PC端系统框图


手部系统包括iNEMO、射频模块、传感器模块、电源模块和防丢失模块。其中传感器模块为两个LSM303DLH三轴加速度计,用于采集加速度信号;MCU为iNEMO开发板MCU(STM32F103RET7);传感器信号经由MCU处理、编码后通过nRF24L01发送到受控端PC端系统;电源模块为两块3V纽扣电池,接入iNEMO用其内部稳定芯片转换3V3、1V8电压;找回模块含LED和扬声器,提供找回功能。


PC端系统MCU为STM32F103RBT;射频模块为nRF24L01;从USB取得5V电压并由LDS3985M33R稳压芯片转换为3V3。


3.1.3PCB样图

PC端系统PCB板自主布线,如下

3.1.2-3  PC端系统实物图


3.1.4MCU

主控制器为ST公司32位STM32F103RET7,各模块与引脚接口请看后文模块部分。布线如下:

3.1.3-1  STM32布线图


STM32性能优异,表现为:72MHz CPU,20K SRAM ,2x12位ADC, PWM定时器, 4Mb/S UART,18mb/秒SPI,18MHzI/O翻转速度。


器件为64引脚封装,方便起见,并未按原器件引脚顺序画出,而对其做适当分类罗列。正上方6引脚为供电引脚;右下角PB主要用于接三轴加速度计和磁强计;右中上部接SD存储卡,下部接偏航轴陀螺仪等;左上角为晶振接口;左下角为总线扩展器、LED、测试等接口;左中为UART和SPI总线,SPI接射频模块。


3.1.5加速度计

3.1.4-1  LSM303DLH引脚和I2C连接图示


端口24~27为线加速度信号输出与控制端口, SCL时钟、SDA数据接I2C总线(通过iNEMO的GPIO口配置I2C),VDD接iNEMO板上3V3;GND接地;SAO接地。如下:


LSM1/2

iNEMO

备注

VCC

3V3

——

SCL

UART_TX/CTX

模拟I2C

SDA

UART_RX/RTX

模拟I2C

SAO

GND/VCC

地址

GND

GND

——

3.1.4-1  加速度计与iNEMO连接端口表


3.1.6射频模块

经调研,采用挪威NordicVLSI公司的射频收发器NRF24L01作为本系统的无线收发模块。NRF24L01工作在2.4~2.524 GHz ISM频段,内置频率合成器、功率放大器、晶体振荡器、调制器等。以下是NRF24L01结构框图:


图3.1.5-1 nRF24L01结构框图


引脚封装:


应用电路:

3.1.5-3 射频应用电路


3.1.5-4nRF24L01模块接口


nRF24L01

iNEMO

PC端

VDD(1、2

3V3

VDD

CE

SPI1_CS

PA4

SCK

SPI1_SCK

PA5

CSN

GND

GND

IRO

GPIO4

PC7

MOSI

SPI1_MOSI

PA7

MISO

SPI1_MISO

PA6

GND(9、10

GND

GND

 

表格3.1.5-1  nRF&iNEMO接口对应表


发射模式:接收节点地址TX_ADDR和有效数据TX_PLD由SPI写入缓存(CSN为低时连续写入TX_PLD,发射时写入一次TX_ADDR),CE置为高并保持至少10μs,延迟130μs后发射数据;若自动应答开启,发射后进入接收模式接收应答(应答接收地址与TX_ADDR一致)。收到应答则通信成功,TX_DS置高,TX_PLD从缓存中清除;未收到应答则重发该数据(自动重发开启);重发次数达上限,MAX_RT置高,缓存数据保留以再次重发;MAX_RT/TX_DS置高时,IRQ变低产生中断。发射成功时CE为低则进入空闲模式1;发送堆栈中有数据且CE为高,进入下一次发射;发送堆栈中无数据且CE为高,进入空闲模式2。


接收模式:延迟130μs进入接收状态等待数据。接收方检测到有效地址和CRC时,将数据包存在缓存中,同时RX_DR置高IRQ变低产生中断,通知MCU取数据。若自动应答开启,接收方回传应答信号。接收成功时若CE变低,则进入空闲模式1。


3.1.7电源

电源框图如下:

3.1.7-1   供电模块框图


通过稳压芯片LDS3985M33R,得到3.3V输出电压,给系统各器件供电。应用电路如下:

3.1.7-2 稳压芯片电路


3.2软件流程构架

3.2.1动作组合概述

依据系统预设操作方法,我们有两种操作模式可用,分别为水平模式和竖直模式。水平模式姿势类似传统鼠标模式,手指弯曲指尖指向桌面,此时Z-指为尖向内方向,故向内运动组合为点击操作;竖直模式手平伸于空中,指尖水平,以指尖向下方向为Z-,此时向下运动组合为点击操作。


序号

功能

动作组合

备注

1

光标移动

两指同时同向(YZ平面)移动,光标随手指移动

  1. 坐标系基于指尖定义:指尖前X+,左Y+,下为Z+,

2

单击

右指保持静止,左指向Z+运动再收回

3

右击

左指保持静止,右指向Z+运动再收回

4

睡眠/锁定

左右指同步指向Z+(下),鼠标进入打字模式,此时光标和点击动作锁定

3.2.1-1 设备功能表


对三轴加速度计模块与iNEMO开发板做适当安装,使坐标定义如下:指甲盖方向为Z+,指尖前为X+,指尖左为Y+。当指尖系统在空间旋转运动时,检测手背部iNEMO中加速度传感器数据,Y-方向检测到较大加速度值时光标右移,反之左移;X-方向检测到加速度值时上移,反之下移。


3.2.2iNEMO软件流程

1、FreeRTOS系统

工程中使用了FreeRTOS系统,其作为一个轻量级的操作系统,提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,MCU总是让处于就绪态的、优先级最高的任务先运行。FreeRT0S内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享MCU的使用时间。


FreeRTOS系统有效的减轻了系统负荷,明显提高了数据处理的速度。


2、三个任务交互

为提高软件效率,使用了三个任务进行控制。


任务一:命令管理控制任务inCommandTaskFunction();


任务二:数据采样&发送控制任务inDataTaskFunction();


任务三:测试任务testTaskFunc()。


其中任务一和任务二通过信号量s_timSemaphore进行交互通信。


3、底层驱动的添加

由于工程中,我们增加一个无线收发模块NRF24L01,因此软件上添加了相应的底层驱动文件。NRF24L01中含有spi驱动spi.h、spi.c和NEF24L01驱动24l01.h、24l01.c文件。并在iNEMO官方软件内部添加了nRF24L01的相关代码。


4、iNEMO部分软件

流程如下:(关键代码见附件iMEMO修改程序GUI部分。)

图3.2.2-1  传感器软件流程

图3.2.2-2  iNEMO射频流程


3.2.3PC端MCU部分软件:

PC端主要含数据接收、数据处理、鼠标控制、防丢失等软件模块。


工程中运用了STM32F10x_StdPeriph_DriverV3.1.1和STM32_USB-FS-Device_DriverV3.1.1库文件。软件流程如下:

3.2.3-1  PC端系统程序流程


定义食指传感器为L(left),中指传感器为R(right),iNEMO上加速度传感器为B(back)。用B传感器动作执行判定光标移动;L、R传感器判定点击,如下:R保持,L向Z+再收回判定单击;L保持,R向Z+再收回判定右击;L、R同时向Z+,判定为休眠开启或解除,进入休眠或打字状态,光标不动作。动作模式识别流程如下:

 

3.2.3-2  动作判据流程图


关键代码:


if(mode==0)                                                                                         //RX模式

{      

         RX_Mode();

         while(1)

         {                                                                         

                   if(NRF24L01_RxPacket(tmp_buf)==0)                      //一旦接收到信息,则显示出来.

                   {

                            mouse=(Mouse*)tmp_buf;

         Joystick_Send(0,(-mouse->sBAcc[1]>>8)*10,(-mouse->sBAcc[0]>>8)*10,-(mouse->sBAcc[2]>>8)*10);

                            while((mouse->sLAcc[0]>800)&(mouse->sRAcc[0]<600))

                            { 

                                     Joystick_Send(LEFT_CLICK,0,0,0);//模拟左键按下

                                     delay_ms(10);

                                     if(NRF24L01_RxPacket(tmp_buf)==0)

                                     {

                                              mouse=(Mouse*)tmp_buf;      

         Joystick_Send(0,(-mouse->sBAcc[1]>>8)*10,(-mouse->sBAcc[0]>>8)*10,-(mouse->sBAcc[2]>>8)*10);

                                     }

                            };

                            while((mouse->sRAcc[0]>800)&(mouse->sLAcc[0]<600))

                            {                                    

                                     Joystick_Send(RIGHT_CLICK,0,0,0);//右键按下

                                     delay_ms(10);

                                     if(NRF24L01_RxPacket(tmp_buf)==0)//一旦接收到信息,则显示出来.

                                     {

                                              mouse=(Mouse*)tmp_buf;

         Joystick_Send(0,(-mouse->sBAcc[1]>>8)*10,(-mouse->sBAcc[0]>>8)*10,-(mouse->sBAcc[2]>>8)*10);

                                     }

                            };

                            while((mouse->sLAcc[0]>800)&(mouse->sRAcc[0]>800))

                            {

                                     Joystick_Send(0,0,0,0);

                                     delay_ms(15);

                                     if(NRF24L01_RxPacket(tmp_buf)==0)

                                     {

                                               mouse=(Mouse*)tmp_buf;

                                     }

                            };

                   }

         };

}

         详情请参阅附件MDK工程部分。


3.3信号处理方案

实测过程发现加速度计LSM303DLH检测到的数据虽然可以精确到0.1mg级别,但到了这个级别,任意一个毛刺信号、随机误差带来的误差都是不可忽略的。由于鼠标动作检测并不需要如此精度的测量值,且微小信号中的毛刺、随机误差难以清除,我们利用以下方式对信号进行处理。


由加速度计和iNEMO上所有传感器检测到的数据都是s16格式数据,低八位数据带来 的加速度精度,既0.256g数量级的加速度精度。与此同时,鼠标动作判定信号需要的传送的数据位u8格式,从s16转化为u8会带来低位数据的舍弃。因此,把s16格式的数据取其高八位,传送给鼠标控制语句。实例表明,由此处理的加速度信号波形十分光滑,且完全能胜任光标的控制需要。


据实测,运用上述方法对信号积分处理相对误差小,波形和控制精度有明显改善。


4扩展开发方案

iNEMO集成五个意法半导体传感器:三轴数字陀螺仪、三轴加速度计、磁强计、偏航陀螺仪、压力传感器和温度传感器。其模块众多,功能强劲。除利用三轴加速度计检测手部运动外,还可利用富余传感器做更多、更精确开发。由于时间关系,本系统还存在很多富余开发空间,对设备做后期开发做如下思考:


利用iNEMO输出的姿态数据(角度、四角位置变化等)辅助进行更精确、更灵敏的手部运动检测,对鼠标功能做进一步优化开发,并补充用户自定义动作模式,开发更人性化的动作控制,提高用户体验和市场竞争力。


结合姿态数据检测手部运动加速度值,并通过一定算法减小重力加速度的影响,再通过两次离散数字积分算法,去除一次、二次趋势项后得到精确手部运动位移信号,以此更精确、快捷的控制鼠标。


由于采用的二次积分、拟合一次、二次趋势项并消除,得到纯净手部位移的算法稍显复杂,本部分开发尚未完成,留待产品后续开发所用。


5硬件配置

对系统所含器件做如下统计:


种类

型号/数量

MCU

STM32F103RBT6  1

三轴加速度计

LSM303DLH      2

射频模块

nRF24L01         1

稳压器件

LDS398M33R      1

开发板

iNEMO           1



评论

技术专区