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:
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:
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); }