Double roll crusher

This is the machine I designed for my thesis project. Some native plant species in the south west have seeds with extremely tough outer shells, which help them withstand adverse conditions. But when rehabilitating a minesite, we need seeds ready-to-go, they can’t be sitting around in the soil for years before germinating. This machine is able to crack the outer shell without damaging the seed embryo inside – the gap between the rollers can be adjusted to give the perfect amount of cracking effort. In addition, it’s designed to be ergonomic and easy to use and maintain.


Aquarium Lighting! Pt. 1

My aquarium is fully planted:

I have a Finnex Planted+ 24/7 RGB LED light – the W/R channels provide the necessary light for photosynthesis while the G/B channels allow for colour mixing, to give a sunrise/sunset cycle. The trouble is, the timing for this cycle is fixed and there’s no way to vary the photoperiod – which is actually a bit long for my tank and leads to algae buildup. So I’ve had to keep the light on a timed socket to reduce the photoperiod, which sadly means no more sunrise/sunset cycle. If only I had a better way to control the light…

I’m looking at moving to a longer tank, which will need a new light. Commercial options run at about $250 minimum for the LEDs and controller – if only I had a decent controller I could use cheaper LEDs!

Commercial LED controllers (for example the Phillips Hue) are cheaper, but still a bit pricey – and don’t give the flexibility I’m looking for. So I’m planning to build a custom 4 channel light controller. It will need to interface with the existing LED strip in the Planted+; after some poking around I’ve found that the microcontroller in the light supplies +15V to the LEDs and runs PWM switching to ground.

The controller will be based on a Raspberry Pi 3, because I had one lying around and it will allow for easy wifi updates of the light program. I’ll design a PCB to be printed cheaply (e.g. SeeedStudio) and plug directly into the RPi – the circuit will mimic the existing low-side switching arrangement. The whole controller will be powered by two SMPS’s – 25W@5V for the RPi and 70W@15V for the LEDs. The existing power supply is rated for 15W@15V, so this should allow for almost 3x the light level.

The total project cost should be under $100 (plus a bit of work) and will allow for much more flexibility than a similarly-priced commercial option.

Variable Stroke Pt. 1

I’ve been experimenting with variable stroke linkages for a while, with most of my new prototypes being 3d printed. These linkages have two inputs – the crankshaft and the stroke amplitude input – so I’ve been using gears to drive the two from one input.

Traditional gear manufacture involves using off-the-shelf tools to cut gears from blanks, and proper use of the tools will give accurate geometry. But 3d printing the gears requires an exact model of the involute tooth surface, which is a bit more tricky. Solidworks includes a “gear” template, but this is just a placeholder, not an accurate model. Some models can be found online, but these are almost always in imperial units. I wanted a parametric model of a precise involute cylindrical gear, using the metric standard, so I made my own.

There are 5 key numbers that define a given gear:

  • m – module
  • z – number of teeth
  • \alpha – pressure angle
  • \psi – helix angle
  • x – profile shift

I’ll discuss the last two in a later post. For now we can assume they are equal to zero, so that the model is only dependent on the first three.

A metric gear has two primary tooth size measurements aside from m: h_a – the addendum height, and c – the root clearance. These are shown below in a sketch of an “unrolled” tooth. Typically, h_a = 1.0 and c = 0.25. Four important dimensions associated with the gear are:

  • D_p = m \cdot z – the pitch diameter
  • D_a = D_p + 2 \cdot h_a – the tip diameter
  • D_f = D_p - 2 (h_a + c) – the root diameter
  • D_b = D_p \cdot cos\alpha – the base circle diameter

Involute gears use a tooth profile following an involute curve – this is by definition the curve obtained by unrolling a string from a circle. The “string” is always tangent to it’s “base circle” and perpendicular to the curve obtained, as shown below for a base circle of radius r. The position of point O is (x_O, y_O) = (r cos\theta, r sin\theta). Point Q on the involute is then:

    \begin{align*} (x_Q, y_Q) &= (x_O + l sin\theta, y_O - l cos\theta) \\ &= r(cos\theta + \theta sin\theta, sin\theta - \theta cos\theta) \end{align*}

This equation can be used directly in Solidworks as an equation curve defining the tooth face, however it only defines one side of one tooth. Ideally the modelled tooth will be symmetric about the x-axis, so the involute needs to be offset (rotated around the base circle) by the appropriate amount. We also need to know when to start and end the curve.

The rotated involute curve can be formulated by multiplying the involute equation above by a rotation matrix R(\gamma), which rotates the curve counter-clockwise about the origin by \gamma radians. The generic equation for an involute of a base circle with radius r_b, rotated by angle \gamma is:

    \begin{align*} \begin{bmatrix} x_\theta \\ y_\theta \end{bmatrix} &= \begin{bmatrix} cos\gamma & -sin\gamma \\ sin\gamma & cos\gamma \end{bmatrix} \cdot \begin{bmatrix} cos\theta + \theta sin\theta \\ sin\theta - \theta cos\theta \end{bmatrix} \\ &= r_b \cdot \begin{bmatrix} cos(\theta+\gamma) + \theta sin(\theta+\gamma) \\ sin(\theta+\gamma) - \theta cos(\theta+\gamma) \end{bmatrix} \end{align*}

The involute curve needs to be rotated such that the tooth axis lies on the x-axis, as depicted below. This angle \beta can be separated into two components:

  • The half-tooth-width angle \phi = \frac{2\pi}{z} \cdot \frac{1}{4} = \frac{\pi}{2 \cdot z}
  • The involute angle inv(\alpha) = tan\alpha-\alpha

So \beta = \frac{\pi}{2 \cdot z} + tan\alpha - \alpha, and the involute should be rotated clockwise by this angle, so \gamma=-\beta. The equation for this curve is:

    \begin{equation*} \begin{bmatrix} x_\theta \\ y_\theta \end{bmatrix} = \frac{D_b}{2} \cdot \begin{bmatrix} cos(\theta-\beta) + \theta sin(\theta-\beta) \\ sin(\theta-\beta) - \theta cos(\theta-\beta) \end{bmatrix} \end{equation*}

For the opposite of the tooth, the involute “string” is beign unrolled clockwise: simply take \theta\rightarrow-\theta. The curve is then rotated counter-clockwise, so take \beta\rightarrow-\beta.

What are the limits of the curve? From the above diagram, the distance between the origin and Q is \frac{D_Q}{2}. Then l = \sqrt{\frac{D_Q}{2}^2 - \frac{D_b}{2}^2}. But we also have l = \frac{D_b}{2}\cdot\theta, so the angle \theta where point Q is at a diameter D_Q is given by:

    \begin{align*} \theta_Q &= \frac{l}{(\frac{D_b}{2})} \\ &= \frac{\sqrt{D_Q^2-D_b^2}}{D_b} \end{align*}

The maximum point of the curve (at the tip) is then given by \theta_a = \frac{\sqrt{D_a^2-D_b^2}}{D_b}.
The minimum point (at the root) is given by \theta_f = \frac{\sqrt{D_f^2-D_b^2}}{D_b}.
The tooth profile is then formed by tracing the involute curve (x_\theta, y_\theta) between these limits. Except for some gears (z <\approx 40 – see below) the root is actually below the base circle – and the involute is not defined below the base circle.

In this case I model the tooth flank as a straight, radial line. In reality the tooth flank is sometimes undercut, and I will go into this in another post.

3d Printer

Earlier this year I decided to get a 3d printer to help with prototyping in robotics & various other hobbies. I wasn’t particularly wowed by any of the consumer-grade options available, and it seemed like sourcing individual parts for a full DIY design would take more effort than it was worth, so I went with a kit!


My requirements were pretty simple:

  • E3D v6 hotend
  • Heated glass bed
  • >150 mm printing range in all dimensions
  • Easily expanded

There were a few options satisfying these, in the end I chose a MTW MiniMax as the best value for money.




Mechanical systems assembled

Mechanical systems assembled

It took a few afternoons to get it up & running. I started printing with PLA as most people recommend it as the best all-rounder material, but I’ve since found PETG to be stronger, more stable and easier to print.

After (slowly) printing a fan bracket I printed a case for a raspberry pi, which would act as a print server and allow me to not be tethered to the printer during a job.

Print server

Print server

Since then I’ve added a whole series of modifications, improving print quality and ease of use:

  • Y-axis cable chain (from MTW) – keeping things tidy
  • Rubber foot mounts (from MTW) – to reduce noise & vibration
  • Easy bed levellers (by beerglut) – the original bed levellers needed a screwdriver to adjust, these use thumbwheels instead
  • 360 degree print fan shroud (by beerglut) – for more uniform print cooling
  • Extruder fan mount – to cool the extruder gear & prevent it from warping PETG before the hotend
  • Sprung Z-homing screw – to reduce backlash present in the original design
  • Filament spool mount – intended to reduce the load on the extruder motor by mounting the spool on a bearing-supported roller, but this removed all tension from the spool and just resulted in tangled filament
  • Power supply cover & switch – the kit as-built includes only minimal protection from the mains wiring at the back, and needs to be turned on/off at the wall – so I installed a fused switch with a C14 socket to make it a bit safer & easier


Stereo Shelf

I bought a stereo and the speakers were bigger than the ones I’d planned to get – so I built a cabinet/shelf for them.

The cabinet was specifically designed to:

  • be cheap & easy
  • be stable & well-balanced
  • have a small footprint, and be invisible
  • provide access to cables for the TV
  • allow airflow over the TV to prevent overheating

It was cut from a single sheet of 900 x 600 x 9 plywood. All joints are glued butt joints with the butt surfaces oriented vertically, so that the glue takes almost no load.

There were a few thicknesses of plywood available so I made up a quick model in solidworks (with the thickness as a variable) and ran an FEA based on the speaker weight plus a bit extra – solidworks FEA isn’t the most accurate but it was good enough to check my numbers. The first set of results weren’t great so I added gussets below the top shelf:

The gussets brought the max deflection down to ~100 micron which is probably overkill!

In total, the project took an hour of planning, $15 of timber and paint, and a few afternoons of work. Overall a success!

Robot platform

This robot platform is just for my own experiments in robotics electronics & software, mostly just building on what I learned from Dusty & the NIARC project. Overall the aim is to provide a platform for localisation & mapping, for very low cost at the expense of added effort.


20170213_195947Chassis: Laser-cut acrylic with brass standoffs

Structural parts: 3d printed in blue PETG

Drive: 2x high-torque stepper motors, each driven by a TI DRV8825 driver which offers comparatively high performance for the cost. Big fat squishy tires since hard wheels didn’t perform well before. A dedicated stepper cooling fan will keep things running nicely.

Sensors: 6x HC-SR04 ultrasonic sensors, GY-85 9dof inertial measurement unit.

Electrical & Brains: TBC! The system will run off two 3S lithium batteries in series, giving 24V. I’m aiming to use a separate microcontroller for each system, with CAN communication between systems.



Leucopogon propiniquus

4a. L.propiniquus 24kv

X-ray microscope image of L. propiniquus seeds