Lab Sprint 16-17 Janeiro de 2010

Projectos

Machinimakers CNC

Responsável: Ricardo Lobo

Equipa: Alan Fachini, Dino Magri, Pedro Ângelo, Tiago Serra

Objectivo: Montar a estrutura física da CNC dos Machinimakers (plataforma, eixos, motores)

A plataforma dos Machinimakers pretende ser um conjunto de meios de produção que resolve os problemas de fabricação dos laboratórios AZ. A máquina CNC é um primeiro passo de investigação neste campo e pretende resolver alguns problemas práticos como a gravação de PCBs, corte de stencils e prototipagem.

A nossa base de trabalho será provavelmente uma versão caseira e modificada do Contraptor

Brainstorming, funcionalidades da CNC, como vamos fazer:

  • Portátil
  • Modular, pode-se alterar facilmente suas funções
  • Estrutura baseada nos diagramas do projeto Contraptor
  • Uso de protocólos e formatos de arquivos abertos

Referências:

Construção do projeto:

O Sprint teve por objetivo estudar o funcionamento de CNCs e montar um protótipo a partir de material retirado de sucatas, equipamentos eletrônicos que foram considerados lixo. Consideramos interessante seguir o modelo de funcionamento do projeto dos Machines That Make adaptando o seu design de acordo com o material que tínhamos disponíveis no laboratório.

Neste primeiro encontro conseguimos deixar o equipamento funcionando a partir do controle de um joystick e planejamos para o próximo passo adicionar sensores de fim de curso e escrever um firmware capaz de interpretar gcode ou gml para que a máquina seja capaz de realizar desenhos 2D e criar PCBs.

Para o eixo que movimenta a mesa reaproveitamos a estrutura de uma impressora Epson Stylus Color 1520, e o eixo secundário onde está ligada a caneta a estrutura de uma Stylus Color C62. Foi quase como pegar kits prontos do lixo, apenas algumas modificações e adição de estruturas de madeira e o protótipo estava pronto!

Ideias para próximos sprints:

  • Fabricar um kit estrutural Contraptor e usá-lo para a nova versão da CNC.
  • Testar os motores para identificar os seus parâmetros (numero de passos, velocidade, torque, tempo de passo)
  • Calibrar os drivers dos motores para optimizar a sua função (wiring, voltagem, corrente, ordem dos impulsos, tempos de passo)
  • Calibrar a distância entre eixos, determinar a distância de viagem, montar endstops.
  • Adicionar um eixo novo para controlar a posição da cabeça de corte/desenho
  • Criar um tool-changer
  • Substituir o software de controlo por uma versão adaptada do interpretador de GCode da RepRap, ou testar o EMC2 (requer drivers novos para os motores)

Arquivos: sprint_cnc.zip

Software em PD para ler os dados do Joystick e enviar via porta USB para o Arduino:

Firmware para o Arduino:

int wire1 = 4;
int wire2 = 5; 
int wire3 = 6;
int wire4 = 7; 
int wire5 = 8; 
int wire6 = 9; 
int wire7 = 10;
int wire8 = 11;
 
void setup() {
  Serial.begin(9600);
  pinMode(wire1, OUTPUT);     
  pinMode(wire2, OUTPUT);     
  pinMode(wire3, OUTPUT);      
  pinMode(wire4, OUTPUT);      
  pinMode(wire5, OUTPUT);      
  pinMode(wire6, OUTPUT);      
  pinMode(wire7, OUTPUT);  
  pinMode(wire8, OUTPUT); 
}
 
void loop() {
  int dir;
 
  if(Serial.available() > 0) {
    dir = (int)Serial.read();     
  }
 
  if(dir == 1) {
    stepEixoH4();
    delay(2);
    stepEixoH3();
    delay(2);
    stepEixoH2();
    delay(2);
    stepEixoH1();
    delay(2);
  }
  else if (dir == 2) {
    stepEixoH1();
    delay(2);
    stepEixoH2();
    delay(2);
    stepEixoH3();
    delay(2);
    stepEixoH4();
    delay(2);
  }
  else if(dir == 3) {
    stepEixoV4();
    delay(10);
    stepEixoV3();
    delay(10);
    stepEixoV2();
    delay(10); 
    stepEixoV1();
    delay(10);
  }
  else if(dir == 4) {
    stepEixoV1();
    delay(10);
    stepEixoV2();
    delay(10);
    stepEixoV3();
    delay(10);
    stepEixoV4();
    delay(10);
  }
}
 
void stepEixoH1(){
  digitalWrite(wire1, HIGH);
  digitalWrite(wire2, LOW);
  digitalWrite(wire3, HIGH);
  digitalWrite(wire4, LOW);
}
 
void stepEixoH2(){
  digitalWrite(wire1, LOW);
  digitalWrite(wire2, HIGH);
  digitalWrite(wire3, HIGH);
  digitalWrite(wire4, LOW);
}
 
void stepEixoH3(){
  digitalWrite(wire1, LOW);
  digitalWrite(wire2, HIGH);
  digitalWrite(wire3, LOW);
  digitalWrite(wire4, HIGH);
} 
 
void stepEixoH4(){
  digitalWrite(wire1, HIGH);
  digitalWrite(wire2, LOW);
  digitalWrite(wire3, LOW);
  digitalWrite(wire4, HIGH);
}
 
void stepEixoV1(){
  digitalWrite(wire5, HIGH);
  digitalWrite(wire6, LOW);
  digitalWrite(wire7, HIGH);
  digitalWrite(wire8, LOW);
}
 
void stepEixoV2(){
  digitalWrite(wire5, LOW);
  digitalWrite(wire6, HIGH);
  digitalWrite(wire7, HIGH);
  digitalWrite(wire8, LOW);
}
 
void stepEixoV3(){
  digitalWrite(wire5, LOW);
  digitalWrite(wire6, HIGH);
  digitalWrite(wire7, LOW);
  digitalWrite(wire8, HIGH);
}
 
void stepEixoV4(){
  digitalWrite(wire5, HIGH);
  digitalWrite(wire6, LOW);
  digitalWrite(wire7, LOW);
  digitalWrite(wire8, HIGH);
}
 
public/labs/events/sprints/jan-2010/start.txt · Last modified: 2010/01/17 20:54 by Pedro Ângelo
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki