Sie sind auf Seite 1von 99

Solid freeform fabrication:

DIY, on the cheap,


and made of pure sugar

Windell H. Oskay &


Lenore M. Edman
Evil Mad Scientist Laboratories
www.evilmadscientist.com
Motivation:
“It would be fun to have a 3D printer...”
http://www.reprap.org/
(Bath University)

Open-source
fused-deposition fabber

-Extrudes melted plastic

“self-replicating”
(can make some of its
own parts)
Fab@home
http://fabathome.org/ (Cornell)

Open-source fabber

-Extrudes e.g., silicone

Available as a kit
Existing fabricators are great if...

You want to build small, high-precision


plastic parts,

and/or

Your company has lots of money to


spend on a nifty machine!
Design goals & principles

• Ultra-low cost 3D Fabricator


• Build size > resolution
• Low media costs
• Open source design
• Sidestep the patent minefield!
One solution:
Build objects out of melted sugar
Box with movable floor
(piston)
The Process
Sugar!

Hot air gun


Move hot air gun,
Selectively fuse sugar
Lower Bed
Add more sugar
Selectively fuse sugar
to layer below
Lower Bed
Add more sugar
Selectively fuse sugar
to layer below
Hot air gun
Lower Bed
(Etc.)
Grow objects,
layer by layer
Selective Hot Air Sintering And Melting
(SHASAM)

• Very low cost


• Low tech: easy and reliable
• Eye Safe
• No open flame
• Works with a variety of media
• Good acronym
Why Sugar?

• Seriously cheap!
• Safe, non-toxic, biodegradable
• Kid friendly.
• Tasty!
• Potentially good for casting
• Remarkably rigid, despite low melting point
• Smells great when it melts.
Building the CandyFab 4000
First victim: HP DraftPro pen plotter
(Future CandyFab X-axis)
Next victim: HP 7550A pen plotter
(Future CandyFab Y-axis)
3rd victim: 12 V Scissor Jack
(Future CandyFab Z-axis)
Build volume: 23” x 13” x 9” (!)
Electronic design

• 4-axis control: 3 motion + heater


• Custom AVR-based servo motor controls
• Use original quadrature-encoded servo
motors from HP plotters
• Using Make Controller as computer
interface (overkill!)
Control System: Big picture Goto X1,Y1,Z1,
Goto X2,Y2,Z2,
Goto...

3D model

Computer Hardware
interface

AVR Motor AVR Motor AVR Motor AVR Motor


Controller X Controller Y Controller Z Controller T

Locally-managed
closed-loop control
Microcontroller choice: AVR + GCC toolchain
• GNU tools for AVR are excellent, extremely well supported

• Easy GUI installers for Mac, Windows, full packages for Linux

Simplified view:

avr-gcc
avr-libc
uint16_t eepromWord __attribute__((section(".eeprom")));

int main (void) :100000000C9434000C9485000C944F000C944F0019


{
unsigned int FontWord, m, n;
! ! ! ! //16-bit unsigned integers
unsigned char hiByte;
uint8_t stringNo, stringNoCopy, i, altset, NoOfStrings;
! ! //8-bit unsigned integers :100010000C944F000C944F000C944F000C944F0024
uint8_t PA, PB,
PD;
! ! ! ! ! :100020000C944F000C944F000C944F000C944F0014
!
PGM_P p;
!
char buf[100];! ! ! ! //Set number of characters per string: this
eats most of the SRAM! :100030000C944F000C944F000C944F000C944F0004
! :100040000C944F000C944F000C944F000C944F00F4
//Initialization routine: Clear watchdog timer-- this can prevent several things from going wrong.
! !
MCUSR &= 0xF7;! ! //Clear WDRF Flag
WDTCSR
! = 0x18;! ! //Set stupid bits so we can clear timer...
WDTCSR
! = 0x00; :100050000C944F000C944F000C944F000C944F00E4
DIDR = 3U;
! ! ! //Disable analog comparator-- save power. :100060000C944F000C944F0011241FBECFEFD4E02E
#ifdef commonanode
! PORTA = 255U; :10007000DEBFCDBF11E0A0E0B1E0E0E1F6E002C0FC

binutils avrdude
! PORTB = 255U;
! PORTD = 255U; :1000800005900D92A030B107D9F711E0A0E0B1E0E2
#endif
!

//Init routine: Check to see if pin D4 is connected to ground. If it is, then we will use
// StringSet2 instead of StringSet1 as our list of valid strings. :1000900001C01D92A430B107E1F70C94CC000C9480
// In the default firmware, this is used to choose whether we should use the holiday phrases or not.
// How it's done: Configure pin D4 as an input, with pull-up resistor turned on. :1000A00000001092000110920101109202011092C2
// Then, read input value. If input is low, D4 has been pulled low by an external force.

DDRD &= ~_BV(PD4);


! ! // D4: Input :1000B000030152985A9A3D98459AE9E6F0E080810A
PORTD|= _BV(PD4);! ! // D4 High
:1000C0008160808380818D7F8083E89A7894089511
asm("nop");
! ! ! ! // Wait one cycle for input to be ready --
this is important.

:1000D000E89A0895882329F060E070E080E090E0DD
! altset = 0;
! NoOfStrings = NoOfStrings1; :1000E0000895609100017091010180910201909149
//Data direction register: DDRD
//Set all ports to output *EXCEPT* PA2 (not used) :1000F00003010895882341F44093000150930101C6
! DDRA = 3U;
! DDRB = 255U;! :10010000609302017093030108951F920F920FB63E
! DDRD = 127U;

//Turn all LEDs off to begin with: :100110000F9211242F933F938F939F93AF93BF938D


#ifdef commonanode :1001200029B186B133273695279536952795992796
! PORTA = 255U;
! PORTB = 255U;
! PORTD = 255U;
#else :10013000689414F8969587951694E1F7822793278B

.C .hex
! PORTA = 0;
! PORTB = 0; :1001400080FF0CC08091000190910101A0910201FB
! PORTD = 0;
#endif!
!
! :10015000B09103010196A11DB11D0BC0809100015A
!
// Read string number from EEPROM data memory. If good, increment it and save :1001600090910101A0910201B09103010197A109B1
// the new value to EEPROM. This allows us to cycle through the set of strings in flash,
// using an new one each time that the unit is reset.

if ( eeprom_read_word(&eepromWord) > (uint16_t) NoOfStrings) :10017000B1098093000190930101A0930201B09313


! stringNo = 0U;
else! :100180000301BF91AF919F918F913F912F910F905C
! stringNo = (uint8_t) (eeprom_read_word(&eepromWord)) ;
!
!
stringNoCopy =! stringNo; :100190000FBE0F901F901895C9EED4E0DEBFCDBF03
!
if (++stringNo >= NoOfStrings)
! :1001A0000E94510083EA84BD81E085BD17BC18BC64
! stringNo = 0U;

eeprom_write_word(&eepromWord, stringNo);
:1001B00080E68AB91092800081EC8093810088EEFD
stringNo = stringNoCopy;
:1001C0009DEF909385008093840080ED9DE0AFEFDC
for (;;) // main loop
{

! memcpy_P(&p, &StringSet1[stringNo], sizeof(PGM_P)); :1001D000BFEF8093000190930101A0930201B093BF


!
! strcpy_P(buf, p);! ! :1001E00003018091000190910101A0910201B09161
!
!
//if ((stringNoCopy == 0) && (++stringNo >= NoOfStrings))! //Loop through strings in Demo mode!
//! stringNo = 0U; :1001F0000301662477244301198A1A8A1B8A1C8A00
:1002000013E2E12E1AEFF12E1FEF012F1FEF112F36
!
! if! (stringNoCopy == 0) {
! ! if (++stringNo >= NoOfStrings)
! ! ! stringNo = 0U; :10021000ED86FE860F87188B19861A861B861C862C
! }
! :100220004424552400E61AEE1E8B0D8B18861F827F

i = 0; :10023000222433242CED3FEF3E832D831C821B822E
! while( buf[i] != '\0' !) ! // i.e., while the string has not ended :100240001A821982809184009091850081569A4E7D
! {
! !

:1002500058F480918400909185008153954798F0DF

Compiler & Linker


//Add a short delay-- an off period-- between characters:
//Default delay time value: 2000U, but you can change this value in the range (0,65535U).
//This delay is important because it gives visual separation between repeating letters. :100260008B819C81892B79F41092850010928400F7
//Without the delay, the word "TREE" looks like it just says "TRE"

! m = 0;
! while (m <= 850U)! ! //Change the length of the short delay here.! :1002700090E296BB81EC80938100ACEDBFEFBE8332
! ! {
! :10028000AD831C821B82B59B5CC0EB81FC81EF2B94
#ifdef commonanode
! PORTA = 255U;

Programmer
! PORTB = 255U;
! PORTD = 255U; :1002900089F4E0908600F0908700FE82ED8281E88C
#else
! PORTA = 0; :1002A00080938100B0E2FB2EF6BA01E010E01C83DF
! PORTB = 0;
! PORTD = 0;
#endif!
! ! ! m++; :1002B0000B8347C080918600909187002D813E81FD
! ! }
:1002C000821B930B9E838D836CE070E00E94F4028E

+ Libraries
//Retrieve a 16-bit word from the font table up above that describes how the sixteen
//segments of the LED display will be lit up.
//(Here, word means two bytes-- 16 bits-- not a collection of letters.) :1002D0009B018D819E816CE070E00E94F402069784
! ! ! !
! if (buf[i] == ' ') :1002E00010F02F5F3F4F80E395E790938500809358
! ! ! FontWord = 0;
! ! else if (buf[i] == '*')
! ! ! FontWord = (uint16_t)pgm_read_word(&font_table[26]);
! ! else if (buf[i] == '/') :1002F00084001C821B82C901875B93408B5494400D
! ! ! FontWord = (uint16_t)pgm_read_word(&font_table[27]);
! ! else :1003000000F553E0283E350718F428EE33E006C028
! ! ! FontWord = (uint16_t)pgm_read_word(&font_table[buf[i] - 'A']);
! ! ! //Note: The ASCII char 'A' is element 0 of the font table.

! ! ! :1003100087E0213D380710F020ED37E0285E3340BC
! ! hiByte = FontWord >> 8;! ! //Want to work with one byte at a time,
here. :100320008FE190E0DC012A9FC0012B9F900D3A9F46
!
//Calculate mapping from fonts onto output pin ports:
! ! ! ! PB = (255U & FontWord);
! ! ! ! PD = ((hiByte & 15U) | ((hiByte & 48U) << :10033000900D11247C0100271127E98AFA8A0B8B82
1));
! ! ! ! PA = ((hiByte & 192U) >> 6);
! :100340001C8B8091000190910101A0910201B0915C

! m = 0;

Closed-loop Code stored in


servo control code Linked Object Code Flash memory
(C and/or
assembly)
Ugly--but functional-- prototypes!
Operational testing

First step: Test 2D motion control system


& air heater
World’s first CNC toaster!
Next: 3D Modeling software
(Many good options...)
Get POV-Ray @

Initial choice:
POV-Ray
www.povray.org

• Freeware with available source


• Cross-platform support
• Programming language for 3D graphics
• Makes slicing easy
Compatibility

“Standard” file type for 3D fabbing


is .STL

Successfully converted, thus far:


Blender, Rhino STL files

Others likely including sketchup


Perform slicing operation in POV-Ray:
Mass production!
Mass production!
Improving build quality

(or, “You call that a dodecahedron?”)


Heating element for hot-air rework station
(desoldering tool)
Up to 500W (using ~50 W), $10
Problems with the current heater

• Airflow is too high: Blows around dry sugar,


pushes melted sugar
• Too large of an area is heated
• Inconsistent heating leads to variable color
• Unknown heater construction...
Not food grade output!
Too much air...
Culinary applications

• Initial tests were not considered


“food safe.”

• Need to treat sugar like food


• Need clean, audited air path
• Not recycling sugar through system
• Easily cleaned inner liner
First Edible CandyFab Output
Why Sugar?
• Seriously cheap!
• Safe, non-toxic.
• Kid friendly.
• Biodegradable, cleans up easily
• Tasty!
• Potentially good for casting
• Remarkably rigid, despite low melting point
• Smells great when it melts.
On beyond sugar....
melts fab
If it bleeds, we can kill it.
On beyond sugar....
Media choices:
whatever can melt in your oven
• Chocolate chips
• Waxes
• Other sugars, sorbitol, ....
• Many plastics (Thermoplastics)
• Low melting point glasses (maybe?)
• Low melting point metals (Tin, bismuth....)
First durable CandyFabbed Object
Polypropylene pellets
CandyFab
Making Rapid Prototyping
a little sweeter!

www.candyfab.org
The CandyFab Project
First Goal:
• Complete redesign of CandyFab
by May 2008:
“The CandyFab 5000S”

• Redesign will use “off-the-shelf” components


(no old plotters!)
• All hardware, mechanics, software, firmware
will be open source & cross-platform
The CandyFab Project
Status:

• CandyFab.org has been up one month


(10% of time to May 2008)
• 60+ volunteers, with a wide range of
interests and skills
• Significant progress on new
heater & nozzle reference designs
Early progress: New heater design by Brian ward
Early progress: CFD simulations by Brian ward
The CandyFab Project
Next Steps (in order):
• Design of new XYZ motion control system
– Sort out control model & types of
feedback used
• New architectural model of base
– Likely choice: CNC routed plywood
• Begin hardware & firmware design of
new motor controllers
• Design CNC control software
– Possibly branch an existing project
Control System: Big picture Goto X1,Y1,Z1,
Goto X2,Y2,Z2,
Goto...

3D model Hardware
.STL, POV-Ray interface
or set of slices (JPEG) Computer (Low-cost AVR)

AVR Motor AVR Motor AVR Motor AVR Motor


Controller Controller Controller Controller

Locally-managed
closed-loop control
Open-source electronics:
Unusual approach to make design accessible:

Electronic design using open-source tools:


the gEDA suite: gSchem + PCB
The future: open-source sculpture?
Sculpture Metatron, by Bathsheba Grossman,
released as open source .STL file
CandyFab
Making Rapid Prototyping
a little sweeter!

www.candyfab.org

Das könnte Ihnen auch gefallen