Reciclaje de PET a través de una solución IoT de Canasta Recicladora Inteligente
El presente proyecto se enmarca en una estrategia de apropiación social del conocimiento unido al semillero STEAM de la facultad de ingeniería de la universidad Unipanamericana.
La producción de plásticos creció en los últimos 50 años, se evidencia que la producción de basura tiene muchos factores que pueden hacer que esto varié, algunos de estos son la ubicación geográfica, la producción industrial, entre otros. Teniendo como base esto se hace cada vez más importante conocer indicadores globales, nacionales y locales de la producción de basuras para que de esta manera podamos entender el impacto que causa en nuestra sociedad. Realizando esta investigación encontramos que en Colombia se generan 3,6 millones de toneladas de residuos en el día. Se muestra que mientras en otros países alcanzan una cifra del 25% de reciclaje en Colombia solo se recicla un 17% de estos residuos.
Existen muchos tipos de plásticos, nuestro proyecto se enfoca en la el reciclaje de PET, tiene una gran importancia dentro de los plásticos, es menos perjudicial para el medio ambiente que otros tipos de plástico como el PVC. No por ello se libra de perjudicar el medio ambiente, ya que en su elaboración se utilizan metales pesados y sustancias irritantes que se expulsan al medio ambiente. Es por ello que es necesario el reciclaje de plástico sea de PET ya que su presencia es masiva, aunque el mercado está dominado por cuatro tipos principales:
Este proyecto maneja una metodología de investigación donde tomamos como muestra los estudiantes de secundaria del IED Restrepo Millán, utilizando un enfoque cuantitativo que pretende obtener los resultados almacenados y de esta forma analizar la causa y efecto en la población y su comportamiento. Tiene un alcance cuasiexperimental los cuales se basan en manipular al menos una variable independiente para que lo resultados sean observados. Con esta metodología se piensa trabajar en distintas fases. Fase 1, diseño del prototipo en esta fase lo que se busca es comprobar los diferentes elementos electrónicos, materiales necesarios, medida de la canasta y elaboración de planos. Fase 2, pruebas y selección de componentes en esta fase se realizó la selección de los elementos más adecuados para la construcción del prototipo. Fase 3, construcción del prototipo se llevó a cabo la instalación de los elementos calibración de sensores, programación del microcontrolador, ruta de cableado y conexión de la base de datos. Fase 4, implementación y análisis de resultados se ubica en el IED Restrepo Millán el prototipo completamente terminado de la canasta recicladora inteligente esto con el fin de recolectar la información y realizar análisis de los resultados obtenidos y la comprobar el impacto obtenido.
Impactar positivamente la cultura asociada al reciclaje de PET (Tereftalato de polietileno) en el Colegio Restrepo Millán IED a través de una solución IoT de Canasta Recicladora Inteligente.
Prototipar la Canasta Recicladora Inteligente en el Colegio Restrepo Millán IED que clasifique el contenido depositado y envíe la información a la base de datos para su posterior análisis.
Analizar los resultados y el impacto generado por parte de la Canasta Recicladora Inteligente en un ambiente real en relación con incrementar el interés y cultura frente al reciclaje de PET y a su vez recolectar información útil para la toma de decisiones.
FASE I
DISEÑO DEL PROTOTIPO
FASE II
PRUEBAS Y SELECCIÓN DE COMPONENTES
El sensor capacitivo es un interruptor electrónico que trabajan sin contacto. Estos sensores aprovechan el efecto que tienen los materiales como el papel, vidrio, plástico, aceite, agua, así como de los metales, de aumentar la capacidad del sensor cuando se encuentran dentro del campo eléctrico generado, a diferencia de los sensores inductivos es que los capacitivos producen un campo electrostático y no electromagnético.
Se recopilo toda la información de los sensores capacitivos y se tuvo especial cuidado en la selección de este elemento ya que el éxito del proyecto dependía del adecuado funcionamiento de este sensor, adicional el costo de este sensor superaba el valor de los demás elementos, se investigó cuáles son los que más se adaptan a las necesidades del prototipo de la canasta recicladora inteligente. La inadecuada selección de este puede implicar más gastos, se descartaron los sensores capacitivos con voltajes superiores a 12 V con el fin de reducir costos en compras de fuentes y divisores de voltajes.
Después de realizar las diversas pruebas con materiales con los sensores capacitivos se determinó que la mejor opción debido a su bajo costo para implementar y sus correctos requerimientos que se ajustan a nuestra necesidad se determina que el sensor capacitivo Autonics CR18-8DN en la es el seleccionado para ser usado en la implementación del prototipo de canasta recicladora inteligente.
FASE III
CONSTRUCCIÓN DEL PROTOTIPO
Se procede con la instalación del servidor XAMP se suben los servicios Apache y MySQL.
Se accede a http://localhost/phpmyadmin/ y se crea la base de datos se asigna el nombre sensores.
Se crean 3 tablas y se asignan de la siguiente manera:
Una vez creadas las base de datos y las tablas ahora creamos una publicación web PHP para que los datos obtenidos de la báscula de peso se almacenen en la base de datos, como primera medida nos dirigimos a la ruta C:\xampp\htdocs y creamos una carpeta con el nombre CRI y creamos 2 archivos con extensión config.php y peso.php.
<?php // config.php // Credenciales $dbhost = "localhost"; $dbuser = "root"; $dbpass = ""; $dbname = "canasta_recicladora_inteligente"; // Conexión con la base de datos $con = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); ?>
En el archivo config.php se determinan:
<?php // peso.php // Importamos la configuración require("config.php"); // Leemos los valores que nos llegan por GET $valor = mysqli_real_escape_string($con, $_GET['valor']); // Esta es la instrucción para insertar los valores $query = "INSERT INTO valores(valor) VALUES('".$valor."')"; // Ejecutamos la instrucción mysqli_query($con, $query); mysqli_close($con); ?>
En el archivo peso.php se determina archivos se encargan de relacionar el sitio web con el código programado en el Arduino de la báscula y almacenar la información en la base de datos, los datos se registran por medio de un GET.
/*___ ___ ___ ___ ___ ___ ___ _ ____ / __| _ \_ _| / __|_ _|_ _/ __| / |__ / | (__| /| | | (_ || | | |\__ \ | ||_ \ \___|_|_\___| \___|___|___|___/ |_|___/ * Modulo Ethernet ENC28J60 * ---------------- * Signal Pin * ---------------- * SO D12 * SCK D13 * RESET D9 * GND GND * VCC 3.3v * CS D10 * SI D11 * ---------------- * * Modulo ADC HX711 * ---------------- * Signal Pin * ---------------- * CLK A0 * DOUT A1 */ #include <UIPEthernet.h> // Librería Ethernet usada con el módulo ENC28J60 #include "HX711.h" // Librería HX711 usada con el módulo ADC HX711 #define DOUT A1 //Se define los pines analogos A1 #define CLK A0 //Se define los pines analogos A0 HX711 balanza(DOUT, CLK); //Se declara los pines ACD byte direccion_mac[]={0x12,0x34,0x56,0x78,0x9a,0xbc}; // Dirección MAC inventada IPAddress direccion_ip_fija(10,33,83,43); // Dirección IP elegida para el módulo IPAddress servidor_dns(10,17,1,46); // Servidor DNS IPAddress puerta_enlace(10,33,83,1); // Dirección IP del router IPAddress mascara_red(255,255,255,0); // Máscara de la red IPAddress server(10,33,83,42); // Dirección IP del servidor EthernetClient client; //Se Define la interface cliente byte estado_conexion; void setup() { Serial.begin(9600); Serial.print("Lectura del valor del ADC: "); //Se imprime el texto Serial.println(balanza.read()); //Se calcla el peso inicial Serial.println("No ponga ningun objeto sobre la balanza"); //Se imprime el texto Serial.println("Destarando..."); //Se imprime el texto Serial.println("..."); //Se imprime el texto balanza.set_scale(416830.25); // Establecemos la escala balanza.tare(20); //El peso actual es considerado Tara. Serial.println("Listo para pesar"); //Se imprime el texto Ethernet.begin(direccion_mac,direccion_ip_fija,servidor_dns,puerta_enlace,mascara_red);//Se activa la interface Serial.println(Ethernet.localIP()); //Se imprime el texto } void loop() { Serial.print("Peso: "); //Se imprime el texto Serial.print(balanza.get_units(20),3); //Se trae el valor actual en la bascula Serial.println(" gramos"); //Se imprime el texto delay(60000); //Se ajusta el envio de datos y conexcion de del modulo ethernet cada 60 segundos if(client.connect(server, 80)>0) { // Puerto Conexion con el servidor client.print("GET /arduino/lectura.php?valor="); // Enviamos los datos por GET client.print(balanza.get_units(20),3); //Se trae el valor actual en la bascula y se envia a la base de datos client.println(" HTTP/1.0"); //Se establece el protocolo de conexion client.println("User-Agent: Arduino 1.0"); //Se establece el protocolo de conexion client.println(); Serial.println("Conectado"); } else { Serial.println("Fallo en la conexion"); } }
/* ___ ___ ___ ___ ___ ___ ___ _ ____ / __| _ \_ _| / __|_ _|_ _/ __| / |__ / | (__| /| | | (_ || | | |\__ \ | ||_ \ \___|_|_\___| \___|___|___|___/ |_|___/ */ #include //Inclimos la libreria para controlar servos Servo compuerta_plastico; //Nombramos la variable del servo bool e1, e2, e3; //Definimos los 3 posibles estados (e1, e2 y 23) de los dos sensores void setup(){ //Configuración Serial.begin(9600); //Iniciamos el monitor serial a 9600 baudios pinMode(4,INPUT); //Definimos el pin 4 para el sensor Infrarojo pinMode(5,INPUT); //Definimos el pin 5 para el sensor Capacitivo compuerta_plastico.attach(6); //Definimos el pin 6 para la señal del Servo pinMode(7,OUTPUT); //Definimos la salida del PUENTE } void loop(){ //Bucle e1 = digitalRead(4); //Lee el Infrarojo e1 = digitalRead(5); //Lee el Capacitivo if(digitalRead(4)==HIGH) //Si el infrarojo NO activa if(digitalRead(5)==HIGH) //Si el capacitivo NO activa { Serial.println("No Detectado"); //Imprime compuerta_plastico.write(0); //Envia señal de 0 grados al Servo digitalWrite(7,LOW); //No cuenta delay(400); } else //De lo contrario... { Serial.println("No Detectado"); //Imprime compuerta_plastico.write(0); //Envia señal de 0 grados al Servo digitalWrite(7,LOW); //No cuenta } e2 = digitalRead(4); //Lee el Infrarojo e2 = digitalRead(5); //Lee el Capacitivo if(digitalRead(4)==LOW) //Si el infrarojo SI activa if(digitalRead(5)==LOW) //Si el capacitivo SI activa { Serial.println("No Detectado"); //Imprime compuerta_plastico.write(0); //Envia señal de 0 grados al Servo delay(400); digitalWrite(7,LOW); //No cuenta } else //De lo contrario... { Serial.println("No Detectado"); //Imprime compuerta_plastico.write(0); //Envia señal de 0 grados al Servo digitalWrite(7,LOW); //No cuenta } e3 = digitalRead(4); //Lee el Infrarojo e3 = digitalRead(5); //Lee el Capacitivo if(digitalRead(4)==LOW) //Si el infrarojo SI activa if(digitalRead(5)==HIGH) //Si el capacitivo NO activa { Serial.println("PET Detectado"); //Imprime compuerta_plastico.write(90); //Envia señal de 45 grados al Servo delay(400); digitalWrite(7,HIGH); //Cuenta delay(1300); } else //De lo contrario... { Serial.println("No Detectado"); //Imprime compuerta_plastico.write(0); //Envia señal de 0 grados al Servo digitalWrite(7,LOW); //No cuenta } }
/* ___ ___ ___ ___ ___ ___ ___ _ ____ / __| _ \_ _| / __|_ _|_ _/ __| / |__ / | (__| /| | | (_ || | | |\__ \ | ||_ \ \___|_|_\___| \___|___|___|___/ |_|___/ */ int reloj = 12,dato = 13, limpiar = 11, hab1 = 10, hab2 = 9, hab3 = 8; //Variables de registro de desplazamiento int numero=0; //Variable para los números int num[10][8]={ //Matriz de 7 segmentos {1,1,1,1,0,1,1,1}, //cero {0,0,0,1,0,0,0,1}, //uno {0,1,1,0,1,0,1,1}, //dos {0,0,1,1,1,0,1,1}, //tres {0,0,0,1,1,1,0,1}, //cuatro {0,0,1,1,1,1,1,0}, //cinco {1,1,1,1,1,1,1,0}, //seis {0,0,0,1,0,0,1,1}, //siete {1,1,1,1,1,1,1,1}, //ocho {1,0,1,1,1,1,1,1}};//nueve int passiveBuzPin = 7; int i = 0; int bucles = 0; int noteDuration = 1000/8; //Octava nota int pauseBetweenNotes = noteDuration * 0.2; //Pausa entre notas void setup(){ //Configuración pinMode(6,INPUT); //Entrada del PUENTE for (int i = hab3; i <= dato; i++) //Se definen pines de salida del 8 a l3 { pinMode(i,OUTPUT); //Se definen esos pines como salida } digitalWrite(hab1,HIGH); //Con el HIGH se asegura que el display 1 inicia apagado digitalWrite(hab2,HIGH); //Con el HIGH se asegura que el display 2 inicia apagado digitalWrite(hab3,HIGH); //Con el HIGH se asegura que el display 3 inicia apagado digitalWrite(limpiar,HIGH); //Con el HIGH se mantiene conteo, LOW limpia registro } void loop(){ //Bucle multiples(numero); //Creamos la funcion multiples recibe numeros del 0 al 999 if (digitalRead(6)==HIGH) { delay(400); //Calibración PUENTE numero = numero + 1; //Aumenta el conteo en 1 for (bucles = 0; bucles < 4; bucles++){ //Numero de ciclos de sonido a reproducir for (i=25; i<30; i++){ //Reproducir de bajo a alto tone(passiveBuzPin, 20*i, noteDuration); delay(pauseBetweenNotes); } for (i=30; i>25; i--){ //Reproducir de alto a bajo tone(passiveBuzPin, 20*i, noteDuration); delay(pauseBetweenNotes); } } delay(500); tone(passiveBuzPin, 500, 200); delay(200); tone(passiveBuzPin, 1200, 200); delay(200); tone(passiveBuzPin, 300, 200); delay(200); tone(passiveBuzPin, 1000, 200); delay(200); tone(passiveBuzPin, 400, 200); delay(200); tone(passiveBuzPin, 1100, 200); delay(200); } else { numero; } if (numero == 1000) //Si el numero es igual a 1000 { numero = 0; //Reinicia a 0 } } int ver(int entrada, int habilitar) //Recibe el dato entrada (de 0 - 9) y elige el display a usar { digitalWrite(limpiar,LOW); //El registro de desplazamiento inicia en 0 digitalWrite(limpiar,HIGH);//Habilite el registro de desplazamiento para ingresa datos digitalWrite(hab1,HIGH); //Inicia el display 1 apagado digitalWrite(hab2,HIGH); //Inicia el display 2 apagado digitalWrite(hab3,HIGH); //Inicia el display 2 apagado for(int i=0;i<=7;i++) //Para que los segementos se enciendan de 0 a 7 { if (num[entrada][i]==1) //Hace barrido en la toda la fila (entrada) por cada columna (i) { digitalWrite(dato,HIGH);//Si el dato en la columna es = 1 enciendalo } else { digitalWrite(dato,LOW);//Si no, mantengalo apagado } digitalWrite(reloj,HIGH);//Generamos un pulso de reloj para que avance el binario digitalWrite(reloj,LOW); //Finaliza el pulso de reloj } digitalWrite(habilitar,LOW); //Habiendo generado el dato de desplazamiento, encienda el display } int multiples(int number) //En la funcion ingresa un numero de 0 a 99 { if (number < 10) //Si el numero es menor a 10 { visualizacion(0, 0, number); //Muestre dos ceros a la izquierda y el numero (centena, decena y unidad) } else { visualizacion(floor(number/100),floor(number/10),number-(10*floor(number/10))); //Decenas y unidades a mostrar, floor redondea al entero menor } if (number < 100) //Si el numero es menor a 100 { visualizacion(0, floor(number/10), number); //Muestre dos ceros a la izquierda y el numero (centena, decena y unidad) } else { visualizacion(floor(number/100),floor((number-(100*floor(number/100)))/10),number-(10*floor(number/10))); //Decenas y unidades a mostrar, floor redondea al entero menor } } int visualizacion(int uno, int dos, int tres) { for (int i = 0; i <= 1; i++) { ver(uno, hab1); delay(1); ver(dos, hab2); delay(1); ver(tres, hab3); delay(1); } }
Debido a que no es posible obtener una IP publica del colegio IED Restrepo Millán debido a que el área networking y de seguridad se encuentra tercerizada para poder publicar un sitio web que nos permita consultar la información obtenida por la Canasta Recicladora Inteligente, procedemos a realizar una tarea programada y un script con el fin de poder exportar la base de datos a un hosting.
Se crea una cuenta crigiss@gmail.com con el fin de crear un canal en YouTube para subir las evidencias obtenidas en todo el proceso igualmente se usa la cuenta para usar el hosting de Google
Drive se descargan y se consultan los datos en el siguiente enlace:
FASE IV
IMPLEMENTACIÓN Y ANÁLISIS
DE RESULTADOS
Pasados los 1 día tras la implementación se evidencia que se supera la capacidad de la canasta en almacenamiento y unidades.
Se realiza una segunda recolección y se recopilan los datos, se analizan y se grafican se puede evidenciar que la recolección de PET es incremental en el paso del tiempo.
CONCLUSIONES Y RECOMENDACIONES
Definimos conclusiones de cada fase de la elaboración del proyecto tomando como referencia el objetivo general y los objetivos específicos.
Diseño del prototipo
Pruebas y selección de componentes
Construcción del prototipo
Implementación y análisis de resultados
Definimos recomendaciones de cada fase de la elaboración del proyecto tomando como referencia el objetivo general y los objetivos específicos.
Diseño del prototipo
Pruebas y selección de componentes
Construcción del prototipo
Implementación y análisis de resultados
CONSTRUCCIÓN PASO A PASO
Explicación de paso a paso por parte de los creadores del proyecto "Reciclaje de PET a través de una solución IoT de Canasta Recicladora Inteligente" con el fin de poder profundizar en el tema de la construcción del prototipo.
ANEXOS
En el siguiente enlace pueden acceder a el inventario de materiales, costos, diseño de planos y código fuente del proyecto.
ANEXOS CANASTA RECICLADORA INTELIGENTE
AGRADECIMIENTOS
Con un profundo agradecimiento a la ingeniera Albenis Cortes y a el Ex director de la Dirección de Ciencias, Tecnologías y Medios educativos de la SED, por el apoyo en todas las etapas de la elaboración de este proyecto, a la facultad de Ingeniería de la Universidad Unipanamericana por proporcionar el conocimiento durante toda la carrera para poder llevar a cabo este proyecto.
Si quieres conocer mas del paso a paso de las validaciones previas puedes consultar nuestro canal de youtube dando clic aquí, podrás suscribirte y recibir la información del contenido que se vaya agregando de este proyecto
Si deseas conocer las fases de mejoras e implementación del sistema de voz y alertas tempranas da clic aquí