首页

使用Arduino的手势控制机器人

在这个项目中,我们使用Arduino设计了一个简单的手势控制机器人。这个手势控制机器人是基于Arduino Nano, MPU6050,射频收发对和L293D电机驱动器。

尽管标题上写着它是一个手势控制机器人,但从技术上讲,这个机器人是通过手的倾斜来控制的。

在继续这个项目之前,看一下这个开始使用arduino和mpu6050

前言

机器人是一种由计算机程序操作的机电系统。机器人可以是自主或半自主的。自主机器人不受人类控制,通过感知周围环境,自行做出决定。

大多数工业机器人是自主的,因为它们需要在高速和高精度的情况下运行。但有些应用需要半自主或人类控制的机器人。

一些最常用的控制系统是语音识别,触觉或触摸控制和运动控制。

手势控制机器人是一种常用的运动控制机器人。本课题利用MPU6050开发了一个手势控制机器人,该机器人是一个三轴加速度计和三轴陀螺仪传感器,控制器部分是Arduino Nano。

不使用带有按钮或操纵杆的遥控器,而是用手的手势来控制机器人的运动。

该项目基于无线通信,手势数据通过射频链路(射频发射机-接收器对)传输给机器人。

本工程分为发射机和接收机两部分。分别对发射机和接收机部分的电路图和组成部分进行了说明。

手势控制机器人的原理

为了了解手势控制机器人的工作原理,让我们把项目分成三个部分。

第一部分是通过Arduino从MPU6050加速度计陀螺传感器获取数据。Arduino不断从MPU6050获取数据,并根据预先设定的参数向射频发射机发送数据。

项目的第二部分是射频发射器和射频接收器之间的无线通信。射频发射器从Arduino接收数据后(通过编码器IC),通过射频通信将数据传输到射频接收器。

最后,项目的第三部分是解码射频接收器接收到的数据,并向电机驱动IC发送适当的信号,从而激活机器人的车轮电机。

手势控制机器人框图

下面的图片展示了手势控制机器人的发送和接收部分的简单框图。

发射机框图

手势控制机器人

接收机框图

手势控制机器人

发射机部分电路图

下图是手势控制机器人项目的发射机部分的电路图。手势控制机器人图像

发射机组件

  • Arduino纳米
  • 434 mhz射频发射机
  • HT-12E编码器集成电路
  • MPU6050加速度计和陀螺仪传感器
  • 750Ω电阻

接收部分电路图

手势控制机器人图像

接收器组组件

  • L293D电机驱动IC
  • HT-12D译码器集成电路
  • 434兆赫射频接收器
  • 33 kΩ电阻器
  • 330Ω电阻
  • 领导
  • 4齿轮电机
  • 机器人底盘

组件描述

MPU6050

MPU6050是爱好者和发烧友最常用的传感器模块之一。它由同一个IC上的加速度计和陀螺仪组成,提供6个自由度(加速度计3轴,陀螺仪3轴)。

手势控制机器人图片

射频发射和接收模块

发射器和接收器之间的通信使用射频模块。在这个项目中使用了一个434 MHz的发射机和接收机对。

HT-12E

它是一个编码器集成电路,将4位并行数据转换为串行数据,以便通过射频链路传输。

HT-12D

它是一个解码器IC,将射频接收器接收到的串行数据转换为4位并行数据。这些并行数据可以用来驱动电机。

射频链接与编码器和解码器

手势控制机器人电路设计

发射机部分

机器人的发射机部分由Arduino Nano板、MPU6050传感器、HT-12E编码器IC和射频发射机组成。Arduino与MPU6050传感器之间的通信通过I2C接口进行。因此,MPU6050传感器的SCL和SDA引脚与Arduino Nano的A5和A4引脚相连。

此外,我们将使用MPU6050的中断引脚,因此,它连接到Arduino Nano的D2。

HT-12E是一种编码器集成电路,通常与射频发射机模块相关联。它将12位并行数据转换为串行数据。12位数据分为地址位和数据位。A0到A7 (pin1到Pin8)是地址位,用于数据的安全传输。这些引脚可以是敞开的,也可以连接到地面(Vss)。在此电路中,HT-12E的引脚1 ~引脚9 (A0 - A7和Vss)接地。

引脚10 ~ 13 (AD8, AD9, AD10和AD11)是HT-12E的数据引脚。它们从微控制器(在本例中是Arduino Nano)等外部源接收4字并行数据。分别与Arduino Nano的D12、D11、D10、D9引脚相连。

TE '是传输使能引脚,它是一个有效的低引脚。只要TE '值低,数据就会被传输。因此,Pin 14 (TE’)也连接到地面。

编码器IC在引脚16和15 (OSC1和OSC2)之间有一个内部振荡器电路。一个750KΩ电阻连接在这些引脚之间,以启用振荡器。Dout (Pin 17)是串行数据输出引脚。它连接到射频发射机的引脚中的数据。

Arduino Nano和MPU6050都有3.3V调节器。因此,所有VCC引脚都连接到一个调节的5V电源。

手势控制机器人图像

接收部分

机器人的接收器部分由射频接收器、HT-12D解码器IC、L293D电机驱动IC和机器人底盘组成,机器人底盘上有四个连接到轮子的电机。

HT-12D是通常与射频接收器相关的解码器IC。它将射频链路接收到的串行数据转换为并行数据。A0 ~ A7 (pin1 ~ pin8)为地址引脚,必须与编码器地址引脚匹配。

由于编码器(HT-12E)的地址引脚已经接地,因此解码器的地址引脚也必须接地。因此,引脚1到9 (A0 - A7和Vss)连接到地面。射频接收器的串行数据被提供给解码IC的Din (Pin 14)。

HT-12D有一个内部振荡器和一个外部电阻33KΩ连接到OSC1和OSC2之间(引脚16和15)。引脚17 (VT)表示数据的有效传输,当数据引脚上存在有效数据时,该引脚将是高的。一个与330Ω电阻串联的LED连接到这个引脚,表示有效的数据传输。

HT-12D的引脚10 ~ 13 (D8, D9, D10和D11)为并行数据输出引脚。分别连接到L293D电机驱动IC的输入引脚(引脚2,7,10和15)。

L293D电机驱动IC用于为电机提供必要的电流(用于正向和反向)。引脚1和9是使能引脚,与引脚16(这是逻辑电源)连接到VCC (+5v)。引脚3 - 6和11 - 14是输出,连接到四个电机。

引脚8是电机供应引脚,连接到一个单独的电源。因此,您需要在接收器部分安装两个电池;一个是电路,一个是马达。

手势控制机器人图像

手势控制机器人的工作

在这个项目中,我们设计了一个由手的手势控制的移动机器人。这里解释了机器人的工作原理。

如前所述,手势控制机器人是一种无线操作机器人,由发射机和接收器两部分组成。当机器人上电后,由Arduino、MPU6050、Encoder和RF transmitter组成的发射机部分将持续监控MPU6050传感器。

这些数据由Arduino捕获,然后根据MPU6050传感器的方向将相应的数据传输到编码器。编码器接收到的并行数据被转换成串行数据,该串行数据由射频发射机传输。

在接收部分,射频接收器接收串行数据并将其传输到解码器集成电路,解码器将串行数据转换为并行数据并将并行数据传递给电机驱动集成电路,根据这些数据定义电机的运动,从而定义机器人的运动。

应用程序

  • 无线控制机器人在许多应用中非常有用,如远程监视,军事等。
  • 手势控制机器人可用于轮椅上的残疾人。
  • 可以研制出由手势控制的工业级机械臂。

到目前为止你所知道的手势控制机器人,完全根据你的手的瞬间(输入到设备的标志)移动。如果你正在寻找一个类似的低预算的设备,那么机器人吸尘器最适合你,因为它有更大的功能,在清洁你的家。

要了解更多关于吸尘器的信息,请阅读2018年价格排名前14的机器人吸尘器

35的反应

  1. 嘿,我尝试了这个项目,但加速度计不给一个特定的手势恒定的读数…对于两个不同的手势,读数是相似的....有解决办法吗?

      1. int GNDPin = A4;//设置模拟引脚4为GND
        int VccPin = A5;//设置模拟引脚5为VCC
        int xPin = A3;/ / X轴输入
        int yPin = A2;/ / Y轴输入
        int zPin = A1;//Z轴输入(未使用)
        int Q1 = 10, Q2 = 11,第三季度= 12,第四季度= 13;//输出引脚连接到解码器IC的10,11,12,13
        长x;//存储X坐标的变量
        长y;//存储Y坐标的变量
        长z;//存储Z坐标的变量
        无效的设置()

        Serial.begin (9600);
        pinMode (Q1、输出);
        pinMode (Q2、输出);
        pinMode (Q3、输出);
        pinMode(第四季度,产出);
        pinMode (GNDPin、输出);
        pinMode (VccPin、输出);
        digitalWrite (GNDPin、低);//设置A4引脚为LOW
        digitalWrite (VccPin、高);//设置A5 pin HIGH

        无效循环()

        x = analogRead (xPin);/ /读取X坐标
        y = analogRead (yPin);/ /读取Y坐标
        z = analogRead (zPin);//读取Z坐标(未使用)
        if(x400) //修改灵敏度调整值
        向后();
        else if(y>400) //修改灵敏度调整值
        对();
        else if(y<340) //更改调整灵敏度的值
        左();
        其他的
        stop_ ();

        空白stop_ ()

        以(" ");
        以“停止”);
        digitalWrite (Q1,低);
        digitalWrite (Q2,低);
        digitalWrite (Q3、低);
        digitalWrite(第四季度,低);

        空白向前()

        以(" ");
        以“转发”);
        digitalWrite (Q1,高);
        digitalWrite (Q2,低);
        digitalWrite (Q3、高);
        digitalWrite(第四季度,低);

        空白向后()

        以(" ");
        以“落后”);
        digitalWrite (Q1,低);
        digitalWrite (Q2,高);
        digitalWrite (Q3、低);
        digitalWrite(第四季度,高);

        的()

        以(" ");
        以“左”);
        digitalWrite (Q1,低);
        digitalWrite (Q2,高);
        digitalWrite (Q3、高);
        digitalWrite(第四季度,低);

        空对()

        以(" ");
        以“正确的”);
        digitalWrite (Q1,高);
        digitalWrite (Q2,低);
        digitalWrite (Q3、低);
        digitalWrite(第四季度,高);

        1. i2c编程怎么样....

          这个项目代码完全错误。我认为你已经用adxl335做到了。

          根据给出的电路,只有两个引脚从mpu6050连接到arduino。

          你已经为x y和z轴声明了3个引脚。这怎么可能。

          如果可能的话,用mpu6050更新工作代码

          1. 是的,这个代码是完全错误的。它是用ADXL335写的,不要用这个代码。您必须编写自己的代码,或者只是将另一个arduino合并到接收器部分!!离我远点,希望有人能上传一个工作代码

  2. 我在接收部分和发送部分得到了一些读数,电压是正确的.........,但无法移动机器人。可能的原因是什么?

  3. 谢谢你分享这个奇妙的物联网项目的想法,我一直在寻找。我会把这个传给我一直在寻找的朋友,当他们在w.i.p的时候,我会把他们直接联系到这里反馈给你。你保持下去

  4. 我是一个学生。那么这个项目的总成本是多少?任何可能导致可负担成本的变化。
    非常有兴趣做它.....

  5. 嗨,我在proteus上试过了,但是我找不到MPU6050..
    你在上面有图书馆吗?

    或者你能把软件模拟发给我吗

  6. 我目前正在开发使用Kinect Xbox360控制ABB IRB120机器人的项目。有人对编码部分有什么想法吗?

留下一个回复

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

Electronicshub图标
Baidu
map