theFrankes.com has a new blog format. Content for Alibre Design users, musicians, audio pros & enthusiasts, programmers, roboticists, and genealogists has moved to a new location.
Quick links to the most popular content:

theFrankes.com has a new blog format. Content for Alibre Design users, musicians, audio pros & enthusiasts, programmers, roboticists, and genealogists has moved to a new location.
Quick links to the most popular content:
I built a framework for robot wheels a while back using OpenSCAD and used it to create a few different wheel styles. I recently decided to combine them all into one massively configurable wheel model, and add a number of new features as well. The result is an OpenSCAD file with 46 parameters that provides a limitless set of combinations and wheel designs. I call it One Wheel To Rule Them All.
It includes twelve tread patterns (all configurable in often surprising ways), eight core spoke patterns (also highly customizable), configurable support for o-rings, bands, and even optical encoder timing slots (directional and non-directional), and a lot more. Plus, I’m still adding features as I think of them.
First, here are a few images of the types of the various basic elements, as well as a few variations that show the flexibility of the designs. For example, as shown in these images, the Spiral style can be used to create a variety of interesting designs that you might not think of when you think “spiral.” After the images you’ll find full details on the parameters.
It’s important to note that you can configure this wheel to such an extend that it may not be printable at home with extruded plastic printers. In these cases, services such as Shapeways could come in handy.
The source file is available at http://www.thingiverse.com/thing:21486, or on github at http://github.com/alexfranke/Highly-Configurable-Wheel.
Often wheels are built around the tires. In this section, specify the properties of the tires you’re using, and this will define the diameter of the wheel. If you’re using o-rings, the tireCSDiameter should be the cross-section diameter of the o-ring, or if you’re using some other flat tire material (such as rubber bands), jsut specify the its thickness. If you’re not using any tire at all, set the tireCSDiameter to zero.
The rim sits at at the outside of the spokes and supports the tires or added treads. Installed tires (such as o-rings, rubber bands, etc) are set into grooves carved out of therim, while trads are added onto it. Keep this in mind when you’re using tires — as an example, the rim height should not be smaller than the radius of o-ring tires.
The rim also supports rotary encoder timing holes for wheel feedback. Use the padding parameters to adjust the location of those holes. See the compiler output for helpful information about the distance indicated by each timing hole. Directional timing holes will produce a second set of holes that are 90 degrees out of phase with the first. This allows you to stack sensors at the same location over the wheel instead of trying to position them along the circumference. Directional timing holes essentially double the resolution. You can also double resolution by looking for both rising and falling edges.
In this section, specify the properties of the tire tread you want to render. If you’re using a wheel (e.g. o-ring, rubber bands, etc), then use either the “o-rings” or “slots” settings, which will cut a groove (or grooves) in the wheel rim to fit the tires. The othertreat styles will render a tread pattern protruding out from the tire surface by the amount you specify in third part of “knobSize”.
Imagine the tire is mounted on a robot and facing straight at you. The “knobSize” parameter defines the size and shape of knobs in an [x,y,z] format, where x goes across the rim, y goes up and down along the perimeter of the wheel, and z protrudes out from the wheel toward you.
The “staggerOffset” parameter allows you to stagger knobs across the tire by an amount you specify. Set this to zero if you want all the knobs lined up along the perimeter and aligned with the edges of the rim.
“numberOfKnobs” specifies how many knobs there are across the tire, and “lineThickness” specifies how thick the lines are from “drawn” tire styles, such as “x”, “cross”, and “zigX”. You can use these pameters together in creative ways — for example to extend a single tread profile across the width of the tire, or to create a contiguous zig-zag.
Finally, “radialTreadSets” defines how many sets of treads are rendered around the wheel. Each set contains two rows in order to create the staggered effect.
Tread styles are:
This section is used to define the spoke style of the wheel. Some of the properties are only applicable to certain wheel types, and these properties can be used together in creative ways to create a wide range of tire designs.
The “proportion” property affects how some spokes are rendered. The first number is the proportion of the design from the center of the wheel to the inside of the rim, and the second number is the proportion of the width inside of the wheel. For example, to create spokes that are roughly in the shape of a “U”, you can use a “circle” style, and set the proportion to [1.5, 1.0], for cirle spokes that are 150% as long as the distance from the center to the inside of the rim, 100% as wide.
Use spokeInset to specify the inner and outer inset of the spoke area from the inner and outer faces of the wheel. You can use a negative number to make the spoke area stick out further than than the rim. The hub position will be based on the inner surface resulting from this inset.
The spoke styles are:
These properties define the hub — or how the wheel connects to the motor. The default values for the captive nut are precise for a M3 nut and will make the nut a very tight (if not impossible) fit. I prefer this because it allows you to “melt” the nut into place with a soldering iron. However, if you don’t have a solder iron or prefer a looser fit, then just adjust the nut diameter and thickness. (M3 hardware is, by default, set to 3mm screw diameter, 5.4mm nut diameter, and 2.3mm nut thickness.) Similarly, the holes for the motor shaft and grub screw are also precise. This allows the holes to be drilled out for a more precise fit. Again, you can adjust these to suit your needs.
The hubZOffset can be used to “sink” the hub into the wheel, and it defaults to half the wheel thickness. For example, when the hubHeight is 10 and the hubZOffset is -2, then the hub will protrude 8mm from the wheel, but the shaft hole will be 10mm deep. The set screw will still be positioned in the middle of the exposed vertical height, and the fillet/chamfer will also be rendered in the correct position. This property is also useful if you want to poke a hole entirely through the wheel. (e.g. If the wheel is 6mm thick, set the hub height to 16 and the hubZOffset to -6, and you’ll get a hub that protrudes 10mm from the wheel surface with a hole that extends all the way through the wheel.)
To mount a servo motor, set includeHub to false, set shaftDiameter so that the hole will accommodate the servo horn screw and any bit that protrudes from the top of the servo horn. Then set the servoHoleDiameter to the size of your mounting hardware, and set servoHoleDistance1 and servoHoleDistance2 to the total distance between mounting holes on your servo (not the distance from the center). These sets of mounting holes will be rendered at 90 degree angles from one another. If you only want one set of holes, set one of the values to zero. Adjust the angle of all the holes to avoid openings in your wheel design if necessary using servoArmRotation.
Use innerCircleDiameter to specify a solid inner circle to use as a base for the hub. This can be useful if you need a a solid surface for servo mounting hardware or for the base hub fillet/chamfer.
Use outerNutTrap to create a nut or bolt head trap on the outside (bottom) of the hub area. Used in conjunction with shaftDiameter and false for includeHub, this will create a wheel that can drive a bolt much like the large gear on Wade’s Extruder. (This feature is inspired by that design.)
Use servoNutTrap to create nut traps for bolts used to mount the wheel onto servo arms. This feature was suggested by AUGuru.
Here’s a 3D printed T10 lamp shade that I designed and printed last night. A few weeks ago while searching for LEDs, I noticed an ebay listing for very inexpensive 12V automotive lamps that combine nine bright white LEDs. I believe these are sometimes called “wedge lights,” and are used as turn signals or interior lights.
Because reprap printers typically operate with 12V power supplies, I figured this would be a perfect way to light up the print bed. When the lamps arrived last night, I got out the calipers, worked up a design, and printed it out. I had a little difficulty removing the support material, but I’m pleased with the results.
Here it is on Thingiverse: http://www.thingiverse.com/thing:20809
The ebay listing for the LEDs (which were $1.50 for two) was titled “2 pcs WHITE Xenon SMD 9 LED HID 194 168 T10 Car Light.” It was designed exclusively with OpenSCAD.

T10 LED Lamp Shade by Alex Franke (codecreations) is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
OpenSCAD apparently doesn’t have an easy way to make an arc or wedge, or any way to do a partial rotate_extrude. This presented a problem when I started to design my Parametric Encoder Wheel, because in order for it to look nice, it would need to have lots of extruded arcs or partial rotate extrudes in order to make the holes.
Here’s how I solved the problem. Currently this will render slots up to 180 degrees around, but extending it should be pretty easy. If you’re doing a lot of these in your model, be sure to use render(), or badness will occur.
/*
* Excerpt from...
*
* Parametric Encoder Wheel
*
* by Alex Franke (codecreations), March 2012
* http://www.theFrankes.com
*
* Licenced under Creative Commons Attribution - Non-Commercial - Share Alike 3.0
*/
module arc( height, depth, radius, degrees ) {
// This dies a horible death if it's not rendered here
// -- sucks up all memory and spins out of control
render() {
difference() {
// Outer ring
rotate_extrude($fn = 100)
translate([radius - height, 0, 0])
square([height,depth]);
// Cut half off
translate([0,-(radius+1),-.5])
cube ([radius+1,(radius+1)*2,depth+1]);
// Cover the other half as necessary
rotate([0,0,180-degrees])
translate([0,-(radius+1),-.5])
cube ([radius+1,(radius+1)*2,depth+1]);
}
}
}

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
I received several filament samples from New Image Plastics in Ohio, ranging in length from about 1-4 feet. Here are the measurements I took from various points on each strand. I measured all the way around the filament and recorded the minimum and maximum values:
Orange 1.75mm ABS (Sample 1): 1.70-1.73, 1.70-1.73, 1.67-1.70, 1.71-1.74
Orange 1.75mm ABS (Sample 2): 1.71-1.74, 1.71-1.74, 1.71-1.73, 1.70-1.73
Orange 1.75mm ABS (Sample 3): 1.67-1.70, 1.69-1.73, 1.67-1.69
Orange 1.75mm ABS (Sample 4): 1.68-1.70, 1.66-1.68, 1.67-1.70
White 1.75mm PLA: 1.69-1.71, 1.68-1.73, 1.68-1.73, 1.68-1.73, 1.68-1.72
Clear 3mm ABS*: 2.87-2.91, 2.90-2.95, 2.90-2.94, 2.88-2.93, 2.86-2.95
* They noted that the clear plastic “is to sample only we do not have clear resin to sell” [sic].
When I wired up my Reprap and started printing, I noticed that all my prints were mirrored along the Y axis — I’d set it up with the end stop at the front and configured it so that the print bed moved forward when I clicked Y- in pronterface (printrun), and not back. (When the table moves back, the print head essentially moves forward along it.)
The end stops were already in place and I didn’t want to move them, but no combination of INVERT_Y_DIR and Y_HOME_DIR in Configuration.h would work. I even tried changing Y_ENDSTOP_INVERT, knowing full well that it wouldn’t help either.
So how do you flip an axis without moving the end stop or the home position? The answer is to change both INVERT_Y_DIR and Y_HOME_DIR in Configuration.h, and also swap the values for Y_MAX_PIN and Y_MIN_PIN in pins.h for the specific motherboard you’re using.
A couple of people have noticed this, so I thought I’d write it up. There’s nothing wrong — it’s just something to be aware of if you’re soldering up a Sanguinololu 1.3a PCB.
If you look closely at the circuit board where the FTDI chip goes, you’ll notice a tiny solder bridge between pins 25 and 26 (below the “L” in “FT232RL”). I noticed it when I first inspected the board, and I looked at the original gerber files to make sure it was part of the design. It is, in fact, part of the original design (see photo below), so there’s no need to try to remove it. (To confuse the issue, the instructions even say to look for things like this.)
If you did remove it, that’s okay, too — those pins (which both go to ground) are still connected inside of the outline of the chip.
One other thing to note is that the pin headers along the top of the board sit a little further in than those along the other sides. This is also exactly as it is in the original gerber files, but it means that the PCB might prevent some right-angle headers (like those in the Mouser project kit) from plugging all the way in unless the male headers are soldered a little high. (See the second photo.) This is probably more of an aesthetic issue than a functional one, but if you want to make sure they plug in completely, you can use one of the female connectors to space it properly when you solder it on.
Yeah, free. If you’re starting a 3D printer project (such as RepRap) at your public K-12 school in the United States for the benefit of the students, then we’ll give you a free Sanguinololu v1.3a PCB to help you out (while supplies last). They typically sell for about $12-14. We won’t even charge you for shipping.
What is a 3D printer? Check out the video at the bottom of the page for an introduction.
Not a school but want one anyway? I’m selling some of them to raise funds for a printer for a local school. Just select “None – Buy one” for affiliation below, and I’ll send you the details. They’re $11, shipping included within the USA.
We don’t see any reason why kids shouldn’t have access 3D printing technology in their problem solving toolkit, and soldering up the electronics is all part of the fun. A club with only six kids raising $50 each could be well on its way to building and operating a 3D printer for its school, and while the electrionics can typically amount to 1/3 or more of the final build price, hopefully a free PCB will help ease the pain a bit.
Are you interested? Submit the form below for instructions on how to get your free Sanguinololu 1.3a PCB.
Here’s an introduction to the technology:
The shipping “estimator” at Mouser.com is a little vague, so I thought I’d post the results of a recent order. In general, you’re not going to know the shipping cost or the weight of your order until after it’s shipped.
My recent order totaled $189.12 and had 33 line items, including all kids of components (resistors, capacitors, ICs, connectors, crystals, buttons, crimp terminals, etc), in quantities ranging from 2 to 250, primarily for assembling four Sanguinololu circuit boards (with some exceptions, plus some other stuff).
Selecting residential delivery via USPS to North Carolina, USA, the Mouser shipping estimator listed $6.95 for 1 pound and $9.60 for 2 pounds. I guess that the order wouldn’t weigh any more than 2 pounds. The actual invoiced shipping cost turned out to be $7.74.
Although the order was prepared the previous night, I didn’t remember to actually place it until just after 4:00 EST on January 25, 2012 — so I had just missed the same-day shipping cut-off time. The order shipped on January 26, and the credit charge (for the exact invoice amount) was posted on January 27.
The delivery tracking updates were as follows:
I’ve set out to build a Prusa Mendel for $300. So far I think I’m doing pretty well. The top part is what I’ve already picked up, and the bottom part is what I have yet to purchase — that’s where I still have some flexibility in cost. The first column is the percentage of total cost for that part. Shipping charges for a group of items from the same supplier are listed with the first item in that group. [Note: This chart has been updated many times as I build, and as because I'm already up and running with my reprap 3D printer, there's no longer anything left to purchase.]
Where I discovered mistakes, I’ve corrected them. For example, I actually ordered nylock #6 nuts instead of regular ones. In cases like these, I’ve just corrected the prices and pretended like I never incurred the cost of the wrong product.
There’s one important point I’d like to make out here: I was patient, I waited for good deals (and occasionally got exceptional ones), and I arranged some group buys for bulk discounts. Often if you agree to purchase larger quantities of a product, you can secure a discounted rate, and so that’s what I did where I could. You might not find all of the same deals I did, but you may get pretty close if you are patient and work with your suppliers.
I’ve added a table below that breaks out the electronics order, including what I had on hand, what I bought from ebay, and what I didn’t actually need. (Welcome Hack A Day readers!)
Finally, be sure to scroll to the right in the spreadsheet views for important notes or shortcuts on most line items.
It’s not easy to find concrete examples of shipping costs for McMaster-Carr online, and they don’t tell you what an order is going to cost to ship until after it’s already shipped — and that can be a little scary especially if you’re ordering odd sized parts, even if they only charge their shipping cost. So here’s a real example of shipping costs for a small order with some long parts to NC, USA. The order was placed online and shipped the same day from their Atlanta, GA, USA location.
For a reprap build, I ordered these items, which include three 3-foot steel rods, 200 nuts, 292 washers, and 200 machine screws. Shipping was only $6.52 for everything. That’s not bad at all…
|
||||||||||||||||||||||||||||||||||||||||
|