这篇文章来源于DevicePlus.com英语网站的翻译稿。
今天,我们介绍一款由洛加利福尼亚大学洛杉矶分校(UCLA)电气和电子工程师协会(IEEE)学生分会一群聪明的工程师研发的3D AirMouse。AirMouse的功能与传统电脑鼠标非常类似,但是能够检测三维运动。
Device Plus已经与100多所美国顶尖大学展开合作,希望通过资助一些缺乏资金或资源的项目来促进学生创新。目前,Device Plus正在提供硬件赞助计划,并希望与活跃的学生工程组织合作,以构建我们的“连接”部分。
加州大学洛杉矶分校IEEE
加州大学洛杉矶分校IEEE(UCLA IEEE)是一个IEEE学生分会,致力于“为全校工程学生带来亲身实践体验”。该项目完全由学生们自己开展,高年级学生负责指导参与项目计划的新成员。高级项目(Advanced Projects)是UCLA IEEE为期四年的项目之一,旨在让具有中等硬件和软件经验的学生学习微控制器硬件、通信协议、原理图和电路板设计等高级主题。
参与高级项目(Advanced Projects)的学生组成多个2-4人的团队,在学年的三个季度中研发两个项目。通过第一个项目——AirMouse,学生将学习不同的通信协议、硬件寄存器和寄存器使用等概念。有了这些知识,学生们将在接下来的两个季度中继续构建自己的四轴飞行器,同时还会学习其他概念,比如使用MOSFET作为开关以及PWM速度控制等。
作为UCLA IEEE高级项目(Advanced Projects)计划的一部分,最初的AirMouse由Rahul Iyer、Aaron和Andrew Wilhelm研发。
AirMouse概述
我们都用过电脑鼠标,但是它们只能在桌面之类的平面上工作。在本教程中,我们将制作一个“AirMouse”——一个能够在3D空间中运行的计算机鼠标!用户通过倾斜鼠标就可以让屏幕上的光标移动,从而可以进行大范围自定义动作。我们首先展示构建AirMouse的基础知识,然后介绍如何扩展其功能!
AirMouse主要由两个部分组成:戴在手上的鼠标发射器和连接用户计算机的接收器。发射器收集鼠标的方向和按钮状态信息;而接收器转换这些信息,从而在计算机屏幕上执行相应操作。
为了易用性和简洁性,我们最初利用Arduino Pro Mini和Teensy 3.2微控制器——市场上深受业余爱好者欢迎的两种最小的微控制器——构建AirMouse。两个微控制器通过一对nRF24L01 RF模块进行无线通信,AirMouse使用MPU6050加速度计检测运动。
然而,在本教程中,我们将向您展示一种更简单的AirMouse构建方法:Arduino Uno结合ROHM传感器开发板上的加速度计。由于该ROHM传感器开发板结构紧凑,而且附带的库可以处理I2C 通信,因此大大简化了设计。
硬件:
发射器:
1 x Arduino Uno微控制器
1 x ROHM传感器评估套件
1 x ROHM加速度计 (KX022-1020)
1 x nRF24L01+ RF模块
滑动开关
1 x 可焊接试验电路板,足够大,能焊接微控制器和所有电子器件
2 x 按键
1 x 1s LiPo电池
1 x 1kΩ电阻
1 x 3.3kΩ电阻
接收器:
1 x Teensy 3.2微控制器
1 x NRF24L01+ RF模块
排母
1 x 可焊接试验电路板,足够大,能焊接微控制器和所有电子器件
1 x 红、黄、绿LED灯
1 x 150Ω电阻
硬件组装
这一步您可以发挥自己的创造力!只要按照下图所示的接线图进行接线即可,各个组件的实际位置并不重要。但是请确保AirMouse使用起来非常舒适!比如,您可能需要按照姿势舒服、畅通无阻的方式安装左键和右键单击按钮。
然而,组装这些设备之前,让我们来看一下必须建立的不同连接。
发射器
图1 发射器原理图(请注意RF模块的Vcc连至3.3V!)
图2 Arduino Uno的面包板“盖板” 由于Uno的接头与面包板的孔间距(0.1〞)并不完全吻合,因此按钮数字输入线需要使用跳线(蓝色)。
两个RF模块通过SPI总线分别连至各自的微控制器。要了解有关不同通信协议和SPI的更多信息,请查看我们的此处链接转移至DevicePlus.com英语网站Arduino通信协议教程!SPI在RF通信等应用中非常有用,因为其数据传输速度快,允许两个器件以高数据速率、低延迟和高可靠性相互传输大量数据。正如我们在本教程中讨论的那样,SPI通信是同步的、双向的,这两个特性显著提高了数据发送和接收速度。
RF模块的 MOSI, MISO, and SCK 线路必须连接 Arduino上的特定引脚。这些引脚的介绍如下:
MOSI | D11 |
MISO | D12 |
SCK | D13 |
RF模块的CE脚表示Chip Enable(芯片使能), 可以用来让RF模块进入待机/睡眠模式。RF模块的CS脚是SPI从机选择引脚。这两个引脚必须连至Arduino上的两个单独GPIO引脚,但是不需要连至任何具体引脚。
图3 Arduino Uno和RF模块的接线图
Arduino Uno工作电压为5V,而nRF24L01+工作电压为3.3V。两者工作电压存在差异,但是我们可以利用Arduino的输出引脚为RF模块供电,并且不会损坏RF模块。nRF24L01+模块的电源(Vcc)引脚应连至Uno上的Arduino稳压3.3V输出。切勿将Vcc引脚连至5V,否则可能会损坏模块!在这个项目中,使用Arduino上的稳压输出为RF模块供电是可行的,因为(1)RF模块的电流消耗非常低;(2)在软件中,我们将配置无线电的功率放大器,让其处于较低功率模式。
无线模块中间的nRF24L01+芯片的Nordic Semiconductor 数据表 表明,该模块的发射和接收电流分别为11.3mA和13.5mA。而Arduino的核心Atmel芯片能够在每个数字引脚上提供高达40mA的电流,因此在最低发射和接收功率设置下(对于这个项目来说已经足够),Arduino能够成功地为RF模块供电。在Arduino代码中,我们会通过命令setPALevel(RF24_PA_LOW)指定LOW(低)功耗模式,告诉RF模块其功耗不能超过它的次低功率等级(设置选项包括MIN、LOW、HIGH和MAX)。
现在我们来看一下这些引脚在RF模块上的实际位置。具体引脚位置请参见下方的引脚说明。
图4 nRF24L01+ RF模块的引脚排列
模块的引脚1用正方形表示。请注意,模块与插头引脚并不对称。/ ©Addicore
连接RF模块时,您可能需要在试验电路板上使用排母。这样,如有必要,您可以从试验板上拆下模块。
此外,在焊接4×2排针的连接时要特别小心——引脚之间的距离非常小
,任何不必要的短路都会损坏模块!请确保排针接头周围留有足够空间
,以便可以轻松进行焊接工作。
鼠标左键和右键的功能按钮连至设置为输入的Arduino数字引脚。我们通过布置每个按钮,使得数字引脚在单击按钮时读取逻辑高电平,否则为逻辑低电平。按钮连接的放大图如下所示:
图5 本项目使用的按钮布局
按下此按钮时,GPIO脚接通Vcc。
从上图可以看出,单击按钮时,GPIO引脚直接连至Vcc。没有按下按钮时,GPIO引脚和地之间的电阻将GPIO引脚“拉低”到地,因此称为下拉电阻。这种做法是为了避免数字输入引脚的悬空逻辑电平问题。当数字输入不确定(或者连接逻辑高或者连接逻辑低)时,会出现这种情况,即使没有连接也会由于系统噪声导致不可预知的行为,比如高读数或低读数。我们需要一个高阻值电阻(在这种情况下,10k电阻即可),因为只要点击按钮,将GPIO引脚接地就会导致Vcc和地之间短路。按下按钮电路形成闭环时,电阻会降低Vcc和地之间的电流,从而防止出现危险的短路情况。
图6 ROHM传感器开发板上方的面包板
传感器开发板随附的KX022加速度计模块可完美安装在I2C接头顶部和面包板下方。
幸运的是,对于我们来说,ROHM传感器开发板已经完成了所有的I2C 硬件连接,这大大简化了I2C硬件设置,用户只需将加速度模块连至I2C的一个接头即可!要了解有关I2C工作的更多信息,请访问我们的 Arduino通信协议教程!!
接收器
图7 接收器原理图(如上所示,RF模块的Vcc连至3.3V!)
图8 接收器模块
GPIO引脚连接了两个LED,以便进行调试
接收端的连接与发送端非常相似。RF模块的不同SPI引脚连至Teensy微控制器上的匹配引脚(与Arduino相同的引脚)。您还可以添加LED,以便进行调试和信息显示。
组装AirMouse是构建过程中最乏味的地方,但是,您可以充分发挥您的创意!请尝试把模块做得更小、更符合人体工程学,并与我们分享您的想法和作品吧!
请确保在通风良好的区域进行焊接并使用高质量设备,并经常休息。您完成硬件构建之后,请参阅本文的第2部分 – 软件部分!
审核编辑:汤梓红
-
微控制器
+关注
关注
48文章
7487浏览量
151039 -
传感器
+关注
关注
2548文章
50664浏览量
751895 -
发射器
+关注
关注
6文章
843浏览量
53396
发布评论请先 登录
相关推荐
评论