资料介绍
描述
介绍
该项目旨在构建一个手势控制机器人,可用于医院、商店、酒店、家庭等,在这些地方需要非接触式交付,以便在 Covid-19 情况下严格遵守社交距离。
项目概况
该项目基本上包含两个电路,一个发射器电路和一个接收器电路。手势通过 MPU6050 加速度计传感器转换为电信号,Arduino Nano 处理传入的信号并将其发送到射频发射器。在接收端,这些信号被射频接收器接收并发送到Arduino Uno进行解码。Arduino Uno 在接收到信号后,通过电机驱动器驱动电机。
第一步:传输电路
发射电路由一个 MPU6050 加速度传感器、一个 Arduino Nano、一个 433 MHz 射频发射器和一个 9V 电池组成。电池用于为 Arduino 供电,而传感器和发射器可以由 Arduino 供电。这是因为,Arduino 可以接受 5V 至 12V 的电压,而传感器必须由 5V 电源供电。Arduino 的代码已在本项目的后面部分提供。组件放置在面包板上,并根据下图给出了连接。
完成必要的连接后,它看起来应该是这样的。在这里,我使用了移动电源而不是 9V 电池。
第二步:接收电路
接收电路由一个 Arduino Uno、一个 433MHz 射频接收器、一个 L298N H 桥电机驱动器、两个直流电机和四个 18650 锂离子电池组成。电池为电机驱动器供电,电机驱动器为 Arduino 供电,射频接收器由 Arduino 供电。Arduino 的代码已在项目的后期部分提供。组件放置在机器人底盘上,并根据下图给出连接。
电机及其轮子和脚轮应安装在底盘底部。组件应用胶带固定在顶部。如果它是像我这样的金属底盘,则用一层绝缘材料(如纸)将顶部绝缘。完成必要的连接后,机器人应类似于下图。在这里,我为电机和 Arduino 使用了单独的电源。
第三步:逻辑
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 之后,机器人就可以正常工作了。此处附有机器人的工作视频。
由于封锁,我被迫使用可用的组件来完成这个项目。另外,由于同样的原因,我用我的手机相机拍摄了这个视频,因为质量很差。带来不便敬请谅解。如果您在构建此项目时遇到任何问题,请在评论中发布。
- 手势控制机器人开源项目
- WiFi控制机器人开源项目
- 手势控制机器人开源硬件
- 简单的蓝牙控制机器人开源
- 蓝牙控制机器人开源
- 蓝牙控制机器人车开源分享
- 使用TensorFlow对自平衡机器人进行手势控制
- 蓝牙控制机器人开源分享
- WiFi控制机器人开源分享
- 语音控制机器人开源分享
- 如何制作手势控制机器人-MadeWithArduino(发射器)
- 基于DSP和PC的农业机器人控制系统 17次下载
- 机器人PID控制概述 27次下载
- 机器人设计教程之机器人控制和决策子系统 23次下载
- 手势对工业机器人进行控制 0次下载
- 如何使用PLC控制机器人 793次阅读
- 字节发布机器人领域首个开源视觉-语言操作大模型,激发开源VLMs更大潜能 360次阅读
- 机器人技术中常用的路径规划算法的开源库 842次阅读
- 如何利用ADXL335实现手势控制机器人的设计 2888次阅读
- 基于PIC单片机和PSC控制器实现机器人控制系统的设计 3699次阅读
- 机器人控制系统分类_机器人控制系统有哪些 2.6w次阅读
- 工业机器人技术应用 5176次阅读
- 机器人控制器有哪些类型_机器人控制器发展 1.1w次阅读
- 关于工业机器人智能控制的四种控制方式 6336次阅读
- 协作机器人的起源_为什么需要协作机器人 8127次阅读
- 移动机器人控制系统设计与仿真 3433次阅读
- 机器人控制系统的基本单元与机器人控制系统的特点分析 1w次阅读
- 机器人的运动控制的介绍和如何将机器人的运动控制分成4种任务 1w次阅读
- AI和VR在机器人控制的实在应用汇总 5506次阅读
- 基于PLC的机器人伺服运动控制系统设计详解 1.5w次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多