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

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

3天内不再提示

基于树莓派实现的水下无人机设计方案

科技观察员 来源:hackster.io 作者:hackster.io 2022-05-03 17:04 次阅读

本文介绍了由树莓派驱动的水下无人机原型的设计过程、开发和组装操作。

我在探索频道上看了很多关于发明家的节目,有一次我决定自己做一些有趣的事情,这样一次就可以真正令人印象深刻和困难:一些电动机、控制器、处理、相机。买了很多有用(而且不是很有用)的东西后,我开始思考应该开始什么样的项目。最后我得出的结论是,有很多飞行和驾驶无人机,但不是关于水下无人机(哈哈,现在看来,我当时简直大错特错)。

pYYBAGJZNP6APkugAAmXzDWx6-w375.png

在网上冲浪后,我发现了几个有趣的项目,但其中大多数要么处于开发阶段,要么价格不便宜。

展望未来,我可以说我有一个可以游泳几米深的工作原型,尽管它有着部分优点和缺点。我不能断言我终于有了一个易于控制的东西,或者可以做的不仅仅是平息我的工程师热情的东西。但是这些东西的所有单元都能正常工作,我的错误和经验可以帮助某人创造出真正重要的东西(即使它只对他自己有意义),这一点在我看来是非常重要的。

由于做了大量工作,本文可分为以下几章:

选择组件

电调编程

树莓派服务器配置

使用 Raspberry Pi 处理电动机

陀螺仪

树莓派手电筒控制

客户端-服务器通信协议

安卓应用

视频

屏幕和操纵杆控制

施工组装和测试

结论

选择组件

您将在下面找到用于创建设备的不同内容的列表。

母板

poYBAGJZNPiAS9q0AAUTU_NNeTc534.png

在众多控制器中,我选择了Raspberry Pi 3B 。我不会为这个项目推荐类似 Arduino 的板,因为它不会管理如此复杂的任务,因为需要控制至少 4 个电机二极管、陀螺仪、从相机发送视频流并同时接收并处理来自控制设备的命令。Raspberry Pi 3B 带有用于 RJ-45 连接器的内置 Wi-Fi以太网,这无疑会帮助您完成所有这些操作。

联结渠道

poYBAGJZNPSAAGKoAAGcC0zCTUE181.png

在水下传输数据总是很困难。水是一个很好的盾牌,因此,您可以忘记任何无线数据传输。所以没有其他选择。

在水下传输数据的能力。

水下数据传输的速度。

通用性(它非常适合 Raspberry Pi 3B 和发射器)。

基地发射器

pYYBAGJZNPOAYEsSAAFYX4NHzT0828.png

NEXX迷你路由器 有 3 个主要的传输选项:

尝试将 Wi-Fi 天线从水中连接到陆地(在这种情况下,应该使用实心线而不是双绞线),但存在很多争议点。

在两个 Raspberry Pi 3B 之间创建一个客户端-服务器桥连接(这将是合适的,但更昂贵且更麻烦)。

使用双绞线将迷你路由器与 Raspberry 连接。这个选项被作为基础,因为它是最可靠、最快速和最便宜的。经验证明,这是一个相当不错的选择。

电动马达

pYYBAGJZNPKAAZ7uAAISYgth2Jg646.png

N2830/2212 1000KV

在测试了 3 种不同的电机后,我选择了这个模型。你可能会问为什么?因为它足够强大,它有第二个轴,所以你可以同时使用 2 个螺旋桨。一般来说,所有电机在水中正常运行,直到藻类或沙子进入电机内部。如果您选择高速且功率较小的电机,您会发现这些类型的电机并不是最适合水的。更便宜的电机也没有达到预期。

控制板 (ESC)

poYBAGJZNPKASVyjAAOHPJLxAs0140.png

非洲式电调 (30A)

这也很简单。它可以编程为正向/反向切换,30安培的功率对于被测电机来说应该足够了。

Afro ESC USB 编程工具

pYYBAGJZNNCADf9UAAMW1kkDxZ4106.png

ESC 的编程工具。使用此设备,您可以上传必要的固件。但实际上,这就是问题所在。我不得不等了一个半月。

LED脉冲驱动器

pYYBAGJZNMmAT51SAAO1Sz1cAFM112.png

7-30В 3А或类似

这非常适合我们的目的 - 它拥有两个上述 LED,它还连接到 Raspberry 并允许您调整 LED 的亮度。

陀螺仪

MPU-6050

一个三轴陀螺仪/加速度计,将位置数据发送到树莓。有一些数据,但不是很有用☺。

相机

pYYBAGJZNL-AaelNAAG_79kf1fg163.png

RPi 相机 F

您可以使用任何其他本机 Raspberry Pi 相机。主要条件是它应该通过FFC连接,而不是USB。视频流一直是一个大问题(延迟、编码),或者更确切地说,这不是问题,只是需要很多时间才能开始。

操纵杆

poYBAGJZNLuAF3biAAPRchusv4Y883.png

iPega PG-9055 - 额外的控制助手,如果你的手湿了,相信我,他们会湿的,你可以使用这个设备控制无人机。

电池

Turnigy 2200mAh 3S 30C

再次进行了很多测试。18650 电池不适合,因为控制器具有 25A 的放电率,这对于峰值负载条件下的整个系统来说是不够的(是的,几块电池在使用后就死了)。可以尝试使用 6 节电池并获得 50A,但难度更大。这样的直流电不能使用电线传输(不要忘记大约 100 m 的距离)。所以我买了 Li-Po,它优雅地完成了任务,完美地融入了外壳。

驱动螺旋桨(主要问题之一)

电缆接头

还有外壳、连接器、电线和其他东西。

电调编程

不幸的是,全新的 Afro ESC 只能向一个方向旋转,因此您需要更新固件。

pYYBAGJZNLKALe17AARZfxcXjpk034.png

现在正确连接电线很重要,否则其中一个设备可能会发生故障。

在这里,您将找到一些有关如何正确连接电线的简短说明:

一对红色和黑色粗线,末端有一个公连接器。是通用电源。在这种情况下,提供的电源将是 12V 和所需的安培数。

红色——输入端口“+”。

黑色 – 输入端口“-”。

一根粗红黑黄的电线负责电机电源。我们现在不会连接它们,但稍后我们会将这些电线连接到具有相似颜色的电动机的电线上。

细线负责控制电路板。

控制信号通过黄线传输。

红线输出5v(我没用过)。它们有几种不同的类型,您可以在此处了解更多信息

黑线应连接到端口“-”。

因此,让我们将细线连接到链接器:将黑线(减号)和黄线(信号)连接在一起。请勿触摸或将红线连接在一起。下一步——为电路板提供电源(黑色和红色厚输入)。我使用了这个静态电源单元,但任何其他具有类似特性的电源都可以(12V,2+A)。

打开固件更新工具并选择:

pYYBAGJZNK2AP7kgAAHovqyvZcs262.png

端口:选择连接的 USB 端口。幸运的是,只有很少的选择。

波特率:9600。

控制器:基于 atmega 8 的无刷 ESC(8kB 闪存)。

选择下载的固件文件。单击“运行”按钮并祈祷:)

很快固件就会成功上传到电调,一切准备就绪。

使用 Raspberry Pi 处理电动机

一件重要的事情是,如果您正在构建一个严肃的项目,而不仅仅是为了好玩,您不必使用 Raspberry PI 进行实时工作,例如电机处理。PWM 生成不会如您所愿,因此请使用单独的板,例如 Arduino 进行控制。但是对于我的项目来说,使用 Raspberry 就足够了。感谢Fabio Balzano在本文下方的评论中对此进行了解释。

所以,让我们开始我们工作中最有趣的部分——我们应该为 Raspberry Pi 控件编写代码。找到项目文件夹~ /drone并在那里安装 PiGpio 库:

poYBAGJZNKeAT6g_AAAl1VFwV50172.png

现在我将为您提供一些有关 ESC 控制的简短信息。我们应该将某个频率传输到细黄线(控制)(参见“ESC 编程”部分)。afro_nfet_besc30_r1固件的范围是1100-1900 ,其中值 1500 是平静状态,1100 最大反向,1900 最大正向。创建文件engines.js并将JS代码添加到其中:

//Calm state constant
const SERVO_ZERO = 1500;
//Connect 'pigpio' library
const Gpio = require('pigpio').Gpio;
// Define 4 motors using Raspberry pins (this process will be described below)
const servo1 = new Gpio(22, {mode: Gpio.OUTPUT});
const servo2 = new Gpio(10, {mode: Gpio.OUTPUT});
const servo3 = new Gpio(9, {mode: Gpio.OUTPUT});
const servo4 = new Gpio(27, {mode: Gpio.OUTPUT});
//Set each board into the state of "calm"
servo1.servoWrite(SERVO_ZERO);
servo2.servoWrite(SERVO_ZERO);
servo3.servoWrite(SERVO_ZERO);
servo4.servoWrite(SERVO_ZERO);
//After that you should enter the value into ESC
module.exports.engines = {
leftEsc: (value) => {
servo1.servoWrite(value);
},
rightEsc: (value) => {
servo2.servoWrite(value);
},
topLeftEsc: (value) => {
servo3.servoWrite(value);
},
topRightEsc: (value) => {
servo4.servoWrite(value);
}
}

为了使用此代码,您应该在app.js中编写:

pYYBAGJZNJ-AUpmpAAAu-ZAV4CE938.png

实际上这部分代码servo1.servoWrite()负责控制。1100 - 电机反向转动,1900 - 最大正向转动。

在这里您可以找到 Raspberry pin 方案:

poYBAGJZNJuAOT46AAV_YtrxPec434.png

简而言之,你应该使用橙色的 GPIO。一对由 GPIO 10 和 GPIO 22 组成,第二对是 GPIO 9 和 GPIO 27(使用 27、22 和 10 -9 会更合乎逻辑,但我在焊接时没有考虑到,所以我不得不更改它)。如果考虑序数(它们是灰色的),那么这些是 13、15 和 19、21 联系人。您应该将 ESC 的黄线连接到它们中的每一个,负号应连接到一个 GND,例如 39 触点。现在让我们连接其他的东西。

将Afro ESC的电源线(红色和黑色)连接到单独的电源单元(12v),将电机连接到黄-红-黑粗线,现在您可以尝试它是如何工作的。

陀螺仪

连接示例:

poYBAGJZNJWAa_HvAALoTUYU6uI914.png

VCC到引脚 1 (3.3V PWR)

GND到任何负号

SCL到引脚 5 (GPIO 3)

SDA到引脚 3 (GPIO 2)

正确连接一切并不难,如果谈论软件——它会更简单——所有信息都可以在互联网上轻松找到。在这里你应该使用i2c-bus и i2c-mpu6050库。将它们安装到项目中:

pYYBAGJZNI-AFWk1AAAYNnlI4lM731.png

创建文件gyroscope.js并添加:

const i2c = require('i2c-bus');
const MPU6050 = require('i2c-mpu6050');
const address = 0x68;
const i2c1 = i2c.openSync(1);
const sensor = new MPU6050(i2c1, address);
var reading = false;
var sensorData = {};
module.exports.gyroscope = {
getData : () => {
return JSON.stringify(sensorData);
},
readRotation : () => {
sensor.readRotation(function (err, rot) {
if (err) {
console.log(e);
return;
}
console.log(rot);
});
},
readSensor : () => {
if (!reading) {
reading = true;
}
sensor.read(function (err, data) {
reading = false;
if (err) {
console.log(err);
} else {
sensorData = data;
}
});
}
}

以一定的频率运行 readSensor 方法,并从 getData 获取上次调查的数据。会有很多位置分量(x,y,z,a)。我没有足够的时间来定义这些组件的含义,因为我有更重要的任务——处理。我知道调查它会更好,但结果的相关性对于当时的这个项目来说并不是很重要。

树莓派手电筒控制

所以,让我们继续增加我们无人机的功能,现在我将向您介绍 LED。我有两个XHP-50 LED 和 LED 脉冲驱动器(见上表)。它们很容易过热,因此我建议您将它们与散热器一起使用。你可以在同一个网上商店找到它们,最主要的是不要忘记尺寸。因此,将 LED 连接到散热器上,使用电线将一个 LED 的负极焊接到另一个 LED 的正极(它们已标记)并焊接 - 和 + 线:

poYBAGJZNIKAc78IAAKAyuFuqdw838.png

控制器和焊接:

poYBAGJZNHyAJyDjAAHuDLKhfYY198.png

电源 - 12V 正负,您可以使用与电机相同的输入。LED 连接器应连接到先前焊接的连接器,L- 到负,L+ 到正。在这种情况下,我们不需要模拟触点(A),所以不要连接它。

现在我们对数字输入(D)和接地输入(G)感兴趣。现在您应该将数字输入 (D) 与 GPIO11 连接,将接地输入 (G) 与 GND 连接(您可以在 Raspberry 上选择任何您想要的)。

现在让我们回到 Raspberry Pi,创建一个文件light.js并添加以下内容:

//Again the same library
const Gpio = require('pigpio').Gpio;
//Create Gpio for your pin
const light = new Gpio(11, {mode: Gpio.OUTPUT});
// You can set the value starting from 0 to 255 (I have found this info in the LED driver instructions)
const LIGHT_MIN = 0;
const LIGHT_MAX = 255;
//It will be needed for calculations
const LIGHT_DIAPASONE = LIGHT_MAX - LIGHT_MIN;
// Turn off the LED (the system starts with the LEDs turned on to maximum)
light.pwmWrite(LIGHT_MIN);
//Export work methods
module.exports.light = {
on: () => {
//Transmit the value 255 to the driver
light.pwmWrite(LIGHT_MAX);
},
off: () => {
// Transmit the value 0 to the driver
light.pwmWrite(LIGHT_MIN);
},
//Here will be the percent value from 0 to 100
set: (val) => {
if(val < 0 || val > 100) return;
//Calculate the value based on the percentage
val = Math.round(LIGHT_MIN + LIGHT_DIAPASONE / 100 * val);
console.log("Light:"+val);
//Transmit the value to the driver
light.pwmWrite(val);
}
}

我们可以使用app.js或引擎运行它:

pYYBAGJZNGqAMhhGAAAu-wGt3Iw482.png

客户端-服务器通信协议

正如您从树莓派的初始配置中了解的那样,通信将使用套接字连接进行。您还需要一些在服务器和客户端中硬编码的命令集。当我自己做所有事情时,我决定使用我自己的格式,因为存在的选项与重量/可读性标准不太匹配。因此,让我们在考虑控制模型的情况下进行构建,在这种情况下,它将是 Android 智能手机

pYYBAGJZNGOAakBaAAHlwcBdAsU317.png

在这里你可以找到模型本身(应用程序将在下面描述)。

画面分为两部分。左边部分代表水平轴(前后),右边部分代表垂直轴。如果您将手指放在某个区域,这将被视为参考点并由一对电机控制,但它也是一个“平静”点。

如果您的手指垂直向上滑动,两个电机的正向旋转速度将随着功率从 0 到最大值(取决于接触点到当前点的距离)缓慢增加。

如果您向下滑动手指,两个电机将以一定速度反向旋转,该速度取决于与接触点的距离。

如果您向右滑动手指,左侧电机将向前旋转,而右侧电机将反向旋转。所以,实际上,我们需要知道偏离接触点的角度(其中top=90,bottom=90,right=0,left=180)和速比——手指到接触点的距离(从 0 到 100)。对象命令应如下所示:

pYYBAGJZNECAO-IHAAAcpfh6JH8597.png

С - (command),任何命令都应该以这个字母开头;

: - 键值分隔符;

; - 键值对的分隔符;

L——表示触摸是在屏幕左侧进行的;

R - 表示触摸是在屏幕的右侧进行的;

LIGHT——代表光 :)

A ——ANGLE,偏差角;

V——价值,某物的价值。

因此,第一个命令听起来像:“一对水平电机,方向 - 45 度(左电机处于最大速度(但最大值为 35%,基于 V),右电机停止),旋转速度为 35%最大限度”。

第二条命令:“垂直电机对,方向 - 0 度(左电机最大转速,右电机反向最大转速),最大转速”。

第三个命令:“以 50% 的亮度打开灯”。

当您通过套接字在键值块中为每个值更改发送单独的命令时,这就是它的工作原理。然后神奇地变成控制板上的命令。解释这些数据的转换会很无聊。所以大家可以试着自己研究一下,掌握控制器。

安卓应用

最后,我们已经到了尝试创建控制器的时刻。一般来说,通信的意思是:“点击屏幕上的东西——将值传输到服务器”。我会写一些关于应用程序的内容。没有什么不寻常或特别具有挑战性的,所以我不会发布所有代码。如果您愿意,您可以访问存储库并找到所需的信息。我还想指出,我没有使用任何新奇的模式,如 MVVM、MVP、VIPER 等,因为我需要在最短的时间内工作的应用程序。UI 尽可能简单。

首先,您应该创建一个带有状态显示视图的活动。布局如下:

视频显示层(播放器封装在一个片段中)。

JoystickView层是一个自定义视图,其中dispatchTouchEvent方法被覆盖,它处理手指在屏幕上的按下和移动。它将 UI 线从按下点绘制到当前状态。多点触控支持是强制性的,因为控制是用两根手指执行的。

一个带有 Raspberry Pi 当前温度的 TextView 的层(如果出现问题并且它开始过热,您可以在它关闭/燃烧之前停止使用它)。幸运的是,我的 Raspberry 没有发生这种情况。

陀螺仪显示的数据层。在标签值对中设置的 TextView。它显示来自陀螺仪的“原始数据”。计划处理这些数据,但我没有足够的时间来做它并发明一个很酷的显示它。

一个 SeekBar 层 - LED 控件,一个简单的元素,它在拖动时将值从 0 更改为 100。

施工组装和测试

现在我们已经到了下一步——我们需要找到一些东西,我们可以放置上面提到的所有东西(哈哈)。在设计和组装阶段,我的朋友 Sergey 给了我很多帮助。实际上,他找到了一个外壳,做了一个铁平台,我们可以将电机安装在不同的位置,然后将它们放在一起:

poYBAGJZNCSAXh1LAAZldwFa5oI173.png

我先说 6 个电机的原型会更有效率,但对我来说,即使有 4 个电机也很难支持原型,这就是为什么决定用 4 个电机测试原型的原因。

首先,我们决定测试外壳的结构,这就是为什么我们没有将所有电子设备都放入外壳中,而是简单地将电机连接到平台上,两对双绞线从电调发送信号到每个他们(ESC在测试期间一直留在内陆)。

poYBAGJZNByAMrTsAAamrGW3Zps699.png

结论

所有这一切的主要结果是,我获得了构建此类单元和系统的丰富经验。在开发过程中使用了大量不同的设备,其管理比看起来要容易得多。四电机原型并没有预期的那么好——控制这样的设备非常困难。最好使用四个垂直电机和至少两个水平电机。同时,它应该用陀螺仪稳定,因为对于人类来说,它很难完美地控制它,需要帮助(飞行无人机也是如此)。

此外,所有在售的电机都会被沙子和其他东西堵塞,所有单元都可能因腐蚀而损坏(这是合乎逻辑的),不适合此类项目。我没有找到水下马达(可以表明它是防水的,但它只能在 1-2 米的深度正常工作)。在这个项目之后,任何智能家居似乎都没有那么复杂了。服务器,中继命令,仅此而已。您需要的主要是有时间和愿望去做。其余的将随之而来。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 无人机
    +关注

    关注

    224

    文章

    9881

    浏览量

    174786
  • 树莓派
    +关注

    关注

    113

    文章

    1638

    浏览量

    104727
收藏 人收藏

    评论

    相关推荐

    The Drone Pi :用树莓无人机(一)——材料准备

    RaspiU盘:用来保存视频遥控和遥控接收器:把遥控接收器连到Multiwii尽请期待:用树莓无人机(二)——工作原理和框架构造用树莓
    发表于 12-29 15:24

    树莓无人机(三)——推进和飞行控制

    树莓无人机(一)——材料准备用树莓无人机(二)——工作原理和框架构造推进:飞行控制器和
    发表于 01-06 10:54

    树莓无人机(完)——树莓部分

    树莓无人机(一)——材料准备用树莓无人机(二)——工作原理和框架构造用
    发表于 01-06 11:32

    有没有对水下无人机感兴趣的

    本帖最后由 hellocode 于 2016-10-4 18:27 编辑 本人8年软件经验,想找个华南地区经验较丰富的硬件portner,业余时间DIY个水下无人机玩玩,有没有感兴趣的大哥一起探讨探讨{:12:}
    发表于 10-01 11:31

    你期待水下无人机的什么功能?

    `你期待水下无人机的什么功能?第一个,就是导航,我比较喜欢,因为毕竟水下就好比一片四面望不到的森林,很容易迷失方向高清的摄影功能,当然也少不了足够的照明,水下没有太阳,超过七八米就开始
    发表于 01-17 17:51

    无人机电源系统设计方案探讨

    系统设计更加容易,而且还可让无人机设计人员专注于无人机设计之其他部分,而不是在电源系统设计上花大量的时间;它不仅可节省设计完成时间,还可降低设计复杂性。  为了充分利用上述优势,Vicor模组电源
    发表于 10-09 10:31

    无人机电源系统设计方案探讨

    复杂性不仅可以使电源系统设计更加容易,而且还可让无人机设计人员专注于无人机设计之其他部分,而不是在电源系统设计上花大量的时间;它不仅可节省设计完成时间,还可降低设计复杂性。  为了充分利用上述优势
    发表于 10-09 10:02

    TDK-Lambda电源在系留无人机水下机器人中的应用

    近来,在与客户工程师的沟通中了解了一些系留无人机水下机器人等方面的系统应用,两种设备虽然完全属于不同的行业领域,但是供电的构架却有很多相似之处,这里粗略整理一下,分享给大家。系留无人机电源构架系留
    发表于 08-16 11:15

    多轴无人机BLDC驱动解决方案

    、、科学考察、石油勘探、航空遥感、边防巡逻、森林防火、灾况评估、气象预报、考古研究等)    常见的玩具无人机和小型无人机通常采用简洁的4轴设计,而用于快递、运输、行业用途的无人机则会采用更多轴的
    发表于 07-02 15:40

    航模/无人机遥控的解决方案

      一、方案概述:  一个典型的无人机系统包括飞行器、一个地面控制站(Ground Control Station)GCS、有效载荷及数据链路。地面控制站用于实现任务规划、链路控制、飞行控制、载荷
    发表于 07-03 14:56

    怎样去设计一个基于树莓和Python的无人机视觉跟踪系统呢

    怎样去设计一个基于树莓和Python的无人机视觉跟踪系统呢?有哪些设计步骤呢?
    发表于 11-12 07:15

    真“水下无人机”:世界第一架能飞能潜水的无人机

    一直以来,包括雷锋网在内的很多媒体都报道“水下无人机”这种产品,单从这个词语来看,水下+无人机应该是一种既能在水下游又能上天飞的产品,但事实
    发表于 02-09 10:00 1662次阅读

    powerray水下无人机简单介绍

    跟市面上“换汤不换药”的空中无人机大不一样,水下无人机绝对算的上无人机市场的一股清流。除了水下摄影之外,
    发表于 01-15 08:43 5276次阅读

    水下无人机原理分析

    本文主要介绍了水下无人机原理和水下无人机分类,其次介绍了水下无人机控制问题和
    发表于 01-15 16:07 1.3w次阅读

    水下无人机的用途和优势有哪些

    水下无人机目前已经得到广泛的运用。本文主要介绍了水下无人机的用途、水下无人机的优势。及
    发表于 01-15 16:19 8787次阅读