Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Tanque WalaBeer

Componentes e suprimentos

Walabot Creator
× 1
Arduino MKR1000
× 1
Raspberry Pi 3 Modelo B
× 1
Amazon Alexa Amazon Echo
ou https://echosim.io/
× 1
Driver do motor SparkFun - Dual TB6612FNG (1A)
× 1
Estrutura do tanque (contém 2 motores DC com escova)
× 1
Servos (Tower Pro MG996R)
× 3
Kit de jogo de construção de metal
× 1
Motor de passo + driver
Usei um motor de passo 28byj-48 e um driver de motor X113647
× 1
Bateria LiPo de 7,4 V
× 1
Carregador de bateria LiPo de 7,4 V
× 1
Potenciômetro rotativo (genérico)
× 1
LED (genérico)
Usei um segmento de uma faixa de LED
× 2
Linha de pesca
× 1
Plástico fino ou papel rígido para a capa
× 1
circuito 5V BEC
× 1
Resistor 10k ohm
× 1
Resistor 22,1 k ohm
× 1
Resistor 2,21k ohm
× 1
Transistor Darlington de alta potência
× 1
Réguas de madeira com 30 cm de comprimento
× 2
Voltímetro
Isso é opcional
× 1
Transmissor RC com receptor
Estas são peças opcionais para controlar o tanque manualmente. Ele pode funcionar sem um controle remoto.
× 1
Cerveja
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)
Pistola de cola quente (genérica)
Ferramenta de serra
Drill
Rasp

Aplicativos e serviços online

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

Sobre este projeto





Resumo


Existem coisas que no fundo todo homem deseja ter. Combinar cerveja e tanques é uma dessas coisas! Este projeto será sobre isso, um tanque controlado por voz que entrega cerveja para você com uma função autônoma de "siga-me" ou com um controle RC. Vamos construir o tanque de cerveja dos nossos sonhos!





Chassi


Precisamos de uma boa base para o tanque. Encontrei este chassis no banggood. Era bem barato e parecia tão legal que precisei comprar um.

Logo após receber o produto surgiu o primeiro problema. Devido à embalagem inadequada, sofreu alguns ferimentos graves durante o transporte.

Demorou muitas horas e muita cola, mas felizmente consegui consertar.





Guindaste


O chassi do tanque contém os motores e as caixas de câmbio, então a próxima etapa foi descobrir como servir a cerveja. Depois de várias idéias, descobri que a melhor e mais legal maneira de fazer isso é esconder a cerveja e, em seguida, elevá-la usando um guindaste. Este é o design básico que eu fiz:

Usei meu antigo kit de construção de metal porque precisava de um esqueleto forte, mas fácil de modificar. O guindaste é conectado a um motor de passo com uma linha de pesca. O motor de passo 28byj-48 foi ótimo para essa finalidade. Não é rápido, mas pode facilmente levantar o guindaste e a cerveja. Na verdade o motor é tão forte que se eu não parasse a tempo quebraria a linha de pesca.

Funcionou maravilhosamente bem, mas o esqueleto não era forte o suficiente e começou a dobrar muito cedo. Para resolver esse problema, eu precisava aumentar a integridade estrutural. Usei duas réguas de madeira dura com 30 cm de comprimento e algumas peças extras para torná-la mais forte. Depois de perfurar, serrar e raspar, aqui está a próxima versão:

Como você pode ver, as modificações resolveram o problema de dobra e é muito estável.





Caso


Um Walabot (versão de desenvolvedor) será o 'olho' do tanque. Mais sobre Walabot na seção Walabot. O lugar frontal possui uma parte de suporte para o Walabot. Eu tinha uma peça de metal com o tamanho perfeito para fazer uso do suporte magnético do Walabot. Também fiz um logotipo do Walabot com cola quente para evitar que o Walabot gire na parte redonda:

A montagem magnética é ótima porque posso usar facilmente um Walabot em vários projetos sem qualquer desmontagem grave e também é forte o suficiente.

Comecei a fazer uma cobertura em volta da moldura para esconder as peças. Usei papel cartão preto e folhas de plástico para a capa.

Neste ponto, a parte da frente e do meio não estava coberta. Eu também precisava de uma escotilha no topo para esconder completamente a cerveja. Para mover a escotilha, usei dois servos, alguns hot blue e alguns isolantes. Esta porta superior usada apenas para design, ela realmente não protege a cerveja. Porém é muito legal quando abre e eleva a cerveja.

As portas são feitas de duas folhas de plástico, bastões de madeira e alguns papéis colados e enrolados, colados com cola quente. Não é a coisa mais bonita, mas na vida real não parece tão ruim. Pintei tudo de preto. Na vida real, é muito mais difícil ver a diferença entre as partes pretas.





Crane - Vol. 2


Voltemos ao guindaste mais uma vez. Eu precisava de mais uma coisa para usá-lo de forma confiável:feedback.

Originalmente, eu queria usar um feedback binário simples para isso. Quando o guindaste está em estado abaixado, ele fecha um circuito. Quando elevado, ele abriria:os parafusos e a mola no círculo vermelho seriam essa chave. Teria usado um cronômetro para determinar a posição superior.

Não era muito sofisticado, mas a ideia funcionou. Infelizmente, não era nada confiável, portanto, poderia facilmente causar danos ao guindaste.

Eu encontrei outra solução muito melhor, aquela do retângulo azul. Colei um potenciômetro de 10K ao e do eixo do guindaste, para ter um feedback confiável sobre o ângulo atual do guindaste. É muito fácil determinar as posições superior e inferior dessa forma. Para sua informação:até este ponto, usei meu bom e velho Arduino Uno para testes porque seu proto-escudo é muito útil.

Na verdade, eu realmente gosto dessa parte do feedback. Não foi planejado, mas adiciona um pouco mais de frescor ao visual do tanque.





Circuito


Tudo bem, o corpo do tanque está pronto, mas precisamos de alguns componentes eletrônicos para fazê-lo se mover!

Eu também coloquei esta imagem na seção Schematics, mas aqui você pode aumentá-la sem fazer download. O circuito pode parecer um pouco complexo no início, mas na verdade é bastante simples. As notas anexas devem ajudar com qualquer coisa que precise de alguma explicação.

Este projeto não está usando a funcionalidade WiFi do Arduino MKR1000 no momento, mas como eu sei, você não pode simplesmente substituí-lo por um Arduino Uno se quiser controlar o tanque usando um transmissor RC. Meu projeto está usando 3 canais para controle de velocidade, giro e guindaste. Preciso de 3 pinos com capacidade de interrupção externa. O Arduino Uno tem apenas 2 pinos para essa finalidade. Precisamos desses pinos para ler os valores PWM dos canais correspondentes do receptor RC.

Eu construí o circuito em um proto PCB. Ficou bastante compacto. O LED azul à esquerda seria um simples LED 'embutido' para depuração, mas eu nunca o usei. O conector verde é usado para conectar a bateria LiPo.

A maioria dos fios que se conectam a esta placa estão na parte superior do tanque. Era óbvio colar a placa ali para evitar o 'inferno dos fios'.

Como você pode ver na imagem, originalmente comecei com um Raspberry Pi Zero W, mas devido à falta de energia, passei a usar um Raspberry Pi 3 B.

Estava funcionando perfeitamente neste ponto, mas adicionei um recurso extra legal:farol oculto. A parte de plástico preto à direita pode ser facilmente movida. Anexei um servo para movê-lo para cima e para baixo e também usei um segmento de uma faixa de LED de 12V. Alimentar uma faixa de LED de 12 V com uma bateria LiPo de 7,4 V não é uma boa ideia. As luzes estarão muito fracas. Substituí o LED do meio por um fio para tornar os LEDs restantes brilhantes. Funcionou perfeitamente.

Os LEDs frontais são controlados com o mesmo pino do LED indicador azul. Tive que modificar um pouco a placa adicionando alguns conectores extras e um transistor. O resultado é incrível:





Arduino - hardware


Usei um Arduino MKR1000 para controlar o tanque. Este é o menor dispositivo compatível com Arduino ou Arduino IDE em minha coleção que pode lidar com 3 interrupções externas e tem pinos suficientes para este projeto. Ele também tem recursos de WiFi, mas não vou usar isso agora.

O tanque precisa de 5 pinos com capacidade PWM. 3 para os servos e 2 para os motores. Se você verificar os recursos, verá que há 12 pinos compatíveis com PWM. Isso é bom o suficiente, certo? Bem, sim e não.

Os pinos 2 a 5 têm a marcação ~. Acredito que isso signifique que apenas esses quatro pinos são capazes de criar sinais PWM de hardware. Acho que os outros pinos podem criar sinais PWM de software apenas. As especificações técnicas não falam sobre isso, no entanto, quando ganhei meu primeiro protótipo MKR1000, a documentação mencionou apenas 4 pinos com capacidade para PWM. Esses quatro. Originalmente, eu controlava os servos de incubação por meio de dois desses pinos PWM de software. A combinação de geração de PWM de software e leitura de sinal de PWM baseada em interrupção de hardware resultou neste problema:

Resolvi esse problema usando pinos PWM de hardware para os servos. Infelizmente tive que usar um desses pinos para o servo da porta de LED, porque os outros dois pinos de hardware precisavam controlar os motores. Graças ao driver do motor TB6612FNG, eu só precisei de dois pinos PWM (e 4 outros pinos digitais) para controlar os motores. O servo 'LED door' é muito mais lento do que os outros, então às vezes ele faz um zumbido silencioso. Usar apenas um pino PWM de software em vez de dois também ajudou. No futuro, posso reconstruir essa parte para usar algum outro meio para abrir a porta dos LEDs. Solenóide (s) podem resolver o problema.

O Arduino pode medir a tensão da bateria e depois enviá-la via serial. Além disso, integrei um voltímetro simples na parte de trás do tanque. É usado como feedback para o usuário sobre o status da bateria. É um circuito separado e não controlado pelo Arduino.





Arduino - controle de rádio


O MKR1000 está processando 3 sinais PWM separados com interrupções externas. O tempo de pulso dos sinais está na faixa de cerca de 1000 e 2000 us. O primeiro canal é usado para calcular uma variável chamada motorSpeedBase. É a velocidade básica dos motores e é calculada assim:
  motorSpeedBase =(vertical_pulse_time - 1500) / 2;  

Para controlar os motores, usei sinais PWM de 8 bits, portanto, aumentei os valores nesta faixa de -255 a 255. O MKR1000 pode fazer melhor do que 8 bits, mas é mais do que bom o suficiente para esses motores.

A variável motorSpeedChange é usada para mexer e é calculada a partir do segundo canal. É calculado de forma semelhante a motorSpeedBase. A diferença é a divisão por 3 em vez de 2:essa diferença ajuda a controlar o tanque.
  motorSpeedChange =(horizontal_pulse_time - 1500) / 3;  

O terceiro canal é usado por um único switch. Ele controla o movimento do guindaste e das portas da escotilha. É calculado assim:
  elevado =state_switch_pulse_time <1500;  

Seu valor é 1000 us quando desligado e 2000 us quando ligado. O resultado é um bool.

A velocidade final do motor é calculada assim:
  int rightMotorSpeed ​​=motorSpeedBase + motorSpeedChange; int leftMotorSpeed ​​=motorSpeedBase - motorSpeedChange;  

Se o resultado for maior / menor do que o valor máximo / mínimo, o valor será definido para o valor máximo / mínimo (255 ou -255). Os pinos relacionados serão atualizados com base nos valores motorSpeed. Se um valor de velocidade não atingir o valor mínimo, o motor será desabilitado.

O guindaste e a escotilha são manipulados por esta função:
  void handleCrane () {int craneValue =analogRead (CRANE_FEEDBACK_PIN); if (elevado) {if (craneValue  

Ele começa com a verificação do estado atual do guindaste. Se precisar ser elevado, mas não estiver, ele atualizará os servos das portas da escotilha e moverá o guindaste para cima. Se deveria ser abaixado, mas não está, então abaixa o guindaste e fecha a escotilha. As bobinas do motor de passo precisam ser desativadas no final do processo, pois podem aquecer seriamente e descarregar a bateria se deixarmos uma ligada.





Arduino - comunicação Raspberry Pi


O Arduino é conectado e alimentado pelo Raspberry Pi com um cabo USB - micro USB e eles estão se comunicando por meio de serial. O Raspberry controlará o Arduino com estes comandos:
  • s -> desligue o controle de rádio e aceite apenas comandos seriais. O Arduino responderá com 'OK' a isso e desativará o controle de rádio. Este OK faz parte de como o Rpi reconhece o Arduino.
  • r -> ligue novamente o controle de rádio
  • e -> elevar o guindaste (e assim abrir a escotilha)
  • d -> abaixe o guindaste
  • m X Y -> configuração da velocidade dos motores. X é motorSpeedBase e Y é motorSpeedChange. Tanto X quanto Y precisam ser inteiros
  • b -> o arduino responderá com um número inteiro:tensão da bateria * 100
  • l -> ligar a iluminação
  • o -> desligar a iluminação

Deve-se notar que no caso de controle serial, o Arduino desativa as interrupções no canal RC 1 e 2, mas não no canal 3. O canal 3 (a chave) é usado como uma chave de segurança para desabilitar o tanque WalaBeer se ele começar a enlouquecer coisas em modo autônomo.





Walabot


Esta é a parte em que o Walabot entra. O Walabot é um sensor 3D que usa microondas para geração de imagens. Ele pode fazer coisas incríveis como ver através das paredes, detectar sua respiração à distância, ver no escuro e assim por diante. Não quero escrever páginas sobre seus outros recursos porque outros fizeram um ótimo trabalho fazendo isso. No entanto, eu realmente recomendo ler sobre eles.

Usarei o Walabot como o único sensor de navegação do tanque. Para usar o Walabot com o Raspberry Pi, temos que instalar o SDK do Walabot primeiro. Você pode baixar o SDK aqui e o site da API do Walabot o ajudará a instalá-lo. Existem muitas informações úteis e exemplos sobre como usar o Walabot. Eu recomendo verificar o site.

O consumo de energia do Walabot está entre 0,4-0,9A. Isso significa que, por padrão, o Raspberry Pi não pode fornecer energia suficiente para alimentar o Walabot. Felizmente, há uma maneira de aumentar a potência das portas USB do rpi adicionando esta linha:`max_usb_current =1` ao /boot/config.txt. Como eu sei, aumenta a potência de saída de 600mA para 1200mA.

Isso seria ótimo, mas aí vem um problema:eu também ligo o Arduino e os servos do Raspberry. Os motores do tanque e do motor de passo são alimentados pela bateria, então achei que isso não deveria importar. No entanto, ele faz. Se eu iniciar o Walabot nesta condição, ele para com a mensagem WALABOT_ERR_PROTOCOL. Possivelmente, ocorre uma queda de energia quando tento iniciá-lo.

O circuito eliminador de bateria pode fornecer até 3A, de modo que é mais do que suficiente aqui. O Walabot possui duas portas micro USB. A porta do meio me ajudará nessa situação porque pode ser alimentada de lá enquanto se comunica com a outra. Para fazer isso eu tive que fazer uma modificação e remover a tampa do Walabot para mover este jumper

Depois disso, o Walabot funcionou perfeitamente, sem mais WALABOT_ERR_PROTOCOL.

O logotipo na parte traseira (a parte lisa é a parte frontal) contém quatro ímãs embutidos muito fortes. Esses foram usados ​​para prender facilmente o Walabot à frente de metal do tanque sem qualquer hardware extra.





Siga-me


Um dos 'pontos de venda' do tanque é o modo siga-me. Se você pedir ao tanque de cerveja para segui-lo, ele fará o possível e o seguirá. Depois de chegar ao seu destino, basta pedir a cerveja que está dentro. É um ótimo truque de festa!

O SDK do Walabot fornece todos os tipos de maneiras de interagir com o Walabot. Meu projeto usa o getTargets função com Identificação de alvo móvel Modo (MTI). Ele é usado para detectar objetos em movimento na frente do Walabot. Com minha configuração, o getTargets retornará no máximo 4 alvos e verá objetos a uma distância máxima de 1,5 metros.

Os alvos têm coordenadas XYZ e um parâmetro de amplitude. Eu uso apenas as coordenadas Y e Z porque a altura (X) não é importante aqui. O problema é que não há como saber qual alvo é o quê.

Na versão anterior, para encontrar o humano na lista de alvos, criei uma regra:antes de ordenar que ele o siga, você deve ficar em frente ao Walabot a uma distância de 80 cm. Depois disso, meu código assume que o objeto mais próximo com amplitude alta o suficiente é o humano. Se o humano for detectado, tudo o que o tanque precisa fazer é mantê-lo na posição desejada em movimento.

Infelizmente, não foi perfeito. Felizmente, recebi uma sugestão para uma abordagem diferente. Começa do mesmo jeito:você tem que ficar em frente ao Walabot a uma distância de 80 cm. O alvo mais próximo do tanque será considerado o humano. Depois disso, em cada iteração, a posição do humano será o alvo mais próximo da posição anterior. Se a distância entre a posição nova e a antiga for muito alta, o tanque não atualizará a posição do humano e irá parar. O tanque tentará encontrar o humano próximo à posição anterior, então se ele encontrar a pessoa, continuará a segui-lo. É uma ideia bastante direta.

Vamos examinar alguns casos na visualização Arena. O objetivo do tanque é manter o humano na área alvo (retângulo vermelho). O azul é o mais próximo e esse é o humano nestes casos:
  • Caso 1:o ser humano está na área alvo, então nenhum movimento é necessário
  • Caso 2:o humano está à direita e muito perto do tanque. A princípio, o tanque girará para a direita e depois se afastará do humano, indo para trás.
  • Caso 3:O tanque não precisa girar, mas o humano está muito longe. Ele vai seguir em frente. O Walabot viu 3 alvos quando fiz esta imagem
  • Caso 4:há apenas um alvo nesta imagem e está à esquerda. O tanque se moverá para a esquerda e depois para frente.
  • Caso 5:o tanque irá para trás até que o humano esteja no retângulo vermelho.

Essas imagens são telas impressas da visualização da Arena de uma versão ligeiramente modificada da demonstração do Walabot-SensorTargets. Meu projeto não precisa e, portanto, não tem uma GUI, mas usa os mesmos princípios. Eu recomendo verificar os outros projetos de demonstração em sua página no github.

O movimento com a configuração atual não é muito fluido. Ele não pode avançar e girar no modo autônomo ao mesmo tempo. A principal razão para isso é a taxa de quadros do Walabot. É cerca de 6 FPS com as configurações atuais. Isso significa que o Raspberry recebe uma atualização a cada 0,16 segundos. Isto é um problema. Muita coisa pode acontecer em 0,16 segundos. Para superar esse problema, diminuí a velocidade do tanque. Usei a velocidade mínima possível para avançar e virar. Eu também removi a combinação de virar e mover porque esses movimentos não eram confiáveis ​​com minha configuração com esteiras. Em velocidades mais altas, eles ultrapassaram muito os limites e em velocidades mais baixas eles eram menos confiáveis ​​do que a versão atual.





Controle de voz


No modo autônomo, eu precisava de uma maneira legal de controlar o tanque. Usei o Alexa Skill Kit da Amazon para fazer isso. Na versão anterior, usei-o com o ngrok para controlar diretamente o Raspberry. Normalmente as pessoas estariam usando uma versão do Amazon Echo para fazer isso, mas infelizmente não tenho esse dispositivo. Tive que usar o echosim e o aplicativo Amazon Alexa do Google Play para fazer isso. O nome da habilidade é Beer Tank porque WalaBeer é algo que Alexa não reconhece. Compre cerveja, adore cerveja, etc., mas não WalaBeer. Você pode usar estes comandos para interagir com Alexa:
  • iniciar o tanque de cerveja
  • acenda / apague as luzes
  • {abrir / fechar} o compartimento de carga
  • {start / stop} me seguindo
  • [parar / cancelar]

Aqui está um vídeo sobre os dois primeiros recursos:

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.





Conclusão


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:


Código

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

Esquemas

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

Processo de manufatura

  1. Componentes do circuito
  2. Tanque de oxigênio
  3. Circuito Integrado
  4. Amazon Alexa Controlando um Chromecast
  5. Tanque autônomo
  6. MOSMusic
  7. O que é microeletrônica?
  8. O que é um tanque de reserva?
  9. Componentes da máquina de perfuração
  10. Componentes do motor de combustão interna