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.