Cheap RepRap Cable Guide

I’ve come up with a cheap and easy cable guide hack for use with RepRap 3D printers. The trick is to wrap the electrical wires in sleeving along with a piece of piano wire. I’ve used 0.8 mm piano wire, but anything between 0.5 mm and 1 mm will likely work fine.

The photo below shows a close-up of the wrapped electrical wires and piano wire powering the heated bed of my RepRap Prusa Mendel i2.

As you can see in the following photo, the piano wire keeps the cable arranged in a nice arc at all times, thus making sure it will never touch the heated bed or get in the way of its movement.

The top end of the cable harness is secured to the threaded rod using cable ties. The end near the heated bed is secured using a self adhesive cable tie mount as shown below.

RepRap Thermal Imaging

Ever since I wired up the heated build plate and extruder hot end to my RepRap, I’ve wanted to verify the thermal temperatures and heat distribution. For starters, I have used a cheap infrared thermometer, which is fine for verifying the temperatures, but not very well suited for verifying heat distribution.

Last week, I got my hands on a Fluke Ti25 Thermal Imager – perfect for getting a good look at the heat distribution!

My heat bed is a sandwich with Josef Prusa’s PCB heat bed on the bottom and a 4 mm glass plate covered in kapton on the top. My thermistor for sensing the temperature of the heat bed is taped to the bottom side of the PCB. As shown by the image below, the glass plate does a good job of evening out the heat from the PCB.

Prusa PCB Heat Bed

However, I was surprised to see how much the temperature of the kapton-covered glass surface lacks behind the temperature on the bottom side of the PCB (which, incidentally, is where my thermistor is placed). On the image above, the top is 85.8 C while the heat reflection by the bottom alu plate reads 92.8 C – nearly the same temperature sensed by my thermistor at that time. The top glass surface catches up to the bottom temperure eventually, but it takes as long as 5 minutes for it to become stable. This explains why some of my prints have had a hard time sticking to the heated build plate – it simply wasn’t warm enough, when I started the print.

J-Head MkII Nozzle

The image above is of my extruders hot end, a 0.5 mm J-head MkII (or should that be 0.4572 mm?). Again, I was quite surprised by the thermal imaging – the heater resistor goes as high as 302.3 C when heating the nozzle to 200 C! That’s quite a lot more than I would have expected – good thing I’ve used cement that can withstand 1100 C for gluing in the thermistor and resistor.

RAMPS 1.4

Finally, the image above is of my RAMPS 1.4, which has small EnzoTech MOS-C1 heatsinks mounted on all the Allegro A4988 stepper drivers. Notice how cool the heatsinks are – and notice how hot the PCB gets. Good thing those heatsinks were cheap…

My RepRap Prusa – Iteration 2

In August last year, I was swept away by the idea of the Open Source/Open Hardware Replicating Rapid Prototyper, or RepRap for short. The RepRap project is a community effort to create a 3D printer capable of self-replication.

I first encountered the idea behind the RepRap at our friends at Labitat and shortly thereafter began self-sourcing the materials needed to build a Prusa Mendel v1, which – at that time – was state of the art within the RepRap community.

During the Fall and Winter, I managed to complete my Prusa Mendel build, and shortly before Christmas I had my first working 3D print!

For more photos of some of the items, I have printed on this machine, visit my Thingiverse page…

I have since then begun updating my RepRap to the Prusa Mendel Iteration 2 design, based on linear LM8UU bearings. The conversion is 66% done (X- and Y-axis are done, Z-axis still using printed PLA-bushings).

Stay tuned for posts with the small hints and tips, I have picked up while building this amazing machine!

Downloading Sony GPS Assist Data Manually

After having bought a new Sony DSC-HX5V digital camera, which is equipped with an integrated GPS, I discovered that it comes with windows-only software for downloading and updating the GPS almanac on the camera (the supplied PMB Portable software runs on Apple OS X, but it does not support downloading the GPS almanac).

After tinkering a bit with tcpdump(1) and friends I found out how to perform the download and update manually:

  1. Download assistme.dat
  2. Download assistme.md5
  3. Verify that the MD5 sum of the assistme.dat file matches the one in the assistme.md5 file
  4. Create a top-level folder hierarchy on the memory card for the camera (not the internal memory of the camera) called PRIVATE/SONY/GPS/
  5. Place the downloaded assistme.dat file in the PRIVATE/SONY/GPS/ folder
  6. Place the memory card in the camera and verify that the GPS Assist Data is valid

I have written a small perl script for automating the above tasks. The script takes the mount point of the memory card as argument.

Monitoring Soekris Temperature through SNMP

Here’s a quick tip for monitoring the temperature of your Soekris net4801 through SNMP on FreeBSD:

Install the net-mgmt/bsnmp-ucd and sysutils/env4801 ports and add the following to /etc/snmpd.conf:

begemotSnmpdModulePath."ucd" = "/usr/local/lib/snmp_ucd.so"
%ucd
extNames.0 = "temperature"
extCommand.0 = "/usr/local/sbin/env4801 | /usr/bin/grep ^Temp | /usr/bin/cut -d ' ' -f 6"

Enable and start bsnmpd(1). The temperature of your Soekris net4801 can now be queried through UCD-SNMP-MIB::extOutput.0 OID (1.3.6.1.4.1.2021.8.1.101.0).

Plotting Load Average as Floating Point using MRTG

The web is flooded with examples of how to use the popular MRTG software for plotting more exotic SNMP OIDs than just network traffic.

One of the more popular variables to graph seems to be the load average of a given system, but all of the examples I have stumpled upon online compromise when it comes to plotting the load average as a floating point value.

It is, however, possible to post-process the gathered statistics before plotting the graph and the legend using the YTicsFactor and Factor keywords as shown in the example below:

Options[load]: gauge, nopercent, noo
Target[load]: 1.3.6.1.4.1.2021.10.1.5.2&PseudoZero:public@localhost
MaxBytes[load]: 100
Title[load]: 5 Minute Load Average
PageTop[load]: <h1>5 Minute Load Average</h1>
YLegend[load]: Load Average
ShortLegend[load]: &nbsp;
Legend1[load]: 5 Minute Load Average
Legend3[load]: Maximum Observed Load Average
LegendI[load]: &nbsp;Load Average:
YTicsFactor[load]: 0.01
Factor[load]: 0.01

The above example will gather the 5 minute load average as an integer value (average load x 100) of localhost and use a scaling factor of 0.01 before actually plotting the graph.

Judging from the examples I have found online, the noo option and the PseudoZero pseudo OID used in the example are other, often overlooked features of MRTG. The noo option specifies that no “Output” graph shall be plotted while the PseudoZero pseudo OID always returns 0 (whereas noi disables the “Input” graph and PseudoOne always returns 1).

Terminal.app vs. iTerm, Round II

A lot of water has passed beneath the bridge since I wrote my last entry about Apples Terminal.app vs. iTerm. Apple has released Snow Leopard with, among other things, a much improved version of Terminal.app, which has gotten me to ditch iTerm again.

So, I bring to you a version of the script for opening a new terminal window on the currently active desktop space – the Terminal.app way:

tell application "System Events"
	set TerminalCount to (count (every process whose name is "Terminal"))
end tell

if (TerminalCount is not 0) then
	tell application "Terminal"
		do script
		activate
	end tell
else
	tell application "Terminal"
		activate
	end tell
end if

As usual: Save the script to a .scpt file, open it with Script Editor, save as an Application and place a shortcut in your Dock.

Terminal.app vs. iTerm

Having used Apple’s own Terminal.app for all my terminal emulator needs since I switched to OS X on my primary workstation, I decided to take iTerm for a spin this weekend – it was a pleasant surprise.

Compared to Terminal.app, iTerm seems to suck up a few more system resources, but this is – imho – easily made up for with the added features. Especially tab support is much better in iTerm than in Terminal.app. Being able to set the title of tabs from the running shell (using the XTerm “icon name” escape sequence) along with the tab activity indicators rocks. Copy-on-selection and Cmd-click to launch URLs are also nice additions, that – once you get used to them – are very hard to work without.

There is, however, one missing feature of both Terminal.app and iTerm: The ability to click an icon in the Dock and have a new terminal emulator window open in the currently selected space. I’ve written a small AppleScript to do just that for iTerm:

tell application "System Events"
	set iTermCount to (count (every process whose name is "iTerm"))
end tell

if (iTermCount is not 0) then
	tell application "iTerm"
		set newterm to (make new terminal)
		tell newterm
			launch session "Default"
			activate
		end tell
	end tell
else
	tell application "iTerm"
		activate
	end tell
end if

Save the script to a .scpt file, open it with Script Editor, save as an Application and place a shortcut in your Dock.

Booting nanoBSD on the Alix2c2 SBC

A friend and I recently purchased a couple of Alix2c2 SBCs from PC Engines with the intention of running FreeBSDs nanoBSD on them.

However, getting nanoBSD to boot on the Alix board turned out to require a few customizations which I will post here in the hope of saving others the trouble.

The Alix2c2 reports the following at boot time for the noname 1GB CF card from PC Engines:

PC Engines ALIX.2 v0.99
640 KB Base Memory
261120 KB Extended Memory

01F0 Master 044A CF 1GB                                  
Phys C/H/S 1966/16/63 Log C/H/S 983/32/63

Running diskinfo(8) on the CF in an USB CF card reader on another FreeBSD machine revealed the capacity of the card:

$ diskinfo /dev/da0
/dev/da0        512     1014644736      1981728 967     64      32

Gettng nanoBSD to boot on the Alix2c from the 1GB CF card required the following customizations to the nanoBSD configuration file:

# Drive geometry
NANO_DRIVE=ad0
NANO_MEDIASIZE=`expr 1014644736 / 512` # size from diskinfo(8) on the UBS CF card reader
NANO_HEADS=32 # heads from the logic CHS information at boot time
NANO_SECTS=63 # sects from the logic CHS information at boot time

# Boot loader
NANO_BOOT0CFG="-o nopacket -s 1 -m 3" # nopacket seems to be required by tinyBIOS

Before booting nanoBSD, hit ‘s’ on the Alix2c2 serial console during RAM testing and switch the BIOS to LBA mode and 9600 baud serial console (default is 38400 baud, but this wont work with boot0sio). Re-attach to the serial console with 9600 baud and reboot to verify the setup.

One Month of iPhone 3G

Having had my iPhone 3G for a month now, I think it’s time for a quick status report slash review slash list of annoyances – in no particular order:

Missing Status Bar Icon for Ringer/Silent Switch
A minor thing, sure, but I can not count how many times I have missed an SMS notification or an incoming call simply because I’ve forgotten to turn the ringer back on upon leaving a meeting. Of course, the switch on the side indicates the current ringer mode, but a visual indication in the top status bar on the display would be nice.

Occasional Crashes
More than a few times when the iPod application was playing music and Safari was busy downloading or scrolling a heavy weight web page, my iPhone crashed or locked up hard – requiring a manual restart (holding down Home and Sleep/Wake button for a few seconds) in order to get back to working condition. Rather annoying. [Update: This seems to have been fixed by update to iPhone OS 2.0.2]

Inconsistent Screen Locking
Locking the screen while the iPod is playing does not lock the volume keys on the side – often resulting in the volume keys being activated by accident while the iPhone is tucked away in my pocket, which is quite annoying. It would be nice to be able to configure this behaviour. Also, double-clicking the Home button while the screen is locked still brings up the iPod controls (if this feature is enabled in Settings) – again, it would be nice if it was configurable if the screen lock should disable double-clicking as well.

Lack of Calendar Synchronization
For some reason, Apple does not (yet?) allow third party applications to access the calendar on the iPhone, and since the built-in calendar can only synchronize with MobileMe and Exchange over the air, this leaves the calendar application pretty much useless if you do not use either of those for your calendar. I’d love to see the calendar opened either opened up for third party applications or at least a way to synchronize the calendar using less … ahem … expensive solutions (e.g. the calendar on my iPod Nano can read a standard *.ics file – the iPhone e-mail client can read a *.vcf file and import its contents into the Contacts application, but it can not open an *.ics file).

Despite the above annoyances I am still quite pleased with my iPhone 3G. It is by far the most advanced mobile device I have ever had, and it beats the features of my previous mobile phones with several lengths. I hope – perhaps I’m just being naive – that the rumoured 2.1 firmware will address some of the above mentioned issues.