Beruflich Dokumente
Kultur Dokumente
Open-source
fused-deposition fabber
“self-replicating”
(can make some of its
own parts)
Fab@home
http://fabathome.org/ (Cornell)
Open-source fabber
Available as a kit
Existing fabricators are great if...
and/or
• 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
3D model
Computer Hardware
interface
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")));
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.
: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;
.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.
eeprom_write_word(&eepromWord, stringNo);
:1001B00080E68AB91092800081EC8093810088EEFD
stringNo = stringNoCopy;
:1001C0009DEF909385008093840080ED9DE0AFEFDC
for (;;) // main loop
{
i = 0; :10023000222433242CED3FEF3E832D831C821B822E
! while( buf[i] != '\0' !) ! // i.e., while the string has not ended :100240001A821982809184009091850081569A4E7D
! {
! !
:1002500058F480918400909185008153954798F0DF
! 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;
Initial choice:
POV-Ray
www.povray.org
www.candyfab.org
The CandyFab Project
First Goal:
• Complete redesign of CandyFab
by May 2008:
“The CandyFab 5000S”
3D model Hardware
.STL, POV-Ray interface
or set of slices (JPEG) Computer (Low-cost AVR)
Locally-managed
closed-loop control
Open-source electronics:
Unusual approach to make design accessible:
www.candyfab.org