Proyecto

Antiatasco picadora Precious Plastic

Sistema antiatasco que permite invertir la dirección del motor para deshacer el atasco que puede producirse en la máquina picadora Precious Plastic.

Grupo Precious Plastic

Antiatasco picadora Precious Plastic

Dentro del flujo de trabajo del proyecto Precious Plastic que estamos intentando replicar en Medialab, uno de los elementos principales es la picadora, máquina con la que podemos triturar diferentes plásticos para obtener tronza y así iniciar el proceso de reciclado. Una vez terminada la construcción de la máquina e iniciadas las pruebas, en seguida empezamos a ver las limitaciones del conjunto motor-reductora-transmisión del que disponíamos, y cómo con piezas muy robustas o mucha cantidad de material la máquina se atascaba, y con ello llegamos incluso a romper un acople de la transmisión. Pensando en una solución, a Carlos se le ocurrió un sistema de detección de avance del eje de la picadora, que en el caso de detectar que ha dejado de avanzar, parase el motor. Y ya puestos y teniendo los componentes necesarios, un sistema que permita invertir la dirección del motor unos segundos para deshacer el atasco, y luego vuelva a avanzar para continuar picando, todo basado en Arduino por supuesto. Pues manos a la obra.

Paso a paso

  • Arduino UNO
  • Placa de relés arduino (4)
  • 2x Contactores (Tipo 18A 380V, WEG CWB18 o de este tipo)
  • Magnetotérmico motor (Tipo WEG RW17D o de este tipo)
  • 2x Pulsadores 380V
  • Interruptor 380V
  • Sensor óptico «endstop»
  • Pieza impresa en 3D

Hay que imprimir la pieza en 3D del encoder. El archivo FreeCAD está disponible en thingiverse. Dentro del diseño FreeCAD, hay una hoja de cálculo donde podremos adaptar el diámetro del eje y el diámetro de la rueda a nuestras necesidades. Como la pieza no va a hacer ninguna fuerza, se puede imprimir con un par de perímetros y poco relleno (10-15%).

Se debe de conectar todo el sistema usando el esquema a continuación. Hay que tener en cuenta que estamos usando corriente trifásica de 380V y bastante corriente, por lo tanto usar cable de sección suficiente (2.5 o 3.5). Idealmente crimpar todas las conexiones con terminales. Para sacar los 12V del arduino se puede conectar un transformador normal a una de las fases de la entrada.

// Precious Plastics Shredder anticlog system
// (C) Carlos Garcia "Txakurrakuka" & Hirikilabs
//
// This program is free software: you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation, either version 3
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.
// If not, see <http://www.gnu.org/licenses/>.


#define RELE1PIN    8
#define RELE2PIN    9
#define RELE3PIN    10
#define SENSORPIN   4

int main_counter = 0;
int encoder_value = 1;
int encoder_counter = 1;
int change = 0;

void setup() {
    // init peripherals
    Serial.begin(9600);
    // GPIO
    pinMode(SENSORPIN, INPUT);
    pinMode(RELE1PIN, OUTPUT);
    pinMode(RELE2PIN, OUTPUT);
    pinMode(RELE3PIN, OUTPUT);
    
    digitalWrite(RELE1PIN, HIGH);
    digitalWrite(RELE2PIN, HIGH);
    digitalWrite(RELE3PIN, HIGH);
}

void loop() {
    // read encoder
    encoder_value = digitalRead(SENSORPIN);
    
    // check if we are advancing
    if (encoder_value == 1 && change == 0) {
        encoder_counter++;
        change = 1;
    }
    
    // yes, we are, reset counter
    if (encoder_value == 0 && change == 1) {
        main_counter = 0;
        change = 0;
    }
    
    // increment
    main_counter++;
    
    // if counter is big enough, we are not advancing, unclog
    if (main_counter == 20) {
        // turn off motor
        digitalWrite(RELE1PIN, LOW);
        delay(100);
        digitalWrite(RELE1PIN, HIGH);
        Serial.println("MOTOR STOPPED");
        delay(1000);
        
        // turn motor backwards
        digitalWrite(RELE2PIN, LOW);
        delay(100);
        digitalWrite(RELE2PIN, HIGH);
        Serial.println("MOTOR BACKWARDS");
        delay(1000);
        
        // turn off motor
        digitalWrite(RELE1PIN, LOW);
        delay(100);
        digitalWrite(RELE1PIN, HIGH);
        Serial.println("MOTOR STOPPED");
        delay(1000);
        
        // turn motor forward
        digitalWrite(RELE3PIN, LOW);
        delay(100);
        digitalWrite(RELE3PIN, HIGH);
        Serial.println("MOTOR FORWARD");
        delay(1000);
    }
    
    // reset counter
    if (encoder_counter == 25) {
        encoder_counter = 0;
    }
}