Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Tanque de WalaBeer

Componentes y suministros

Creador de Walabot
× 1
Arduino MKR1000
× 1
Raspberry Pi 3 Modelo B
× 1
Amazon Alexa Amazon Echo
o https://echosim.io/
× 1
Controlador de motor SparkFun - Doble TB6612FNG (1A)
× 1
Estructura del tanque (contiene 2 motores de CC con escobillas)
× 1
Servos (Tower Pro MG996R)
× 3
Kit de juego de construcción de metales
× 1
Motor paso a paso + controlador
Usé un motor paso a paso 28byj-48 y un controlador de motor X113647
× 1
Batería LiPo de 7,4 V
× 1
Cargador de batería LiPo de 7,4 V
× 1
Potenciómetro giratorio (genérico)
× 1
LED (genérico)
Usé un segmento de una tira de LED
× 2
Sedal
× 1
Plástico fino o papel duro para la cubierta
× 1
circuito BEC de 5 V
× 1
Resistencia de 10k ohmios
× 1
Resistencia 22.1k ohm
× 1
Resistencia de 2,21 k ohmios
× 1
Transistor de alta potencia Darlington
× 1
reglas de madera de 30 cm de largo
× 2
Voltímetro
Esto es opcional
× 1
Transmisor RC con receptor
Estas son partes opcionales para controlar el tanque manualmente. Puede funcionar sin un control remoto.
× 1
Cerveza
× 1

Herramientas y máquinas necesarias

Soldador (genérico)
Pistola de pegamento caliente (genérica)
Herramienta de sierra
Ejercicio
Raspador

Aplicaciones y servicios en línea

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

Acerca de este proyecto

Resumen

Hay cosas que en el fondo todo hombre quiere tener. ¡Combinar cerveza y tanques es una de estas cosas! Este proyecto tratará sobre esto, un tanque controlado por voz que te entrega cerveza con una función autónoma de "sígueme" o con un control RC. ¡Construyamos el tanque de cerveza de nuestros sueños!

Chasis

Necesitamos una buena base para el tanque. Encontré este chasis en banggood. Era bastante barato y se veía tan genial que necesitaba comprar uno.

Inmediatamente después de recibir el producto surgió el primer problema. Debido al embalaje inadecuado sufrió algunas lesiones graves durante el envío.

Me tomó muchas horas y mucho pegamento, pero afortunadamente la mayoría de las veces pude repararlo.

Grúa

El chasis del tanque contiene tanto los motores como las cajas de cambios, por lo que el siguiente paso fue averiguar cómo servir la cerveza. Después de numerosas ideas, descubrí que la mejor y más genial forma de hacerlo es ocultar la cerveza y luego elevarla con una grúa. Este es el diseño básico que se me ocurrió:

Usé mi viejo kit de construcción de metal porque necesitaba un esqueleto fuerte pero fácil de modificar. La grúa está conectada a un motor paso a paso con un hilo de pescar. El motor paso a paso 28byj-48 fue excelente para este propósito. No es rápido pero podría levantar fácilmente la grúa y la cerveza. En realidad, el motor es tan fuerte que si no lo detenía a tiempo, rompía el hilo de pescar.

Funcionó de maravilla, sin embargo, el esqueleto no era lo suficientemente fuerte y comenzó a doblarse muy temprano. Para resolver este problema, necesitaba aumentar la integridad estructural. Usé dos reglas de madera dura de 30 cm de largo y algunas piezas adicionales para hacerla más resistente. Después de perforar, aserrar y raspar, aquí está la siguiente versión:

Como puede ver, las modificaciones resolvieron el problema de flexión y es muy estable.

Caso

Un Walabot (versión para desarrolladores) será el "ojo" del tanque. Más sobre Walabot en la sección de Walabot. El frente tiene una parte de soporte para el Walabot. Tenía una pieza de metal que tiene el tamaño perfecto para usar el soporte magnético de Walabot. También hice una forma de logotipo de Walabot con pegamento caliente para evitar que el Walabot girara en la parte redonda:

El montaje magnético es excelente porque puedo usar fácilmente un Walabot en múltiples proyectos sin un desmontaje serio y también es lo suficientemente fuerte.

Comencé a hacer una cubierta alrededor del marco para ocultar las partes. Usé papel de cartón negro y láminas de plástico para la portada.

En este punto, la parte delantera y central no estaba cubierta. También necesitaba una trampilla en la parte superior para ocultar la cerveza por completo. Para mover la escotilla utilicé dos servos, algo de azul intenso y algo de cinta aislante. Esta puerta superior utilizada solo para el diseño, realmente no protege la cerveza. Sin embargo, hace mucho frío cuando se abre y eleva la cerveza.

Las puertas están hechas de dos láminas de plástico, palos de madera y un poco de papel encolado y enrollado, pegados con cola caliente. No es la cosa más bonita, pero en la vida real no se ve tan mal. Lo pinté todo de negro. En la vida real, es mucho más difícil ver la diferencia entre las partes negras.

Grúa - Vol. 2

Volvamos a la grúa una vez más. Necesitaba una cosa más para usarlo de manera confiable:comentarios.

Originalmente quería usar una retroalimentación binaria simple para esto. Cuando la grúa está en estado bajado, cerraría un circuito. Cuando estaba elevado, se abriría:los tornillos y el resorte en el círculo rojo habrían sido ese interruptor. Habría usado un temporizador para determinar la posición superior.

No era demasiado sofisticado, pero la idea funciona. Desafortunadamente, no era confiable en absoluto, por lo que fácilmente podría haber dañado la grúa.

Se me ocurrió otra solución mucho mejor, la del rectángulo azul. Pegué un potenciómetro de 10K al y del eje de la grúa, por lo que tengo una retroalimentación confiable sobre el ángulo actual de la grúa. Es muy fácil determinar las posiciones superior e inferior de esta manera. FYI:hasta este punto usé mi viejo Arduino Uno para probar porque su proto shield es muy útil.

De hecho, me gusta mucho esta parte de comentarios. No fue planeado, pero agrega un poco más de frescura a la apariencia del tanque.

Circuito

Muy bien, el cuerpo del tanque está terminado, ¡pero necesitamos algunos componentes electrónicos para que se mueva!

También coloqué esta imagen en la sección Esquemas, pero aquí puedes ampliarla sin descargarla. El circuito puede parecer un poco complejo al principio, pero en realidad es bastante sencillo. Las notas adjuntas deberían ayudar con cualquier cosa que necesite alguna explicación.

Este proyecto no utiliza la funcionalidad WiFi del Arduino MKR1000 en este momento, pero como sé, no puede simplemente reemplazarlo con un Arduino Uno si desea controlar el tanque con un transmisor RC. Mi proyecto utiliza 3 canales para controlar la velocidad, el giro y la grúa. Necesito 3 pines con capacidad de interrupción externa. Arduino Uno tiene solo 2 pines para este propósito. Necesitamos esos pines para leer los valores PWM de los canales correspondientes del receptor RC.

Construí el circuito en un proto PCB. Se volvió bastante compacto. El LED azul de la izquierda habría sido un simple LED 'integrado' para depurar, pero en realidad nunca lo usé. El conector verde se utiliza para conectar la batería LiPo.

La mayoría de los cables que se conectan a esta placa están en la parte superior del tanque. Era obvio pegar la tabla allí para evitar el 'infierno de cables'.

Como puede ver en la imagen, originalmente comencé con una Raspberry Pi Zero W, pero debido a la falta de energía pasé a usar una Raspberry Pi 3 B.

Funcionaba perfectamente en este punto, pero agregué una característica adicional:el faro oculto. La pieza de plástico negro de la derecha se puede mover fácilmente. Adjunté un servo para moverlo hacia arriba y hacia abajo y también usé un segmento de una tira de LED de 12V. Alimentar una tira de LED de 12 V con una batería LiPo de 7,4 V no es una buena idea. Las luces serán muy débiles. Reemplacé el LED del medio con un cable para hacer que los LED restantes brillen. Funcionó perfectamente.

Los LED frontales se controlan con el mismo pin que el LED indicador azul. Tuve que modificar ligeramente la placa agregando algunos encabezados adicionales y un transistor. El resultado es asombroso:

Arduino - hardware

Usé un Arduino MKR1000 para controlar el tanque. Este es el dispositivo compatible con Arduino o Arduino IDE más pequeño de mi colección que puede manejar 3 interrupciones externas y tiene suficientes pines para este proyecto. También tiene capacidad WiFi, pero no la usaré ahora.

El tanque necesita 5 pines con capacidad PWM. 3 para los servos y 2 para los motores. Si verifica las capacidades, verá que hay 12 pines con capacidad PWM. Eso es lo suficientemente bueno, ¿verdad? Bueno, sí y no.

Los pines 2-5 tienen la marca ~. Creo que significa que solo estos cuatro pines son capaces de crear señales PWM de hardware. Creo que los otros pines solo pueden crear señales PWM de software. Las especificaciones técnicas no escriben sobre esto, sin embargo, cuando obtuve mi primer prototipo MKR1000, la documentación mencionaba solo 4 pines con capacidad PWM. Esos cuatro. Originalmente, controlaba los servos de la escotilla a través de dos de estos pines PWM de software. La combinación de generación de software PWM y lectura de señal PWM basada en interrupciones de hardware da como resultado este problema:

Resolví este problema usando pines PWM de hardware para los servos. Desafortunadamente, tuve que usar uno de esos pines para el servo de la puerta LED, porque los otros dos pines de hardware necesitaban controlar los motores. Gracias al controlador de motor TB6612FNG, solo necesitaba dos pines PWM (y otros 4 pines digitales) para controlar los motores. El servo de 'puerta LED' es mucho más lento que los demás, por lo que a veces solo hace un zumbido silencioso. Usar solo un pin PWM de software en lugar de dos también ayudó. En el futuro, podría reconstruir esa parte para usar otros medios para abrir la puerta de los LED. Los solenoides pueden funcionar.

El Arduino puede medir el voltaje de la batería y luego enviarlo en serie. Además, integré un voltímetro simple en la parte trasera del tanque. Se utiliza como información para el usuario sobre el estado de la batería. Es un circuito separado y no controlado por Arduino.

Arduino - Control de radio

El MKR1000 está procesando 3 señales PWM separadas con interrupciones externas. El tiempo de pulso de las señales está en el rango de aproximadamente 1000 y 2000 us. El primer canal se usa para calcular una variable llamada motorSpeedBase. Es la velocidad básica de los motores y se calcula así:

  motorSpeedBase =(vertical_pulse_time - 1500) / 2;  

Para controlar los motores utilicé señales PWM de 8 bits, por lo que escalé los valores a este rango de -255 a 255. El MKR1000 puede funcionar mejor que el de 8 bits, pero es más que suficiente para estos motores.

La variable motorSpeedChange se utiliza para agitar y se calcula a partir del segundo canal. Se calcula de forma similar a motorSpeedBase. La diferencia es la división por 3 en lugar de 2:esta diferencia ayuda a controlar el tanque.

  motorSpeedChange =(horizontal_pulse_time - 1500) / 3;  

El tercer canal es utilizado por un solo interruptor. Controla el movimiento de la grúa y las puertas de la trampilla. Se calcula así:

  elevado =state_switch_pulse_time <1500;  

Su valor es 1000 us cuando está apagado y 2000 us cuando está encendido. El resultado es un bool.

La velocidad final del motor se calcula así:

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

Si el resultado es mayor / menor que el valor máximo / mínimo, el valor se establecerá en el valor máximo / mínimo (255 o -255). Los pines relacionados se actualizarán en función de los valores de velocidad del motor. Si un valor de velocidad no alcanza el valor mínimo, ese motor se desactivará.

La grúa y la trampilla son manejadas por esta función:

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

Comienza con la verificación del estado actual de la grúa. Si necesita ser elevado pero no lo está, actualizará los servos de las puertas de la escotilla y moverá la grúa hacia arriba. Si debe bajarse pero no lo está, entonces baja la grúa y luego cierra la trampilla. Las bobinas del motor paso a paso deben desactivarse al final del proceso porque pueden calentarse seriamente y agotar la batería si dejamos una encendida.

Arduino - comunicación Raspberry Pi

El Arduino está conectado y alimentado desde la Raspberry Pi con un cable USB - micro USB y se comunican a través de serie. La Raspberry controlará el Arduino con estos comandos:

  • s -> apague el control de radio y acepte solo comandos en serie. El Arduino responderá con 'OK' a esto y deshabilitará el control de radio. Este OK es parte de cómo Rpi reconoce el Arduino.
  • r -> volver a encender el control de radio
  • e -> elevar la grúa (y así abrir la trampilla)
  • d -> bajar la grúa
  • m X Y -> ajuste de la velocidad de los motores. X es motorSpeedBase e Y es motorSpeedChange. Tanto X como Y deben ser números enteros
  • b -> el arduino responderá con un número entero:voltaje de la batería * 100
  • l -> encender la iluminación
  • o -> apagar la iluminación

Cabe señalar que en caso de control en serie, el Arduino deshabilita las interrupciones en el canal RC 1 y 2 pero no en el 3. El canal 3 (el interruptor) se usa como un interruptor de seguridad para deshabilitar el tanque WalaBeer si comienza a funcionar como loco. cosas en modo autónomo.

Walabot

Aquí está la parte en la que entra Walabot. Walabot es un sensor 3D que utiliza microondas para obtener imágenes. Puede hacer cosas asombrosas como ver a través de las paredes, detectar tu respiración desde la distancia, ver en la oscuridad, etc. No quiero escribir páginas sobre sus otras capacidades porque otros hicieron un gran trabajo al hacerlo. Sin embargo, realmente recomiendo leer sobre ellos.

Usaré Walabot como el único sensor de navegación en el tanque. Para usar Walabot con Raspberry Pi, primero debemos instalar el SDK de Walabot. Puede descargar el SDK desde aquí y el sitio de la API de Walabot lo ayudará a instalarlo. Hay mucha información útil y ejemplos sobre cómo usar Walabot. Recomiendo visitar el sitio.

El consumo de energía del Walabot está entre 0.4-0.9A. Significa que, de forma predeterminada, la Raspberry Pi no puede proporcionar suficiente energía para alimentar el Walabot. Afortunadamente, hay una manera de aumentar la potencia de salida de los puertos USB del rpi agregando esta línea:`max_usb_current =1` al /boot/config.txt. Como sé, aumenta la potencia de salida de 600 mA a 1200 mA.

Eso sería genial, pero aquí viene un problema:también enciendo el Arduino y los servos de la Raspberry. Los motores del tanque y el motor paso a paso funcionan con la batería, así que pensé que no debería importar. Sin embargo lo hace. Si inicio el Walabot en esta condición, se detiene con el mensaje WALABOT_ERR_PROTOCOL. Es posible que se produzca un apagón cuando intento iniciarlo.

El circuito eliminador de batería puede proporcionar hasta 3 A, por lo que aquí es más que suficiente. El Walabot tiene dos puertos micro USB. El puerto intermedio me ayudará en esta situación porque se puede alimentar desde allí mientras se comunica con el otro. Para ello tuve que hacer una modificación y quitar la tapa del Walabot para mover este jumper

Después de eso, el Walabot funcionó perfectamente, no más WALABOT_ERR_PROTOCOL.

El logo en la parte posterior (la parte lisa es la parte frontal) contiene cuatro imanes incorporados muy fuertes. Esos se usaron para sujetar fácilmente el Walabot al frente de metal del tanque sin ningún hardware adicional.

Sígueme

Uno de los "puntos de venta" del tanque es su modo sígueme. Si le pides al tanque de cerveza que te siga, hará todo lo posible y te seguirá. Una vez que llegaste a tu destino, solo pide la cerveza adentro. ¡Es un gran truco de fiesta!

El SDK de Walabot proporciona todo tipo de formas de interactuar con Walabot. Mi proyecto usa getTargets función con Identificación de objetivos móviles Modo (MTI). Se utiliza para detectar objetos en movimiento frente al Walabot. Con mi configuración, getTargets devolverá un máximo de 4 objetivos y verá objetos a una distancia máxima de 1,5 metros.

Los objetivos tienen coordenadas XYZ y un parámetro de amplitud. Utilizo solo las coordenadas Y y Z porque la altura (X) no es importante aquí. El problema es que no hay forma de saber qué objetivo es qué.

En la versión anterior, para encontrar al humano en la lista de objetivos, creé una regla:antes de ordenarle que te siga, debes pararte frente al Walabot a una distancia de 80 cm. Después de eso, mi código asume que el objeto más cercano con una amplitud lo suficientemente alta es el humano. Si se detecta al humano, todo lo que tiene que hacer el tanque es mantener al humano en la posición deseada moviéndose.

Desafortunadamente, no fue perfecto. Afortunadamente, recibí una sugerencia para un enfoque diferente. Comienza igual:tienes que pararte frente al Walabot a una distancia de 80 cm. El objetivo más cercano al tanque se considerará humano. Después de eso, en cada iteración la posición del humano será el objetivo más cercano a la posición anterior. Si la distancia entre la posición nueva y la antigua fuera demasiado alta, el tanque no actualizará la posición del humano y se detendrá. El tanque intentará encontrar al humano en la posición anterior, por lo que si encuentra a la persona, continuará siguiéndolo. Es una idea bastante sencilla.

Examinemos algunos casos en la vista Arena. El objetivo del tanque es mantener al humano en el área objetivo (rectángulo rojo). El azul es el más cercano y ese es el humano en estos casos:

  • Caso 1:el ser humano está en el área objetivo, por lo que no se requiere movimiento
  • Caso 2:El humano está a la derecha y está demasiado cerca del tanque. Al principio, el tanque girará a la derecha y luego se alejará del humano yendo hacia atrás.
  • Caso 3:el tanque no necesita girar, pero el humano está demasiado lejos. Avanzará. El Walabot vio 3 objetivos cuando hice esta imagen
  • Caso 4:solo hay un objetivo en esta imagen y está a la izquierda. El tanque se moverá hacia la izquierda y luego hacia adelante.
  • Caso 5:El tanque retrocederá hasta que el humano esté en el rectángulo rojo.

Estas imágenes son pantallas de impresión de la vista Arena de una versión ligeramente modificada de la demostración de Walabot-SensorTargets. Mi proyecto no necesita y, por lo tanto, no tiene una GUI, pero usa los mismos principios. Recomiendo consultar los otros proyectos de demostración desde su página de github.

El movimiento con la configuración actual no es demasiado fluido. No puede avanzar y girar en modo autónomo al mismo tiempo. La razón principal de esto es la velocidad de fotogramas de Walabot. Se trata de 6 FPS con la configuración actual. Significa que la Raspberry recibe una actualización cada 0,16 segundos. Esto es un problema. Pueden pasar muchas cosas en 0,16 segundos. Para superar este problema, reduje la velocidad del tanque. Utilicé la mínima velocidad posible para avanzar y girar. También eliminé la combinación de girar y moverse porque esos movimientos no eran confiables con mi configuración de orugas. A velocidades más altas, se sobrepasaron mucho y a velocidades más bajas fueron menos confiables que la versión actual.

Control por voz

En modo autónomo, necesitaba una forma genial de controlar el tanque. Usé el kit de habilidades de Alexa de Amazon para hacer esto. En la primera versión, lo usé con ngrok para controlar directamente la Raspberry. Por lo general, la gente usaría una versión de Amazon Echo para hacer esto, pero desafortunadamente no tengo ese dispositivo. Tuve que usar echosim y la aplicación Amazon Alexa de Google Play para hacer esto. The name of the skill is Beer Tank because WalaBeer is something that Alexa doesn't recognize. Buy beer, love beer, etc, but not 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.

Conclusión

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

Proceso de manufactura

  1. Componentes del circuito
  2. Tanque de oxígeno
  3. Circuito integrado
  4. Amazon Alexa Controlando un Chromecast
  5. Tanque autónomo
  6. Dados digitales Arduino
  7. MOSMusic
  8. ¿Qué es la microelectrónica?
  9. ¿Qué es un tanque de reserva?
  10. Componentes de la máquina de perforación
  11. Componentes del motor de combustión interna