量产空中鼠标:手把手带你拆解这个黑科技
空中鼠标虽然看起来很高大上,但本质上就是几个元件的配合工作。MPU6050负责感知动作,STM32负责数据处理,NR24L01负责无线传输,接收板负责数据接收和转发。整个过程环环相扣,缺一不可。这个设计的最大优点就是成本低、实现简单。只要掌握基本的嵌入式开发知识,完全可以在家里 DIY 一个属于自己的空中鼠标。
量产空中鼠标电路设计资料 原理图+PCB资料 空中鼠标硬件由两个部分组成,鼠标端(发射板)和USB端(接收板)。 ◆ 发射板主要器件是STM32、MPU6050、NR24L01。 MPU6050感知人手的动作(X、Y、Z轴上的角速度值),并将测得的数据通过I2C数据接口传输给STM32。 STM32内部自带12位ADC对数据做转换,并且通过NRF24L01无线传输给USB端。 ◆ 接收板是模拟的HID鼠标和键盘即插即用,通过USB接口和电脑连接。 USB端同样有一颗NRF24L01芯片接收发射板传输过来的数据,通过SPI接口传输给STM32。 ?作为电脑的输入设备,空中鼠标可以像传统鼠标一样操作屏幕,仅需要在空中晃动或者移动就可以实现鼠标的操作和翻页等功能。
最近在研究一个挺有意思的东西——空中鼠标。这玩意儿不用沾桌子,挥挥手就能控制屏幕,想想都觉得酷毙了。今天就带大家拆开这个黑匣子,看看它是怎么工作的。
发射板:你的每一个动作都被我捕捉
发射板是整个系统的"眼睛"和"大脑",主要由三个核心元件组成:STM32、MPU6050和NR24L01。

MPU6050这个小家伙负责感知你的动作。它能捕捉到你手部在X、Y、Z三个轴上的角速度值,简单来说就是你手是怎么动的。这些数据通过I2C接口传给STM32。
STM32这个小机灵鬼接到数据后就开始忙活了。它会用自己内部的12位ADC(模数转换器)把这些数据处理一下,然后通过NR24L01这个无线小能手把这些数据发射出去。

量产空中鼠标电路设计资料 原理图+PCB资料 空中鼠标硬件由两个部分组成,鼠标端(发射板)和USB端(接收板)。 ◆ 发射板主要器件是STM32、MPU6050、NR24L01。 MPU6050感知人手的动作(X、Y、Z轴上的角速度值),并将测得的数据通过I2C数据接口传输给STM32。 STM32内部自带12位ADC对数据做转换,并且通过NRF24L01无线传输给USB端。 ◆ 接收板是模拟的HID鼠标和键盘即插即用,通过USB接口和电脑连接。 USB端同样有一颗NRF24L01芯片接收发射板传输过来的数据,通过SPI接口传输给STM32。 ?作为电脑的输入设备,空中鼠标可以像传统鼠标一样操作屏幕,仅需要在空中晃动或者移动就可以实现鼠标的操作和翻页等功能。
这里有个小细节,NR24L01的工作频率是2.4GHz,这和Wi-Fi是一个频段。所以有时候用空中鼠标时可能会受到Wi-Fi信号的干扰,这也是为什么有时候鼠标会卡顿的原因。
接收板:你的动作我全接收
接收板是整个系统的"耳朵"和"嘴巴"。它同样用了一颗NR24L01,负责接收发射板发来的数据。

数据接收后,STM32会通过SPI接口把这些数据处理一下,然后通过USB接口传给电脑。电脑收到这些数据后,会把它们当作普通的鼠标和键盘输入来处理。
这里有个关键点,接收板模拟的是HID(Human Interface Device)设备。HID是USB设备的一种类型,包括鼠标、键盘、游戏手柄等等。通过模拟HID设备,空中鼠标就能像普通鼠标一样被电脑识别和使用了。
实战代码:数据怎么传的这么快
发射板代码片段:
void MPU6050_Init(void) {
// 初始化MPU6050
I2C_WriteByte(MPU6050_ADDRESS, PWR_MGMT_1, 0x00); // 唤醒传感器
I2C_WriteByte(MPU6050_ADDRESS, CONFIG, 0x00); // 配置传感器
I2C_WriteByte(MPU6050_ADDRESS, SMPLRT_DIV, 0x07); // 设置采样率
}
接收板代码片段:
void USB_Process(void) {
if (usb_rx_data_available) {
// 处理接收到的数据
process_mouse_data();
usb_rx_data_available = 0;
}
}
总结:黑科技背后的简单逻辑
空中鼠标虽然看起来很高大上,但本质上就是几个元件的配合工作。MPU6050负责感知动作,STM32负责数据处理,NR24L01负责无线传输,接收板负责数据接收和转发。整个过程环环相扣,缺一不可。

这个设计的最大优点就是成本低、实现简单。只要掌握基本的嵌入式开发知识,完全可以在家里 DIY 一个属于自己的空中鼠标。
更多推荐
所有评论(0)