Files
foam-cutter/Software_folder/Foamcutter_demo.m

102 lines
2.8 KiB
Matlab

function Foamcutter_demo
%
% Forrit sem býr til G-kóða fyrir frauðplastskera sem staðsettur
% er í vindgangarými Háskólans í Reykjavík.
% Úttaksbreyta: G-kóði sem skrifaður er í skránna 'filename.gcode'
% Höfundur: ISR, Háskólinn í Reykjavík, Vor 2013
% Þessi kóði gerir ráð fyrir að hlutur hafi eins lögun í sitt hvorum enda
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
clear all
% Nafn úttaksskráar. Endingin skal vera .gcode.
filename='test.gcode';
%
%Upphafsstaða
x0 = 0;
y0 = 0;
% Skali sem skalar mm yfir í færslueiningar frauðplastskera
skali = 8.889;
ns=40; %fjöldi skrefa í ferli
x(1) = x0; %Fyrsti punktur í ferli er upphafsstaða
y(1) = y0;
% Allir punktar í ferli eru reiknaðir út og skrifaðir í réttri röð
% inn í vektorana x og y. Punktarnir verða að vera í sömu röð og
% skerinn á að skera því annars kemur stökk í skurðinn.
% Hér er formúlur fyrir ferilinn. Þessu þarf að breyta ef á að skera út
% annað form.
h = 100; %tölur sem ákvarða stærð á demohlut
b = 50; % Þvermál boga
ii = 1;
% teiknar beina línu í ns skrefum
lina(x(1),y(1),-b/2,h,ns);
%teiknar hálfhring í ns skrefum með miðju í (0,h) og radíus b/2
bogi(x(ii),y(ii),0,h,pi,-1,ns);
% teiknar aðra beina línu í ns skrefum
lina(x(ii),y(ii),x0,y0,ns);
%Ferill plottaður skoðið vel hvort hann hefur rétt form áður en
% G-kóðinn er keyrður á kutterinn.
plot(x,y,'r')
axis equal
grid on
hold off
l = length(x);
% GCODE táknbreytir -> breytir línuvigrum í færslulínur G-kóða.
% Fyrst er vigrum breytt úr staðsetningarvigrum yfir í færsuvigra
% í færslueiningum frauðplastskera.
for i=1:l-1
xx(i)=(x(i+1)-x(i))*skali;
yy(i)=(y(i+1)-y(i))*skali;
end
%Svo er skráin opnuð
fid=fopen(filename,'wt');
%Og g-kóðinn skrifaður í hana
% Upphafspunktur ath. að x - y hliðin hefur viðsnúin y ás
fprintf(fid,['G1 X' num2str(x0*skali) ' Y' num2str(-y0*skali) ' F2000\n']);
fprintf(fid,['G1 A' num2str(x0*skali) ' B' num2str(y0*skali) ' F2000\n']);
% Ferill
for i=1: l-1
fprintf(fid,['G1 X' num2str(xx(i)) ' Y' num2str(-yy(i)) ' F2000\n']);
fprintf(fid,['G1 A' num2str(xx(i)) ' B' num2str(yy(i)) ' F2000\n']);
end
%Setur skerhausa aftur í núllpunkt
fprintf(fid,['G1 X' num2str(-x0*skali) ' Y' num2str(y0*skali) ' F2000\n']);
fprintf(fid,['G1 A' num2str(-x0*skali) ' B' num2str(-y0*skali) ' F2000\n']);
% föll til að teikna línur og boga
function lina(x1,y1,x2,y2,n)
dx = (x2 -x1)/n;
dy = (y2 - y1)/n; %Færsluhnit
for i = 1:n
ii = ii+1;
x(ii)=x1 + dx*i;
y(ii)=y1 + dy*i;
end
end
function bogi(x1,y1,x0,y0,horn,k,n)
r = sqrt((x1-x0)^2+(y1-y0)^2);
fi = atan2((y1-y0),(x1-x0));
for i = 1:n
ii = ii+1;
theta = k*i*horn/n;
x(ii) = x0 + r*cos(theta+fi);
y(ii) = y0+r*sin(theta+fi);
end
end
end