102 lines
2.8 KiB
Matlab
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
|
|
|