电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>手势控制机器人开源分享

手势控制机器人开源分享

2022-11-16 | zip | 0.11 MB | 次下载 | 免费

资料介绍

描述

介绍

该项目旨在构建一个手势控制机器人,可用于医院、商店、酒店、家庭等,在这些地方需要非接触式交付,以便在 Covid-19 情况下严格遵守社交距离。

项目概况

该项目基本上包含两个电路,一个发射器电路和一个接收器电路。手势通过 MPU6050 加速度计传感器转换为电信号Arduino Nano 处理传入的信号并将其发送到射频发射器。在接收端,这些信号被射频接收器接收并发送到Arduino Uno进行解码。Arduino Uno 在接收到信号后,通过电机驱动器驱动电机。

第一步:传输电路

发射电路由一个 MPU6050 加速度传感器、一个 Arduino Nano、一个 433 MHz 射频发射器和一个 9V 电池组成。电池用于为 Arduino 供电,而传感器和发射器可以由 Arduino 供电。这是因为,Arduino 可以接受 5V 至 12V 的电压,而传感器必须由 5V 电源供电。Arduino 的代码已在本项目的后面部分提供。组件放置在面包板上,并根据下图给出了连接。

pYYBAGNy7VyAV3ibAAIDC6MBEdI248.png
发射器电路
 

完成必要的连接后,它看起来应该是这样的。在这里,我使用了移动电源而不是 9V 电池。

poYBAGNy7V-AHWPlAABSmtI6QHo024.png
 

第二步:接收电路

接收电路由一个 Arduino Uno、一个 433MHz 射频接收器、一个 L298N H 桥电机驱动器、两个直流电机和四个 18650 锂离子电池组成。电池为电机驱动器供电,电机驱动器为 Arduino 供电,射频接收器由 Arduino 供电。Arduino 的代码已在项目的后期部分提供。组件放置在机器人底盘上,并根据下图给出连接。

pYYBAGNy7WOAJpRcAAI24pQRRPo371.png
接收电路
 

电机及其轮子和脚轮应安装在底盘底部。组件应用胶带固定在顶部。如果它是像我这样的金属底盘,则用一层绝缘材料(如纸)将顶部绝缘。完成必要的连接后,机器人应类似于下图。在这里,我为电机和 Arduino 使用了单独的电源。

poYBAGNy7WWAculkAABRjg6RAKo207.png
机器人上的接收器电路
 

第三步:逻辑

MPU6050 传感器具有加速度计和陀螺仪对于这个项目,加速度计值是从传感器获得的。

  • 如果沿 x 轴的加速度值在 20 到 60 之间,则机器人应该向前移动
  • 如果沿 x 轴的加速度值介于 -20 和 -60 之间,则机器人应该向后移动
  • 如果沿 y 轴的加速度值在 20 到 60 之间,则机器人应向左转
  • 如果沿 y 轴的加速度值介于 -20 和 -60 之间,则机器人应向右转
  • 如果以上条件均不满足,则机器人应停止。

第 4 步:对发射器进行编程

首先,包括必要的库。分别为 GY6050 和 RH_ASK 类创建实例,即 acc 和 driver。0x68 代表传感器的 I2C 地址。

#include <RH_ASK.h>
#include <Wire.h>
#include <GY6050.h>

GY6050 acc(0x68);
RH_ASK driver;
char* msg="100";

在 setup 函数中,首先初始化加速度传感器。然后开始串行通信,以 9600 的波特率显示串行监视器中的值。然后,检查 RH_ASK 驱动程序是否已正确初始化。

void setup()
{
    acc.initialisation();
    Serial.begin(9600);
    if (!driver.init())
    Serial.println("init failed");
}

在循环函数中,声明一个名为 msg 的变量,用于将消息发送给接收者。将必要的参数传递给刷新函数以获取两个轴的加速度计值,并将它们存储在两个变量中。

void loop()
{
    const char *msg = "hello";
    int AcX=acc.refresh('A', 'X');
    int AcY=acc.refresh('A', 'Y');
    delay(25);
  • 如果 AcX 的值介于 20 和 60 之间,则在串行监视器中打印 Front 并将值 Front 存储在 msg 中。
  • 如果 AcX 的值介于 -20 和 -60 之间,则在串行监视器中打印 Back 并将值 Back 存储在 msg 中。
  • 如果 AcY 的值介于 20 和 60 之间,则在串行监视器中打印 Left 并将值 Left 存储在 msg 中。
  • 如果 AcY 的值介于 -20 和 -60 之间,则在串行监视器中打印 Right 并将值 Right 存储在 msg 中。
  • 如果上述条件都不满足,则将值 Stop 存储在 msg 中并在串行监视器中打印 Stop。
if(AcX>=20 && AcX<=60)
    {
        Serial.println("Front");
        msg="Front";
    }
    else if(AcX<=-20 && AcX>=-60)
    {
        Serial.println("Back");
        msg="Back";
    }
    else if(AcY>=20&&AcY<60)
    {
        Serial.println("Left");
        msg="Left";
    }
    else if(AcY>=-60&&AcY<-20)
    {
        Serial.println("Right");
        msg="Right";
    }
    else
    {
        Serial.println("Stop");
        msg="Stop";
    }
    delay(100);

然后通过 send 函数发送消息并等待任何先前的消息传输完成。

driver.send((uint8_t *)msg, strlen(msg));
driver.waitPacketSent();
delay(200);
}

第 5 步:对接收器进行编程

首先,包含必要的库并分别为 RH_ASK 和 String 类创建实例。

#include 
RH_ASK driver;
String str;

在 setup 函数中,以 9600 的波特率启动串行通信,并检查 RH_ASK 驱动程序是否已正确初始化。

void setup()
{
    Serial.begin(9600);
    if (!driver.init())
    Serial.println("init failed");
}

在循环函数内部,创建一个缓冲区来存储从发送器接收到的值。然后将缓冲区中的值复制到字符串并在串行监视器中打印。

void loop()
{
    uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];//max size of the buffer
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) //Receive the value and store it in a buffer
    {
        str=(char*)buf;   //Copy the message from the buffer to a string
        Serial.println(str); 
    }
    delay(200);

数字引脚 5 和 6 用于控制左电机,引脚 7 和 8 用于控制右电机。

如果接收到的字符串是 Front,机器人应该向前跑。这是通过将电机的第一个引脚设置为高电平并将下一个引脚设置为低电平来实现的。

如果接收到的字符串是 Back,机器人应该向后跑。这是通过将电机的第一个引脚设置为低电平并将下一个引脚设置为高电平来实现的。

如果接收到的字符串是右,机器人应该右转。所以左电机应该向前转动,右电机应该向后转动。

如果接收到的字符串是 Left,机器人应该向左转。所以左电机应该向后转动,右电机应该向前转动。

要停止机器人,请将所有电机引脚设置为低电平。

if(str=="Front")
    {
        digitalWrite(5,HIGH); //5,6 Left motor
        digitalWrite(6,LOW);
        digitalWrite(7,HIGH); //7,8 Right motor
        digitalWrite(8,LOW);
    }
    else if(str=="Back")
    {
        digitalWrite(5,LOW);
        digitalWrite(6,HIGH);
        digitalWrite(7,LOW);
        digitalWrite(8,HIGH);
    }   
    else if(str=="Left")
    {
        digitalWrite(5,LOW);
        digitalWrite(6,HIGH);
        digitalWrite(7,HIGH);
        digitalWrite(8,LOW);
    }
    else if(str=="Right")
    {
        digitalWrite(5,HIGH);
        digitalWrite(6,LOW);
        digitalWrite(7,LOW);
        digitalWrite(8,HIGH);
    }
    else
    {
        digitalWrite(5,LOW);
        digitalWrite(6,LOW);
        digitalWrite(7,LOW);
        digitalWrite(8,LOW);
    }
}

第 6 步:故障排除

有时电机不会按所需方向运行。首先找出哪个电机以这种方式运行。然后该电机的电线必须互换并重新连接。这有望解决这个问题。

如果接收到的缓冲区包含一些不需要的值以及消息,则使用子字符串函数从中提取消息。

机器人的工作

在构建机器人并将代码上传到两个 Arduino 之后,机器人就可以正常工作了。此处附有机器人的工作视频

由于封锁,我被迫使用可用的组件来完成这个项目。另外,由于同样的原因,我用我的手机相机拍摄了这个视频,因为质量很差。带来不便敬请谅解。如果您在构建此项目时遇到任何问题,请在评论中发布。


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费