气动鼠标也称为手势控制鼠标,它基于手势工作。在本项目中,加速度计用于测量手在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)或面包板上构建电路,请使用下面提供的设计。
接收器电路
在接收机端,使用的两个主要部件是Arduino Leonardo和RF接收机。两个开关用于启用/禁用鼠标和打开/关闭RF通信。
在RF接收器的接收器电路数据引脚中连接到Arduino的中断引脚(INT1),即D2引脚。
在RF接收器的电源线中使用开关,其用于RF接收器的开/关。另一个交换机还连接到Arduino的D4引脚,用于启用/禁用鼠标。Arduino Leonardo通过标准USB电缆连接到PC。
电路和PCB示意图如下所示。
你可以直接订购这些PCBPCBWAY.(我们根据PCBWAY的规则设计了它们。
在职的
在发射机端,使用Arduino Nano作为控制单元。加速度计通过I2C通信连接到Arduino,I2C通信测量X、Y和Z方向的重力加速度,但我们只需要两个轴上的值,因此我们使用X和Y的值。两个开关也连接到Arduino;它们用于左键和右键单击。Arduino测量所有值,现在我们有四个值
- 加速x方向
- Y方向的加速度
- 右键单击的状态
- 左键的状态
所有值都被合并为四位数的整数,其中每个数字显示每个值。
在接收器端,Arduino从发送器接收数据(整数),并将其分为四个值。Arduino Leonardo支持HID(人机界面设备),因此它根据X和Y的值移动光标。
代码
在这个项目中,使用两个arduino一个是发射器侧,另一个是接收器侧。
发射机代码
在发射器侧使用三个头文件,您可以从链接下载库
- h:已经附上了
- H:对于MPU6050加速度计:https://github.com/jarzebski/arduino-mpu6050
- 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.评论
先生,我的发射器代码也有问题(MPU6050类没有成员begin)请帮助我
回复
留下回复
先生,我目前正在研究这个项目。在网上有许多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我应该买。
代码正常工作?
我在点击时遇到问题,你能帮我吗?