首页

基于Arduino的计算机手势控制

你可能见过手势控制机器人,机器人的运动是由手势控制的。另一个基于类似原理的有趣项目是基于Arduino的电脑或笔记本电脑手势控制。

(adsense1)

人机界面(HMI)是一个由硬件和软件组成的系统,它帮助用户(操作员)和机器之间进行通信和信息交换。

我们通常使用LED指示灯,开关,触摸屏和LCD显示器作为HMI设备的一部分。与机器人或计算机等机器交流的另一种方式是借助手势。

不用键盘、鼠标或操纵杆,我们可以用手势来控制电脑的某些功能,比如播放/暂停视频,在照片幻灯片中向左/向右移动,在网页中向上/向下滚动等等。

在这个项目中,我们实现了一个简单的基于Arduino的手势控制,通过手势的帮助,您可以控制web浏览器的一些功能,如切换选项卡,在网页中上下滚动,在任务(应用程序)之间切换,播放或暂停视频,增加或减少音量(在VLC Player中)。

(adsense2)

在继续之前……

基于Arduino的计算机手势控制项目是用Python语言实现的。因此,在继续这个项目之前,我建议您先做这个简单的项目用python控制arduino的主板

在这个项目中,您可以找到如何与Python一起使用Arduino的基础知识,在您的计算机上安装Python,设置串行库(对于与Arduino通信很重要)和项目代码。

因此,我假设您已经安装了Python和pySerial(用于与串行端口通信的库),并且已经完成了用Python闪烁Arduino的LED的基本项目。

项目背后的原则

基于Arduino的计算机手势控制背后的原理其实非常简单。你所要做的就是用Arduino使用两个超声波传感器,把你的手放在超声波传感器前面,计算手和传感器之间的距离。使用这些信息,可以在计算机中执行相关操作。

超声波传感器的位置非常重要。将两个超声波传感器放在笔记本电脑屏幕的两端。来自Arduino的距离信息由Python程序收集,一个名为PyAutoGUI的特殊库将数据转换为键盘点击动作。

线路图

项目Arduino部分的电路图如下图所示。它由一块Arduino UNO板和两个超声波传感器组成,你可以从笔记本电脑的USB端口为所有这些组件供电。

基于Arduino的手势控制

组件的要求

  • Arduino UNO x 1 [在这里买
  • 超声波传感器x 2
  • USB数据线(适用于Arduino)
  • 一些连接电线
  • 一台能上网的笔记本电脑

项目设计

电路的设计非常简单,但元件的设置非常重要。第一个超声传感器的Trigger和Echo引脚(位于屏幕左侧)连接Arduino的引脚11和10。第二个超声传感器的Trigger和Echo引脚分别连接到Arduino的引脚6和5上。

现在,来到传感器的位置,把两个超声波传感器放在笔记本电脑屏幕的顶部,一个在左边,另一个在右边。你可以使用双面胶带将传感器固定在屏幕上。

基于Arduino的手势控制

接下来是Arduino,把它放在笔记本电脑屏幕的后面。将Arduino的电线连接到各个传感器的Trigger和Echo pin上。现在,我们准备好为Arduino编程了。

编程Arduino来检测手势

这个项目的重要部分是为Arduino编写一个程序,以便它将两个传感器测量的距离转换为控制特定动作的适当命令。

我们已经看到了一个叫做便携式超声测距仪,你可以在Arduino的帮助下测量放置在超声波传感器前面的物体的距离。

一个类似的概念被用来测量你的手在这个项目的两个超声波传感器前面的距离。有趣的部分开始于计算距离之后。

超声波传感器前的手势可以被校准,这样它们就可以在你的电脑上执行五种不同的任务。在看手势之前,让我们先看看我们可以完成的任务。

  • 在Web浏览器中切换到“下一步”选项卡
  • 在Web浏览器中切换到“下一步”选项卡
  • 在网页中向下滚动
  • 在网页中向上滚动
  • 在两个任务之间切换(Chrome和VLC播放器)
  • 在VLC播放器中播放/暂停视频
  • 增加体积
  • 减小音量

以下是我为演示目的编写的5种不同的手势或动作。

动作1:将你的手放在右侧超声波传感器的前面,保持一段距离(15厘米到35厘米之间),然后将你的手移开传感器。此手势将向下滚动网页或减少音量。

动作2:将你的手放在右侧超声波传感器的前面,保持一段距离(15CM到35CM之间),然后向传感器移动你的手。这个手势将向上滚动网页或增加音量。

动作三:在右超声波传感器前滑动你的手。此手势将移动到Next Tab。

手势4:在左侧超声波传感器前滑动您的手。此手势将移动到上一选项卡或播放/暂停视频。

手势5:用手划过两个传感器(首先是左传感器)。此操作将在任务之间切换。

根据上面提到的手势,下面Arduino程序一直在写。

Arduino代码

如果你在Arduino代码中观察,上面提到的手势已经被转换成5个命令发送到串口。使用这5个命令,您可以编写一个Python程序来控制某些键盘函数,以实现所需的任务。

项目的Python编程

编写基于Arduino的手势控制的Python程序非常简单。您只需要从Arduino读取串行数据并调用某些键盘按键。为了实现这一点,你必须安装一个名为PyAutoGUI的特殊Python模块。

安装PyAutoGUI

下面的步骤将指导您在Windows计算机上安装PyAutoGUI。模块PyAutoGUI将帮助您以编程方式控制鼠标和键盘。

在PyAutoGUI的帮助下,我们可以编写一个Python程序来模拟鼠标的左键、右键、滚动等动作,以及键盘的按键、输入文本、多次按键等动作,而无需实际操作。让我们安装PyAutoGUI。

如果你还记得在前面的项目中,我们使用Python控制Arduino上的LED,我们已经在“C:\Python27”目录中安装了Python。

以管理员权限打开命令提示符,并切换到您安装Python的目录(在我的情况下,它是C:\Python27)。

基于Arduino的手势控制

如果您已经安装了最新版本的Python,那么pip(用于在Python中安装包的工具)将已经安装。要检查是否安装了pip,输入以下命令。

pip - v

您应该使用以下命令升级到最新的pip包。如果pip已经是最新版本,则忽略此步骤。

python -m pip install -U pip

Python -m PIP install -upgrade PIP

基于Arduino的手势控制

升级pip之后,可以继续安装PyAutoGUI。为了安装PyAutoGUI,输入以下命令。

Python -m PIP install pyautogui

pip安装pyautogui

基于Arduino的手势控制

Python代码

如果到目前为止一切顺利,您可以继续编写Python代码。如果你遵守上面给出的Arduino代码,Arduino在检测到适当的手势后,通过串口发送5个不同的文本或命令。这些命令是

  • 下一个
  • 以前的
  • 下来
  • 向上
  • 改变

使用这些命令和PyAutoGUI中的一些函数(如热键、滚动键、向下键、按下键和上键),您可以编写一个简单的Python代码,执行以下键盘和鼠标的任务。

  • Data = " next " - - > Action = Ctrl+PgDn
  • Data = " previous " - - > Action = Ctrl+ pup
  • 数据= "向下" - - >动作=向下箭头
  • Data = " up " - - > Action =向上箭头
  • 数据= " change " - - >动作= Alt+Tab

下面是基于Arduino的计算机手势控制的Python代码。

注意:我们使用谷歌Chrome作为网页浏览器,VLC Player作为媒体播放器。此外,我们修改了VLC播放器的热键,以适应我们的Python程序。修改如下。

  • 按键=向上箭头- - >动作=增加音量
  • 按键=向下箭头- - >动作=减少音量
  • 按键= Ctrl+ pup - - >动作=播放/暂停

基于Arduino的计算机手势控制的应用

  • 在这个项目中,我们实现了基于Arduino的Hand Gesture Control of Your Computer,在不使用鼠标或键盘的情况下,在计算机前做出的少量手势将在计算机中执行某些任务。
  • 这种基于手势的计算机控制已经存在,一家名为Leap Motion的公司已经在计算机中实现了这种技术。
  • 这种类型的计算机手势控制可以用于VR(虚拟现实),AR(增强现实),3D设计,阅读手语等。

34岁的反应

  1. 你好,这是一个很好的项目。但是我想问一下,用这个可以控制鼠标的指针吗?如果是这样,如何?谢谢你!

  2. 回溯(最近一次调用):
    文件“C:/Python27/gc2.py”的第4行
    初始化串口并创建名为Arduino_Serial的串口对象
    __init__中的“C:/Python27\serial\serialwin32.py”文件第31行
    超级(串行、自我)。__init__ (* args, * * kwargs)
    __init__中的" C:/Python27\serial\serialutil.py "文件第240行
    self.open ()
    文件“C:/Python27\serial\serialwin32.py”,第62行,在open
    “无法打开端口{!”r r}:{!}“.format(自我。portstr ctypes.WinError ()))
    SerialException: could not open port ' com12 ': WindowsError(2, '系统找不到指定的文件')
    >>>

    这是我得到的错误,请帮我整理一下,
    希望您能尽快回复。

    问候
    医学院毕业

    1. 回溯(最近一次调用):
      文件“C:/Python27/Gesture_python.py”的第5行
      用于串行通信的串行库
      ImportError:没有名为serial的模块

      1. 回溯(最近一次调用):
        文件“C:/Users/SalahEddine/PycharmProjects/untitled2/kk/lo.py”,第1行
        进口pyautogui
        文件“C:\Users\SalahEddine\PycharmProjects\untitled2\venv\lib\site-packages\pyautogui\__init__.py”,第84行,在
        进口pyscreeze
        文件“C:\Users\SalahEddine\PycharmProjects\untitled2\venv\lib\site-packages\pyscreeze\__init__.py”第168行
        Box(x, y, needleWidth, needleHeight)
        SyntaxError: ' return '带有生成器内部的参数

        ! !?
        这是我得到的错误,请帮我整理一下,
        希望您能尽快回复。

  3. 回溯(最近一次调用):
    文件“C:\Users\Muneeb\Desktop\gesture project.py”,第5行,在
    用于串行通信的串行库
    ImportError:没有名为serial的模块
    >>>
    这是我得到的错误,请帮我整理一下,
    希望您能尽快回复。

  4. 我已经调试了这个问题的解决方案

    如果其他人也面临同样的问题,请在关闭Arduino IDE中的串行监视器后尝试调试相同的代码

  5. 嗨,我已经完成了编码,但当涉及到python一旦完成,它显示我的传入数据是错误的,你可以帮助我与此紧急tq

  6. Hy老兄!它在小于3的情况下工作,谢谢,是的,但是当我执行我的手的动作时,有一些波动。否则它工作得很好..

  7. 回溯(最近一次调用):
    文件“/Users/davidebondielli/Desktop/gesture_python.py”,第1行
    import serial #串口导入,用于串口通信
    ModuleNotFoundError:没有名为' serial '的模块。

    我有Elegoo,端口名称不一样,所以,这个项目可以和Elegoo一起工作吗?

  8. redifinition‘const int trigpin1 ’.......................这种类型的错误显示,请帮助我兄弟

  9. 文件“C:/Python27/gc2.py”的第4行
    初始化串口并创建名为Arduino_Serial的串口对象
    错误序列号错位..

  10. 我已经在arduino的串行监视器中完成了所有的事情,我可以看到结果,但在我的笔记本电脑上,屏幕上没有任何东西移动,而且在升级PIP时,它显示在c:\python....................中没有模块安装
    有人能帮我一下吗

留下一个回复

您的电邮地址将不会公布。

Electronicshub图标
Baidu
map