气动鼠标也称为手势控制鼠标,它基于手势工作。在本项目中,加速度计用于测量手在X和Y方向的倾斜,并根据倾斜移动光标。

在该项目中,使用两种类型的电路,一个是发射器电路,另一类是接收器电路。发射器电路利用MPU6050系列加速度计,通过I2C通信连接到Arduino。使用RF模块,ASK433将数据传输到接收器电路。两个交换机也用于变送器电路,以左键单击并右键单击。

在接收器端使用Arduino Leonardo。使用Arduino Leonardo的目的是支持HID(人机界面设备)。HID允许我们控制PC或笔记本电脑的鼠标和键盘。

成分

组成部分 规格
阿杜伊诺 莱昂纳多 1.
阿杜伊诺 纳米 1.
加速度计 MPU6050 1.
射频模块 问433. 1.
转变 瞬间 2.
转变 DPDT 3.
反抗 10公里 2.
电池 9伏 1.
电池架 1.
USB电缆 1.

电路

本项目使用两个电路,一个是发射机电路,另一个是接收机电路。

变送器电路

发射器电路放置在我们手中。在这个电路中,Arduino纳米用于通过I2C通信接收来自加速度计的数据。发射机电路采用MPU6050,为加速度计,支持I2C通信。SCL和SDA引脚或加速计(MPU 6050)连接至Arduino Nano的SCL和SDA引脚,其中SCL为A5,SDA为Arduino的A4引脚。MPU 6050有一个INT引脚,该引脚连接到Arduino的中断(INT0)引脚,即D2。

现在加速度计的数据使用RF通信传送到接收器电路。对于RF通信RF发射器用于发射器侧。RF发射器的数据引脚连接到Arduino的D4引脚。天线连接到RF发射器的ANT引脚。天线只不过是一根15厘米长的单芯线。

两个交换机连接到Arduino的D11和D13,左键单击并右键单击。该整个电路由9伏电池供电,通过开关连接到Arduino的Vin Pin。

如果您在PCB蚀刻中良好,请使用下面提供的电路来构建项目。

空气鼠标手势控制鼠标电路
空中鼠标-手势控制鼠标-发射器电路

如果您希望在通用PCB(零PCB)或面包板上构建电路,请使用下面提供的设计。

手势控制鼠标的PCB设计
发射机电路-手势控制鼠标-PCB设计

接收器电路

在接收机端,使用的两个主要部件是Arduino Leonardo和RF接收机。两个开关用于启用/禁用鼠标和打开/关闭RF通信。

在RF接收器的接收器电路数据引脚中连接到Arduino的中断引脚(INT1),即D2引脚。

在RF接收器的电源线中使用开关,其用于RF接收器的开/关。另一个交换机还连接到Arduino的D4引脚,用于启用/禁用鼠标。Arduino Leonardo通过标准USB电缆连接到PC。

电路和PCB示意图如下所示。

手势控制鼠标 - 接收器电路
手势控制鼠标-接收器电路

手势控制鼠标-接收器电路-PCB设计
手势控制鼠标-接收器电路-PCB设计

你可以直接订购这些PCBPCBWAY.(我们根据PCBWAY的规则设计了它们。

在职的

在发射机端,使用Arduino Nano作为控制单元。加速度计通过I2C通信连接到Arduino,I2C通信测量X、Y和Z方向的重力加速度,但我们只需要两个轴上的值,因此我们使用X和Y的值。两个开关也连接到Arduino;它们用于左键和右键单击。Arduino测量所有值,现在我们有四个值

  1. 加速x方向
  2. Y方向的加速度
  3. 右键单击的状态
  4. 左键的状态

所有值都被合并为四位数的整数,其中每个数字显示每个值。

在接收器端,Arduino从发送器接收数据(整数),并将其分为四个值。Arduino Leonardo支持HID(人机界面设备),因此它根据X和Y的值移动光标。

使用Arduino和加速度计的空中鼠标电路
使用Arduino和加速度计的空中鼠标电路

使用Arduino和加速度计的手势鼠标电路

空中鼠标-手势鼠标电路

发射机电路板
发射机电路板

接收器PCB.
接收器PCB.

代码

在这个项目中,使用两个arduino一个是发射器侧,另一个是接收器侧。

发射机代码

下载变送器部分 - 程序/代码

在发射器侧使用三个头文件,您可以从链接下载库

  1. h:已经附上了
  2. H:对于MPU6050加速度计:https://github.com/jarzebski/arduino-mpu6050
  3. h:对于RF发射机和接收机模块:https://github.com/sui77/rc-switch

第5行声明了“RCSwitch”,第7行声明了MPU6050。左键单击和右键单击分别声明了两个整数。

在“void setup()”中,“serial.begin(115200)”用于串行监视器。检查第16行至第20行的“mpu6050”,这有助于检查接线。之后,使用“checkSettings()”函数检查“MPU6050”的设置。之后,“mySwitch.enableTransmit(4)”用于启用连接到Arduino引脚D4的发射机(RF发射机模块)。最后,“pinMode”函数用于声明左键单击和右键单击为输入。

声明了一个“void cleckSetting()”,用于检查“MPU6050”的设置。此函数非常长且复杂,因此我们不讨论此部分。

在“void loop()”中,重力加速度(标准化加速度)从加速计中读取。在第72行和第73行中,X和Y的值保存在整数中,这些整数是经过处理的值。

在第75行和第76行中,以整数形式读取并保存左键和右键单击状态。现在,所有整数合并到第78行并保存在整数中,数据通过RF模块在第80行传输。

接收器代码

下载接收器部分-程序/代码

在代码开始时,使用了两个头文件,第一个用于RF模块,另一个(Mouse.h)用于计算机鼠标。

在第4行中,“RCSwitch”被命名为“mySwitch”。第6行声明了一些整数,其中“右值”用于接收的数据,“a”、“b”、“c”和“d”是中断“右值”后的四个值。两个浮点数也以名称“xReading”和“yReading”声明。

在“void setup()”中,“mySwitch.enableReceived”用于启用接收器。之后“mouse.begin”用于启动鼠标。“引脚模式”用于将引脚D5声明为输入。

在“void Loop()”中使用“如果”条件,则在RF通信通过数据可用时,进程进入循环。现在收到的数据被分配在整数“rvalue”中。在第23到26个接收的数据(rvalue)中被分成四个整数“a”,“b”,“c”和“d”。其中“c”和“d”是x和y方向上的加速度的值,“a”和“b”是左右点击的状态。

根据“XREading”和“XREading”和“yreading”的值,根据“C”和“D”的值,声明“Xreading”和“yreading”的值。在第46行中RF通信重置。

从49行到第51行,根据“XREading”和“yreading”的值移动光标,当开关(连接到引脚D4)低时,它将适用。根据“A”和“B”的值,按下左侧左右右键单击。

作者

3.评论

  1. Siddharth Bhokare.

    先生,我的发射器代码也有问题(MPU6050类没有成员begin)请帮助我
    回复
    留下回复

  2. Saranya.

    先生,我目前正在研究这个项目。在网上有许多Arduino Leonardo,如Rees52 Arduino Leonardo R3,Kitsguru KG203 Leonardo R3与USB电缆模块Arduino兼容,XCluma Atmega32U4 5V / 16M Mini Leonardo Pro Micro Arduino兼容,Leonardo R3 Atmega32U4开发板与Arduino带USB电缆。所以请告诉我哪个Arduino Leonardo我应该买。

    • 阿萨德·侯赛因

      代码正常工作?
      我在点击时遇到问题,你能帮我吗?

Baidu