Fish Hammer Actuation Device




Humans have been destroying fish habitats for many years through activities from trawling the ocean floor to filling it with plastic. With the advent of the fish hammer, fish can now wreak destruction on mini human habitats. The project was created at Autodesk's awesome Pier 9 digital fabrication workshop as part of their artist in residence program.

This Instructable will show you, in detail, how to construct a track-based curvilinear motion system. These systems are the most common type of drive mechanism for fish hammers (the part that makes the hammer move around the aquarium). However, the same mechanism can be employed to move anything along a curved track. For example, a motion control system for cameras.

If you do decide that you want to actuate a fish controlled hammer rather than any other object, below is an overview of some of the things that you might need to consider...

Fish Welfare

A fish is for life not just for an art show so don't build any fish hammers unless you have the time to take good care of the fish. Among other things, this involves treating the water so it is habitable, cycling the water to keep it clean and of course, feeding regularly. Thanks to Sherry Wong, Pier 9's in house aquarium expert for answering my unending stream of fish-related questions.

Fish Choice

The first fish that I chose for this project was a Siamese fighting fish (or Betta fish) named Smashie Sr. As a novice fishkeeper and first time fish hammer builder, I assumed that a fighting fish would naturally enjoy smashing stuff. After a couple of days hanging out with Smashie Sr, I became aware that he was more into meditating in the corner of his tank rather than high energy activities. Luckily, Vanessa Sigurdson, courageous leader of the AiR program, came to the rescue and agreed to adopt Smashie Sr. After confusing some aquarium store owners with questions about fish temprament, I settled on a goldfish, Smashie Jr, who was the perfect mix of outgoing, energetic and conveniently brightly coloured for computer vision.

Interior Design

Fish can be very sensitive to interior design faux-pas. They are also surprisingly in tune with what patterns are popular this season. When deciding on how to furnish your fish hammer smashing area, be sure to get furniture and flooring that complement your fish's skin tones.

Software and Electronics

The software was written in C++ using openFrameworks.

The computer vision was done using OpenCV. To track the fish the camera feed is converted from RGB to HSB colour space and then is thresholded based on ranges for the hue, saturation and brightness. In order for this to work effectively, you need gravel and tank decorations that contrast with your fish.

The next task was to work out how to control the motor smoothly. The motor is designed with industrial processes, rather than fish control, in mind where each movement is known in advance. In order to get around this, I put the motor into jog mode, controlling its speed rather than its position, and wrote a PID controller that controlled the speed of the motor based on the encoder position.

A Teensy microcontroller is used to read the hammer position sensor (a Hall effect sensor on the cam), control the hammer stepper driver and tell the computer over serial when the carriage should be stopped (when the hammer is down).

Step 1: Gather Materials

For this Instructable you will need the following materials...

  • 1/4" Alumiunium Plate for Track, 40" x 40": The size of the plate that you need will depend on how large you want your track to be. The files that are included in this Instructable are for a track with an inner diameter of 30" and an outer diameter of 34". This can be purchased from any metal merchant, I used Coast Aluminum.
  • 1/4" Alumiunium Plate for Base, 62" x 32": Again the size of this plate will depend on how large you want the base to be.
  • 1/4" Plywood, 40" x 40": This can be super scrappy plywood and will be taped to the guide track during routing to act as a guide for the bearing on the router bit.
  • High-Load Metal Gear - 20 Degree Pressure Angle, 32 Pitch, 64 Teeth: McMaster Part 6832K57
  • RM2-2RS 3/8" Inch Bore V Groove Bearing: I used bearing that have a double row of balls like these so that they were able to support higher axial loads (loads along the axis of rotation).
  • shoulder screws for mounting bearings
  • Dykem Layout Fluid
  • Razor Blade
  • Double Sided Tape
  • 12 x Aluminum Unthreaded Spacer, 5/16" OD, 3/8" Length, for Number 10 Screw Size: McMaster Part 92510A564
  • 10 x Aluminum Female Threaded Hex Standoff, 3/8" Hex Size, 6" Length, 10-32 Thread Size: McMaster Part 91780A094
  • 8 x 18-8 Stainless Steel Hex Drive Rounded Head Screw,10-32 Thread Size, 1-1/4" Long: McMaster Part 92949A272
  • 2 x 18-8 Stainless Steel Socket Head Screw, 10-32 Thread Size, 1-5/8" Long: McMaster Part 92196A292
  • 10 x 18-8 Stainless Steel Hex Drive Rounded Head Screw, 10-32 Thread Size, 5/8" Long: McMaster Part 92949A267
  • 6061 Aluminium Block, 4.25" x 5.5" x 1"
  • 3 x 3/8" Diameter x 5/16" Long Shoulder, 5/16"-18 Thread Size:McMaster Part 97345A222
  • 3 x 3/8" Washers
  • 4" x 6" x 1/4" Transparent Acrylic
  • 4 x 2-1/4" 10-24 Socket Head Screws
  • 4 x 1-3/4" Aluminium Spacers
  • 4 x 10-24 Nyloc Nuts

Step 2: Design Your Track in Autodesk Inventor

I used Autodesk Inventor to design the track as it contains a gear generator with plenty of configuration options. I've attached the DXF files that I ended up with that you can import into your waterjet cutter software. However, if you'd like to design a track that has different dimensions, I've also attached the Inventor files and this step will walk you through using the gear generator.



  • Open Inventor and click on New Assembly.
  • Open the Design tab and then click on the Spur Gear.
  • Click OK in the dialog that pops up asking you if you want to save.
  • I then used the following settings:
    • Diametral Pitch: 32ul/in
    • Internal: checked
    • Gear 1 => Number of Teeth: 960 (I want the inner diameter to be 30 inches so the number of teeth is calculated by the product of the diameter and the diametral pitch, i.e. 30 * 32 = 960)
    • Gear 2 => Number of Teeth: 64 (matching the gear we have to drive the carriage)
    • Gear 1 => Facewidth: 0.25 (thickness of gear)
    • Gear 2 => Facewidth: 0.25(thickness of gear)
  • Click OK and then when Inventor is done thinking choose a position to place the gears.
  • If you cannot see the gears, try changing to the home view by clicking the home icon in the top right of the main viewport.

Step 3: Cut Tracks

In this step, we'll use an waterjet cutter to fabricate the tracks. I used an Omax waterjet cutter. You will need to amend the steps as appropriate if you have a different type of waterjet cutter. You will need to follow the steps twice, once for the guide track and once for the drive track.


  • 1/4" alumiunium plate for track (48" x 48")


  • Import dxf files into Omax Make. Clean up file, move to appropriate location and set quality. As these are going to be mechanical parts we want the tolerances to be as tight as possible so set the quality to the highest setting (in the case of the Omax machine, this is 5).
  • Open file exported from Omax Make in Omax Layout, set the material parameters and if your machine has taper compensation then enable this. With the Omax software, it was not possible to enable taper compensation for the drive track due to the tightly packed geometry.
  • Clamp material to water jet bed.
  • Zero the three axes using a suitable location to allow both cuts to fit on the same sheet.
  • Press start and watch the metal cutting magic happen.

Step 4: Prepare One Side of Guide Track for Bevel Routing

The next task is to route a bevel into each side of the guide track that we cut out in the previous step.


  • Guide track that was water jet cut in the last step.
  • 1/4" plywood (40" x 40")
  • Double sided tape


  • Put the guide track onto the piece of plywood and draw an outline around it.
  • Using a bandsaw, cut around the outline leaving a small margin that will be trim routed off.
  • Double stick tape metal to wood.
  • Load a flush trim bit into the router table.
  • Trim wood with the router table until it is flush with the metal.

Step 5: Route Bevel

Important: Routing aluminium can be dangerous. Use push pads and be extremely careful to keep your fingers away from the router bit.

We will be taking off small amounts of material off in several passes from both the inner and outer circumference of the track.


  • Bearing track attached to wooden guide from previous step
  • Razor blade
  • Dykem layout fluid


  • Paint Dykem Blue on the inner and outer circumferences of the track.
  • As accurately as possible, measure half the distance between the top and the bottom of the track and mark it in the Dykem by scoring with a razor blade.
  • Set the router to an appropriate speed for aluminium and insert a 45 degree chamfer bit.
  • Place the track that we are going to bevel metal side down on the router table.
  • We will be taking off small amounts of material each pass, so raise the router bit up until it's positioned where it will remove just a small amount of material.
  • Using push pads, being very careful not to get fingers near the router bit, smoothly move the track along the router bit.
  • Repeat the previous step multiple times until the bevel is as close to the score line in the Dykem as you can get it without going over the line.
  • Now follow the previous two steps for the circumference that's not been routed yet.

Step 6: Prepare Opposite Side of Guide Track for Routing


  • Track with guide from previous step
  • Remainder of 1/4" plywood
  • Double sided tape


  • Put the guide track onto the piece of plywood and draw an outline around it.
  • Using a bandsaw, cut around the outline leaving a small margin that will be trim routed off.
  • Double stick tape wood to track creating a tasty wood and metal sandwich.
  • Load a flush trim bit into the router table.
  • Trim excess wood from the piece of wood added this step so that it is also flush with the metal
  • Remove the first piece of wood that was stuck to the metal.
  • Repeat Step 5.

Step 7: Assemble the Track


  • Tracks from previous step
  • 8 x 18-8 Stainless Steel Hex Drive Rounded Head Screw,10-32 Thread Size, 1-1/4" Long
  • 2 x 18-8 Stainless Steel Socket Head Screw, 10-32 Thread Size, 1-5/8" Long
  • 12 x Aluminum Unthreaded Spacer, 5/16" OD, 3/8" Length, for Number 10 Screw Size: McMaster Part 92510A564
  • 10 x Aluminum Female Threaded Hex Standoff, 3/8" Hex Size, 6" Length, 10-32 Thread Size


  • Put together the 8 1-1/4" screws and 8 of the spacers as shown in the photographs marked blue in the diagram.
  • For the holes marked in pink, use the 1-5/8" screws and put it together similarly to the previous screws with the addition of an extra spacer between the screw head and the guide track. This will act as an end stop for the carriage both for homing and to prevent it from being able to leave the track.
  • The remaining holes ended up being unused in the final design even though they are shown as used in the pictures. This was to allow more space between the motor and the standoffs so that the cables wouldn't get trapped.
  • All that's left now to finish the track is to screw the standoffs to the bottom of the track to hold everything together.

Step 8: Top of Carriage

The cart was milled out of a block of aluminium using a Haas mill. Haas mill decoration was done by Alex Murray Leslie of the awesome band Chicks on Speed. For tips on how to fluoroize machines check out her Instructable here.Parts:

  • 6061 Aluminium Block, 4.25" x 5.5" x 1"
  • 3 x 3/8" Diameter x 5/16" Long Shoulder Bolts, 5/16"-18 Thread Size
  • 3 x 3/8" Washers


  • If your aluminium is not already approximately the correct size, use a horizontal bandsaw to trim it down.
  • Measure your stock and enter the measurements into the attached Inventor file.
  • Export the G-code files from Inventor.
  • Decorate your Haas mill with fluoro tape (optional).
  • Mill your carriage, the milling consists of three setups. The third setup requires you to be able to zero from one of the holes in the carriage.
  • Attach the bearings to the cart with the shoulder bolts using the washers as spacers.
  • Remove the end stop bolt from the track slide the carriage onto it and check that it moves smoothly along the track. If it does not, you might need to file it down until it does.

Step 9: Bottom of Carriage


  • 4" x 6" x 1/4" Transparent Acrylic
  • 4 x M5 25mm Rounded Head Screws
  • 4 x M5 Nyloc Nuts
  • 4 x 2-1/4" 10-24 Socket Head Screws
  • 4 x 1-3/4" Aluminium Spacers
  • 4 x 10-24 Nyloc Nuts
  • High-Load Metal Gear - 20 Degree Pressure Angle, 32 Pitch, 64 Teeth


  • Laser cut the bottom of the carriage using the attached DXF files.
  • Stack the acrylic and place the 10-24 nuts into the holes as pictures.
  • Attach the motor to the carriage using the M5 nuts and bolts.
  • Now attach the motor to the carriage using the 10-24 screws.

Step 10: Base

The base of the fish hammer was designed to support, not just the curvy track, but also all the other objects necessary to make a fish hammer smash-worthy. I've included the DXF files that I used if you want to cut the base without doing any design. However, even though are lots of vacant screw holes to attach whatever techno-thingamajigs you see fit, you will probably want to edit the CAD files and redesign the base to fit your purposes.

I used Autodesk's Fusion 360 to design the base as it has less strict constraint requirements than Inventor for extruding shapes so was ideal for a shape like this, composed of lots of intersecting primitives. You can access the Fusion 360 files here.


  • 1/4" Alumiunium Plate for Base, 62" x 32"
  • Track assembly
  • 10 x 18-8 Stainless Steel Hex Drive Rounded Head Screw, 10-32 Thread Size, 5/8" Long


  • Download Fusion 360 file and tweak to taste.
  • Create a new sketch on the face that you wish to cut.
  • That sketch will now contain the geometry of the face that it was created on, right click on the sketch and select Save As DXF
  • Cut the DXF file out using a waterjet cutter. You can use Step 3 as a guide here if you need to.
  • Screw the base to the track.

Step 11: Program the Motor

I used an Applied Motion STM23IP-3EE. The motor has a lot of features that came in really useful for this project...

  • ASCII commands can either be sent over Ethernet or run from its memory
  • Built-in encoder
  • Code execution on startup
  • Detection of fault conditions and ability to trigger code on faults

Using these features it was possible for the motor to automatically home itself on startup and then have it's position controlled accurately. I used some custom software in the end but here I'll detail the simplest way to control the motor using Applied Motion's Q Programmer software. Below are some suggestions about how to control the motor. If you'd like to get a deeper understanding of how to program the motor then download the Applied Motion Host Command Reference.


  • Applied Motion STM23IP-3EE
  • Ethernet cable
  • Computer with Windows and an Ethernet port
  • ST Configurator, available for download here

Steps for setting up homing procedure:

  • Connect Ethernet cable between computer and motor.
  • Set IP address and subnet mask of Ethernet adapter on computer to be and
  • Start ST Configurator and make sure that you can connect to the motor.
  • Select Tools => Q Programmer from the ST Configurator menu.
  • Download (in Q programmer land download, rather than upload, means send to motor) attached Q program to motor and make it execute on startup. Now when the motor is powered up, it should automatically run into the endstop and set

Steps for motion:

  • Follow the first four steps above for setting up the homing procedure in order to connect to the motor with Q Programmer. In the bottom left of the Q Programmer window, you'll now be able to send Q command to the motor.
  • If the motor has homed itself after executing the code you loaded onto it in the previous set, then it will have set it's encoder position to zero at one of the end stops. To find the encoder position at the other end stop, disable the motor by issuing an MD command, move the motor to the other end stop, then you can see the encoder position by sending the EP command and it's absolute position by sending the SP command.
  • To set the motor up for motion, send ME to enable the motor, AC followed by the acceleration you'd like and DE followed by the deceleration that you'd like.
  • To make the motor move, you can send the FP command followed by the position that you'd like it to move to.

Step 12: Move Things Around in a Curvey Way

The only thing left to do now is decide what you'd like to move around your shiny new metal track. If you're considering building this project, it's also worth checking that there's nothing off the shelf that would work. There are plenty of linear motion solutions already out there, just none designed to work with the size and shape of aquarium that my fish hammer required.

This project would not have been possible without Autodesk's Pier 9 workshop and the amazing people that make the place what it is. Special thanks to Vanessa Sigurdson, Sherry Wong, Noah Weinstein, Josh Myers, Mary Elizabeth Yarborough, Paolo Salvagione, Charlie Nordstrom, Blue Bergen, Mei-Yen Shipek, Julie Kumar, Trent Still, Gabby Patin Lucy Leigh-Pemberton and my AiR cohort for all of their support and advice.



    • Beauty Tips Contest

      Beauty Tips Contest
    • Frozen Treats Challenge

      Frozen Treats Challenge
    • 1 Hour Challenge

      1 Hour Challenge

    18 Discussions


    2 years ago

    Don't keep goldfish in bowls or cylinders. They use echolocation. When they're near the center of the bowl or the axis of a cylinder, they shout in their own ears.

    3 replies

    Reply 2 years ago

    Can you cite anything that indicates goldfish can echo locate?

    For example the wiki articles on goldfish:

    Do not come up with a single instance of the word echo. I also checked several research documents that resulted in Google. Nothing there either. If you are referring to the detection of pressure changes via the lateral line common to most fish? If so, then you might have something. But for the most part its simply cruel to keep fish in small containers, as you can see the difference when you keep them in very large ones. In part because large containers of water are easier to properly maintain.

    But echo location? I don't think so.


    Reply 2 years ago

    Goldfish, additionally to the lateral line, also have an inner ear. They do not emit sound, but they seem to be able to build up a model of their environment based on what sounds they hear.
    You probably won't find any research answering specifically to the question of whether goldfish can locate objects using sound. Research is usually a lot more focused, since goldfish are the lab rat for fish hearing research, having a very high performance hearing system. Like for example this study - in layman's terms, it studies how well goldfish can tell from what direction a sound is coming, specifically using their inner ear, not the lateral line:

    This research goes even further, stating that goldfish specifically can process reverberations, reflections and temporal patterns to locate the source and nature of sound:

    A cylinder or a bowl tend to focalize external sound towards a single point in the interior, putting stress on the fish'es hearing. If the fish finds itself in such a focal point, his hearing sense will be stressed - the usual sound processing pattern he uses will get a kind of signal the fish is not capable of processing.

    Think of us and vision. If somebody puts up a set of mirrors so that you see his reflection in many directions at once, you won't be able to tell which image is the original. This can be stressful.

    At their origin, goldfish were common carps, living in ponds with water too murky for visually detecting predators or food at a long distance. Their vision and hearing were shaped by that environment. A species not able to detect predators at a distance wouldn't be as successful as the carp.


    Reply 2 years ago

    I don't know about all the echo stuff... But I do know you are not supposed to keep goldfish by themselves... So get him a mate (and best put them im pond of murky water together...) other than that a great project and super engineering! :)


    2 years ago

    A fish actuated useless machine!


    2 years ago

    I love this project :)

    Don't mix the + and - or the fish may have a bad surprise...


    2 years ago

    Damn, my waterjet cutter just broke.


    2 years ago

    I like this brain of yours. Easily the best project I've seen this year. My sides are in orbit and my envrionmental conscience is awake. Thanks for sharing!


    Reply 2 years ago

    I just added a video to the first step :)


    2 years ago

    :) Awesome!

    I'd like to see some paper mache furniture, it would probably get crushed a lot more.


    2 years ago

    Hell Yeah! That is by far the craziest thing I've seen this year.
    Loving it. And I'm looking curious to my hamster. :-)
    Thumbs up. Made my day.

    2 replies