亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于ESP32的BLE鼠标

发布时间:2021-09-28
分享到:

基于ESP32的BLE鼠标

发布时间:2021-09-28
分享到:

本教程是关于构建基于 esp32 的 BLE 鼠标,与使用光学传感器构建鼠标的传统方法不同,该鼠标基于嵌入在定制 3D 打印鼠标垫中的磁铁工作。

零件清单:

  • 3d 打印机
  • 橙色灯丝
  • Esp32
  • 霍尔效应传感器
  • 磁铁
  • 性能板
  • 18650 电池座
  • 按钮
  • SMD 电容和电阻套件
  • cp2102
  • TP4056 

第 1 步:光电鼠标的工作原理

首先,让我们谈谈传统鼠标的工作原理。

如果您看一下底部,您可能已经注意到鼠标发出了闪光的红光。这是鼠标内部使用的光学传感器决定运动的光。但它是如何工作的?

最初,当我想到它时,我认为它会类似于线路跟随机器人中使用的 IR 传感器,或者可能更复杂一些,例如 IC 内的 LED 和光传感器阵列,最后可能是一些奇特的算法检测运动。

第 2 步:在光电鼠标内部

如果你打开鼠标,你会看到底部有一个小凹口的 IC,这是相机的外壳,当你将它与实际相机进行比较时,这种捕捉方式太少了细节。因为这不是为了拍摄人和猫的照片,而是为了拍摄使用鼠标的表面上的图案和细小凹槽的照片。拍摄图片后,它会应用一种称为光流的算法,该算法通过比较鼠标在连续运动中拍摄的图像帧来确定鼠标的方向。

这真的让我感到惊讶,因为光流算法要检测相机移动的方向,连续 2 帧必须非常接近。如果它们离得很远,算法就不能很好地工作。由于这个原因,鼠标光学传感器必须每秒捕获近 2000 到 6000 帧。这比智能手机相机快得多。

第 3 步:更换光学传感器

所以,从项目开始。我最初的想法是永远不要使用磁铁。

我只是想构建一个 BLE 蓝牙鼠标,但在设计鼠标时,我很快就遇到了寻找光学传感器的问题。它并不便宜,而且 Arduino 社区最熟悉的一种现在已经过时了。

所以我的天才大脑认为我可以使用 ESP32 CAM 构建一个光学传感器。即使我至少可以获得一些不错的帧速率,我也会非常高兴,这样我就可以更换 ESP32 CAM 的镜头并制作一个非常慢/响应速度较慢的鼠标。但是在玩了一段时间 ESP32 CAM 之后,我认为从 ESP32 CAM 开始是一个非常糟糕的主意。

放弃 ESP32 CAM 的主要原因:

ESP32 CAM 在拍摄高帧率照片方面不可靠,我可以推送的最大值为 24,分辨率非常低。
第二个原因是光流算法不能很好地工作并且多次使 esp32 崩溃。
最后,大多数 esp32 cam 的镜头都用强力胶固定在传感器上。

第 4 步:挑选磁铁

由于我没有光学传感器的选择,这让我陷入了绝望的境地,无法找到一种方法来检测鼠标的运动,因为重置电子设备和编码非常简单。这只是添加一些按钮和集成 BLE。

我绝对可以使用任何一种旧方法来构建鼠标。但无论如何,该项目不会像我一开始想要的那样高度可用。所以我决定构建一个鼠标,它使用一些独特的方式来检测运动。

就我个人而言,用磁铁做实验是我最喜欢的,而且非常令人满意。此外,我在之前的项目中也有使用磁铁和电子产品的经验。

第 5 步:设置霍尔效应传感器

为了使这个磁铁有用,我必须将磁场转换为电信号,为此我们需要使用霍尔效应传感器。确切地说,我将使用 49E 线性霍尔效应传感器。

该传感器将磁场强度转换为模拟电压,稍后我们可以使用微控制器读取该电压。

经过几次实验并使用磁铁和霍尔效应传感器,我找到了 2 个磁铁之间的合适距离,当我穿过它们时,霍尔效应传感器的值会不断变化。这非常重要,因为如果没有这种值的变化,就不可能检测到运动。

就我而言,距离是 3 毫米,对您来说可能会有所不同,因为霍尔效应传感器的值取决于磁铁的直径、厚度和材料。

第 6 步:构建磁性鼠标垫

我在 Fusion 360 中设计了一个垫子,可以嵌入 49 个磁铁,它为我们提供了 7 行和 7 列,每个磁铁之间的距离为 3 毫米。49只是一个任意数字,你可以增加磁铁的数量来增加鼠标垫的大小。

下一步是3D打印。并将磁铁放置到位。只需确保将磁铁放置在所有北极或南极都面向您的位置,这将确保我们有一个单极表面,这将使我们更容易检测到运动。

注意:对我来说,将磁铁放在正确的位置是一项艰巨的任务,因为磁铁会因为强磁场而相互坍塌。所以为了让它不那么乏味,我不得不用一些胶带暂时把它们固定到位。

第 7 步:编码器类比

通过当前的设置,我们可以看到在磁单极子表面上导航的逻辑

这个想法受到旋转编码器机制的高度启发。如果您以前使用过旋转编码器机制,您就会知道它们是根据相位差原理工作的。来自编码器的信号之一将滞后或超前,通过使用此相位差,我们可以确定我们是在顺时针还是逆时针方向转动编码器。我在描述中放了一个链接,您可以在其中了解有关旋转编码器的更多信息。

现在,类似地,我们将使用 4 个具有不同相位的单个,其中两个用于检测左、右,另外两个用于检测向上和向下。

第 8 步:找到霍尔效应传感器的运动和方向

起初,很难注意到或有点难以想象我们如何使用磁铁来实现编码器类比。但是看看它们是如何工作的还是很有趣的。

首先,从焊盘上绘制出所有磁铁的磁场。当我们将传感器扫过网格时,这应该给我们大约一个正弦波,其中正弦波的顶峰是霍尔效应传感器读取的最大磁场,底部波谷是霍尔读取的最小磁场效应传感器。

现在有了这个霍尔效应传感器值,我们可以通过比较过去和现在的读数来找到霍尔效应传感器的运动和方向。

第 9 步:使用单个传感器的问题

我刚才说我们可以通过一个传感器找到霍尔效应传感器的方向和运动。因此,很容易假设我们可以通过使用 2 个传感器找到所有四个方向,以及为什么兄弟使用编码器机制。

但这就是事情变得棘手的地方。

如果我将两个传感器固定在同一平面上并开始移动平面,您可以看到霍尔效应传感器值的变化,无论是从左到右还是从上到下。这使得确定鼠标移动的确切方向变得非常复杂。

为了解决这个问题,我将添加另一组霍尔效应传感器。我们将使用其中的两个来检测左、右运动,其余两个用于检测上下运动。

第 10 步:添加更多霍尔效应传感器对

这组额外的传感器将在读数中产生偏移,如果您同时看到左右传感器读数,当我左右移动鼠标时,它们中的一个会超前或滞后。正是这也适用于向上和向下。我们也可以使用单个传感器来完成。

关于这一点的有趣部分是,相移仅发生在一组传感器上,当平面沿单个方向(上/下或左/右)移动时,读数具有相移,而对于其余的一组传感器, [理想情况下]不会发生相移。

因此,通过以这种方式布置传感器,我们可以检测用于在屏幕上向各个方向移动鼠标的所有 4 个方向。

如果您觉得难以理解,我建议您下载 CAD 模型并自行尝试。

第 11 步:BLE 鼠标的电子设备

无论如何,既然鼠标的运动被弄清楚了,剩下的电路就很简单了!

只需为 esp32 添加一些按钮、电池和充电电路即可。你可以看一下电路图更好地理解(这些电路大部分在我以前的项目中使用过)。

esp32 ble电路图.pdf
第 12 步:使用 PCBway 制造 PCB

一旦电路和PCB布局准备就绪。我发送了与PCBway一起制造的 Gerber 文件,PCBway慷慨地赞助了这个项目。

因此,如果您的项目需要定制 PCB,他们会以低至 5 美元的价格提供 10 种定制 PCB,并且您可以为您的 PCB 选择多种定制,例如阻焊层的颜色、丝层和表面光洁度。在您的第一笔订单中,您将获得 5 美元的优惠券!因此,基本上,您只需在第一个订单期间支付运费。因此,请查看说明中的链接以访问他们的网站。

一周后,我收到了我的 PCB。除了 PCB 外,我还收到了一个闪亮的铝模板,便于焊接。

第 13 步:组装和焊接

现在,是采购组件的时候了,出于某种原因,这个项目在获取组件时遇到了很多问题,有些在运输过程中丢失了,有些在定制中停留了太长时间。无论如何,我想尽快完成这个项目,所以我将不使用那些剩余的组件。

注意:出于同样的原因,我没有为此项目包含 Gerber 文件。但无论如何,我用更容易/更容易获得的组件更新了电路图。所以,我很快也会尝试重建 PCB。

第 14 步:对 ESP32 BLE 鼠标进行编程

对于代码,第一步是清理信号。

在这里您可以使用不同类型的滤波器和数字信号处理方法来清除噪声。但为了保持简单和快速,我将通过平均来平滑信号。然后我采用了旋转编码器示例代码并对其进行了一些修改,以通过使用所有四个传感器来检测运动。老实说,这是我一段时间以来写的最糟糕的代码之一,因为我在拖延这个项目太久后失去了耐心。

无论如何,在添加一些 esp32 BLE 库和按钮的附加代码后,我们就完成了!

只需上传代码,就可以了。

BLE_mouse.ino

第 15 步:测试 BLE 鼠标

运动检测效果有效,和其他功能,如左键单击、右键单击滚动单击相比效果更好。

第 16 步:最后的想法

这个项目无论如何都不完美。我想说它也只有 50% 的工作/准确度,我不确定是否可以像实际鼠标一样平滑移动,但是我可以做一些事情。首先我可以回过头来复习我在滤波器和数字信号处理方面的知识,使来自传感器的信号更好,使鼠标移动更顺畅。或者其次,我可以尝试其他类型的传感器,我目前正在寻找替代品,如红外传感器、激光等。

我希望至少这篇文章能给你一些新的想法和一种不同的方法来构建鼠标。

以上就是项目的全部内容了,希望您能喜欢这个项目!

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论