The V2.1 update produced a working mount, but it unfortunately was not very user friendly.  I made a few modifications to improve the setup and aiming time, as well as its ability to disassemble and stow in a modest-sized wood box for storage and transport.

V2.2 (codename: HoLi) is the mount’s final design, as I’m very happy with it and have moved on to building the V3.0.  See the photo of Orion’s Nebula below taken using this mount, I’ve been happy with its performance using lenses as long as 300mm.

2017-03-18 Orion Nebula 001Codename: HoLi


First up, a couple tripod clamps were purchased from eBay (less than $10 total).  They were slightly modified to hold support arms, the other end of which fastened to the tracking mount.  This improved the mount’s stability ALOT.

The white bushing on the end of the clamp is 3D printed, designed so that the support arm can slide through until the knob is tightened.  A 1/4″ wingnut on the yellow arm makes assembly / disassembly easy.

Aligning the mount is very easy now with the red dot sight.  It is mounted on the blue interface component which was 3D printed as well.  Magnets in the interface hold it firmly on the mount body and allow easy removal.  Works very well!


Adjustments to the aiming using only the 3-way head were torturous.  I improved this somewhat with a Right Ascension (RA) clutch / fine adjustment assembly.  This only allows easy adjustment in one axis, but is a huge improvement.  If adjustments need to be made in another axis, it’s really no big deal to do them and risk throwing off the RA axis.  Just fix the RA axis afterward.  I did have a Declination axis adjustment at one point, but it did not work so well and added alot of bulk to the mount.  It was tossed.

The clutch is really a clamp on the pivot shaft.  The grey lever doesn’t really do anything except hold everything together.  You can see in the second photo how the clutch disengages quickly and easily, allowing a gross adjustment of the RA axis.


The fine adjustments are made with the two nuts on the centre of the rod.  The clamping arms flanking the longer driven arm are really what’s turning the camera.  The longer driven arm is only an idler, and moves the clamping arms via the threaded rod you see.  I really should replace them with wingnuts, but it works so well at the moment that I’m not concerned.  There’s only a few degrees of fine adjustment.  That’s all I need given the type of imaging this mount is designed for.


The entire device disassembles in a few minutes and stows nicely in a wood box.  The only complaint I have is the magnets on the alignment sight don’t always sit nicely with all the other metal.  I’ll probably eventually write Ikea-style assembly instructions on the lid so that anybody can borrow and use it.


Thanks for reading!


3D Printed Solar Film Holder


At the last minute, I purchased a sheet of Baader Planetarium solar film for the eclipse on Monday.  With little time to spare, the film was taped to a cardboard box and slid over my telescope.  Prayers were made that the wind wouldn’t blow the film off of the scope, and the next day I decided to build a proper holder for the expensive film – $100 CAD for an 8″ x 11″ sheet!


The telescope is a Skywatcher 80ED diffractor.  The film holder was designed to slide snugly over the end of the telescope such that there would be no fear of it falling off.  The four tabs curve inward and add a healthy amount of friction.  The cap and plug are for safe storage of the film.  There is about 3 mm of clearance between the film and the cap / plug, which should be plenty to prevent contact.

All parts were 3D printed except the screws.  Blue parts were printed in PLA (faster and cleaner printing) and the orange parts in PETG (Added flexibility).  Assembly was performed carefully but was relatively easy.  Countersunk M3 screws were used and self-tapped into the body.  Prior to final assembly, the body and clamp were temporarily assembled and the hinge was drilled out to clean up the print.

The unusual pattern on the cap and plug have three purposes: decreasing filament usage, adding texture, and (most importantly!) allowing the print to be removed from the print bed easier.  Solid printed faces on the print bed are more difficult to remove, which can result in warping the prints during removal.

Future Changes:

I discovered that the snug fit prevents air from escaping the tube when the filter is being attached or removed.  A small clearance would fix this.

The parts can be found at

3D Printed Solar Film Holder

Tracker V2.1


Most DIY astro-tracking mounts can be described as either low-quality barn-door mounts (with questionable door hinges used as pivots) or high-cost and effort equatorial mounts (typically equipped with complex drive systems).  The original Tracker V2 was designed to be an attempt to combine low-cost and high-quality elements in a single mount.  The basic design could be described as a hybrid barn-door/equatorial style mount.

That said, Tracker V2 was tested using a 250mm lens on a cropped-sensor camera and did not produce sharp OR consistent images!  Further examination at the shop revealed that the 10-32 nut and threaded rod caused the arm to advance erratically.  There was no way to eliminate or even mitigate the issue, so a bit of an overhaul was in order.  Enter: Tracker V2.1!

NOTE: While the V2.1 modification corrected the drive issue and made the device useful for unguided DSO astrophotography, it suffered from usability issues which made setup and targeting very difficult.  Improvements were made for the V2.2 upgrade, which concludes this project.  I currently building a V3, which will be another screw & arm-driven equatorial.  It will have 2-axis auto-guiding among other improvements over the V2.x design (which has admittedly been a product of evolution rather than design and planning).  

M31 (Andromeda Galaxy) – imaged using Tracker V2.1


Instead of using the 10-32 nut and rod, I ordered a section of 8mm acme rod from eBay ($12) with an appropriate nut.  I kept the Tracker V2 base and pivot assembly, as well as the controller and motor.  The arm was extended to about 30 cm.  Because of the extra arm length, I probably would have felt comfortable using a straight section of 10-32 rod… However, I wanted to eliminate the possibility of further issues due to the threaded rod.

The drive retracts the rod

The straight rod added quite a bit of complexity to the hardware and software (not to mention it doesn’t look nearly as cool).  On the hardware side, the acme rod had to pivot on the end of the arms.  I built the pivots using small 6mm bearings.  The drive nut was press fit into a bearing and a gear was screwed to the top of the nut.  The motor from Tracker V2 was used to turn a worm gear, which drove the nut gear.  The bottom of the acme rod was held into the pivot with a clip and could be removed for storage.

Controller Upgrade:

The Arduino built-in Math library has trigonometric functions built in.  However, the precision of those calculations using basic triangle formulas wasn’t good enough for this application, and I couldn’t think of a way to improve them.  So instead of calculating the motor speed on the fly, I used Excel and VBA to create a table for the controller to follow.  The table told the controller when a change in speed was required, which occurred over 1,000 times per full stroke.  Each value was stored as 32-bit integer, so the table required almost 4 kB – much more than the ATTiny85’s SRAM could hold.  The solution was to keep the table in the controller’s flash memory and retrieve each value as required.  See this Gammon forum post for details on how this is done.  The controller’s code and spreadsheet I used to build the speed table is in the Github repository (link at bottom).

Ready for storage

One potential remaining problem was getting an accurate clock to run the controller.  FYI – if you have a 300 mm lens on an 18 MP cropped-sensor camera, and want the stars to move 0.1 pixels on the sensor every 15 seconds, then you need a mount that is 99.9% accurate.  That includes all movement errors that the tracker introduces.  So how accurate is the internal oscillator inside an ATTiny85?

I tested the clock by running a script which briefly turns on a pin every 300,000 ms (5 minutes), and logged the timing of the pin oscillations with a laptop using a python script.  I tested it inside my office (~20 degrees C) and outside (~-15 degrees C).  The results surprised me – the internal oscillator was only 0.1% fast on average, and temperature had a very small effect.  Contrary to what I expected, the oscillator’s speed increased as temperature decreased.  I compensated for the clock’s slight inaccuracy by adjusting the controller’s speed table.

Lots of noise in the clock speed data (due to how the test was conducted), but the effect of temperature is obvious
Only one controller tested… YMMV

Future improvements (for a possible V3?):

  • A temperature-compensated crystal to eliminate ALL clock inaccuracies
  • Exchange the stupid 3-way head for a proper ball head
  • Instead of having the head come off the side of the pivot shaft, it would seem to make more sense if it came off the front (and move the pivot arm to the rear).  This would make the entire assembly more balanced, and would be easier to construct.
  • Replace the LM298N for a proper stepper motor driver with partial step increments.  This would mitigate the small vibration caused by the motor each time it steps.

Data: (Update in progress…)

Tracker V2.1

Pyrography Power Supply #DIY

Wood burning is a popular hobby which can become quite expensive.  A quality wood burning system consists of: 1. A pen or selection of pens and 2. A power supply (station).  I decided to invest in a series of Razertip wood burning pens simply because they were available at a local Lee Valley Tools store (they also have a 1-year unconditional warranty – if I end up destroying a pen with a home-built supply then we will find out just how unconditional the warranty is).  The pens are available for ~$30 each, which can become a significant investment if you want more than one or two.  The stations run for $165 and up, which is the same price as six pens!  So lets ditch the station.

According to this fantastic pyrography resource, the Razertip station provides 2 volts and the pens draw 10 amps.  It isn’t clear if the regular or heavy duty pens draw this much current, but I suspect that it is the heavy duty pens since they require a special cord rated for 10 amps.  So what can provide 2 volts at 10 amps?  An ATX PSU with a PWM-controlled output!


An ATX PSU requires a small amount of modification to be useful for other projects.  This article explains the right way to do it.  I skipped a few steps, simply cut all wires except for a ground (black), +3.3V (orange), and +5V (red).  I also connected the green wire directly to ground so the PSU will turn on as soon as the main power switch on the back (now the front!) is turned on.

The PSU’s 3.3 volt rail was rated for 30 amps.  The idea was to control the 3.3 volt output by a logic MOSFET to provide the correct power output without damaging the PSU.  I sourced a MOSFET with a low gate capacitance so that an ATTINY85 microcontroller could drive the gate at high frequency.  Mistake!  After hooking up the 3.3V output to a pen and driving the IRL540N’s gate without any resistors, an oscilloscope revealed significant voltage spikes (>40V) when the transistor was energized and de-energized.


So, I kept using the same transistor but added a 47K ohm resistor between the microcontroller and the transistor’s gate.  A few resistors were experimented with first, but 47K ohm was the lowest to completely eliminate the voltage spikes.  The slow state change resulted in a significant amount of heat from the transistor, so I found a suitable heatsink from another junked electronic board and mounted the transistor on it.  The transistor and controller were mounted inside the PSU with the heatsink adjacent to the fan.  Just to be sure that the brutality to the PSU was minimized, the PWM frequency was kept very low.  Driving the transistor at about 50 hertz did not seem to affect the pen’s performance, although I haven’t experimented with even lower frequencies to see how low it could go.

The heat output was controlled by pressing a button mounted on the PSU case beside the power switch.  It has five settings, which can be re-programmed after the unit has been field tested.  An LED indicates the station’s status.  The logic portion of the unit is powered by the PSU’s 5V rail (so that it’s separated from any power irregularities on the 3.3V rail), which also has a low-resistance, high-power resistor to keep the switching power supply stable.

As for a cable, the pens connect to the station via a basic RCA connector.  I happened to have an RCA cable handy, so I simply cut one end off and connected it to the station.  About 2 feet of cord is sufficient, and can be extended if there are any complaints.

See the Arduino Code here.

Pyrography Power Supply #DIY

Ballistic Chronograph #DIY


A ballistic chronograph is an instrument which measures the speed of very fast things (like bullets).  I decided to build one which could be used for high-speed photography, such as glassware getting shot with an air-powered rifle (see my other post on this topic or my Flickr album).  In order to take such a photo, you need to be able to trigger a flash at just the right moment, which will freeze all the juicy action.

There are numerous resources available which give very limited information on how to build such an instrument.  Unfortunately all of the resources are incomplete or describe an instrument which only works for slower objects, such as paintballs or airsoft pellets.  I designed and built this using the information available on the internet, my modest understanding of electronics, and many hours of trial-and-error.  To somebody who has some knowledge of electronic components, this post can be used to build an instrument useful for measuring the speed of objects travelling up to 1,000 m/s (such as high-powered rifle bullets), and even photographing a projectile ‘interacting’ with other objects!

Basic Principles (for the uninitiated):

The principle behind optical ballistic chronographs are simple, but here’s a basic overview of how the instrument works.  Two optical gates are mounted a certain distance apart.  I’ll get into how the optical gates work in a minute, but their sole purpose is to detect when something is passing through the gate and sending an electric signal back to the controller.  When something passes through the first gate, a controller will recieve a signal and start a stopwatch.  Then a short time later, that object passes through the second gate and the controller gets the second signal.  It will then stop the stopwatch and calculate the speed by dividing the distance between the gates by the time between the signals (v, speed = s, distance / t, time).

Optical Chronograph Diagram
Example of Optical Ballistic Chronograph

Now back to the optical gates.  There are two sides to the gates: an emitter side and a sensor side.  The bullet or  other object needs to pass between the emitter and sensor.  The emitter has an array of LED’s and its job is to provide a very constant light source.  There is no feedback from the emitter, it just provides light.  The sensor is the part that actually provides a signal to the controller.  It contains an array of sensors, and each sensor gets a basic circuit that does two things:  1. It sets a baseline for the expected amount of light received, and 2. It sends an electric signal when the amount of light detected is lower than that expected amount.

So what happens is that the emitter array gives each sensor a very stable supply of light, and each sensor automatically sets its baseline to that exact amount of light.  Therefore, the sensors will not normally send a signal to the controller.  However, when something interrupts one of the paths of light to any of the sensors, that sensor will detect that there is less light than there should be – and it sends a signal!  It just takes one sensor to send the signal, which makes the instrument very sensitive.

Physical Design:

I arbitrarily set the optical gates 500 mm apart.  This made it reasonably compact while reducing the amount of error in the results.  The instrument’s frame was built from 1/2″ square steel tubing and flat sheets of aluminum.  It is fastened with screws, and critical component locations can be adjusted.  The unit can rest on any flat surface, and eventually will be able to mount onto any standard tripod with a 1/4″ thread.  A controller platform with hand-removable fasteners is mounted on the side and can be removed for storage.  The covers for the electronics were 3D printed.


Commonly-used light sensors include photoresistors and phototransistors.  Unfortunately these types of sensors do not work for the high demands of a ballistic chronograph measuring supersonic bullets!  Here’s why:  A bullet is only a few mm long and can travel relatively fast.  I decided to design for a bullet 5mm long travelling 1,000 m/s.  That means that, assuming the optical paths are infinitely thin, the bullet will interrupt an optical path for 5 μs (microseconds).  If anyone can find a phototransistor that will respond in less than 5 μs, please let me know!

So, since the primary issue for the sensors was speed, I used LED’s  photodiodes configured in a photoconductive (reverse-biased) setup.  This means that relatively high voltage (~27 V) is applied to the diodes BACKWARDS, and the voltage drop across each photodiode was monitored to detect any fluctuations.  These sensors can have sub-microsecond response times.  The topic of using photodiodes as sensors is discussed very well in this resource from OSI Optoelectronics.

The system uses near infrared light (890 nm wavelength) for two reasons: first, the ambient level of infrared light typically isn’t as high as visible light (less interference), and second, suitable infrared sensors were readily available at the time.  The LED emitters are TSHF5410 LED’s and the receivers (sensors) are LTR-323DB photodiode’s.

I worked for a while to determine how the sensors and emitters should be arranged to reduce the size of the holes between the optical paths.  The positioning of the sensors and emitters was optimized such that a .177 guage bullet could not pass through the sensing area (135 mm wide by 85 mm tall) without interrupting the path of light between at least one emitter and one sensor.  CAD software was used to optimize the placement of the components, as well as to map the circuitry onto blank PCB boards (see the drawing below, red lines are the optical paths).  In the end, each gate consisted of an infrared emitter array containing eight LED emitters and a sensor array containing eight photodiode sensors.   I found the most efficient placement of the sensors and emitters interesting, have a look at the CAD drawing in the repository at the end for more detail.

As discussed above, the sensor array circuitry was designed such that the system would automatically normalize (set a baseline) after a brief period of time, and any slight disruption of the light paths would instigate an electrical signal.  The circuit diagram and design on a 5 x 7 cm PCB are included in the repository.

Each sensor array is built on two PCB’s (four sensors per PCB), with jumper wires connecting the power and signal lines for each PCB.  Each photodiode sensor is reverse-biased with approximately 27 V, which is supplied by a 5-40 V boost regulator (eBay).  The regulator provides surprising stable power, and I did not have to add any capacitors to the output.  The voltage drop across the photodiode changes as it is exposed to different amounts of infrared light.  The raw sensor voltage output is connected to one side of an LM339 comparator (the LM339 package conveniently has four comparators, so one LM339 per board).  The other side of the comparator is biased slightly positive (~40 mV), and connected to a capacitor.  Potentiometers are used to adjust the positive bias (which changes the sensitivity to changes in light).  This allows the sensors to automatically normalize in any condition.  When a small amount of light is suddenly blocked, the sensor voltage drop increases and instantly rises above the capacitor’s voltage, which rises slowly.  The comparator connected to the sensor will then close the signal line to ground, communicating to the microcontroller that an object has been detected.

Since all eight comparator outputs are connected to the same signal line, any one of the comparators can send a trigger.  Each comparator is connected to the signal line by a removable jumper.  This allows troubleshooting if there are any issues with individual sensors, as a single sensor can be isolated and tested.  A re-purposed USB cable carries the power, ground, and signal lines from the controller to the sensors.  There hasn’t been any apparent issues with providing almost 30 V through the cable, which is typically used for 5 V.  Keep in mind that each sensor array draws less than 3 mA, so there is very little power consumption.

The end goal of the emitter arrays was to provide a very (!) constant amount of light with power from a 12 V wall transformer or lead-acid car battery.  Unfortunately those power supplies are not stable enough to keep the light level constant.  Each gate draws approximately 400 mA of current at >12 V.  I added a 2200 μf capacitor to the supply lines so to smooth out the heavy, low-frequency ripples from a wall transformer.  After that, each emitter array has an LM7809 voltage regulator which drops the voltage to a very stable 9 V.  Finally, resistors placed in series with the LED’s further aid in smoothing the light output of the LED’s.  About 68% of the power provided by the regulator is absorbed by the resistors.  The arrays are inefficient, but the resulting light output is very constant and therefore the sensors can be adjusted to high sensitivities.  The circuits were built on blank 2 x 8 cm PCB’s.


The TTL-level outputs from the sensor arrays were connected to an Arduino Uno, which has a maximum digital sampling rate of 2 MHz and maximum clock resolution of 0.5 μs.  In order to reach these rates, a couple tricks are required in the programming.  First, instead of using digitalRead(), we are directly reading a whole register and parsing the result (see this Instructable by JRV31 for more info).  All pins on the port (except for the first pin) are pulled down, and the first pin is connected to a sensor array.  This means that pins 14-19 (all the pins in port C) are used just to read two sensor inputs.  Pins 0-13 (ports B & D) are available for serial comms, triggers, lcd output and user controls.  Now that the sampling rate is up to max speed, we need to increase the clock resolution.  Instead of learning about the ATMEGA’s clock registers, I’m just going to be using Gabriel Staple’s library to get the 0.5 μs resolution.  My working code can be found in my project repository.

Of course, the clock accuracy of the controller has to be taken into account.  I tested the clock speed of an Arduino Uno R3 and a cheap knock-off Uno.  At 18 degrees C, heir clock speeds were 0.1% fast and 0.9% slow, respectively.  Once these values are known, it’s very easy to compensate for the inaccuracy in the code.

Future Changes:

Currently, the instrument is functional but needs more work.  3D printed LED / photodiode support manifolds would be great to hold each sensor and emitter in their correct position, although it seems to work fine as-is without any additional supports.  Eventually I would like to replace the LM339’s with a faster comparator, although they seem to function very well.  Custom printed boards would look much nicer than the blank PCB’s, so I may go that route when other upgrades are performed.

Of course, everything needs to be tidied up (especially all the loose wires).  I’ve ordered plastic project boxes which will be modified into sensor and emitter array covers.  The entire assembly will get sanded and painted as well.

I’m currently working on adding support for an Arduino LCD shield so that a pc is not required to use the instrument.

Triggering Speedlight Flashes:

Since the orignal goal was to take high-speed photos, I’ll just add a little note about triggering flashes for high-speed photography.  I’ve found that all of my Yongnuo and Nikon speedlight flashes have differing delays between the time they were triggered to the time they flash.  As such, the delay compensation value (or delay comp) must be calibrated for each flash.  The Arduino code provided allows for multiple flashes to be triggered simultaneously, even if they have varying delays.  The delay comp can be calculated for each flash separately by photographing a high-speed object (bullet) with a delay comp of zero, then measuring how far past the expected location the imaged bullet was, and dividing that distance by the bullet’s speed.  I’ve measured delay comps between 150 μs (Nikon SB-800) to excess of 400 μs (Yongnuo YN-560).

Photographic Results:

Below is a photo of a 7.62mm round travelling 730 m/s (2400 fps) striking a glass cup.  The trigger time was controlled with this ballistic chronograph.  I will report back when all improvements are completed!


Data Repository:


Ballistic Chronograph #DIY

High-Speed Photography of Breaking Glass


What does a  wine glass look like when it’s shot? (TL;DR have a look at my flickr album)

This obvious question was asked when my wife provided me with three wine glasses which were used to keep her Siamese Fighting Fish.  She couldn’t bring herself to drink from them after their use as aquariums.  So I decided to destroy them and make a few attempts at high-speed photography!

Basic Setup:

A friend loaned his air rifle, which he claimed was rated at 1,000 fps (we later confirmed this speed).  I also used his Nikon SB-900 Speedlite, which provided a flash duration of 28μs (microseconds) @ 1/128 power .  The lowest power setting was used as it produced the shortest flash duration,  shorter than any of my flash units (430EX ii’s 67μs @ 1/64 and YN-560 ii’s 43μs @ 1/128).  Of course, a shorter flash duration will freeze action better.

The photos were taken in absolute pitch black so that the camera shutter speed could be set to several seconds.  The idea is that the camera’s shutter will open, but no light will reach the sensor until the flash fires.  Then the camera will capture a very fast piece of action.

The flash was positioned behind the glass, with a diffuser panel between the flash and glass.  Initially, the flash unit was activated by a sound trigger.  I used an Arduino to detect an analog sensor input.  If the input was greater than a pre-set threshold (triggered), it would wait for a set amount of time, then activate the flash.  A piezo buzzer was used as the sensor.  Several problems were encountered, which resulted in much time wasted in trial-and-error tests.  The sensor was first placed near the muzzle of the gun to detect the bullet’s departing of the barrel.  Several other sounds, including the gun’s internal mechanism, were also detected and the trigger was terribly inconsistent.  So the sensor was moved to the gun’s barrel very near the trigger.  The sensor could then detect the gun’s trigger mechanism.  While not perfect, it worked much better than expected.



Unfortunately there were issues with this initial setup which caused the flash to fire at the wrong time.  It was impossible to choose where to place the bullet in the photo with any degree of accuracy – if the photo captured the action at all, it was considered a lucky success.  The flash would often fire early or late as shown below.

To give an idea of the timing involved, the bullet would take about 58,000 μs to exit the barrel after the internal trigger was sensed.  It would then take about 1,700 μs to get from the end of the barrel to the glass (which was placed 50 cm downrange).  An additional 500 μs and the bullet would have already passed through the cup.  So, the total delay from the sensor trigger to the flash trigger was about 60,000 μs, and an error of a few hundred microseconds would mean we would miss the best part of the action (the bullet inside or just past the cup).  Using this setup, we were only able to capture one photo of the bullet inside the cup.

Using A Ballistic Chronograph:

In order to get the desired photos, I built a ballistic chronograph to help with triggering the flash.  The chronograph replaces the piezo sensor and works by measuring the time a bullet takes to travel between two optical gates.  It can accurately and repeatably trigger a flash such that a bullet travelling 300 m/s within 5mm of the desired location in a photograph.

Now things have become much simpler.  Set up the ballistic chronograph and tell it where the bullet is supposed to be when the flash fires, then aim the gun and shoot.  Viola!  So, in the interest of making things more interesting, we began to attempt to photograph the bullet after it has already passed through one cup and is travelling toward or through a second.  Why is this a challenge?  Because the ballistic chronograph only knows where the bullet is if its speed is constant – it needs to be travelling the same speed!  But when the bullet starts moving through water, the speed decreases very quickly, and the bullet hasn’t moved as far as the chronograph expected.  So, if we want a photo where the bullet has traveled perhaps 50 cm through the air, then 12 cm through a cup, another 25 cm through air, and finally 6 cm into a second cup (that’s 93 cm total), we have to tell the chronograph to trigger at something like 130 cm to account for all the lost speed.

This method required some experimentation, but the results were very cool – have a look.  About two dozen glasses were destroyed to make this set of images.



High-Speed Photography of Breaking Glass

Peter’s Milkshake Master List

How many different flavour combinations are possible at Peters’?

Peters’ Drive In is famous in Alberta for their milkshakes.  They have three base flavours to choose from.  However, they advertise that as many as three flavours can be combined in a milkshake, resulting in an advertised >4,500 combinations.  The only question is: are they lying?20160424_161844

In order to confirm the advertised flavour possibilities, I was asked to ‘Write a list of the flavours and count them’.  Really, it’s a simple task.  The list must be comprised of flavour possibilities using 1, 2, or 3 base flavours, it cannot use duplicate flavours (eg. strawberry, coconut, strawberry), and the order of the flavours does not matter (we are counting combinations, not permutations).

I wrote a VBA macro for my minion computer, instructing it to make a complete menu.  It spit out a list of 4,525 flavours.  The list was then printed on an 8.5×11″ sheet of paper (double-sided, no line spacing, font size 2) and will be hand delivered to the person who asked for a written list.

It should be noted that this list accounts for all combinations which include the Banana base flavour.  Having removed such a terrible flavour from the base flavour list, the total number of combinations decreased to 4,089.  It’s terrible to imagine that Peters’ will  can provide almost 500 Banana flavour combinations – Yuck!

Peter’s Milkshake Master List