Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Танк WalaBeer

Компоненты и расходные материалы

Создатель Walabot
× 1
Arduino MKR1000
× 1
Raspberry Pi 3, модель B
× 1
Amazon Alexa Amazon Echo
или https://echosim.io/
× 1
Драйвер двигателя SparkFun - двойной TB6612FNG (1A)
× 1
Каркас резервуара (он содержит 2 щеточных двигателя постоянного тока)
× 1
Сервоприводы (Tower Pro MG996R)
× 3
Игровой комплект «Металлостроитель»
× 1
Шаговый двигатель + драйвер
Я использовал шаговый двигатель 28byj-48 и драйвер двигателя X113647
× 1
LiPo аккумулятор 7,4 В
× 1
Зарядное устройство LiPo 7,4 В
× 1
Поворотный потенциометр (общий)
× 1
LED (общий)
Я использовал один сегмент светодиодной ленты
× 2
Леска
× 1
Тонкая пластиковая или твердая бумага для обложки
× 1
Схема BEC 5 В
× 1
Резистор 10 кОм
× 1
Резистор 22,1 кОм
× 1
Резистор 2,21 кОм
× 1
Транзистор высокой мощности Дарлингтона
× 1
деревянные линейки длиной 30 см
× 2
Вольтметр
Это необязательно
× 1
RC-передатчик с приемником
Это дополнительные детали для управления резервуаром вручную. Он может работать без пульта дистанционного управления.
× 1
Пиво
× 1

Необходимые инструменты и машины

Паяльник (универсальный)
Пистолет для горячего клея (общий)
Пильный инструмент
Drill
Рашпиль

Приложения и онлайн-сервисы

IDE Arduino
Amazon Web Services AWS IoT
Amazon Web Services AWS Lambda
Amazon Alexa Alexa Skills Kit
Walabot SDK
Python

Об этом проекте

Аннотация

Есть вещи, которые глубоко внутри каждый мужчина хочет иметь. Сочетание пива и танков - одна из таких вещей! Этот проект будет о резервуаре с голосовым управлением, который доставляет вам пиво с автономной функцией «следуй за мной» или с пультом дистанционного управления. Построим пивной резервуар своей мечты!

Шасси

Нам нужна хорошая база для танка. Я нашел это шасси на Banggood. Это было довольно дешево и выглядело настолько круто, что мне потребовалось купить его.

Сразу после получения товара возникла первая проблема. Из-за неправильной упаковки он получил серьезные травмы при транспортировке.

На это ушло много часов и много клея, но, к счастью, в основном я смог его отремонтировать.

Кран

Шасси резервуара содержит как моторы, так и коробки передач, поэтому следующим шагом было выяснить, как подавать пиво. После множества идей я понял, что лучший и самый крутой способ сделать это - спрятать пиво, а затем поднять его с помощью крана. Это базовый дизайн, который я придумал:

Я использовал свой старый металлический конструктор, потому что мне нужен был прочный, но легко модифицируемый каркас. Кран соединен с шаговым двигателем с помощью лески. Шаговый двигатель 28byj-48 отлично подошел для этой цели. Он не быстрый, но с легкостью поднимает кран и пиво. На самом деле мотор настолько силен, что, если я не остановил его вовремя, он сломал леску.

Это сработало замечательно, однако скелет оказался недостаточно прочным и очень рано начал гнуться. Для решения этой проблемы мне потребовалось повысить структурную целостность. Я использовал две линейки из твердого дерева длиной 30 см и несколько дополнительных деталей, чтобы сделать его прочнее. После некоторого сверления, распиловки и распиливания вот следующая версия:

Как видите, модификации решили проблему изгиба, и он очень стабилен.

Дело

Walabot (версия для разработчиков) будет «глазом» танка. Подробнее о Walabot в разделе Walabot. На переднем месте есть держатель для Walabot. У меня была металлическая деталь идеального размера для использования с магнитным держателем Walabot. Я также сделал форму логотипа Walabot из горячего клея, чтобы предотвратить вращение Walabot на круглой части:

Магнитный монтаж великолепен, потому что я могу легко использовать один Walabot в нескольких проектах без серьезной разборки, и он также достаточно прочен.

Я начал делать обложку вокруг рамы, чтобы скрыть детали. Для обложки я использовала черный картон и пластиковые листы.

На этом этапе передняя и средняя часть не были закрыты. Еще мне понадобился люк сверху, чтобы полностью скрыть пиво. Чтобы сдвинуть люк, я использовал два сервопривода, синий и изоленту. Эта верхняя дверца использовалась только для дизайна, она не защищает пиво. Однако очень круто, когда он открывается и поднимает пиво.

Двери сделаны из двух пластиковых листов, деревянных палочек и нескольких склеенных и свернутых бумаг, склеенных горячим клеем. Это не самая красивая вещь, но в реальной жизни выглядит не так уж плохо. Я все закрасила в черный цвет. В реальной жизни увидеть разницу между черными частями намного сложнее.

Кран - Том. 2

Вернемся к крану еще раз. Мне нужно было еще кое-что, чтобы использовать его надежно:обратная связь.

Изначально я хотел использовать для этого простую двоичную обратную связь. Когда кран находится в опущенном состоянии, он замыкает цепь. Когда он был поднят, он открывался:винты и пружина в красном круге были бы этим переключателем. Он бы использовал таймер для определения верхней позиции.

Это было не слишком сложно, но идея отработана. К сожалению, он был ненадежен, поэтому легко мог привести к повреждению крана.

Я придумал другое, гораздо лучшее решение - то, что изображено в синем прямоугольнике. Я приклеил потенциометр 10K к оси крана и, поэтому у меня есть надежная обратная связь о текущем угле поворота крана. Таким способом очень легко определить верхнюю и нижнюю позиции. К вашему сведению:до этого момента я использовал свой старый добрый Arduino Uno для тестирования, потому что его прото-экран очень удобен.

На самом деле мне очень нравится эта часть обратной связи. Это не было запланировано, но добавило особой крутизны внешнему виду танка.

Схема

Хорошо, корпус танка готов, но нам нужна электроника, чтобы он двигался!

Я тоже поместил это изображение в раздел «Схемы», но здесь вы можете увеличить его, не скачивая. Схема может сначала показаться немного сложной, но на самом деле она довольно проста. Прилагаемые примечания должны помочь со всем, что требует пояснений.

В этом проекте на данный момент не используются функции WiFi Arduino MKR1000, но, как я знаю, вы не можете просто заменить его на Arduino Uno, если хотите управлять резервуаром с помощью RC-передатчика. В моем проекте используются 3 канала для управления скоростью, поворотом и краном. Мне нужно 3 контакта с возможностью внешнего прерывания. У Arduino Uno для этого всего 2 контакта. Эти контакты нужны нам для чтения значений ШИМ соответствующих каналов RC-приемника.

Я построил схему на прототипе печатной платы. Получилось довольно компактно. Синий светодиод слева был бы простым «встроенным» светодиодом для отладки, но на самом деле я его никогда не использовал. Зеленый разъем используется для подключения LiPo батареи.

Большинство проводов, которые подключаются к этой плате, находятся в верхней части бака. Было очевидно, что туда нужно приклеить плату, чтобы избежать "ада с проволокой".

Как вы можете видеть на изображении, изначально я начал с Raspberry Pi Zero W, но из-за нехватки энергии я перешел на Raspberry Pi 3 B.

На данный момент он работал отлично, но я добавил еще одну интересную функцию:скрытый налобный фонарь. Черная пластиковая деталь справа легко перемещается. Я прикрепил сервопривод, чтобы перемещать его вверх и вниз, а также использовал один сегмент светодиодной ленты на 12 В. Питание светодиодной ленты 12 В от LiPo-аккумулятора 7,4 В - не лучшая идея. Свет будет очень слабым. Я заменил средний светодиод на провод, чтобы остальные светодиоды были яркими. Это сработало отлично.

Передние светодиоды управляются тем же контактом, что и синий светодиодный индикатор. Пришлось немного модифицировать плату, добавив к ней дополнительные заголовки и транзистор. Результат потрясающий:

Arduino - оборудование

Я использовал Arduino MKR1000 для управления танком. Это самое маленькое устройство в моей коллекции, совместимое с Arduino или Arduino IDE, которое может обрабатывать 3 внешних прерывания и имеет достаточно контактов для этого проекта. У него также есть возможности Wi-Fi, но я не буду им сейчас пользоваться.

Танку требуется 5 контактов с возможностью ШИМ. 3 для сервоприводов и 2 для двигателей. Если вы проверите возможности, то увидите, что есть 12 контактов, поддерживающих ШИМ. Это достаточно хорошо, правда? Ну да и нет.

Контакты 2-5 имеют маркировку ~. Я считаю, что это означает, что только эти четыре контакта способны создавать аппаратные сигналы ШИМ. Я думаю, что другие контакты могут создавать только программные сигналы ШИМ. В технических характеристиках об этом не говорится, однако, когда я получил свой первый прототип MKR1000, в документации упоминалось только 4 вывода, поддерживающих ШИМ. Эти четыре. Первоначально я управлял сервоприводами люка через два из этих выводов программного обеспечения PWM. Комбинация программной генерации ШИМ и считывания сигнала ШИМ на основе аппаратных прерываний приводит к этой проблеме:

Я решил эту проблему, используя аппаратные штыри PWM для сервоприводов. К сожалению, мне пришлось использовать один из этих выводов для сервопривода светодиодной двери, потому что два других аппаратных вывода были необходимы для управления двигателями. Благодаря драйверу двигателя TB6612FNG мне понадобились только два вывода ШИМ (и 4 других цифровых вывода) для управления двигателями. Сервопривод «светодиодной двери» намного медленнее, чем другие, поэтому иногда он просто издает тихий жужжащий звук. Также помогло использование только одного программного вывода PWM, а не двух. В будущем я мог бы восстановить эту часть, чтобы использовать другие средства, чтобы открыть дверцу светодиодов. Соленоид (ы) может помочь.

Arduino может измерять напряжение батареи, а затем отправлять его через последовательный порт. Кроме того, я встроил простой вольтметр в заднюю часть резервуара. Он используется в качестве обратной связи для пользователя о состоянии батареи. Это отдельная схема и не контролируется Arduino.

Arduino - Радиоуправление

MKR1000 обрабатывает 3 отдельных сигнала ШИМ с внешними прерываниями. Время импульса сигналов находится в диапазоне от 1000 до 2000 мкс. Первый канал используется для вычисления переменной под названием motorSpeedBase. Это базовая скорость двигателей, которая рассчитывается следующим образом:

  motorSpeedBase =(vertical_pulse_time - 1500) / 2;  

Для управления двигателями я использовал 8-битные сигналы ШИМ, поэтому я масштабировал значения до диапазона от -255 до 255. MKR1000 может работать лучше, чем 8 бит, но этого более чем достаточно для этих двигателей.

Переменная motorSpeedChange используется для перемешивания и рассчитывается по второму каналу. Он рассчитывается аналогично motorSpeedBase. Разница заключается в делении на 3 вместо 2:эта разница помогает контролировать танк.

  motorSpeedChange =(horizontal_pulse_time - 1500) / 3;  

Третий канал используется одним переключателем. Он контролирует движение крана и дверцы люка. Он рассчитывается так:

  elevated =state_switch_pulse_time <1500;  

Его значение составляет 1000 мкс в выключенном состоянии и 2000 мкс при включении. Результат - логическое значение.

Конечная скорость двигателя рассчитывается следующим образом:

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

Если результат выше / ниже максимального / минимального значения, тогда значение будет установлено на максимальное / минимальное значение (255 или -255). Соответствующие выводы будут обновлены на основе значений motorSpeed. Если значение скорости не достигает минимального значения, этот двигатель будет отключен.

Кран и люк обслуживаются этой функцией:

  void handleCrane () {int CranValue =analogRead (CRANE_FEEDBACK_PIN); если (повышенный) {если (CraneValue  

Все начинается с проверки текущего состояния крана. Если его нужно поднять, но это не так, он обновит сервоприводы дверцы люка и переместит кран вверх. Если его нужно опустить, но это не так, он опускает кран, а затем закрывает люк. Катушки шагового двигателя необходимо отключить в конце процесса, потому что они могут серьезно нагреться и разрядить аккумулятор, если мы оставим его включенным.

Связь Arduino - Raspberry Pi

Arduino подключается и питается от Raspberry Pi с помощью кабеля USB - micro USB, и они обмениваются данными через последовательный порт. Raspberry будет управлять Arduino с помощью следующих команд:

  • s -> выключить радиоуправление и принимать только последовательные команды. Arduino ответит на это «ОК» и отключит радиоуправление. Это нормально - часть того, как 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,9 А. Это означает, что по умолчанию Raspberry Pi не может обеспечить достаточно энергии для питания Walabot. К счастью, есть способ увеличить выходную мощность USB-портов rpi, добавив эту строку:`max_usb_current =1` в /boot/config.txt. Насколько я знаю, он увеличивает выходную мощность с 600 мА до 1200 мА.

Это было бы здорово, но тут возникает проблема:я также питаю Arduino и сервоприводы от Raspberry. Двигатели бака и шагового двигателя питаются от батареи, поэтому я подумал, что это не имеет значения. Однако это так. Если я запускаю Walabot в этом состоянии, он останавливается с сообщением WALABOT_ERR_PROTOCOL. Возможно, когда я попытаюсь запустить его, произойдет отключение электроэнергии.

Схема разрядника аккумулятора может обеспечивать ток до 3 А, так что этого более чем достаточно. Walabot имеет два порта micro USB. Средний порт поможет мне в этой ситуации, потому что он может получать питание оттуда во время связи с другим. Для этого мне пришлось сделать модификацию и снять крышку Walabot, чтобы переместить этот джемпер

После этого Walabot работал отлично, больше никаких WALABOT_ERR_PROTOCOL.

Логотип на обратной стороне (гладкая часть - лицевая сторона) содержит четыре очень сильных встроенных магнита. Они использовались, чтобы легко прикрепить Walabot к металлической передней части танка без каких-либо дополнительных приспособлений.

Следуй за мной

Одним из «плюсов» танка является режим «следуй за мной». Если вы попросите резервуар с пивом следовать за вами, он сделает все возможное и последует за вами. Добравшись до места назначения, вы просто просите пива внутри. Это отличный трюк для вечеринки!

Walabot SDK предоставляет всевозможные способы взаимодействия с Walabot. В моем проекте используется getTargets функция с идентификацией движущейся цели (MTI) режим. Он используется для обнаружения движущихся объектов перед Walabot. В моей конфигурации getTargets вернет максимум 4 цели и будет видеть объекты на максимальном расстоянии 1,5 метра.

Цели имеют координаты XYZ и параметр амплитуды. Я использую только координаты Y и Z, потому что высота (X) здесь не важна. Проблема в том, что невозможно определить, какая цель есть что.

В ранней версии, чтобы найти человека в списке целей, я создал правило:прежде чем вы прикажете ему следовать за вами, вы должны встать перед Валаботом на расстоянии 80 см. После этого мой код предполагает, что ближайший объект с достаточно высокой амплитудой - это человек. Если человек обнаружен, все, что нужно сделать танку, - это удерживать человека в желаемом положении, двигаясь.

К сожалению, это было не идеально. К счастью, я получил предложение о другом подходе. Все начинается так же:вы должны стоять перед Валаботом на расстоянии 80 см. Ближайшая цель к танку будет считаться человеком. После этого на каждой итерации позиция человека будет ближайшей целью к предыдущей позиции. Если расстояние между новой и старой позицией будет слишком большим, то танк не обновит положение человека и остановится. Танк попытается найти человека около старой позиции, поэтому, если он найдет человека, он продолжит следовать за ним. Это довольно простая идея.

Давайте рассмотрим некоторые кейсы в режиме просмотра арены. Цель танка - удерживать человека в целевой зоне (красный прямоугольник). Синий - самый близкий, и в следующих случаях это человек:

  • Случай 1. Человек находится в целевой области, поэтому движение не требуется.
  • Случай 2. Человек справа и слишком близко к резервуару. Сначала танк повернет направо, затем он удалится от человека, двигаясь назад.
  • Случай 3. Танку не нужно разворачиваться, но человек находится слишком далеко. Он будет двигаться вперед. Когда я сделал этот снимок, Walabot увидел 3 цели.
  • Случай 4. На этом рисунке только одна цель, и она находится слева. Танк переместится влево, затем вперед.
  • Случай 5. Танк будет двигаться назад, пока человек не окажется в красном прямоугольнике.

Эти изображения представляют собой печатные экраны вида Arena из слегка измененной версии демонстрации Walabot-SensorTargets. Моему проекту не нужен и, следовательно, нет графического интерфейса пользователя, но он использует тех же принципалов. Я рекомендую проверить другие демонстрационные проекты на их странице на github.

Движение с текущими настройками не слишком плавное. Он не может одновременно двигаться вперед и поворачиваться в автономном режиме. Основная причина этого - частота кадров Walabot. При текущих настройках это примерно 6 FPS. Это означает, что Raspberry получает одно обновление каждые 0,16 секунды. Это проблема. За 0,16 секунды может произойти многое. Чтобы решить эту проблему, я замедлил танк. Я использовал минимально возможную скорость, чтобы двигаться вперед и поворачивать. Я также убрал комбинацию поворота и движения, потому что эти движения были ненадежны с моей гусеничной установкой. На более высоких скоростях они сильно промахнулись, а на более низких они были менее надежны, чем текущая версия.

Голосовое управление

В автономном режиме мне понадобился крутой способ управления танком. Для этого я использовал Alexa Skill Kit от Amazon. В ранней версии я использовал его с ngrok для непосредственного управления Raspberry. Обычно люди используют для этого версию Amazon Echo, но, к сожалению, у меня нет такого устройства. Для этого мне пришлось использовать echosim и приложение Amazon Alexa из Google Play. Название навыка - Beer Tank, потому что WalaBeer - это то, что Алекса не распознает. Покупайте пиво, любите пиво и т. Д., Но не WalaBeer. You can use these commands to interact with Alexa:

  • start beer tank
  • 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. MOSMusic
  7. Что такое микроэлектроника?
  8. Что такое резервный резервуар?
  9. Компоненты сверлильного станка
  10. Компоненты двигателя внутреннего сгорания