亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

WalaBeer Tank

组件和用品

Walabot Creator
× 1
Arduino MKR1000
× 1
Raspberry Pi 3 B 型
× 1
亚马逊 Alexa 亚马逊回声
或 https://echosim.io/
× 1
SparkFun 电机驱动器 - 双 TB6612FNG (1A)
× 1
坦克框架(包含2个有刷直流电机)
× 1
舵机(Tower Pro MG996R)
× 3
金属建造游戏套件
× 1
步进电机+驱动
我使用了 28byj-48 步进电机和 X113647 电机驱动器
× 1
7.4V LiPo 电池
× 1
7.4V LiPo 电池充电器
× 1
旋转电位器(通用)
× 1
LED(通用)
我使用了一段 LED 灯带
× 2
钓鱼线
× 1
用于封面的薄塑料或硬纸
× 1
5V BEC 电路
× 1
电阻 10k ohm
× 1
电阻 22.1k ohm
× 1
电阻 2.21k ohm
× 1
达林顿大功率晶体管
× 1
30 厘米长的木尺
× 2
电压表
这是可选的
× 1
带接收器的遥控发射器
这些是手动控制坦克的可选部件。它可以在没有遥控器的情况下工作。
× 1
啤酒
× 1

必要的工具和机器

烙铁(通用)
热胶枪(通用)
锯工具
钻孔
Rasp

应用和在线服务

Arduino IDE
亚马逊网络服务 AWS IoT
亚马逊网络服务 AWS Lambda
亚马逊 Alexa Alexa 技能套件
Walabot SDK
Python

关于这个项目

摘要

每个人内心深处都有想要拥有的东西。结合啤酒和坦克是其中之一!这个项目将是关于这个东西的,一个语音控制的罐子,它通过自主的“跟我来”功能或遥控控制向你提供啤酒。让我们建造我们梦想中的啤酒罐!

机箱

我们需要一个好的坦克基地。我在 banggood 上找到了这个机箱。它很便宜,而且看起来很酷,我需要买一个。

收到产品后,第一个问题就来了。由于包装不当,它在运输过程中遭受了一些严重的伤害。

花了很多时间和很多胶水,但幸运的是我能修复它。

起重机

罐底盘包含电机和变速箱,因此下一步是弄清楚如何提供啤酒。经过无数个想法,我发现最好和最酷的方法是隐藏啤酒,然后使用起重机将其提升。这是我想出的基本设计:

我使用了旧的金属建造工具包,因为我需要一个坚固但易于修改的骨架。起重机通过钓鱼线连接到步进电机 28byj-48 步进电机非常适合此用途。它并不快,但可以轻松举起起重机和啤酒。其实马达太强劲了,不及时停下来把鱼线弄断了。

它工作得很好,但是骨架不够坚固,很早就开始弯曲。为了解决这个问题,我需要增加结构完整性。我用了两个 30 厘米长的硬木尺子和一些额外的零件来使它更坚固。经过一些钻孔、锯切和锉磨后,这里是下一个版本:

如您所见,修改解决了弯曲问题,并且非常稳定。

案例

Walabot(开发者版本)将成为坦克的“眼睛”。在 Walabot 部分了解更多关于 Walabot 的信息。前面的地方有一个 Walabot 的支架部分。我有一个大小合适的金属部件,可以使用 Walabot 的磁性支架。我还用热胶做了一个 Walabot 标志形状,以防止 Walabot 在圆形部分旋转:

磁性安装很棒,因为我可以轻松地在多个项目中使用一个 Walabot,而无需进行任何认真的拆卸,而且它也足够坚固。

我开始在框架周围盖上盖子以隐藏零件。我用黑色硬纸板和塑料片做封面。

在这一点上,前面和中间部分没有被覆盖。我还需要一个顶部的舱口来完全隐藏啤酒。为了移动舱口,我使用了两个伺服器,一些热蓝色和一些绝缘胶带。这个顶门只用于设计,并不能真正保护啤酒。然而,当它打开并提升啤酒时,它非常酷。

门是由两块塑料板、木棍和一些用胶水粘合和卷起的纸制成的,用热胶粘在一起。这不是最漂亮的东西,但在现实生活中它看起来并没有那么糟糕。我把所有东西都涂成黑色。在现实生活中,要看到黑色部分之间的区别要困难得多。

起重机 - 卷。 2

让我们再一次回到起重机上。我还需要一件事来可靠地使用它:反馈。

最初我想为此使用一个简单的二进制反馈。当起重机处于下降状态时,它会关闭电路。升高时它会打开:红色圆圈中的螺钉和弹簧就是那个开关。它将使用计时器来确定顶部位置。

这不是太复杂,但这个想法奏效了。不幸的是,它根本不可靠,因此很容易导致起重机损坏。

我想出了另一个更好的解决方案,蓝色矩形中的那个。我将一个 10K 电位计粘在起重机轴的 和 上,因此我对起重机的当前角度有可靠的反馈。以这种方式确定顶部和底部位置非常容易。仅供参考:在此之前,我使用我的旧 Arduino Uno 进行测试,因为它的原型屏蔽非常方便。

其实我真的很喜欢这个反馈部分。这不是计划中的,但它为坦克的外观增添了一些额外的酷感。

电路

好吧,坦克的身体已经完成,但我们需要一些电子设备来让它移动!

我也把这张图片放到了原理图部分,但在这里你可以放大它而无需下载。该电路起初可能看起来有点复杂,但实际上它非常简单。随附的注释应该有助于解决任何需要解释的问题。

这个项目目前没有使用 Arduino MKR1000 的 WiFi 功能,但据我所知,如果你想使用 RC 发射器控制坦克,你不能只用 Arduino Uno 替换它。我的项目使用 3 个通道来控制速度、转弯和起重机。我需要 3 个具有外部中断功能的引脚。为此,Arduino Uno 只有 2 个引脚。我们需要这些引脚来读取 RC 接收器相应通道的 PWM 值。

我在原型 PCB 上构建了电路。它变得非常紧凑。左边的蓝色 LED 本来是一个简单的“内置”用于调试的 LED,但我从未真正使用过它。绿色连接器用于连接 LiPo 电池。

连接到该板的大部分电线都位于水箱的顶部。很明显,将电路板粘在那里以避免“电线地狱”。

正如您在图片中看到的,最初我使用的是 Raspberry Pi Zero W,但由于电量不足,我转而使用 Raspberry Pi 3 B。

在这一点上它工作得很好,但我添加了一个额外的很酷的功能:隐藏的头灯。右侧的黑色塑料部件可以轻松移动。我连接了一个伺服器来上下移动它,我还使用了一段 12V LED 灯条。用 7.4V 锂聚合物电池为 12V LED 灯条供电不是一个好主意。灯光会很弱。我用电线替换了中间的 LED,使其余的 LED 变亮。它工作得很好。

前 LED 由与蓝色 LED 指示灯相同的引脚控制。我不得不通过添加一些额外的接头和晶体管来稍微修改电路板。结果很棒:

Arduino - 硬件

我使用 Arduino MKR1000 来控制坦克。这是我收藏中最小的 Arduino 或 Arduino IDE 兼容设备,可以处理 3 个外部中断,并为该项目提供足够的引脚。它也有 WiFi 功能,但我现在不会使用。

坦克需要 5 个支持 PWM 的引脚。 3 个用于伺服系统,2 个用于电机。如果您检查功能,则会看到有 12 个支持 PWM 的引脚。这已经足够好了吧?好吧,是与否。

引脚 2-5 具有 ~ 标记。我相信这意味着只有这四个引脚能够创建硬件 PWM 信号。我认为其他引脚只能创建软件 PWM 信号。技术规范没有写到这一点,但是当我拿到我的第一个原型 MKR1000 时,文档中只提到了 4 个支持 PWM 的引脚。那四个。最初我通过其中两个软件 PWM 引脚控制舱口伺服系统。软件PWM产生和基于硬件中断的PWM信号读取相结合导致了这个问题:

我通过为伺服系统使用硬件 PWM 引脚解决了这个问题。不幸的是,我不得不将其中一个引脚用于 LED 门的伺服,因为另外两个硬件引脚需要控制电机。多亏了 TB6612FNG 电机驱动器,我只需要两个 PWM 引脚(和其他 4 个数字引脚)来控制电机。 “LED 门”伺服器比其他伺服器慢得多,因此有时它只会发出一些安静的嗡嗡声。仅使用一个软件 PWM 引脚而不是两个也有帮助。将来我可能会重建那部分以使用其他方式打开 LED 的门。电磁阀可能会起作用。

Arduino 可以测量电池的电压,然后通过串行发送。此外,我在水箱的背面集成了一个简单的电压表。它用作用户关于电池状态的反馈。它是一个单独的电路,不受 Arduino 控制。

Arduino - 无线电控制

MKR1000 使用外部中断处理 3 个独立的 PWM 信号。信号的脉冲时间在大约 1000 到 2000 us 的范围内。第一个通道用于计算称为 motorSpeedBase 的变量。它是电机的基本速度,计算如下:

motorSpeedBase =(vertical_pulse_time - 1500) / 2; 

为了控制电机,我使用了 8 位 PWM 信号,因此我将这些值缩放到 -255 到 255 的范围。 MKR1000 可以做得比 8 位更好,但对于这些电机来说已经足够了。

motorSpeedChange 变量用于搅拌并从第二个通道计算。它的计算方法与 motorSpeedBase 类似。区别在于除以3而不是除以2:这种差异有助于控制坦克。

motorSpeedChange =(horizo​​ntal_pulse_time - 1500) / 3; 

第三个通道由单个交换机使用。它控制起重机和舱门的运动。计算方式如下:

elevated =state_switch_pulse_time <1500; 

关闭时其值为 1000 us,开启时为 2000 us。结果是一个布尔值。

最终的电机速度计算如下:

int rightMotorSpeed =motorSpeedBase + motorSpeedChange; int leftMotorSpeed =motorSpeedBase - motorSpeedChange; 

如果结果高于/低于最大值/最小值,则该值将设置为最大值/最小值(255 或 -255)。相关引脚将根据 motorSpeed 值进行更新。如果速度值未达到最小值,则该电机将被禁用。

起重机和舱口由这个函数处理:

void handleCrane() { int CraneValue =analogRead(CRANE_FEEDBACK_PIN); if (elevated) { if (craneValue  

首先是检查起重机的当前状态。如果它需要升高但它不需要,那么它将更新舱门的伺服系统并将起重机向上移动。如果它应该降低但它没有降低,那么它会降低起重机然后关闭舱口。步进电机的线圈需要在过程结束时禁用,因为如果我们继续打开它们,它们会严重发热并耗尽电池电量。

Arduino - 树莓派通讯

Arduino 使用 USB - micro USB 电缆从 Raspberry Pi 连接并供电,它们通过串行进行通信。 Raspberry 将使用以下命令控制 Arduino:

  • s --> 关闭无线电控制并仅接受串行命令。 Arduino 将对此回答“OK”,并禁用无线电控制。这个 OK 是 Rpi 如何识别 Arduino 的一部分。
  • r --> 重新打开无线电控制
  • e --> 提升起重机(从而打开舱门)
  • d --> 降低起重机
  • m X Y -> 设置电机的速度。 X 是 motorSpeedBase,Y 是 motorSpeedChange。 X 和 Y 都需要是整数
  • b --> arduino 将回答一个整数:电池电压 * 100
  • l --> 打开灯光
  • o --> 关灯

需要注意的是,在串行控制的情况下,Arduino 会禁用 RC 通道 1 和 2 上的中断,但不会禁用 3 通道。 通道 3(开关)用作安全开关,在 WalaBeer Tank 开始疯狂时禁用它自主模式下的东西。

瓦拉博特

这是 Walabot 的用武之地。Walabot 是一种使用微波进行成像的 3D 传感器。它可以做惊人的事情,比如看穿墙壁、从远处检测你的呼吸、在黑暗中看东西等等。我不想写关于它其他功能的页面,因为其他人在这方面做得很好。但是,我真的建议您阅读有关它们的信息。

我将使用 Walabot 作为坦克上唯一的导航传感器。要将 Walabot 与 Raspberry Pi 一起使用,我们必须先安装 Walabot SDK。您可以从这里下载 SDK,Walabot API 站点将帮助您安装它。那里有很多关于如何使用 Walabot 的有用信息和示例。我建议检查网站。

Walabot 的功耗在 0.4-0.9A 之间。这意味着默认情况下 Raspberry Pi 无法提供足够的能量来为 Walabot 供电。幸运的是,有一种方法可以通过在 /boot/config.txt 中添加以下行:`max_usb_current=1` 来增加 rpi 的 USB 端口的功率输出。据我所知,它将功率输出从 600mA 增加到 1200mA。

那太好了,但问题来了:我还为 Arduino 和 Raspberry 的伺服系统供电。坦克的电机和步进电机由电池供电,所以我认为这无关紧要。然而它确实如此。如果我在这种情况下启动 Walabot,它会以 WALABOT_ERR_PROTOCOL 消息停止。当我尝试启动它时,可能会发生掉电。

电池消除器电路可以提供高达 3A 的电流,所以这里已经绰绰有余了。 Walabot 有两个微型 USB 端口。在这种情况下,中间端口将帮助我,因为它可以从那里供电,同时与另一个端口进行通信。为此,我必须进行修改并取下 Walabot 的盖子才能移动此跳线

之后,Walabot 完美运行,不再有 WALABOT_ERR_PROTOCOL。

背面的标志(光滑的部分是正面)包含四个非常强大的内置磁铁。这些用于轻松地将 Walabot 连接到坦克的金属前部,而无需任何额外的硬件。

跟我来

坦克的“卖点”之一是跟随模式。如果你让啤酒罐跟着你,那么它会尽力跟着你。到达目的地后,您只需要里面的啤酒即可。这是一个很棒的派对技巧!

Walabot SDK 提供了各种与 Walabot 交互的方式。我的项目使用 getTargets 具有移动目标识别的功能 (MTI) 模式。它用于检测 Walabot 前面的移动物体。根据我的配置,getTargets 将最多返回 4 个目标,并且它会看到最远距离为 1.5 米的物体。

目标具有 XYZ 坐标和幅度参数。我只使用 Y 和 Z 坐标,因为高度 (X) 在这里并不重要。问题是没有办法分辨哪个目标是什么。

在早期版本中,为了在目标列表中找到人类,我创建了一个规则:在您命令它跟随您之前,您必须站在 Walabot 前面 80 厘米的距离。之后我的代码假设最近的具有足够高振幅的物体是人类。如果检测到人,坦克所要做的就是通过移动将人保持在所需的位置。

不幸的是,它并不完美。幸运的是,我得到了一个不同方法的建议。开始是一样的:你必须站在距离 Walabot 80 厘米的地方。距离坦克最近的目标将被视为人类。之后,在每次迭代中,人类的位置将是最接近前一个位置的目标。如果新旧位置之间的距离太高,那么坦克将不会更新人类的位置并停止。坦克将尝试在旧位置附近找到人,因此如果找到人,则它会继续跟随他。这是一个非常简单的想法。

让我们在 Arena 视图中查看一些案例。坦克的目标是将人类保持在目标区域(红色矩形)。在这些情况下,蓝色是最接近的,也就是人类:

  • 案例 1:人类在目标区域内,因此不需要移动
  • 案例 2:人类在右边,他离坦克太近了。一开始坦克会向右转,然后它会向后移动远离人类。
  • 案例 3:坦克不需要转弯,但人类距离太远。它会前进。当我制作这张照片时,Walabot 看到了 3 个目标
  • 案例 4:这张图片中只有一个目标,而且它在左边。坦克将向左移动,然后向前移动。
  • 案例 5:坦克将向后移动,直到人类进入红色矩形。

这些图像是来自 Walabot-SensorTargets 演示的稍微修改版本的 Arena 视图的打印屏幕。我的项目不需要,因此没有 GUI,但它使用相同的原则。我建议从他们的 github 页面查看其他演示项目。

当前设置的运动不太流畅。它不能前进并同时进入自主模式。主要原因是 Walabot 的帧速率。当前设置下约为 6 FPS。这意味着 Raspberry 每 0.16 秒获得一次更新。这是个问题。在 0.16 秒内可以发生很多事情。为了克服这个问题,我放慢了坦克的速度。我用尽可能低的速度前进和转弯。我还删除了转动和移动的组合,因为这些运动在我的跟踪设置中不可靠。在较高的速度下,它们会超速很多,而在较低的速度下,它们的可靠性不如当前版本。

语音控制

在自主模式下,我需要一种很酷的方式来控制坦克。我使用亚马逊的 Alexa Skill Kit 来做到这一点。早期我用ngrok直接控制树莓派。通常人们会使用 Amazon Echo 的某个版本来执行此操作,但不幸的是我没有这样的设备。我不得不使用 echosim 和来自 Google Play 的 Amazon Alexa 应用程序来做到这一点。该技能的名称是 Beer Tank,因为 WalaBeer 是 Alexa 无法识别的东西。买啤酒、爱啤酒等,但不要买 WalaBeer。您可以使用这些命令与 Alexa 交互:

  • 启动啤酒罐
  • turn {on/off} the lights
  • {open/close} the cargo hold
  • {start/stop} following me
  • [stop/cancel]

Here's a video about the first two capabilities:

Some of the voice commands in the video might differ from the current commands due to some requirements during the publishing process (e.g:'stop' changed to 'stop following me'). Controlling a Raspberry Pi using Alexa is very easy, however to get the knowledge to do that is not. For the first time I used ngrok and it was super easy to do this but ngrok is only good for testing purposes. The URL provided by ngrok will change after every restart and there are other problems too. Long story short, I needed a better solution.

I moved on to using AWS Lambda and AWS IoT. They are perfect for my purpose but it was quite difficult to find useful information about how to use them. I mean I found lots of partial tutorials and documentation but usually they were missing some crucial information and/or just didn't work. Finally, I found the youtube channel of Kurt Braun. He made an excellent tutorial that helped me a LOT. I really recommend his videos if you want to use AWS Lambda and AWS IoT:

This other video also helped me when I did the experimenting part. I won't go into details about configuring Lambda and AWS IoT, these videos are containing every necessary information about this topic.

He used Node-RED in his videos. That is a very useful tool, however I needed to use Python instead of JavaScript. Amazon provides an SDK for Python, but I used Paho MQTT Client to make the Raspberry Pi subscribe to my 'wbt' topic's messages. It was easier for me to use.

Finally, here's a video about the current status of the prototype:

As you can see the "follow me" mode is working quite well, but the tank is very slow in this mode. Possibly it is capable of slightly higher speeds but I wanted to be sure that it doesn't do crazy things. Slowing the tank down was needed because at higher speeds it can easily lose me, mostly when it is turning. I've got a couple of ideas how I can significantly increase the speed in "follow me" mode but it will take some time and possibly some extra hardware to implement a solution for that.

You can access my skill here and this is its id:

amzn1.ask.skill.a7453502-b1aa-47fa-a552-ed8e2c792b2e

If you want to publish your skill it might be a good idea to you authentication to differentiate the devices. For that follow this great tutorial.

Canceled

I'd like to write some words about another part that is on the "Most of the electronics are integrated onto the top part" image. I'm talking about these:

These are tachometers. I didn't use them in the final version, but they are still there.

A tachometer like this is made of two parts:a black and white paper on the main wheel and a reflective IR sensor in front of it. The reflected light depends on the color of the object. The difference is very big so distinguishing the states is very easy and thus you can easily calculate the speed of rotation. The only problem of this setup is the low sample rate in case of slow movement, however they work quite well on higher speeds.

The tachometers worked great, but I realized that I don't need them for the project and I also needed the GPIO pins on the Arduino for other purposes. This is their story.

结论

The end result is great, useful and fun! It is also a good platform for other future projects. With hard work I managed to make the voice control work and Walabot proved to be a great sensor for this purpose, too. I see numerous ways to improve this tank so it is likely that you'll see more about it in the future!

This is my best and most successful project so far. And also the longest. To keep it from getting even longer I'd like to thank for all the help that I got and I also thank you for reading! As a prize here's a picture about a strange dog:

代码

Codes for the Arduino and Raspberry Pi
This repository contains the codes that are running on the MKR1000 and the Raspberry Pi 3 Bhttps://github.com/abysmalsb/Beer-Tank

示意图

If I couldn't find a part then I replaced it with something similar. See notes for more info. Walabot is connected to the Raspberry Pi with and USB cable. If I couldn't find a part then I replaced it with something similar. See notes for more info. Walabot is connected to the Raspberry Pi with and USB cable. beer_tank_YN88vVuS9b.fzz

制造工艺

  1. 电路组件
  2. 氧气罐
  3. 集成电路
  4. Amazon Alexa 控制 Chromecast
  5. 自主坦克
  6. Arduino 数字骰子
  7. 多温度传感器
  8. MOSMusic
  9. 什么是微电子?
  10. 什么是储备罐?
  11. 钻孔机的组成
  12. 内燃机的组成部分