Tradutor

terça-feira, 17 de abril de 2018

Construindo uma Extrusora de Filamento - Fase 2 - Parte 1

Olá pessoal,
Neste post começo a montagem da segunda parte do projecto extrusora de filamento, esta segunda fase trata de resfriar, medir e enrolar o filamento de maneira que o mesmo se mantenha em 1,75mm e seja enrolado no rolo de filamento.

Ao longo deste post irei detalhar a montagem de cada uma das partes. Como primeira parte vou fazer o bobinador de filamento (equipamento que irá enrolar o filamento de maneira uniforme).

Ainda estou escrevendo o detalhamento deste post, porem gostaria já de compartilhar com vocês os vídeo e o código fonte do bobinador enquanto o texto não fica pronto.

Montagem mecânica:
Segue lista de componentes para montagem mecânica:
2- Flange com rosca de 3/4 PVC
2- Capas (tampão) com rosca 3/4
1- Rosca infinita 5/16 polegada
2- Porcas 5/16 polegada (https://amzn.to/2zrRl4X)
6- Parafuso 5/32 polegada (https://amzn.to/352tbcI)
6- Porcas 5/32 polegada (https://amzn.to/2Vxmf4t)
20- Arruela 5/32 polegada
1- Mola
1- Tubo rosqueado de 3/4 polegada
Madeiras
4- Parafusos com ponta

Vídeo da parte mecânica.


Parte eletrônica:
Nesta parte usamos o arduino para obter as medidas do sensor ultra som, medindo quanto de filamente já existe no rolo e com isso ajustar a velocidade do motor que gira a bobina.

Componentes eletrônicos:
1- Sensor de ultra som
1- Servo motor G9 (https://amzn.to/2XZ9pxn)
1- Motor DC 12v (https://amzn.to/2zimsQb)
1- Driver IR590

Vídeo da parte eletrônica e teste final.

Código Fonte:
Abaixo segue o código fonte usando no arduino:
//Projeto Extrusora de filamento fase 2
//www.eletronicaparatodos.com.br
#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

//Variáveis do Servo
int posicao = 45;    // variable to store the servo position
int direcao = 1;    // 1= direita para esquerda; 0 = esquerda para direita;
int velocidade = 5; // Velocidade de varredura de rotacao do servo.

//Variáveis do ultra son
int echoPin = 3; // Declara variavel Echo do ultrason no pino 7
int trigPin = 2; // Declara variavel Trig no pino 6
int distancia = 0; // Declara variavel\ que mede distancia

//Variaveis Motor DC
// motor A
int s1Pin = 6;
int i = 255;
int distancia2 = 0;

void setup() {
  //Setup Servo
  myservo.attach(5);  // attaches the servo on pin 5 to the servo object
  //Setup Comunicação Sereal
  Serial.begin (9600); // Define comunicaçao
  //Setup UltraSon
  pinMode(trigPin, OUTPUT); // Define Trig como saida
  pinMode(echoPin, INPUT); // Define Echo como entrada para ler a resposta do som
  //Setup Motor DC
  pinMode(s1Pin, OUTPUT);

}

void loop() {
// Aciona motor DC
distancia = motordc(distancia);

//Efetua leitura com o ultrason em CM
  distancia = ultrason();
  Serial.print(distancia);    // Imprimir distancia encontrada pelo ultra Som
  Serial.println(" cm");
 
//Movimenta a Servo
  posicao = posfilamento(posicao, velocidade);
//  Serial.print(posicao);
//  Serial.println(" posicao");
//  Serial.print(direcao);
//  Serial.println(" Direcao");
 
  delay(500); // define tempo de execução do loop.
}

int ultrason(){
  int duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(20);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(20);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  cm = duration / 29 / 2;
/* Sound velocity=29cm/microsec, then divide by 2 because of the return time */
  return cm;
}

int posfilamento(int pos, int vel){
if (direcao==1){ //Vai da esquerda para a direita
  if (pos == 45) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    pos = pos + 1;
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    direcao = 0;                    // muda de lado
  }else {
    pos = pos - 1;
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    direcao = 1;
    }
}else{                                  // Direcao - 1
  if (pos == 135) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    pos = pos - 1;
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    direcao = 1;                    // muda de lado
  }else {
    pos = pos + 1;
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    direcao = 0;
    }
  }
  //Serial.print(pos);
  //Serial.println(" pos");
  return pos;
  delay(vel);                       // velocidade de movimentaçao do servo.
}

int motordc(int distancia){  // De acordo com a distancia medida pelo ultra som se define a velocidade do motor DC.
  //Vale lembrar que este código ainda tem que ser melhorado e refinado.
  if (distancia2 != distancia){
    if (distancia2 < distancia){
          i = i + 50;
          if (i >= 255){
            i = 255;
          }
          analogWrite(s1Pin, i);
          distancia2 = distancia;
    }else{
          i = i - 50;
          if (i <= 0){
            i=0;
          }
          analogWrite(s1Pin, i);
          distancia2 = distancia;
    }
  }else {
    analogWrite(s1Pin, i);
    distancia2 = distancia;
  }
  Serial.print(i);    // Imprimir distancia encontrada pelo ultra Som
  Serial.println(" i");
//  for (i = 0; i < 255; i +=10) {
//    analogWrite(s1Pin, i);
//    delay(500);
//  }
  return distancia2;
}



No próximo post vou mostra a parte que traciona o filamente e com isso ajusta seu diâmetro.