Before our Steam Rocket leaked fuel into the top of it, I used to have a wireless basestation on my desk, and I’d got in the habit of looking at the activity lights when a download was taking longer than it should to see if anything was actually happening. Being a creature of habit, I kept glancing at where it used to be whenever I was waiting for a web page; clearly a replacement was needed. Well, here at last it is: a steam gauge to measure the pressure in the tubes of the Internet.
This is a real steam pressure gauge, but with a slight modifcation – it now measures packets per second. Read on below for how it works…
The steam gauge originally worked by steam pressure causing the curved flattened tube to straighten, which then pulled on the brass linkage causing the toothed lever to pivot, and the teeth drive a cog that turns the pointer. I disconnected the curved tube from the linkage, straighted the tube slightly, and attached a miniature servo motor to the end. From the servo, a carefully bent paper clip pulls on the original linkage driving the pointer.
Here’s the back of the gauge, with the cover removed:
The electronics are probably overkill for this application, but they work well. A Devantech USB-to-I2C convertor takes commands from the Mac over USB, and sends them via an I2C bus to an SD21 21-channel servo controller board. I’m only using one channel at the moment, so expect more computer controlled hardware in the not too distant future. I’ll remove the breadboard and repackage the electronics in a nice wooden box sometime soon.
The servo motor is a Saturn S62 which is very small, but seems to have no difficulty in driving this meter. All the power is supplied from the Mac’s USB port, which is a little lower voltage than is ideal for the servo, but it seems happy enough. The servo is quite capable of driving the gauge from 0 right up past 200 and hitting the stop from below in a fraction of a second – I had to configure the servo controller to change the servo’s position at close to its minimum speed to avoid the needle jumping too fast.
The software is pretty trivial, comprising a 40 line program in C to send commands to the servo controller, and a 30-line script to get the network statistics and call the C program. At some point I’ll re-code it all in C to be more efficient, but this works fine for now. It only collects network stats once a second, so there is a slight lag between clicking on a hyperlink and the steam pressure rising.