Tabla de contenido:
- Paso 1: cómo funciona
- Paso 2: Lista de materiales (BOM)
- Paso 3: Diseño mecánico
- Paso 4: Electrónica (opciones de componentes)
- Paso 5: Electrónica (conexiones)
- Paso 6: programación
- Paso 7: posibles mejoras
- Paso 8: factores limitantes
- Paso 9: Créditos
Video: Contenedor clasificador: detecte y clasifique su basura: 9 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
¿Alguna vez has visto a alguien que no esté reciclando o lo esté haciendo mal?
¿Alguna vez has deseado una máquina que reciclara por ti?
Sigue leyendo nuestro proyecto, ¡no te arrepentirás!
Sorter bin es un proyecto con una clara motivación de ayudar al reciclaje en el mundo. Como es bien sabido, la falta de reciclaje está provocando graves problemas en nuestro planeta, como la desaparición de materias primas y la contaminación del mar, entre otros.
Por ello, nuestro equipo ha decidido desarrollar un proyecto a pequeña escala: una papelera clasificadora que es capaz de separar la basura en distintos recipientes según sea el material metálico o no metálico. En futuras versiones, esa papelera clasificadora podría extrapolarse a gran escala, permitiendo la división de la basura en todo tipo de materiales (madera, plástico, metal, orgánico…).
Dado que el objetivo principal es distinguir entre metal y no metal, el contenedor clasificador estará equipado con sensores inductivos, pero también con sensores ultrasónicos para detectar si hay algo en el contenedor. Además, el contenedor necesitará un movimiento lineal para mover la basura hacia las dos cajas, por lo que se elige un motor paso a paso.
En las siguientes secciones, este proyecto se explicará paso a paso.
Paso 1: cómo funciona
La papelera clasificadora ha sido diseñada para hacer el trabajo relativamente fácil para el usuario: la basura debe introducirse por el orificio que se coloca en la placa superior, se debe presionar el botón amarillo y se inicia el proceso, terminando con la basura en uno. de los destinatarios. Pero la pregunta ahora es … ¿cómo funciona ese proceso internamente?
Una vez que el proceso ha comenzado, el LED verde se enciende. Luego, los sensores ultrasónicos, unidos a la placa superior a través de un soporte, comienzan su trabajo para determinar si hay un objeto dentro de la caja o no.
Si no hay ningún objeto dentro de la caja, el LED rojo se enciende y el verde se apaga. Por el contrario, si hay un objeto, los sensores inductivos se activarán para detectar si el objeto es metálico o no metálico. Una vez determinado el tipo de material, se encenderán los leds rojo y amarillo y la caja se moverá en un sentido o en el contrario según el tipo de material, propulsado por el motor paso a paso.
Cuando la caja llega al final del trazo y el objeto se ha dejado caer en el destinatario correcto, la caja volverá a la posición inicial. Finalmente, con la caja en la posición inicial, el LED amarillo se apagará. El clasificador estará listo para comenzar de nuevo con el mismo procedimiento. Este proceso descrito en los últimos párrafos también se muestra en la imagen del diagrama de flujo de trabajo adjunto en el Paso 6: Programación.
Paso 2: Lista de materiales (BOM)
Partes mecánicas:
-
Compré piezas para la estructura inferior.
- Estructura metálica [Enlace]
- Cuadro gris [Enlace]
-
impresora 3d
PLA para todas las piezas impresas (también se pueden utilizar otros materiales, como ABS)
-
Máquina de corte por láser
- MDF de 3 mm
- Plexiglás 4 mm
- Conjunto de rodamientos lineales [Enlace]
- Rodamiento lineal [Enlace]
- Eje [Enlace]
- Soporte de eje (x2) [Enlace]
Partes electronicas:
-
Motor
Motor paso a paso lineal Nema 17 [Enlace]
- Batería
Batería de 12 v [Enlace]
-
Sensores
- 2 Sensor ultrasónico HC-SR04 [Enlace]
- 2 sensores inductivos LJ30A3-15 [Enlace]
-
Microcontrolador
1 placa arduino UNO
-
Componentes adicionales
- Controlador DRV8825
- 3 LED: rojo, verde y naranja
- 1 botón
- Algunos alambres saltadores, alambres y placas de soldadura.
- Tablero de circuitos
- Cable USB (conexión Arduino-PC)
- Condensador: 100uF
Paso 3: Diseño mecánico
En las imágenes anteriores se muestran todas las partes del conjunto.
Para el diseño mecánico se ha utilizado SolidWorks como programa CAD. Las diferentes partes del conjunto se han diseñado teniendo en cuenta el método de fabricación con cuál se van a fabricar.
Piezas cortadas con láser:
-
MDF de 3 mm
- Pilares
- La placa superior
- Soporte de sensores ultrasónicos
- Soporte de sensores inductivos
- Caja de basura
- Soporte de batería
- Soporte para protoboard y Arduino
-
Plexiglás 4 mm
Plataforma
Piezas impresas en 3D:
- Base de pilares
- Elemento de transmisión de movimiento lineal del motor paso a paso.
- Soportes de cojinetes y motor paso a paso
- Piezas de fijación a paredes para el cubo de basura.
Para la fabricación de cada una de estas piezas se deben importar los archivos. STEP en el formato correcto, dependiendo de la máquina que se vaya a utilizar para tal fin. En este caso, se han utilizado archivos.dxf para la máquina de corte por láser y archivos.gcode para la impresora 3D (Ultimaker 2).
El montaje mecánico de este proyecto se puede encontrar en el archivo. STEP adjunto en este apartado.
Paso 4: Electrónica (opciones de componentes)
En esta sección, se hará una breve descripción de los componentes electrónicos utilizados y una explicación de las opciones de componentes.
Placa Arduino UNO (como microcontrolador):
Hardware y software de código abierto. Barato, fácilmente disponible, fácil de codificar. Esta placa es compatible con todos los componentes que usamos y fácilmente encontrará múltiples tutoriales y foros muy útiles para aprender y resolver problemas.
Motor (motor paso a paso lineal Nema 17):
Es un tipo de motor paso a paso que divide una rotación completa en un cierto número de pasos. Como consecuencia, se controla dando un cierto número de pasos. Es robusto y preciso y no necesita sensores para controlar su posición real. La misión del motor es controlar el movimiento de la caja que contiene el objeto arrojado y dejarlo caer en el contenedor de la derecha.
Para elegir el modelo se realizaron algunos cálculos del par máximo requerido agregando un factor de seguridad. En cuanto a los resultados, compramos el modelo que cubre en gran medida el valor calculado.
Controlador DRV8825:
Esta placa se utiliza para controlar un motor paso a paso bipolar. Tiene un control de corriente ajustable que le permite configurar la salida de corriente máxima con un potenciómetro, así como seis resoluciones de paso diferentes: paso completo, medio paso, 1/4 paso, 1/8 paso, 1/16- paso y 1/32 paso (finalmente usamos paso completo ya que no encontramos ninguna necesidad de ir a micropasos, pero aún se puede usar para mejorar la calidad del movimiento).
Sensores ultrasónicos:
Se trata de un tipo de sensores acústicos que convierten una señal eléctrica en ultrasonidos y viceversa. Utilizaron la respuesta de eco de una señal acústica emitida en primer lugar para calcular la distancia a un objeto. Los usamos para detectar si hay un objeto en la caja o no. Son fáciles de usar y proporcionan una medida precisa.
Aunque la salida de este sensor es un valor (distancia), al establecer un umbral para determinar si un objeto está presente o no, transformamos
Sensores inductivos:
Basado en la ley de Faraday, pertenece a la categoría de sensor de proximidad electrónico sin contacto. Los colocamos en la parte inferior de la caja móvil, debajo de la plataforma de plexiglás que soporta el objeto. Su objetivo es diferenciar entre objetos metálicos y no metálicos dando una salida digital (0/1).
LED (verde, amarillo, rojo):
Su misión es comunicarse con el usuario:
-LED verde encendido: el robot está esperando un objeto.
-LED rojo encendido: máquina en funcionamiento, no se puede lanzar ningún objeto.
-LED amarillo encendido: se detecta un objeto.
Batería de 12 V o fuente de alimentación de 12 V + alimentación USB de 5 V:
Se necesita una fuente de voltaje para alimentar los sensores y el motor paso a paso. Se necesita una fuente de alimentación de 5 V para alimentar el Arduino. Esto se puede hacer a través de la batería de 12 V, pero es mejor tener una fuente de alimentación de 5 V separada para el Arduino (por ejemplo, con un cable USB y un adaptador de teléfono conectado a una fuente de alimentación oa una computadora).
Problemas que encontramos:
-
Detección de sensor inductivo, no obtuvimos la precisión deseada ya que a veces no se percibe un objeto metálico mal posicionado. Esto se debe a 2 limitaciones:
- El área cubierta por los sensores dentro de la plataforma cuadrada representa menos del 50% (por lo que no se pueden detectar objetos pequeños). Para solucionarlo recomendamos utilizar 3 o 4 sensores inductivos para asegurar que se cubra más del 70% del área.
- La distancia de detección de los sensores está limitada a 15 mm, por lo que nos vimos obligados a utilizar una fina plataforma de plexiglás. Esto también puede ser otra limitación para detectar objetos con una forma extraña.
- Detección ultrasónica: de nuevo, los objetos con formas complejas dan problemas ya que la señal emitida por los sensores se refleja mal y regresa más tarde de lo que debería al sensor.
- Batería: tenemos algunos problemas para controlar la corriente que entrega la batería y para solucionarlo finalmente usamos una fuente de alimentación. Sin embargo, se pueden realizar otras soluciones como el uso de un diodo.
Paso 5: Electrónica (conexiones)
Esta sección muestra el cableado de los diferentes componentes juntos. También muestra a qué pin del Arduino está conectado cada componente.
Paso 6: programación
Esta sección explicará la lógica de programación detrás de la máquina clasificadora de contenedores.
El programa se divide en 4 pasos, que son los siguientes:
- Inicializar sistema
- Verificar presencia de objetos
- Verifique el tipo de objeto presente
- Mover caja
Para obtener una descripción detallada de cada paso, consulte a continuación:
Paso 1: inicializar el sistema
Panel LED (3): ajuste LED de calibración (rojo) ALTO, LED listo (verde) BAJO, Objeto presente (amarillo) BAJO
Compruebe que el motor paso a paso esté en la posición inicial
- Ejecute la prueba del sensor ultrasónico para medir la distancia desde el lado hasta la pared de la caja
- Posición inicial == 0 >> Actualice los valores del LED Listo ALTO y el LED de calibración BAJO -> paso 2
-
Posición inicial! = 0 >> valor de lectura digital de los sensores ultrasónicos y basado en los valores del sensor:
- Actualizar el valor del LED de movimiento del motor ALTO.
- Ejecute mover caja hasta que el valor de ambos sensores ultrasónicos sea <valor umbral.
Actualizar el valor de la posición inicial = 1 >> Actualizar el valor del LED Listo ALTO y el motor moviéndose BAJO y Calibrando BAJO >> paso 2
Paso 2
Verificar presencia de objetos
Ejecutar detección de objetos ultrasónicos
- Objeto presente == 1 >> Actualizar valor de Objeto presente LED ALTO >> Paso 3
- Objeto presente == 0 >> No hacer nada
Paso 3
Verifique el tipo de objeto presente
Ejecutar detección de sensor inductivo
- inductiveState = 1 >> Paso 4
- inductiveState = 0 >> Paso 4
Paso 4
Mover caja
Ejecutar la operación del motor
-
inductiveState == 1
Actualizar el LED de movimiento del motor ALTO >> Hacer que el motor se mueva a la izquierda, (actualizar la posición inicial = 0) retrasar y retroceder a la derecha >> Paso 1
-
inductiveState == 0
Actualizar el LED de movimiento del motor ALTO >> Hacer que el motor se mueva a la derecha (actualizar la posición inicial = 0), retrasar y retroceder a la izquierda >> Paso 1
Funciones
Como se puede ver en la lógica de programación, el programa funciona ejecutando funciones con un objetivo específico. Por ejemplo, el primer paso es inicializar el sistema que contiene la función "Comprobar que el motor paso a paso está en la posición inicial". A continuación, el segundo paso comprueba la presencia de un objeto, que en sí mismo es otra función (la función "Detección ultrasónica de objetos"). Etcétera.
Después del paso 4, el programa se ha ejecutado por completo y volverá al paso 1 antes de ejecutarse nuevamente.
Las funciones utilizadas en el cuerpo principal se definen a continuación.
Son respectivamente:
- inductiveTest ()
- moveBox (inductiveState)
- ultrasonicObjectDetection ()
// Comprueba si el objeto es metálico o no
bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {devolver falso; }} void moveBox (bool inductiveState) {// El cuadro va a la izquierda cuando se detecta metal y inductiveState = true if (inductiveState == 0) {stepper.moveTo (pasos); // posición aleatoria al final para probar stepper.runToPosition (); retraso (1000); stepper.moveTo (0); stepper.runToPosition (); retraso (1000); } else if (inductiveState == 1) {stepper.moveTo (-pasos); // posición aleatoria al final para probar stepper.runToPosition (); retraso (1000); stepper.moveTo (0); // posición aleatoria al final para probar stepper.runToPosition (); retraso (1000); }} boolean ultrasonicObjectDetection () {long duration1, distance1, durationTemp, distanceTemp, averageDistance1, averageDistanceTemp, averageDistanceOlympian1; // Definir el número de medidas a tomar de larga distanciaMax = 0; larga distanciaMin = 4000; long distanceTotal = 0; para (int i = 0; i distanciaMax) {distanciaMax = distanciaTemp; } if (distanciaTemp <distanciaMin) {distanciaMin = distanciaTemp; } distanciaTotal + = distanciaTemp; } Serial.print ("Sensor1 maxDistance"); Serial.print (distanceMax); Serial.println ("mm"); Serial.print ("Sensor1 minDistance"); Serial.print (distanciaMin); Serial.println ("mm"); // Tomar la distancia promedio de las lecturas averageDistance1 = distanceTotal / 10; Serial.print ("Sensor1 averageDistance1"); Serial.print (averageDistance1); Serial.println ("mm"); // Elimina los valores más altos y más bajos de las mediciones para evitar lecturas erróneas. AverageDistanceTemp = distanceTotal - (distanceMax + distanceMin); averageDistanceOlympian1 = averageDistanceTemp / 8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");
// Restablecer valores temporales
distanciaTotal = 0; distanciaMax = 0; distanciaMin = 4000; larga duración2, distancia2, mediaDistancia2, mediaDistanciaOlímpico2; // Definir el número de medidas a tomar para (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanciaTemp <distanciaMin) {distanciaMin = distanciaTemp; } distanciaTotal + = distanciaTemp; } Serial.print ("Sensor2 maxDistance"); Serial.print (distanceMax); Serial.println ("mm"); Serial.print ("Sensor2 minDistance"); Serial.print (distanciaMin); Serial.println ("mm"); // Toma la distancia promedio de las lecturas averageDistance2 = distanceTotal / 10; Serial.print ("Sensor2 averageDistance2"); Serial.print (averageDistance2); Serial.println ("mm"); // Elimina los valores más altos y más bajos de las mediciones para evitar lecturas erróneas. AverageDistanceTemp = distanceTotal - (distanceMax + distanceMin); averageDistanceOlympian2 = averageDistanceTemp / 8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Restablecer los valores de temperatura distanceTotal = 0; distanciaMax = 0; distanciaMin = 4000; if (averageDistanceOlympian1 + averageDistanceOlympian2 <emptyBoxDistance) {return true; } else {devolver falso; }}
Cuerpo principal
El cuerpo principal contiene la misma lógica explicada en la parte superior de esta sección, pero escrita en código. El archivo está disponible para descargar a continuación.
Advertencia
Se realizaron muchas pruebas para encontrar las constantes: emptyBoxDistance, steps y Maximumspeed y aceleración en la configuración.
Paso 7: posibles mejoras
- Necesitamos comentarios sobre la posición de la caja para asegurarnos de que siempre esté en las posiciones correctas para recoger el objeto al principio. Hay diferentes opciones disponibles para resolver el problema, pero una fácil podría ser copiar el sistema que encontramos en las impresoras 3D usando un interruptor en un extremo del camino de la caja.
-Debido a los problemas que encontramos con la detección ultrasónica, podemos buscar algunas alternativas para esa función: Láser KY-008 y Detector Láser (imagen), sensores capacitivos.
Paso 8: factores limitantes
Este proyecto funciona como se describe en las instrucciones, pero se debe tener especial cuidado durante los siguientes pasos:
Calibración de sensores ultrasónicos
El ángulo en el que se colocan los sensores ultrasónicos en relación con el objeto que tienen que detectar es de crucial importancia para el correcto funcionamiento del prototipo. Para este proyecto, se eligió un ángulo de 12,5 ° con respecto a la normal para la orientación de los sensores ultrasónicos, pero el mejor ángulo debe determinarse experimentalmente registrando las lecturas de distancia utilizando varios objetos.
Fuente de alimentación
La potencia requerida para el controlador de motor paso a paso DRV8825 es de 12 V y entre 0,2 y 1 amperio. El arduino también se puede alimentar con un máximo de 12 V y 0,2 amperios mediante el uso de la entrada jack del Arduino. Sin embargo, se debe tener especial cuidado si se usa la misma fuente de alimentación tanto para Arduino como para el controlador de motor paso a paso. Si se alimenta desde una toma de corriente ordinaria utilizando, por ejemplo, una fuente de alimentación de adaptador de 12 V / 2 A CA / CC, debe haber un regulador de voltaje y diodos en el circuito antes de que la energía se alimente al arduino y al controlador del motor paso a paso.
Homing the Box
Aunque este proyecto utiliza un motor paso a paso que, en condiciones normales, vuelve a su posición inicial con gran precisión, es una buena práctica tener un mecanismo de referencia en caso de que se produzca un error. El proyecto tal como está no tiene un mecanismo de inicio, pero es bastante simple implementar uno. Para esto, se debe agregar un interruptor mecánico en la posición inicial de la caja de modo que cuando la caja golpee el interruptor, sepa que está en su posición inicial.
Controlador paso a paso DRV8825 Tuning
El controlador paso a paso requiere un ajuste para funcionar con el motor paso a paso. Esto se hace de forma experimental girando el potenciómetro (tornillo) en el chip DRV8825 para que se suministre la cantidad adecuada de corriente al motor. Entonces, girando ligeramente el tornillo del potenciómetro hasta que el motor actúe de manera magra.
Paso 9: Créditos
Este proyecto se realizó como parte de un curso de mecatrónica durante el año académico 2018-2019 para el Bruface Master en la Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).
Los autores son:
Maxime Decleire
Lidia Gómez
Markus Poder
Adriana Puentes
Narjisse Snoussi
Un agradecimiento especial a nuestro supervisor Albert de Beir, quien también nos ayudó durante todo el proyecto.
Recomendado:
¡Haga un clasificador de basura Pi con ML !: 8 pasos (con imágenes)
¡Haz un clasificador de basura Pi con ML !: El proyecto del clasificador de basura, conocido cariñosamente como " ¡¿A dónde va?!”, Está diseñado para hacer que tirar cosas sea más rápido y más confiable. entrenado en Lobe, un amigable para principiantes (¡sin código!)
Contenedor inteligente: 9 pasos
Smart Bin: ¿Por qué Smart Bin? Todo el mundo tiene basura. Y lo más probable es que todos hayan experimentado la dolorosa discusión de quién debería sacar la basura y cuándo. Recientemente tuvimos una discusión de este tipo en nuestros propios hogares y decidimos que era hora de poner fin a esta locura
Contenedor de basura inteligente IDC2018 IOT: 8 pasos
Contenedor de basura inteligente IDC2018 IOT: La buena gestión de residuos se ha convertido en un tema esencial para nuestro planeta. En los espacios públicos y naturales, muchos no prestan atención a los residuos que dejan atrás. Cuando no hay un recolector de basura disponible, es más fácil dejar los desechos en el sitio que traer
Clasificador de basura CPE 133: 14 pasos
Clasificador de basura CPE 133: Para nuestra clase CPE 133 en Cal Poly, nos dijeron que creáramos un proyecto VHDL / Basys 3 que ayudaría al medio ambiente y era lo suficientemente simple como para poder implementarlo con nuestro nuevo conocimiento de diseño digital. La idea detrás de nuestro proyecto que, en general
ROCAS DE BASURA - Elimine la basura no reciclable: 8 pasos
ROCAS DE BASURA - Elimina la basura no reciclable: para hacer una piedra de basura, primero se cose un saco con una red de pesca. Está lleno de basura y enlucido con cemento. Las conchas resultantes tienen una forma única y se ven muy naturales. Las rocas basura son una estética agradable y constructiva