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- Arduino (https://amzn.to/2VyRNXq)
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:
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.
//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.
e ai amigo estou querendo ver a parte final da extrusora pronta
ResponderExcluirola Andre, tudo bem?
ExcluirNo momento o projeto da fase 2 da extrusora está parado, porque estou montando uma impressora 3d baixo custo para poder testar os filamentos gerados por ela. Muito em breve voltarei com esse projeto.
Aproveite para olhar este novo projeto que chamo projeto Dolly (em breve colocarei posts no blog).
https://youtu.be/ESnM_Bf7zaE
Abc
Boa tarde amigo, qual seria o tamanho da bobina que você está utilizando?
ResponderExcluirElas são de tamanho padrão? Estou com uma bobina de impressora 3D para esse projeto, é essa que devo utilizar mesmo?
Correto, é tamanho padrão.
ResponderExcluirObrigada pela resposta! Apenas mais uma duvida... Vi no ultimo vídeo que a velocidade que ele puxou o fio foi bem rápida, mas que essa velocidade é regulável, nesse caso da pra deixar ela realmente bem lenta pra não alterar o diâmetro do filamento?
ExcluirEstou curiosa quanto ao resultado desse projeto, tem pretensão de finaliza-lo?
Exato, tudo depende da velocidade de saida do plastico e da bobina. Precisam estar sincronizados se a bobina estiver mais rapida o fio fica mais fino, se a bobina estiver mais lenta o fio fica mais grosso. Pode tentar fazer com arduino, mas o processo e de tentativa e erro.
ResponderExcluir