基于树莓Pi的姿态控制机器人

你是否厌倦了用按钮控制一切?想通过坐在你懒洋洋的沙发上,用简单的手来控制一些东西吗?如果是,那么您在正确的位置。在本教程中,我们将通过简单的手部动作来控制由两个直流电机驱动的机器人。有不同类型的传感器来检测你的手的运动,如流量传感器、加速度计和其他基于重力的传感器。因此,对于无线传输,我们将使用RF 434模块传输4位数据。4位数据意味着您可以传输16种不同的组合,即0000到1111。在本教程中,我们将使用编码器和解码器来避免空中接口中的干扰。电机驱动器将使用解码器数据驱动电机。

基于树莓Pi的姿态控制机器人
基于树莓Pi的姿态控制机器人

我们在发送器端使用Raspberry pi分析传感器数据,并将数据组合传输到电机驱动器,从而相应地驱动电机,使机器人能够悬停。我们将使用机器人上的12伏电池为解码器模块、接收器模块和电机供电。在变送器端,传感器和变送器编码器模块由raspberry pi自身供电。

组件

组件 规范 数量
覆盆子皮 版本3 1.
存储卡 8gb以上 1.
加速计 ADXL 345或MPU6050 1.
射频模块 射频收发434 1.
电源 用于Rpi的5 V迷你USB适配器
机器人用12V电池
1.
电线 女性对男性&男性对女性 各10个
编码器 HT12E(首选模块) 1.
译码器 HT12D(喜欢模块) 1.
电机驱动器 L293D(首选模块) 1.

使用Raspberry Pi的手势控制机器人-框图

发射端

基于树莓Pi的姿态控制机器人
使用Raspberry Pi的手势控制机器人-发送器端

在发射机方面,我们有加速计、raspberry pi、编码器模块和射频发射机。手势数据从加速计流向raspberry pi,在那里进行处理以决定机器人的移动,运动数据通过GPIO引脚传输到编码器模块。编码器模块对数据进行编码,并在射频发射机的帮助下传输到空中接口。

基于树莓派的手势控制机器人-接收器结束

基于树莓Pi的姿态控制机器人-接收端
基于树莓派的手势控制机器人-接收器结束

来自接收器端的RF接收器从空中接口获取数据并将其提供给解码器模块。解码器模块对接收到的数据进行解码,并将其提供给电机驱动器L293D。电机驱动器根据手势数据驱动电机。

加速计

加速度是速度变化的测量,或速度除以时间。例如,如果一辆车在10秒内从静止的0公里/小时移动到60公里/小时,则该车将以6公里/小时的速度加速。那跟我的手势有什么关系?

加速度计是一种机电设备,用来测量加速度。这种力可能是静态的,就像重力一样,也可能是动态的,就像许多移动设备一样,感知移动或振动。通过测量由重力引起的静态加速度,你可以知道设备相对于地球倾斜的角度。通过感知动态加速度的大小,可以分析设备的运动方式。

一些加速度计使用压电效应——它们包含微观晶体结构,这些结构受到加速力的应力,从而产生电压。另一种方法是感应电容的变化。如果你有两个相邻的微结构,它们之间有一定的电容。如果加速力移动其中一个结构,则电容将发生变化。添加一些电路将电容转换为电压,您将得到一个加速计。

加速度计是以模拟电压形式输出加速度的低功率装置,有些加速度计是以数字形式输出的。ADXL 335等模拟加速计根据运动轴为您提供3个模拟输出X、Y、Z。您可以通过ADC将这些模拟电压转换为数字电压。数字加速度计(如ADXL345)将通过SPI或I2C协议进行通信。这有较少的噪音和最可靠的

还有另一个传感器MPU6050,其中既有加速度计,也有陀螺仪。这也可以用来代替加速计。使用raspberry pi以I2C模式连接时,ADXL345和MPU6050的地址不同,对于ADXL0x53和MPU,其地址为0x68。在本教程中,我将解释如何同时使用ADXL345和MPU6050。

连接加速度计

现在,我们将我们的加速计ADXL 345和MPU 6050连接到raspberry pi,并检查传感器的读数。我相信您的raspberry pi安装了最新的操作系统和python,因为我们将在这里使用python代码。

基于树莓Pi的姿态控制机器人

让我们将ADXL345/MPU6050连接到我们的raspberry pi。在这里,我们将使用I2C协议在设备之间进行通信。在I2C协议中,数据通过SDA(串行数据)和SCL中的时钟(串行时钟)传输。它是异步半双工通信协议。主设备控制整个过程,从设备根据主设备命令进行响应。数据速率由从属设备的可用频率决定。在这里,主设备和从设备之间只有4个连接:3V、Gnd、SCL和SDA。

ADXL345数字加速度计
ADXL345数字加速度计

从GPIO引脚图可以看到Rpi上的SDA和SCL引脚,并将其分别连接到ADXL345/MPU6050的SDA和SCL引脚。使用RPi本身为传感器供电。现在连接完成了。

树莓皮3 GPIO头
树莓皮3 GPIO头

在测试传感器之前,让我们在rpi中安装用于I2c协议的python-smbus,并在rpi中启用I2c协议。

安装smbus:

安装python-smbus i2c-tools

在RPi中启用I2C:

sudoraspi配置

转到接口选项并启用I2c协议。

然后通过这些命令包括i2c规范行。

sudo nano/etc/modules

添加这些行

i2c-bcm2708 i2c开发

如果您使用的是旧的rpi,请使用以下命令从backlist中删除i2c

sudo nano/etc/modprobe.d/raspi-blacklist.conf

注释掉(#)黑名单i2c-bcm2708

sudo重启

使用此命令测试连接。这将显示连接到pi的传感器的地址。

sudo i2c检测-y 1

Adxl将在0x53中找到,Mpu将在0x68或0x69中找到

现在,我们将从Github下载一个预编写的ADXL345 for pi的python库,并测试传感器输出。使用这些命令。

git克隆https://github.com/pimoroni/adxl345-pythoncd adxl345 python sudo python example.py

Example.py是输出X、Y和Z值的程序,如下所示。

我们可以修改此程序或将其用于我们的项目。

对于MPU6050,pimoroni程序无法工作,因此我们将使用github中不同的python模块。

通过使用这些命令。

git克隆https://github.com/Tijndagamer/mpu6050.gitcd mpu6050python setup.py安装

要检查传感器连接和地址,请打开终端并键入以下命令。它将在0x68或0x69处显示传感器地址,如下所示。

要测试我们的传感器数据,请转到python编辑器,只按一个输入这些命令即可查看传感器输出。

从mpu6050导入mpu6050mympu=mpu6050(0x69)Data=mympu.get\u accel\u Data()

进一步,您现在可以确定4个不同位置的阈值的移动,右,左,向前和向后,并记录下来。校准可以做根据你在不同位置传感器值保持在一个位置,你想要向前移动,记下5类似的价值观和圆了一个阈值,如果传感器穿过四舍五入值一个条件语句在程序中可以启用。同样地,校准所有其他动作,如左、右、后退和停止。

程序/代码

下载程序/代码

注:注释中对代码进行了解释。

传输数据

现在python程序将根据手势动作/位置的标定阈值输出4个数字输出。如果超过阈值,则该运动对应的数字输出将被分配给GPIO管脚。

现在分配用于数字输出的GPIO管脚连接到编码器的4位数据管脚。编码器连接射频发射器。更喜欢编码器模块和发射器如下所示。

编码器连接射频发射器
编码器连接射频发射器

使用rpi本身为变送器模块供电。RF将数据串行传输至接收器。变送器模块中有8个用于加密的开关。接收器中必须设置相同的开关位置才能正确接收数据。

接收数据

一旦发送模块开始发送运动数据,从我们将用于机器人的电池供电接收模块。如何测试接收机是否正在接收数据。当为Rx模块供电时,两个led将被点亮,一个用于供电,另一个用于连接。如果连接不开启,请检查开关位置和发射机模块。

基于树莓Pi的姿态控制机器人
基于树莓Pi的姿态控制机器人

在将解码器连接到电机驱动器之前,让驱动器用万用表交叉检查接收的数据。如果你没有任何万用表连接这些4引脚的解码器输出到任何4 gpio引脚的rpi和添加这些行代码到我们的发射器程序,稍后我们注释它。

现在,我们将打印通过编码器传输的电机输出值和从空中接口从解码器接收的数据。这些数据应该匹配。

数据到行动

一旦数据匹配,我们将把解码器连接到电机驱动器L293D。解码器的4个引脚足以驱动电机驱动器输出,电机驱动器输出反过来将解码器数据放大到电机。使电机按照解码器数据运行。

双H桥电机驱动器L293D
双H桥电机驱动器L293D

因为我们使用了4个译码器,可以给出16个数据组合,但4个就足够让机器人悬停了。单个直流电机有两个引脚A和B(比方说)。任何一个引脚A必须在更高的电压比其他引脚B,以便它可以使一个电位差,以运行电机。转动的方向是通过颠倒连接而颠倒的。所以两个电机4个引脚和4个解码器输出将驱动电机。

您可以考虑电机A引脚为A+ A-和电机B引脚为B+ B-为您的方便。

电机配置

解码器输出
A1A2B1B2
马达A
A1A2
马达B
B1B2
机器人
运动
1010 10 10 向前地
0101 01 01 向后的
1001 10 01 正当
0110 01 10 左边

为了向前移动,两个电机应顺时针或逆时针以相同方向旋转。对于反向移动,应给出与正向数据完全相反的数据,以使电机反向旋转。

要左右移动机器人,一个轮子应顺时针旋转,另一个逆时针旋转,以便根据您的配置向左或向右转动机器人。

配置完成后,让我们用手势试驾我们的机器人。接通所有模块的电源,并使用传感器通过RF向电机驱动器发送手势数据。根据您的手势,机器人将以毫秒的延迟移动,如演示中所示。

这是通过将加速度计固定在手上并改变手的方向来测试加速度计,以便根据阈值将运动打印为左、右、前或后。最好全屏幕查看。

因为电线是缠在一起的,我没有天线,运动不会那么顺利。但这些问题是可以解决的。

著者

3.评论

  1. 特里迪布戴伊

    能给我一个关于这个项目的视频吗。。意味着如何制作它。。全部连接电线。。

    • 索吉苏雷什

      我将如何得到电路的布线细节。

Baidu