3D Printed Record (3 / 8 steg)
Steg 3: Första tester
TESTA EN:
Mitt första test-posten hade 72 spår på den, skärmdumpar av modellen visas i figurerna 2 till 6 testade jag två frekvenser av sinusvågor:
1000 cykler per varv = 555Hz vid 33 RPM
500 cykler per varv = 277Hz vid 33 RPM
Jag testade några olika amplituder, djup och groove bredder för dessa frekvenser och gav varje groove en konstant avfasning storlek på 2px på varje sida (du kan se i fig 5 hur kanterna på spåret flare utåt). Jag skrev ut posten i Objets Vero klart material, detta material är en ganska hårt, tydliga harts. Jag skrev ut filen med inställningen "smidig" för att förhindra att stödmaterial avsätts i spåren. Tyvärr när jag var redo att göra denna utskrift hade vi vissa problem med makt i vår butik, så jag var tvungen att använda en annan Objet maskin som inte var inställd för högupplöst utskrift; det bästa jag kunde göra var 300DPI X / Y-upplösning med 30um Z steg. Detta är halva upplösning att var och en av dessa axlar är kapabel av, vilket innebär Skriv ut kom ut (1/2)3eller 1/8th resolution övergripande. Resultaten visas i videon nedan (spåren var inte djupt nog att hålla nålen inne, så jag var tvungen att hålla i det förlägger med min hand). Posten var också lite stor för min skivspelare, jag minskade diametern på min STL-fil till 11,8" i senare versioner.
I denna video kan du höra en periodisk frekvens sopa ovanpå den stadig sinuskurva (bästa hört w hörlurar). Denna svepande ljud orsakas av nålen rör sig över tusentals små parallella knölar i tryck orsakas av intilliggande skrivhuvuden på Objet maskinen. Detta buller är oundvikliga, men öka styrkan på signalen kommer att bidra till att göra det mindre märkbar.
Bearbetning skissen som genererade posten ges nedan:
sine tester
av Amanda Ghassaei
Dec 2012
/*
* Detta program är fri programvara; Du kan vidaredistribuera det och/eller ändra
* det enligt villkoren i GNU General Public License som offentliggjorts av
* den Free Software Foundation; antingen version 3 av licensen, eller
* (på ditt alternativ) någon senare version.
*/
import processing.opengl.*;
import unlekker.util.*;
import unlekker.modelbuilder.*;
import ec.util.*;
UVertexList recordPerimeterUpper, recordPerimeterLower, recordHoleUpper, recordHoleLower, //storage för omkrets och centrum hål för posten
UVertexList lastEdge; //storage för conecting en groove till nästa
UGeometry geo, //storage för stl geometri
variabler
float theta; //angle variabel
flyta thetaIter = 10000; //how många värden av theta per cykel
float radie; //variable att beräkna radien av spår
int diameter = 12. //diameter av post i tum
flyta innerHole = 0.286;//diameter av centrumhål i tum
flyta innerRad = 2.35;//radius av innersta spår i tum
flyta outerRad = 5.75;//radius av yttersta groove i tum
flyta grooveSpacing = 20; //pixel avståndet mellan spåren
float avfasning = 2. //pixel bredd för groove avfasning
spela in parametrar
flyta recordHeight = 0.08;//height för posten i tum
int recordBottom = 0; //height av botten av post
parametrar för att testa
flyta amplitud [] = {2,4,8}; //in enheter av 16 micron steg (kom ihåg detta är amplituden av sinus våg, den totala vert förskjutningen kommer att vara två gånger denna)
int frekvens [] = {1000,500,0}; //cycles per rotation
flyta djup [] = {0.5,1,0};//how många 16 mikrometer steg under ytan av posten för att skriva ut den översta punkten i spåret
flyta grooveWidth [] = {1,2,3}. //in 600 dpi pixlar
flyta incrNum = TWO_PI/thetaIter; //calculcate inrementation belopp
int grooveNum = 0; //variable för att hålla reda på hur lång tid detta tar
void setup() {//everything som körs i denna skiss finns i setup()
Geo = nya UGeometry (); //place att lagra geometery för verticies
setUpVariables (); //convert enheter, initiera etc
setUpRecordShape (); //draw grundform av posten
drawGrooves (); //draw i spår
geo.writeSTL (här, "test.stl");//write stl-fil från linlär
}
void setUpVariables() {
omvandla allt till inches
flyta micronsPerInch = 25400; //scalingfactor
float dpi = 600;
byte micronsPerLayer = 16. //microns per vertikal utskrift lager
grooveSpacing = dpi;
Kantskär / = dpi;
för (byte jag = 0; jag < 3; i ++) {
amplitud [i] = amplituden [i] * micronsPerLayer/micronsPerInch;
djup [i] = djup [i] * micronsPerLayer/micronsPerInch;
grooveWidth [i] = dpi;
}
}
void setUpRecordShape() {
ställa in lagring
recordPerimeterUpper = ny UVertexList();
recordPerimeterLower = ny UVertexList();
recordHoleUpper = ny UVertexList();
recordHoleLower = ny UVertexList();
få verticies
för (theta = 0; theta < TWO_PI; theta += incrNum) {
yttre kanten av posten
flyta perimeterX = diameter/2+diameter/2*cos(theta);
flyta perimeterY = diameter/2+diameter/2*sin(theta);
recordPerimeterUpper.add(perimeterX,perimeterY,recordHeight);
recordPerimeterLower.add(perimeterX,perimeterY,recordBottom);
centrumhål
flyta centerHoleX = diameter/2+innerHole/2*cos(theta);
flyta centerHoleY = diameter/2+innerHole/2*sin(theta);
recordHoleUpper.add(centerHoleX,centerHoleY,recordHeight);
recordHoleLower.add(centerHoleX,centerHoleY,recordBottom);
}
nära vertex listor (slutna slingor)
recordPerimeterUpper.close();
recordPerimeterLower.close();
recordHoleUpper.close();
recordHoleLower.close();
ansluta verticies
geo.quadStrip(recordHoleUpper,recordHoleLower);
geo.quadStrip(recordHoleLower,recordPerimeterLower);
geo.quadStrip(recordPerimeterLower,recordPerimeterUpper);
för att starta, är yttre kanten av post den sista egde vi måste ansluta till med yttersta räffla
lastEdge = ny UVertexList();
lastEdge.add(recordPerimeterUpper);
println ("post dras, start fåror");
grooveNum = 0; //variable för att hålla reda på hur mycket längre det kommer att ta
}
void drawGrooves() {
UVertexList grooveOuterUpper, grooveOuterLower, grooveInnerUpper, grooveInnerLower; //groove verticies
ställa in lagring
grooveOuterUpper = ny UVertexList();
grooveOuterLower = ny UVertexList();
grooveInnerUpper = ny UVertexList();
grooveInnerLower = ny UVertexList();
DRA SPÅR
radie = outerRad; //outermost radie (på 5,75") att starta
för (byte frequencyIndex = 0; frequencyIndex < 2; frequencyIndex ++) {
för (byte amplitudeIndex = 0; amplitudeIndex < 3; amplitudeIndex ++) {
för (byte grooveDepthIndex = 0; grooveDepthIndex < 2; grooveDepthIndex ++) {
för (byte grooveWidthIndex = 0; grooveWidthIndex < 3; grooveWidthIndex ++) {
för (byte kopior = 0; kopior < 2; kopior ++) {
Rensa listor
grooveOuterUpper.reset();
grooveOuterLower.reset();
grooveInnerUpper.reset();
grooveInnerLower.reset();
för (theta = 0; theta < TWO_PI; theta += incrNum) {//for theta mellan 0 och 2pi
flyta sineTheta = sin(theta);
flyta cosineTheta = cos(theta);
beräkna höjden av groove
flyta grooveHeight = recordHeight-depth[grooveDepthIndex]-amplitude[amplitudeIndex]+amplitude[amplitudeIndex]*sin(theta*frequency[frequencyIndex]);
grooveOuterUpper.add((diameter/2+(radius+bevel)*cosineTheta),(diameter/2+(radius+bevel)*sineTheta),recordHeight);
grooveOuterLower.add((diameter/2+radius*cosineTheta),(diameter/2+radius*sineTheta),grooveHeight);
grooveInnerLower.add((diameter/2+(radius-grooveWidth[grooveWidthIndex])*cosineTheta),(diameter/2+(radius-grooveWidth[grooveWidthIndex])*sineTheta),grooveHeight);
grooveInnerUpper.add((diameter/2+(radius-grooveWidth[grooveWidthIndex]-bevel)*cosineTheta),(diameter/2+(radius-grooveWidth[grooveWidthIndex]-bevel)*sineTheta),recordHeight);
}
nära vertex listor (slutna slingor)
grooveOuterUpper.close();
grooveOuterLower.close();
grooveInnerUpper.close();
grooveInnerLower.close();
ansluta verticies
geo.quadStrip(lastEdge,grooveOuterUpper);
geo.quadStrip(grooveOuterUpper,grooveOuterLower);
geo.quadStrip(grooveOuterLower,grooveInnerLower);
geo.quadStrip(grooveInnerLower,grooveInnerUpper);
Ange nya sista kanten
lastEdge.reset (); //clear gamla data
lastEdge.add(grooveInnerUpper);
RADIUS--= grooveSpacing + grooveWidth [grooveWidthIndex]; //set nästa radie
berätta för mig hur mycket längre
grooveNum ++;
Print(grooveNum);
println ("av 72 spår dras");
}
radie-= 2 * grooveSpacing; //extra avstånd
}
radie-= 2 * grooveSpacing; //extra avstånd
}
radie-= 2 * grooveSpacing; //extra avstånd
}
radie-= 2 * grooveSpacing; //extra avstånd
}
geo.quadStrip (lastEdge, recordHoleUpper); //close återstående utrymmet mellan sista groove och centrumhål
}
TESTAR TVÅ:
I min nästa test jag gjorde post med 108 räfflar, fortfarande sinustoner, men den här gången jag gjort spåren djupare, öka avfasning av varje spår till lika halv amplituden av sinus våg och försökte ut tre olika frekvenser: 555hz, 277hz och 139hz (1000, 500, och 250 cykler per varv på 33,3 rpm). Jag har också testat olika amplituder (4, 8 och 16 steg), groove djup (2 och 3 steg under toppen av posten) och groove bredder (1, 2 och 3 pixlar). Sedan vår butik kom tillbaka online, jag bytte skrivare och börjat skrivas ut med Objets Vero White material, som liknar Vero klart i konsistensen, men (som du kanske bild) är en genomskinlig vit färg. Denna gången var jag äntligen möjlighet att skriva ut med i full 16 micron och 600 dpi upplösning skrivaren. Här är en video av resultaten:
TESTA TRE:
I min tredje test ökat jag upplösningen av min stl-fil att testa ut några högre frekvens sine vågor. Jag använde 22000 poäng per varv för att dra ut sinusvågor (i motsats till 10000 i mina tidigare tester), detta sätter mig på om max upplösning jag kan få med 600 dpi (beräknat i det sista steget). Jag testade tre frekvenser: 1110hz, 832hz och 694hz (2000, 1500 och 1250 gånger per varv på 33,3 rpm). Jag har också testat olika amplituder (12 och 16 steg) och groove bredder (2 och 3 px). Här är videon:
RESULTAT:
I slutet av alla dessa tester jag lärde mig några saker om 3d utskrift poster med Objet:
Groove djup min av 48um under övre av post - jag hittade att spår som höll vågformen på minst 48um (eller 3 16 micron steg) under toppen av posten höll nålen på plats samtidigt som spelas. Detta var sant för alla frekvenser som jag testat.
Groove bredd 2px - vid lägre frekvenser jag funnit att 2px spåren var mycket mindre bullriga än 1px, men jag hörde inte för mycket av en skillnad mellan 2 och 3px. Dock när jag testade igen med högre frekvenser (2000 cykler/varv) kunde jag höra mycket mer buller på 3px spåret än 2px.
Frekvensomfång - vid 22000 punkter per varv, jag lätt uppnås den övre gränsen för den mänskliga röstomfång (om 1.1 kHz). Teoretiskt Jag bör kunna återge frekvenser som motsvarar halva min samplingsfrekvens. Med en samplingsfrekvens på 12kHz (beräknat i det sista steget), är den högsta frekvensen kan jag teoretiskt uppnå 6kHz. Jag misstänker att rörelsen av den flytande Hartsen under härdningsprocessen kommer att hindra mig från att faktiskt uppnå dessa frekvenser, men om jag bara kan få in i 2kHz spänna det kommer fortfarande låter någorlunda bra. Baserat på tester jag har kört hittills, tror jag att detta är möjligt.
Dimensioner - även om det verkar som en 12" post bör mäta 12" i diameter, jag fann att utskrift på 12" gjorde posten något för stor för min skivspelare. Jag minskade diameter ner till 11,8" och det fungerade bra.
Maxstorlek ~ 300 MB - även om bearbetning är kapabel att producera mycket större filer, Objet programvara som körs skrivarna verkar endast hantera ca 300 MB av data på en gång. Det är möjligt att ökad RAM kan ta detta upp till 500mb, men denna fortfarande inte ger mig en massa utrymme att arbeta med. Även om detta är gott för normala CAD, upptäckte jag att jag skulle behöva vara mycket effektiva med hur jag packade data till STL för den slutliga versionen av min bearbetning skiss. Ett problem med min nuvarande skiss är det är har en konstant vinkelformigt samplingsfrekvens, detta innebär att samma mängd data för att beskriva ett spår på den yttre kanten av skivan och ett spår nära mitten av posten. Eftersom spåret i mitten av posten är mycket mindre det skulle en högre upplösning än den yttre groove, tyvärr, denna extra precision går till spillo eftersom skrivaren har konstant DPI över hela ytan av posten. Så småningom hoppas jag att minska kantiga provtagning inre spåren att spara lagringsutrymme och pack som mycket ljud i STL-fil som möjligt.