Uncategorized

Robot arm update

I’ve committed myself to writing something every weekday for the next month, even if it’s pretty short.

Today I’m working on the robot arm software, overcoming a few challenges. You can read about my latest progress.

Send me questions about what you’d like to see here and I’ll get some more written.

Side note: this weekend broke single-day sales record. Woo!

Uncategorized

How to Make a Line Following Robot

So you’ve just finished your Arduino Starter Kit and now you’re wondering “what next?”  Let’s take what you’ve learned and put it into a line following robot.

Line following robot CANDO2

(more…)

Uncategorized

How Makelangelo turns images to gcode

Lots of people are suggesting great ideas for new image filters on the Makelangelo. I wish I had time to do them all myself. As a compromise I’d like to make it so easy to write new filters that anyone can do it.  I’m going to walk you through the simplest image filter and show you how it works.

Here is the image I converted to gcode:

original

Here is the result as it looks in the Makelangelo program after I converted it with the “scanline” style:

Converted

In general the process is:

  • load a picture.  This has been done for you before the filter starts.
  • move around the picture and interpret what you see as you go.  This is where you do your magic.
  • write down what you interpret as instructions for the robot.  This has been made simple.

Let’s take a look at a practical example, based on the converted image above.  In the github project you’ll find several Filter_* classes.  The simplest Filter has only one method called Convert.

[code]public void Convert(BufferedImage img) throws IOException {
// The picture might be in color.  Smash it to 255 shades of grey.
Filter_BlackAndWhite bw = new Filter_BlackAndWhite(255);
img = bw.Process(img);  //"process" is for filters that change the original image.  "convert" should create a few file without modifying the original.

// Open the destination file
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(dest),"UTF-8");
// Set up the conversion from image space to paper space, select the current tool, etc.
ImageStart(img,out);
// "please change to tool X and press any key to continue"
tool.WriteChangeTo(out);
// Make sure the pen is up for the first move
liftPen(out);

// figure out how many lines we’re going to have on this image.
int steps = (int)Math.ceil(tool.GetDiameter()/(1.75*scale));
if(steps<1) steps=1;

// these next three might not be strictly necessary.  Call me paranoid.
lastup=true;
previous_x=0;
previous_y=0;

// Color values are from 0…255 inclusive.  255 is white, 0 is black.
// Lift the pen any time the color value is > level (128 or more).
double level=255.0/2.0;

// from top to bottom of the image…
int x,y,z,i=0;
for(y=0;y<image_height;y+=steps) {
++i;
if((i%2)==0) {
// every even line move left to right

//MoveTo(file,x,y,pen up?)
MoveTo(out,(float)0,(float)y,true);
for(x=0;x<image_width;++x) {
// read the image at x,y
z=TakeImageSample(img,x,y);
MoveTo(out,(float)x,(float)y,( z > level ));
}
MoveTo(out,(float)image_width,(float)y,true);
} else {
// every odd line move right to left
MoveTo(out,(float)image_width,(float)y,true);
for(x=image_width-1;x>=0;–x) {
z=TakeImageSample(img,x,y);
MoveTo(out,(float)x,(float)y,( z > level ));
}
MoveTo(out,(float)0,(float)y,true);
}
}

// TODO Sign name here?

// pen is already lifted.  Return to home.
tool.WriteMoveTo(out, 0, 0);

// close the file
out.close();
}[/code]

 

Uncategorized

New Products: 3D printer parts

I’ve just implemented a new inventory management system in the warehouse that should make it easier for new hires to get up to speed and pack your orders faster. Along the way I had to relabel every item, which revealed to me that we had a build up of 3D printer parts that weren’t even listed in the store. So, without further ado, here they are.

ELEC-0053 Thermistor

thermistor

ELEC-0053 Thermistors are 100K ohm NTC thermistors, perfect temperature sensors for your 3D printer. These come in a pack of two. One is for the nozzle and one is for the heated bed.

ELEC-0052 Heatsink

heatsink

The microchip that drives a stepper motor in a robot has so much current flowing through it that it can get burning hot. To keep temperatures down, the ELEC-0052 heatsinks will draw the heat away from the chip. The fins increase the surface area through which the heat can be absorbed by the air. Combine with a fan for best results.

This is a pack of 5. Comes with adhesive for easy installation.

Mech-0071 12v fan

12v fan

Keep air moving with the MECH-0071 12v fan. Cool plastic as it leaves the nozzle of your 3D printer for better quality results, or to make sure you stepper drivers don’t overheat. Measures 40mm * 40mm * 10mm.