*I suspect I should have set a lower frame rate, as the flash video appears to be unable to maintain smooth playback on my laptop ?


MakerBot Note :

Moved the bot, here is a general update :

-- Having finally tired of trying to fix the Z mechanims, I requested a single replacement rod from MakerBot, since I know at least one rod is bent to the point of being defective. They returned with two free rods almost immediately, so that is a good sign.

power supply failed !

I notice that MakerBot is selling a PSU for $35 that is available for $18 on Amazon. This particular unit is apparently not particularly reliable. Thankfully, a computer repair shop across town had a used supply and I was able to get the bot up and working in a couple hours



... I should build a mill, instead of 3D printer... sounds like they are strictly superior ?


I'm really, really tired of Ubuntu automatic updates breaking my NVIDIA drivers. This happens every time there is a major update. For a while it was ok, because the hacks to correct it were constant. Now they've changed something else and the usual config tweaks don't work.

ok, I get it

-- there are no default NVIDIA drivers for ubuntu
-- drivers are kernel modules and need to become part of a kernel
-- every time ubuntu updates to a new kernel, it doesn't have the NVIDA module built for it yet
-- so, every time ubuntu updates its kernel you will have to rebuild your driver modules

and, these sites explain where to put the new config tweaks [1,2,3]


MakerBot Note :

even with a properly working extruder, I sometimes strip filament, usually either extruding too cold or crashing the nozzle into the stage.

for a while, I was taking out the motor to clean it, which took.. a very long time.

I just realized that an unfolded paperclip will do the job without disassembling anything. just back out the filament, then keep the motor turning and pick around with the paperclip. It seems fairly easy to dislodge the plastic from the teeth and push it down into the barrel. This has already saved me a lot of time.

or.. did everyone else know this and I just missed the note ?


MakerBot Note :

MakerBot is printing again, but I'm not going to rescind my posts of frustration just yet.

It turns out the problem was that my threaded Z rods were really bent. Most MakerBot rods apparently are. This was causing a wobble, which was causing a variance in the tension of my Z belt.

Solution : rotate each Z rod such that its wobble is in phase with the other. Then, when they wobble about, they will all move in the same direction at the same time. This causes less variance in the tension on the Z belt, so you can actually adjust it to turn reliably.

MakerBot Note :

day 13, still having problems with Z stage slipping

MakerBot Note :

I'm searching for a way to decrease the infill density without affecting feed rate or perimeters. I'm told that slowing down the filament flow is not an option since PWM will reduce the torque available to the motor.

Infill width over thickness : affects perimeter as well as infill. good job ... naming that one.
Feed rate : can't turn that up, makes curves render poorly
Flow rate : can't turn that down, motor wont have enough torque

but, there is a
Perimeter Feed rate over Operating Feed rate
Perimeter Flow rate over Operating Flow rate

so.. if I want to change just the infill feed rate, I can speed up the global feed rate then apply a correction here ? Lets try it.


MakerBot Note :

Recently my heated build platform stopped reading a sane temperature and was reporting a constant temperature of 255 Celsius. The problem was the thermistor was shorting where it was attached to the board. I think they could probably re-do the HBP board design with the thermistor mount contacts larger and rotated 90 degrees to reduce the chances of this happening. I re-did the joint and put down lots of kapton tape for insulation. Everything seems fine now.

update : temperature reading is more noisy and spiky than it was before. I'm not sure whats up, but at least its working.

debug process looked something like this :
- disassembled, all connections are visibly intact
- signal cable is intact
poking around with multimeter ( power, signal cable disconnected )
- "sig" line appears to be contiguous with ground
- gnd, 5V intact
- [sig.gnd] to 5V : 4.6 Kohm resistance
with signal cable connected
- gnd,5V do in fact have 5V between them
- signal line is resting at gnd
assumption is that the signal line should probably not be shorted to ground like this

MakerBot Note :

It sounds like the Z rods that MakerBot ships with are inferior and possibly should be replaced to get a fully functioning makerbot. On my kit, version 11, I have rebuilt the Z stage assembly several times and keep it excessively well oiled to prevent slipping. Essentially, the problem is that the rods are slightly bent and also corrode which adds friction. Replacing them with stainless steel equivalents seems to solve these problems. For now I am running a software patch that slows down the Z axis to reduce the odds of lost steps during a build.



Remeber this link

Proles/Makers (Sterling/Doctorow)

Open source fabrication :
means of creation, not means of production
but for small scale thats all you need
it also facilitates boot-strapping, where people have resources but lack investors.

I hope this works.

MakerBot Note :

Day 10 of makerbot assembly attempt.

morale is low

alternating between cursing my own failures, cursing the makerbot makers, and just plain cursing.

I have determined that the gcode from whatever old version of skeinforge I downloaded does still build.

The present skeinforge does not produce successful builds.

Z stage slipping is still a major problem, may have been exacerbated by trying to install the Z stage wobble arresters.

must... keep... trying...

MakerBot Note :

The extruder is jamming again. Backed out filament looks like this. I wonder what is wrong ?

MakerBot Note :

My Z stage was slipping, so I tried printing the springy parts of the Z axis wobble arrestor ( from thingiverse ). I can print things as long as I monitor them and correct the Z stage when it slips. Attaching these guys didn't seem to make a difference though. Adjusting the bearings might have helped a little, before I cranked the Z stage into the bolts at the top and cracked it. I think the only thing thats worked reliably for me so far is lots of oil and slowing down the travel feed rate ( which I think is whats used to calculate the Z state movement rate during builds ).

Update : these do nothing to help with the slipping. If anything they make it worse. They may help remove some of the wobble, but they also seem to increase the resistance to moving the Z stage. I found that using the latest version of skeinforge lets me slow down the Z stage movement, which seems to correct the problem.


MakerBot Note :

Spend a good hour leveling your build platform with masking tape or painter's tape. I am putting the tape on the Y stage platform.

Move the stage using the control panel from corner to corner until all corners are the same distance from the nozzle.

MakerBot Note :

The heated build platform kit as it ships is incomplete. The way they suggest hooking it up to the extruder board will not work. To complete the kit, you either need to procure a heat-sink setup for the power mosfets on the extruder board, or a relay to take the load off the extruder mosfet. I used a relay.

They recommend insulating a part of the wire with heat shrink tubing, but I didn't see any heat shrink tubing in my kit. I could just have missed it though.. unclear.

Other surprises may include : you need to do some surface mount soldering. The instructions recommend solder paste, but it is possible to do this with a normal soldering iron if you are careful.


MakerBot Note :

[shamefully ripped from mailing list, I'm keeping it here for my personal reference]

Put a "tail" at the beginning of your print. I never print without a
tail, even if I have a raft. Basically at the beginning of your gcode
around the point where your print starts change your gcode from this

G1 X-31.05 Y-39.88 Z0.44 F3300.0
G1 X-31.05 Y39.74 Z0.44 F940.828
G1 X-30.93 Y39.86 Z0.44 F940.828
G1 X-29.64 Y39.86 Z0.44 F940.828

to something along the lines of this

G1 X-48 Y48 Z0.44 F3300.0
G1 X-48 Y-48 Z0.44 F945
G1 X48 Y-48 Z0.44 F945
G1 X48 Y48 Z0.44 F945
G1 X-48 Y48 Z0.44 F945
G1 (the code for your 1st layer)

What causes lack of sticking t is two fold. 1st the plastic in the
tip of your nozzle is not 230-240, it's more like 200-210, it's really
not sticky. The extruded plastic isn't up to temp till you have
extruded 1-2cm. The tail gets the extruded plastic solidly up to temp
before you print your interface layer.

Second when printing raft less your Z needs to be very squished into
the plate, the tail gives you 10-20 seconds to jog you z axis to the
perfect level. And it lets you find any imperfections in your
leveling before you loose the print.

MakerBot Note :

If you haven't specially calibrated your thermistor settings, you might have to tweak the temperature settings in skeinforge to get the plastic soft enough. In my machine, the extruder jams for all temperatures lower than 230C. So, I had to go deep into the skeinforge-raft settings and make sure _all_ extrusion temperatures are above 230C.

warning : 230C may be more than enough to melt your insulator barrel if you are using the white PTFE part that ships with the kit. I bought a PEEK barrel from MakerGear and am currently praying to various gods that it does not suffer the same sort of failure at my PTFE barrel.

MakerBot Note :

The M6 pre-assembled heater-core from MakerGear simplifies building the hot part of the plastic extruder.

MakerBot Note :

When affixing the MK4 idler pulley to its bearing, try to center it. The washer-spacing method in the default instructions did not centre my pulley. It seems to grip filament more reliably if properly centered, and then mounted with a single washer spacer on each side.

MakerBot Note :

Always add a copper sleeve or hose clamp around your heater insulator barrel. This will save you if you accidentally run to hot and start to deform the insulator.

MakerBot Note :

If your filament has a "skirt" around it, or multiple threads, when you back it out of the heater, it means that your seal between the insulator and barrel is failing and you need to shore up the strength of your insulator barrel and probably reduce your temperature, and check for nozzle obstructions.

MakerBot Note :

The MK5 extruder idler pulley wheel does not work with the MK4 extruder gear

MakerBot Note :

Put a 'flag' of masking tape on your extruder feed 2mm calibration rod. If you are debugging feed problems and need to repeatedly remove your motor for cleaning, you will probably and up trying to calibrate the feed mechanism with the heater element attached. And, if you are clumsy like me, you will probably end up dropping the calibration rod into the heating element.

MakerBot Note :

Let the machine warm up for 10 minutes before turning on the feed. The thermistor only reports the temperature at the tip of the extruder. Give the machine a while for this heat to diffuse along the barrel


Preparing .PDB Files for 3D Printing

I would like to print some files from the swiss protein databank into nice 3D surface models. This can be done on linux with standard open software packages.
  • assume platform is Ubutntu
  • assume that you have Replicatorg set up with Skeinforge and some sort of RepRap style 3D printer.
  • install meshlab
  • install blender
  • download .pdb
  • open .pdb in meshlab. Use the metaballs setting with resolution = 0.5 and blobbiness = 0.5
  • optionally clean up mesh
  • center and scale in blender
  • orient model in a way that looks mostly printable
  • export model as .STL
  • open model in replicatorg-skeinforge

Follow-up : Although this will create manifold meshes that skeinforge can process, it doesn't create support structures and other niceties requires for Makerbot / RepRap printing. Ideas ?
  • try out the skeinforge support settings
  • manually add support columns in Blender
  • write a script to automatically create supports (hard, don't know what algorithm to use)


Unboxing Maker-Bot revision 10 (11?)

Yes! it finally arrived!
With a very nice greeting
I ordered the basic $750 kit,
but added on the power supply, the USB-TTY cable,
and two extra reels of ABS.
Start assembly with the Y stage
Then build the X stage and attach the two
You know what, these are the same pics you can see at wiki.makerbot.com/cupcake, I'm not gonna write.

Thing 1 from thingiverse is printed !

Printing its own replacement parts !


source code for converting b&w images to pure HTML



   2:  import sys

   3:  import re

   4:  import os


   6:  '''

   7:  open html file

   8:  find all image tag

   9:  for each image tag

  10:  remove it

  11:  strip out the image name

  12:  find that image

  13:  convert it to HTML

  14:  replace the image tag with this html

  15:  '''


  17:  infilename  = sys.argv[1]

  18:  outfilename = sys.argv[2]

  19:  infile  = open( infilename,"r")

  20:  outfile = open(outfilename,"w")


  22:  document = "".join(infile.readlines())


  24:  image_tags = re.findall(r'<IMG [^>]*>',document)


  26:  print image_tags


  28:  urls = map(lambda s:s.split('SRC=')[1].split('"')[1],image_tags)


  30:  os.system("javac *.java")


  32:  for tag in image_tags:

  33:      url = (lambda s:s.split('SRC=')[1].split('"')[1])(tag)

  34:      os.system("rm temp.html.stub; java imagehack %s temp.html"%url)

  35:      print "reading temp.html"

  36:      try:

  37:          f   = open("temp.html.stub",'r')

  38:          obj = "".join(f.readlines())

  39:          f.close()

  40:          document = re.sub(tag,obj,document)

  41:      except IOError:

  42:          pass 


  44:  try:

  45:      f   = open("temp.html.headers",'r')

  46:      headers = "".join(f.readlines())

  47:      f.close()

  48:      document = re.sub(r'</HEAD>',headers,document)

  49:  except IOError:

  50:      pass 


  52:  outfile.write(document)



  55:  infile .close()

  56:  outfile.close()



   1:  import java.awt.image.BufferedImage;

   2:  import java.io.BufferedOutputStream;

   3:  import java.io.File;

   4:  import java.io.FileOutputStream;

   5:  import java.io.IOException;

   6:  import java.io.PrintWriter;

   7:  import java.util.HashSet;

   8:  import java.util.Set;

   9:  import javax.imageio.ImageIO;

  10:  import java.net.URL;

  11:  import static java.lang.System.*;

  12:  public class imagehack {

  13:      static int depth=8;

  14:      static int D=depth-1;

  15:      static class block {

  16:          public int x,y,w,h,c;

  17:          public block(int a,int b,int f, int d, int e) {x=a;y=b;w=f;h=d;c=e;}

  18:          public boolean equals(block b) {return x==b.x&&y==b.y&&w==b.w&&h==b.h&&c==b.c;}}

  19:      static int foo(int x) { return x/(256/depth); }

  20:      static String tohex(int x) { 

  21:          x*=(256/depth); 

  22:          return ""+("0123456789ABCDEF".charAt((x>>4)&0xf))+("0123456789ABCDEF".charAt(x&0xf)); }

  23:      public static void main(String[] args) throws IOException {

  24:          String filename = args[0];

  25:          String outputname = args[1];

  26:          out.println("input "+filename);

  27:          out.println("output "+outputname);

  28:          BufferedImage hold;

  29:          try {

  30:              hold = ImageIO.read(new File(filename));

  31:          } catch (Exception e) {

  32:              hold = ImageIO.read(new URL(filename));

  33:          }

  34:          int w = hold.getWidth();

  35:          int h = hold.getHeight();

  36:          Set<block> blocks = new HashSet<block>();

  37:          int[][] data = new int[h][w];

  38:          for (int i=0;i<h;i++) {

  39:              int linestart = -1; int linecolor = D;

  40:              for (int j=0;j<w;j++) {

  41:                  int c=foo(hold.getRGB(j,i)&0xff);

  42:                  if (c!=linecolor) {

  43:                      if (j>0 && linecolor<D)

  44:                          blocks.add(new block(i,linestart,j-linestart,1,linecolor));

  45:                      linecolor=c; linestart=j; } }

  46:              if (linecolor<D)

  47:                  blocks.add(new block(i,linestart,w-linestart,1,linecolor)); }

  48:          out.println("initially "+blocks.size()+" blocks");

  49:          if (blocks.size()>1000) return;

  50:          String wrap =

  51:          "#dumbwrap1 {\n"+

  52:          "  margin:0px;\n"+

  53:          "  padding:0px;\n"+

  54:          "  border:0px none;\n"+

  55:          "  background:#fff;\n"+

  56:          "  position:static;\n"+

  57:          "  display:inline-block;\n"+

  58:          "}";

  59:          String images =

  60:          "#imgwrap2 {\n"+

  61:          "  position:relative;\n"+

  62:          "}";

  63:          File ofile = new File(outputname);

  64:          PrintWriter p = new PrintWriter(new BufferedOutputStream(new FileOutputStream(ofile)));

  65:          p.println("<head>");

  66:          String css = "";

  67:          css += "<style type=\"text/css\">\n";

  68:          for (int i=0; i<D; i++) {

  69:              String c = tohex(i);

  70:              css += 

  71:              "#bb"+c+" {\n"+

  72:              "  margin:0px;\n"+

  73:              "  padding:0px;\n"+

  74:              "  border:0px none;\n"+

  75:              "  background:#"+c+c+c+";\n"+

  76:              "  position:absolute;\n"+

  77:              "}\n"; }

  78:          css += wrap;

  79:          css += images;

  80:          css += "</style>";

  81:          p.println(css);

  82:          p.println("</head>");

  83:          p.println("<body>");

  84:          String imagecode = "";

  85:          imagecode += "<div id='dumbwrap1' style='width:"+w+"px;height:"+h+"px;'>";

  86:          imagecode += "<div id='imgwrap2'>";

  87:          for (block b : blocks)

  88:              imagecode += "<div id='bb"+tohex(b.c)+

  89:              "' style='top:"+b.x+"px;left:"+b.y+"px;width:"+b.w+

  90:              "px;height:"+b.h+"px;'></div>";

  91:          imagecode +="</div></div>";

  92:          p.print(imagecode);

  93:          p.println("</body>");

  94:          p.flush();p.close();


  96:          //print just the image if external header is used

  97:          ofile = new File(outputname);

  98:          p = new PrintWriter(new BufferedOutputStream(new FileOutputStream(ofile+".stub")));

  99:          p.print(imagecode);

 100:          p.flush();p.close();


 102:          ofile = new File(outputname);

 103:          p = new PrintWriter(new BufferedOutputStream(new FileOutputStream(ofile+".headers")));

 104:          p.println(css);

 105:          p.flush();p.close();

 106:      }

 107:  }

Testing Automatic Conversion of Equations to Pure HTML

Looks pretty good to me, though this doesn't play well with browser-resizing of the page.