首页 > 微机单片机 >单片机制作 > 如何利用ADXL335实现手势控制机器人的设计

如何利用ADXL335实现手势控制机器人的设计

来源:互联网发布者:containsmachine 关键词: 机器人 无线控制 ADXL335 更新时间: 2023/12/25

    该无线控制的机器人汽车使用手势:手的倾斜/方向来向前、向后、向左或向右行驶。

    说到机器人,手势控制机器人是业余爱好者和学生在物理和实际项目中理解和实施微控制器知识的最常见的项目类型之一。其背后的概念很简单:手掌的方向控制机器人汽车的运动。但如果你要问它是怎么做到的?那就得让我们仔细分解一下。

    为了更好地理解,我们将通过了解每个组件的角色和功能,然后将它们组合起来以实现所需的性能。

    1. ADXL335(加速度计)

    加速度计的功能很简单:感知手腕的方向。加速度计测量加速度,包括重力加速度“g”。因此,我们可以使用加速度计通过测量 ADXL335 任何特定轴上的“g”分量来感知手腕的方向,如下图所示:

pYYBAGJ2PMCAT4zaAAQPc98DUbE171.png

    由于手的倾斜,X 和/或 Y 轴的角度随垂直方向发生变化,因此“g”加速度的分量也作用在它们上,这可以被测量并因此指示手的方向。

    ADXL335 可以测量高达 3g 的加速度,并通过将其轴引脚连接到 Arduino 的模拟引脚来与 Arduino 接口。加速度计输出与加速度成比例的电压值。

    在这个项目中,加速度计连接到 Arduino Nano 并附在手掌上。ADXL335 输出电压范围为 0 到 Vcc(施加电压通常为 3.3V),并由 Arduino 的模拟引脚读取。因此对于用户来说,我们得到一个范围从 0 到 1024(10 位 ADC)的值。不同的方向为每个轴产生不同的模拟值,然后映射到不同的机器人运动。

    加速度计的电路图是:

pYYBAGJ2PLyAGexOAAJsTRCEnwM667.png

    了解 ADXL335 工作的测试代码如下:

pYYBAGJ2PLiAG9ByAADNNyHx_4k112.png

    你可以运行这个程序来查看你的手掌和手腕向前、向后、向左和向右倾斜的值,这些值最终将用于控制机器人。

    2. RF-433 发射器和接收器

    RF模块的功能很简单:将手腕Arduino Nano的命令数据传输到控制Arduino Uno的电机。RF 模块使用 433hz 频率的无线电波,因此命名为 RF-433。它们使用幅度调制来发送数据,但不会涉及太多技术细节并保持简单,它们将用于向机器人传输命令,即:向前、向后、向右或向左移动。在没有数据的情况下,静止不动。它们的工作范围可达 10 米。

    现在要了解如何在我们的项目中实现射频模块,让我们依次处理发射器和接收器电路。

    发射器电路

    发射器电路由两部分组成:发射器RF和编码器HT12E。发射器由一个数据引脚、一个天线、一个接地和电源组成。向发送器提供数据是HT12E编码器的工作。编码器由 4 个可以发送数据的数据引脚组成。我们将使用这 4 个数据引脚来表示四种运动,这些引脚上的高电平将分别表示四种运动之一,所有引脚上的低电平表示静止。

    电路图如图所示:

pYYBAGJ2PLSAeJi0AAJoBVpwHAg607.png

    左侧引脚(A0-A7)是地址引脚,定义了将交换数据的对(具有相同地址的发送器和接收器将仅共享数据)。我们将 A0-A7 设置为 LOW(接地)。

    数据输入引脚连接到 Arduino 数字引脚(在本项目中为 6 到 9),它们将输出命令数据为:

    数字引脚命令(高电平时)

    9 前锋

    10 反向

    11 左

    12 右

    我们将根据 ADXL335 的输入将数字引脚写入高电平以执行所需的运动。

    接收电路

    接收器电路与所示的发射器电路完全相似,但数据引脚不是作为 Arduino 的输出,在这种情况下,它们将被读取为输入,以接收 Arduino Uno 的命令并根据需要运行电机:

pYYBAGJ2PK-ADbS8AAIj-Kuz-_8557.png

    为简化起见,您可以在引脚 17 处将 LED 与 1K 电阻串联,而不是如图所示的复杂电路,以指示与发射器的正确连接。

    3.电机护罩

    由于 Adafruit 库 AFMotor 的可用性,电机护罩是最容易处理的部分,链接:- https://github.com/adafruit/Adafruit-Motor-Shield-library

下载并复制 Arduino 库文件夹中的库,以便能够将其包含在程序草图中。

    AFMotor 库的示例如下所示:

    #include

    4.结合所有部分

    最后也是最后一部分包括将上述所有部分组合在一起,形成一个完整的机器人,遵循手的命令!

    由于电机屏蔽使用几乎所有的数字引脚,我们将使用 Arduino Uno 的模拟引脚来读取接收器数据。最终的电路图如下所示:

pYYBAGJ2PKiAZv_1AAGiLR1eVf4419.png

    电机屏蔽处理与电机的连接。将 9V 电池连接到屏蔽的电源输入端。

    注意:我个人更喜欢将 2 甚至 3.9V 电池并联到屏蔽电源输入端,以提供足够的电力来运行所有四个电机。我已将四个电机连接成一组 2(同一侧电机并联连接在一起,因此只需要电机点 3 和 4 即可运行)。

pYYBAGJ2PKSABYZ-AAN5EXyf5_M083.png

    最终代码
Arduino Nano:

    int x_axis = 0;
int y_axis = 0;
int forward = 9;
int backward = 10;
int right = 11;
int left = 12;
void setup()
{
pinMode(A0, INPUT);   //X-Axis
pinMode(A3, OUTPUT);   //Y-Axis
pinMode(forward, OUTPUT);  //HIGH to move Forward
pinMode(backward, OUTPUT);  //HIGH to move Backward
pinMode(right, OUTPUT);   //HIGH to move Right
pinMode(left, OUTPUT);    //HIGH to move Left
Serial.begin(9600);
}
void loop()
{
x_axis = analogRead(A0);
y_axis = analogRead(A3);
Serial.print(" X = ");
Serial.println(x_axis);
Serial.print(" Y = ");
Serial.println(y_axis);
if (y_axis >= 390)
{
Serial.println("Forward");
digitalWrite(forward, HIGH);
}
else
{
if (y_axis <= 310)
{
 Serial.println("BACK");
 digitalWrite(backward, HIGH);
}
else
{
 if (x_axis >= 380)
 {
  Serial.println("RIGHT");
  digitalWrite(right, HIGH);
 }
 else
 {
  if (x_axis <= 320)
  {
Serial.println("LEFT");
digitalWrite(left, HIGH);
  }
  Serial.println(" ");
 }
}
}
delay(200);
if (x_axis > 320 && x_axis < 380 && y_axis > 310 && y_axis < 390)
{
digitalWrite(forward, LOW);
digitalWrite(backward, LOW);
digitalWrite(right, LOW);
digitalWrite(left, LOW);
}
}

    #include

    发射器电路:

pYYBAGJ2PJqANy-AAASARTr7zHc438.png

    加速度计:

pYYBAGJ2PJWAKZkCAAbxzIXTWbo830.png

    完整的全部模块:

poYBAGJ2PJCAUgYmAAYv8Uop1Qk663.png

提问/讨论

这里还没有内容,您有什么问题吗?

我要提问/讨论

推荐帖子 最新更新时间:2024-11-13 08:53

多地竞相布局 5G带动自动驾驶加速步入现实
今年政府工作报告提出,加强新型基础设施建设,发展新一代信息网络,拓展5G应用。商用一年来,我国5G部署不断提速,5G正在加速融入各行各业,驱动整个社会的数字化转型。 近日,人民网记者走进车间校园,探寻5G应用落地场景,聚焦5G+制造等新业态,发现5G产业新机会。 搭配了5个
 zqy1111RF/无线
msp430f5529串口通信
求大神给关于msp430f5529的串口通信,波特率是9600的程序,非常谢谢了! msp430f5529串口通信 TI官网都有提供例程,自己去下一下 没找到啊 能发给我一下么 多谢~~ 69137583@qq.com 好的,谢谢!
 执念莫相惜微控制器 MCU
求助各位大神,这个电路有什么问题
我是想做一个自动增益调节的放大电路,电路的原图是这个样子 可是我们的仿真测试的结果增益一直不对应,问题在哪里求各位大神解答 求助各位大神,这个电路有什么问题 奇怪,楼主的输入信号同时送比较器(U1、U2、U3)和放大器(U5)。难道是要在输入信号的一个周期之内改变放大器增益么?
 luoyuhui模拟电子
51增强型板子
手里一块stc12c5a60s2增强型51单片机,资料显示为1T的,定时器里面可以设置它为12T或1T,我现在有个疑问,这个单片机别的时候就都是按照1T运行的吗?我程序里面对延时稍有要求,希望大虾们不吝赐教! 51增强型板子 没用过,建议去找官网的datasheet。官网上应该
 麻滴滴51单片机
STC芯片还能用吗?要求整盘购买
我 14:24:20 50片100片的没什么区别吧 STC 14:25:53 价格一样的 STC 14:26:02 但是要整盘买 STC 14:26:09 160一盘 我 14:26:28 一盘多少片? 我 14:26:46 现在不零售? STC 14:27:54 160片
 kangkls国产芯片交流
premierelectronics
我是上海派睿电子的 朱林 下面给您介绍下我们的 3 个网站 http://www.newark.com/ 这是我们美国的网站 http://uk.farnell.com/ 这是我们英国的网站
 派睿电子嵌入式系统

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

EEWORLD 电路图 站点相关: 下载中心 Datasheet 参考设计

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved