Skip to content

The Machine · Recipes

See-Saw Beam

Design stage

Updated 2026-10-20

A wiper motor rocks a long beam on top of a post, like a see-saw. Links hanging from the beam tip four spring-loaded mallets, which snap down onto four woodblocks, a pair on one side and then a pair on the other, so the strikes take turns left and right with every turn of the crank.

Loading the model

Drag to turn · scroll to zoom

Printed

3DWhere we started. This is one version of it, with four woodblocks, hard rubber mallets and a belt from the wiper motor up to the crank. Press Play: the motor starts, the beam rocks, and each side's links tip its pair of mallets past their tipping points, so their springs snap them down in turn, the outer one a moment before the inner. Then the motor stops with the beam level. The mallets' snaps are simulated with their springs, stops and gravity, not drawn by hand. Printed parts are drawn in orange; everything else is bought.

Overview

Cost, roughly
About $360
Printing
About 13 hours, in 23 small parts
Building
A weekend
Difficulty
Involved

Anatomy

1
Energy source
A 12 V wiper motor, run from the shared battery through a driver board that keeps it to about 12 V
2
Control
The motor's speed, held to the shared beat by an angle sensor on the beam's pivot. It starts and stops with the beam level
3
Sounding body
Four woodblocks of four sizes, struck by hard rubber mallets that a spring snaps down
4
Reset
None needed. On its way back down, each side of the beam pushes its mallets back past their tipping point, and their springs flip them up, cocked again
3D views. It shows the whole element from the front, one mallet up close, cocked, with its snap spring, its two rubber stops, its link and its woodblock, and the belt and crank on the center post, with the motor left off so the belt shows. All three views are drawn from the CAD model.
Fig. 13D views. It shows the whole element from the front, one mallet up close, cocked, with its snap spring, its two rubber stops, its link and its woodblock, and the belt and crank on the center post, with the motor left off so the belt shows. All three views are drawn from the CAD model.

How it works

  • A long beam is pivoted on top of a center post and rocks like a see-saw. A 12 V wiper motor at the foot of the post turns a crank through a belt, and a connecting rod from the crank pin rocks the beam about 9 degrees each way, once each turn. We started with four woodblocks and hard rubber mallets; the choices below cover the alternatives.
  • Four mallets hang from the beam by links, an outer and an inner one on each side. Each mallet pivots on its own post, its head pointing away from the middle and its short tail toward it. Each link comes down from the beam to the mallet’s tail.
  • Each mallet snaps. A spring runs from an anchor below each pivot up to a horn on the mallet’s hub. When the horn points straight up, the spring’s line crosses the pivot, and that’s the tipping point. Past it one way, the spring throws the mallet up onto its up stop, cocked; past it the other way, it throws the head down. The mallet rests either up or down, never in between.
  • The links only nudge. Each link has two nuts with a gap between them, one above the tail clip and one below. As that side of the beam rises, the lower nut pulls the tail just past the tipping point, and the spring does the rest. As the side comes down, the upper nut pushes it back past the point, and the spring flips the mallet up, cocked again. In between, the clip rides free between the nuts, so the beam never fights the spring.
  • The heads strike and spring back. A rubber stop under the shaft catches each snap with the head 2 to 3 mm above its block. The shaft flexes on, so the head strikes the wood and springs straight back off it, leaving the block free to ring. Nothing rests on the block, and the bounce off the stop is too small to reach it again, so there’s no rattle.
  • So the two sides take turns. The side that’s rising strikes, while the other side’s mallets are cocked. Each turn of the crank gives a pair on the left and a pair on the right.
  • Where each lower nut sits on its link is the rhythm. A nut further up its rod tips its mallet earlier. As drawn, the outer mallet on each side strikes first and the inner one about 40 ms later, so each side plays a quick low-then-high flam.
  • It plays crisply. Heads meet their blocks at about 1.6 to 1.8 m/s, a firm knock about as hard as a hand stroke. The springs do the striking, so every strike is about as hard at any tempo. A quieter tick comes from each mallet flipping up onto its other stop.
  • It locks to the beat by starting and stopping. It rests with the beam level, the right pair cocked and the left pair on its stops, all four heads clear of their blocks. Told to come in, the ESP32 starts the motor a moment early, about a quarter of a second, so the first pair lands on the beat, as hard as the rest. An angle sensor on the beam’s pivot tells it where the beam is at every moment, and it nudges the motor’s speed so every pair after lands on the beat too. To stop, it halts the motor with the beam level again, and the motor’s worm gear holds it there.
  • The tempo sets how many beats a turn. The motor turns from about 20 to 70 times a minute. At 120 beats a minute it turns once a second, with the left pair on one beat and the right pair on the next. Slower music can take a pair each half beat, and faster music a pair every other beat.
  • An ESP32-S3 runs it. It listens for the wireless signal, reads the sensor and sets the motor’s speed through a driver board, and it runs from the shared power-tool battery. If it hears nothing for a couple of seconds, it parks the beam level and stops.

Ways to play

  • Play a steady pattern, the left pair on one beat and the right pair on the next, as long as the piece needs it.
  • Come in on a downbeat. Start from level, and the first pair lands exactly on it.
  • Change the pattern between pieces by moving the nuts. Silence a mallet, make a pair land together, or spread it into two notes.
  • Play half time by turning once every four beats, so the pairs land on beats one and three.

Before any code, take the belt off and turn the crank by hand, and listen to the pattern the four nuts make.

Notes

  • This is a first design. Expect one round of fitting when it’s built, most of it in setting the stops and the nuts.
  • The motion in the 3D model is simulated: the crank, the beam, and every mallet under gravity and its spring, between its stops and its link’s nuts. The model shows each shaft stopping on its stop; the last few millimeters of the head’s travel, as the shaft flexes, are too small to see. The springs, how much the stops bounce, how far the shafts flex and how fast the motor starts are guesses that a test build will measure.
  • The wiper motor is far stronger than this element needs, which is why the belt is left loose enough to skip if anything jams.
  • Costs in the parts list are rough estimates for budgeting, not checked prices. They add up the version we started with.

References

  • Walking beam engines and oil field pumpjacks rock a long beam from a crank in the same way. A pumpjack’s nickname, the nodding donkey, suits this element’s motion too.
  • A light switch and a mousetrap both snap on an over-center spring, which is what each mallet does here.
  • A clock’s striking train lifts its hammer, lets it go onto the bell, and stops it just short with a check spring so the bell rings. The stops under each shaft do the same job.

Parts

Ingredients

KindPartQtySourceEachFile
PrintedPivot cheek, bolts to a face of the center post's top and holds one of the beam's bearings2··STL
PrintedBeam hub, clamps the shaft and holds the beam in a saddle1··STL
PrintedSensor bracket, holds the angle sensor behind the pivot1··STL
PrintedCrank block, holds the crank's shaft in two bearings on the center post1··STL
PrintedCrank wheel, with holes for the crank pin at 15, 20 and 25 mm1··STL
PrintedMotor adapter, bolts to the wiper motor's crank arm and carries the motor's pulley1··STL
PrintedMallet hub for the right pair, turns on two bearings, grips the mallet's shaft and carries the snap spring's horn2··STL
PrintedMallet hub for the left pair, the mirror image of the right2··STL
PrintedStop bar, holds the two rubber stops under each mallet's shaft4··STL
PrintedTail clip, grips the mallet's tail and carries its link4··STL
PrintedWoodblock cradle, an open frame that holds a woodblock on felt on top of its stand4··STL
BoughtAluminum extrusion, 20 x 40 mm V-slot, 1360 mm, for the base rail1·$25.00
BoughtAluminum extrusion, 20 x 40 mm V-slot, 700 mm, for the center post1·$13.00
BoughtAluminum extrusion, 20 x 40 mm V-slot, 280 mm, for the feet3·$6.00
BoughtAluminum extrusion, 20 x 20 mm V-slot, 800 mm, for the beam1·$5.00
BoughtAluminum extrusion, 20 x 20 mm V-slot, for the posts and stands, cut to four lengthsTwo of 420 mm for the outer mallets' posts, two of 220 mm for the inner ones, two of 300 mm for the outer woodblocks' stands and two of 110 mm for the inner ones. That's about 2.1 m in all.1·$9.00
BoughtCorner brackets for 20 mm V-slot, with screws and T-nutsTwo join the rail to each foot, two hold each post, one holds each stand, and two hold the motor's plate.22·$1.00
BoughtWiper motor, 12 V, with its crank armYour choice: see The driveAny car's wiper motor will do, or a universal one sold for props and robots, which usually comes with its arm. About 40 rpm on its slow terminal and 60 on its fast one, at 12 V.1·$35.00
BoughtAluminum plate, 4 mm, about 160 x 170 mm, for the motorDrill it to match the motor's mounting holes, with a hole in the middle for its shaft.1·$8.00
BoughtMotor driver board, BTS7960 (often sold as IBT-2)It's the usual board for wiper motors, good for far more current than this one draws. It runs from the battery and takes its speed from the ESP32.1·$8.00
BoughtGT2 timing pulleys, 60 teeth, 8 mm bore, for a 6 mm beltYour choice: see The drive2·$5.00
BoughtGT2 timing belt, closed loop, 610 mm, 6 mm wideYour choice: see The drive1·$4.00
BoughtBall bearings, 608 size (8 mm bore, 22 mm across)Two for the beam's pivot and two for the crank. These are skateboard bearings.4·$1.00
BoughtBall bearings, 625 size (5 mm bore, 16 mm across, 5 mm wide)Two in each mallet hub.8·$0.80
BoughtSteel dowel pins, 8 mm, one each of 40, 55 and 16 mmThe beam's shaft, the crank's shaft and the pin on the motor adapter. They're ground to size, so they slide through the bearings without play.1·$3.00
BoughtShim washers, 8 mm bore, 1 mm thickOne between the beam hub and each bearing, and one each side of the crank block.4·$0.50
BoughtRod ends for M5 (ball joints with a female thread)One at the top of each link, and one at each end of the connecting rod.6·$2.00
BoughtM5 threaded rod, 1 mCut into four links and the connecting rod. As drawn, the inner links are about 61 cm, the outer ones about 44 cm and the connecting rod about 44 cm.3·$3.00
BoughtM5 spherical washer pairs, and thick rubber washersA spherical pair goes under each upper nut, so it seats squarely on the tail clip however far the tail tips. A rubber washer goes on each lower nut, which softens its click and forgives a millimeter or two in setting it.4·$1.00
BoughtExtension springs, about 45 mm long between the hooks, about 1.2 N per mmYour choice: see How the heads strikeOne snaps each mallet. Stretched to 70 mm at the tipping point, it pulls about 30 N. A stiffer spring strikes harder, and needs more of the motor to cock it.4·$1.00
BoughtRubber feet with an M5 thread, about 12 mm acrossYour choice: see How the heads strikeThe stops, two under each mallet's shaft, on M5 x 30 screws with a nut, so each screws up or down to set where it catches the shaft.8·$0.50
BoughtXylophone mallets, hard rubber heads, about 28 mm, on 9.5 mm shaftsYour choice: see The mallet headsSold in pairs. The inner pair's shafts are cut shorter, to about 22 cm; the outer pair's to about 30 cm.4·$8.00
BoughtWoodblocks, four sizes, about 15 to 21 cm longYour choice: see What the mallets strikeThe biggest goes on the left outer stand, the next on the right outer, then the left inner, and the smallest on the right inner.4·$15.00
BoughtSelf-adhesive felt, 3 mm, a small sheetFor the cradles, two strips under each block.1·$5.00
BoughtMagnetic angle sensor board, AS5600, with its magnetYour choice: see Choosing which mallets playThe small round magnet sold with it is magnetized across its face, which the sensor needs.1·$3.00
BoughtESP32-S3 development board1·$6.00
BoughtBattery adapter for the shared power-tool platform, and a 5 V buck converterThe motor runs from the battery, through the fuse, the stop button, the relay and the driver board. The ESP32 takes 5 V.1·$15.00
BoughtThe listener parts every element carries, as on the Control pageThey're a blade fuse holder and a 10 A fuse, a latching stop button with a spare contact and contacts rated 10 A, the status light, the number switches and their resistors. The stop switch under Choices has a plain two-pole switch in place of the stop button.1Link$12.00
BoughtMomentary push button, normally open, for the test buttonA short press plays each note once, and a long press relearns what the element can by itself. Any small panel button that closes while it's pressed will do.1·$1.00
BoughtRelay module, 5 V, high-level trigger, contacts rated 10 AIt's the switch the motor's power goes through, after the stop button. The driver board then sets the motor's speed.1·$2.00
BoughtTwo 10 kΩ resistors and two 4.7 kΩ resistorsThe 10 kΩ pair hold the relay and the driver off while the ESP32 starts. The 4.7 kΩ pair are for the sensor's long wires.1·$0.50
BoughtSmall project box, for the electronicsYour choice: see The electronics1·$5.00
BoughtM5 screws, T-nuts, spacers and nuts, assortedPivot cheeks (eight M5 x 12), the beam hub (two M5 x 10), the crank block (four M5 x 12), the four mallet pivots (M5 x 50, a 16 mm spacer, two washers), the four springs' anchors (M5 x 55 and a 40 mm spacer, through each stop bar), the stop bars' second screws (four M5 x 12), the four links' rod ends on the beam (M5 x 25 and a 12 mm spacer each), the connecting rod's top (M5 x 70 and a 53 mm spacer), the crank pin (M5 x 30 and a locknut), the motor adapter (two M5 x 12 and nuts), and about twenty M5 nuts for the rods. Add four M4 x 20 screws and nuts for the springs' pins.1·$8.00
BoughtM3 set screws and screws, and twelve M3 heat-set insertsThe set screws hold the beam hub, the crank wheel, the mallet hubs and the tail clips on their shafts. The screws hold the sensor bracket.1·$4.00
Total$358.90

Tools

  • 3D printer, PETG
  • Hex keys, 1.5, 2, 2.5, 3 and 4 mm
  • Two 8 mm spanners, for the nuts on the rods
  • Soldering iron, for the heat-set inserts and the wiring
  • A drill with 5 and 6 mm bits, and a step bit or hole saw for the motor's shaft
  • A hacksaw, for the mallets' shafts, the threaded rod and the motor's arm
  • A small file, for flats on the shafts
  • A spirit level, to set the beam level
  • A multimeter, to set the 5 V converter and find the motor's terminals

Choices

Decisions that are yours to make. Where we started is the version in the 3D model and the ingredients: a starting point, not the right answer.

What the mallets strike

What sits under each head? There are four, and each can have its own voice.

Four woodblocksWhere we started

SoundA dry, clock-like knock in four pitches, the biggest block lowest. Each side plays a pair, so it's two notes on the left, then two on the right.

They're bought, about $10 to $20 each, and loud and clear under a snapped head. Each head springs straight back off its block, so it rings as long as the wood lets it.

Four tuned bars

SoundMelodic and ringing, like a xylophone or a glockenspiel, tuned so each side's pair makes an interval

Use xylophone bars or steel plates on felt rails, held at their nodes, about a quarter of the way in from each end. The snap suits them, because each head springs off the bar and leaves it ringing.

Two drums

SoundRounder and warmer. The outer mallet meets each drum near the rim and the inner one near the middle, so each side has a high and a low tone.

There are fewer things to buy and tune. Each drum needs a stand that holds its head level under both mallets, in place of the four cradles.

Found things

SoundEach has its own voice. A biscuit tin rattles, a flowerpot clunks and a pan lid rings.

They're free and the most surprising. Anything with a top that sits steady in a cradle will do.

Where the head lands changes the sound too. On a woodblock, nearer the slot is louder and more hollow, and nearer the solid end is drier. Slide the block in its cradle to move it.

The mallet heads

What does each head strike with?

Hard rubberWhere we started

SoundA clear knock with a round edge to it, the classic woodblock sound

They're sold as xylophone mallets, in pairs, with 9.5 mm birch or rattan shafts. Hard rubber barely wears.

Yarn

SoundSoft and warm, more thud than knock

Yarn heads are light, and soften even a snapped strike. They suit tuned bars better than woodblocks.

Hard plastic or wood

SoundThe brightest and loudest, with a sharp click at the start

Acrylic or wooden heads mark soft wood over time. Try them on one side only, for an accent.

Felt

SoundThe softest, nearly a tap

Felt packs down over months. It's best where the element plays quietly under others.

How each pair lands

Do the two mallets on a side land together, or one after the other?

A flam, the outer firstWhere we started

SoundA quick "ga-dunk" on each side, a low note then a high one, about 40 ms apart at 120 beats a minute

The outer link's lower nut is set to tip its mallet a little before the inner's. The springs do the striking, so both land about as hard.

Together, as a chord

SoundTwo pitches at once, one fuller knock per side

Set both lower nuts on a side so they tip their mallets at the same point in the rock. Two heads landing at once are a little louder than either alone.

Well apart, two notes

SoundA short rhythm on each side, like a sixteenth note and the beat

Set one lower nut so it tips its mallet near the end of the beam's rise. The spring still strikes as hard, so the second note is as loud as the first.

One silent

SoundFewer notes, and a simpler pattern

Run a link's lower nut down its rod until it no longer tips the mallet, and the mallet stays cocked. It's the quickest way to change the pattern by hand.

The timing is set by where each lower nut sits on its link, so the gap between the two notes grows as the tempo slows.

How the heads strike

What throws each head onto its block, while the beam keeps rocking?

A snap springWhere we started

SoundA crisp, firm knock, about as hard as a hand stroke, and every strike is as hard as the last at any tempo. A quieter tick comes as each mallet flips back up.

A spring from below each pivot to a horn on the hub crosses the pivot at a tipping point, so the mallet rests either up or down. The link's lower nut nudges it past the point and the spring throws it down. A rubber stop catches the shaft with the head just above the block, and the shaft's flex carries the head on, so it strikes and springs straight back off. The upper nut nudges it back up. Heads land at about 1.6 to 1.8 m/s. It adds a spring, a stop bar and two stops to each mallet, and the nuts need care to set.

A plain fall

SoundA gentle knock, about a third as hard, that follows the beam, so it grows with the tempo

There's no spring. A nut lifts the tail and lets the head follow it down onto the block, where it lies until it's lifted again, which shortens the ring. It's the simplest, and nothing can jam, but the head can only come down as fast as the beam lets it.

A lift and trip

SoundAs crisp as the snap spring, with no flip-up tick

A hook on each link lifts the tail against a spring, and a fixed ramp knocks it off near the top, so the spring throws the head down, as a clock's striking train does. A check spring keeps the head off the block. It needs a hook, a ramp and fine setting for every mallet.

A stiff link and whippy shafts

SoundA whip-like strike with a little spring in it, half a press

A stiff link with a rod end at both ends, and rattan shafts that bend as the heads land. It has the fewest parts, but the beam drives each head into its block and holds it there to the end of the stroke, which deadens it.

Either way, something has to give. The crank always takes the beam through its full rock, so a link that drove a landed head on into its block would stall the motor or break a part.

Choosing which mallets play

Do all four play on every turn, or can the beat choose?

All four, alwaysWhere we started

SoundThe same pattern every turn, set by hand with the four nuts

It's the simplest. It comes in on the beat by starting from level, where every head is clear of its block, and stops by parking level again. It can't turn without striking, so it can't line up in silence.

A damper on each block

SoundAny of the four can play or be hushed to a soft thud on any turn, like one row of a drum machine

A small servo beside each block swings a felt pad over its top, so a head snaps onto felt instead of wood. The mechanism runs on unchanged, so nothing can jam, and the beam can rock nearly silently while it lines up with the beat. It adds four servos and their wiring.

Free running

SoundA steady pattern at its own tempo, drifting against the rest of the Machine

There's no angle sensor, just a speed setting. It's the least to build, but it never locks to the shared beat.

The drive

How does the motor turn the crank?

A belt up the postWhere we started

SoundThe motor's groan stays low, at the foot of the post, and the belt adds a faint whir

A toothed belt runs one to one from the motor up to the crank on the post, so the motor's weight stays low and the drive is on show. Loose enough, the belt skips a tooth if something jams, before anything breaks. Fitting a pulley to the wiper motor's shaft is the fiddly step.

The crank on the motor's shaft

SoundThe motor's groan comes from up near the beam

Bolt the motor to the post and use the crank arm it comes with as the crank. It's the fewest parts, with no belt or bearings, but the heavy motor sits high, and nothing gives way if something jams.

A smaller 24 V gearmotor

SoundQuieter, a hum instead of a groan

A fist-sized worm gearmotor, about 60 rpm at 24 V, runs straight from the battery with no limit on its speed signal. It's cheaper and quieter but far weaker, and it doesn't look like a wiper motor.

The stop switch

What cuts the motor's power at the element?

Latching emergency-stop button, with a spare contactWhere we started

The red mushroom head anyone nearby knows to hit. It stays down until it's twisted to release, so the element can't start again by accident. Its main contact cuts the power and its spare contact tells the ESP32. About $8.

Two-pole power switch, a rocker or a toggle

Smaller, plainer and cheaper, about $2. One pole cuts the power and the other tells the ESP32, so it does the same job. It doesn't read as a stop to someone who doesn't know the Machine, and it switches back on as easily as off. Rate its contacts above what the element draws, as the button's are.

Keep the second pole either way. It tells the ESP32 the power was cut, so the beam creeps forward to level before anything else when the power comes back, as after a stop from the Bridge. Either way the relay stays, since it's how a stop from the Bridge reaches the element when no one is at it. A two-pole switch wires as the button does: one pole in place of the main contact, from 11 to 12, and the other in place of the spare contact, from 13 to 14.

Print

Material
PETG
Layers
0.2 mm
Walls
4
Infill
40%

Every part fits a 150 mm bed and prints without supports. PETG takes the knocks of the heads and the warmth of the motor better than PLA, but PLA is fine for a first try.

The printed parts

  • Pivot cheek, bolts to a face of the center post's top and holds one of the beam's bearings× 2

    Which way up
    Flat on its outer face, with the bearing pocket facing up
    Supports
    None
    Time
    About 1 hour 10 minutes each

    The two cheeks are the same. The bearing is a press fit into the pocket, against a thin lip. If it's too tight, sand the pocket a little; if it's loose, a dab of glue on the bearing's outer ring holds it. Two heat-set inserts go into the outer face of the cheek that goes on the back, for the sensor bracket.

    STL ↓
  • Beam hub, clamps the shaft and holds the beam in a saddle

    Which way up
    Upside down, standing on the tops of the saddle's two walls
    Supports
    None
    Time
    About 50 minutes

    The saddle's floor bridges between the two walls. A heat-set insert goes into the hole in its side, for the set screw onto the shaft.

    STL ↓
  • Sensor bracket, holds the angle sensor behind the pivot

    Which way up
    Flat on its back, with its two legs standing up
    Supports
    None
    Time
    About 10 minutes
    STL ↓
  • Crank block, holds the crank's shaft in two bearings on the center post

    Which way up
    Flat on its back, the face that goes against the post
    Supports
    None
    Time
    About 1 hour 30 minutes

    Both bearings press in, one from each face. The screw holes are slots, so the block slides up the post to tension the belt.

    STL ↓
  • Crank wheel, with holes for the crank pin at 15, 20 and 25 mm

    Which way up
    Flat on its front face, with the hub standing up
    Supports
    None
    Time
    About an hour

    A heat-set insert goes into the side of the hub, behind the disc, for the set screw onto the shaft.

    STL ↓
  • Motor adapter, bolts to the wiper motor's crank arm and carries the motor's pulley

    Which way up
    Flat, with the pin's socket facing up
    Supports
    None
    Time
    About 15 minutes

    The 8 mm pin is a press fit in its socket. The six-sided recess on the other face fits over the nut that holds the arm on the motor, which centers the adapter.

    STL ↓
  • Mallet hub for the right pair, turns on two bearings, grips the mallet's shaft and carries the snap spring's horn× 2

    Which way up
    Flat on its back, with the horn on top
    Supports
    None
    Time
    About 30 minutes each

    The two 625 bearings press in, one from each face. A heat-set insert goes into the hole in its top, for the set screw onto the shaft. An M4 screw through the horn, with a nut behind, is the spring's pin.

    STL ↓
  • Mallet hub for the left pair, the mirror image of the right× 2

    Which way up
    Flat on its back, with the horn on top
    Supports
    None
    Time
    About 30 minutes each
    STL ↓
  • Stop bar, holds the two rubber stops under each mallet's shaft× 4

    Which way up
    On its back, the tab flat on the bed and the arm standing up
    Supports
    None
    Time
    About 30 minutes each

    The four are the same. Its tab bolts to the post below the pivot, held by the spring's anchor screw and one more.

    STL ↓
  • Tail clip, grips the mallet's tail and carries its link× 4

    Which way up
    Flat on one face, with the shaft's hole running across the bed
    Supports
    None
    Time
    About 10 minutes each

    A heat-set insert goes into the hole in its front face, for the set screw onto the shaft. The link runs through the slot behind the shaft.

    STL ↓
  • Woodblock cradle, an open frame that holds a woodblock on felt on top of its stand× 4

    Which way up
    Upside down, its top on the bed and the tab standing up
    Supports
    None
    Time
    About 50 minutes each

    One cradle fits every block. The block rests on felt along the frame's two long sides, and the open middle lets it ring. A rubber band round the block and the frame holds it if it walks.

    STL ↓

Assembly

  1. 1

    Bolt the base rail on top of the three feet, one at each end and one in the middle, with a corner bracket on the front and back of each.

    CheckThe rail is straight, and the base doesn't rock on a flat floor.

  2. 2

    Stand the center post on the middle of the rail's back half, with a corner bracket on each side, its 40 mm side along the rail. Stand the four mallet posts on the rail's back half in the same way, 17 cm and 47 cm each side of the middle, the shorter pair inside.

    CheckEvery post is square to the rail, and all their front faces line up.

  3. 3

    Press a bearing into each pivot cheek. Melt two heat-set inserts into the outer face of one of them; that one goes on the back. Bolt both loosely to the top of the center post, one on its front face and one on its back, so their bearings sit just above the post's end.

  4. 4

    Drop five T-nuts into the beam's front slot, for the four links and the connecting rod, and two more into its front and back slots at the middle, for the hub. Melt a heat-set insert into the side of the beam hub, and screw the hub onto the middle of the beam.

  5. 5

    Push the beam's shaft through the front bearing, a shim washer, the hub, a second shim, and the back bearing.

    TrickyThe two cheeks must line up across the post. Tighten their screws with the shaft already through both bearings, a little at a time, rocking the beam between turns. If it stiffens, one cheek has moved. Then file a small flat on the shaft under the hub's set screw and tighten the set screw onto it, so the shaft turns with the beam.

    CheckBalanced by hand, the beam rocks freely and settles slowly, with no stiff spots.

  6. 6

    Glue the sensor's round magnet onto the end of the shaft behind the back cheek, centered. Screw the board to the bracket, chip facing in, and the bracket to the back cheek's inserts.

    TrickyOff center by more than about a millimeter, the reading wobbles as the beam rocks. An ordinary disc magnet won't work; it has to be the kind magnetized across its face, as sold with the board.

    CheckThe chip sits 1 to 2 mm from the magnet, square to it and centered on the shaft.

  7. 7

    Press the two crank bearings into the crank block and bolt it loosely to the center post's front face, with the crank's shaft about 36 cm above the floor. Slide the shaft through, then a shim, the pulley, and the crank wheel on its front end. Tighten the pulley's set screws and the wheel's onto flats filed on the shaft.

    CheckThe shaft turns freely by hand, and the pulley and wheel run true.

  8. 8

    Find the motor's terminals with a multimeter. Then drill the plate to match the motor's mounting holes, with a hole in the middle for its shaft, and bolt the motor to the front of the plate, its shaft pointing back through it toward the post.

    TrickyWiper motors have four or five terminals. One is the ground, often marked 31, and it's joined to the motor's case. The slow and fast windings are often marked 53 and 53b, and the other two are a switch that closes once a turn, which this build leaves unconnected. Touch the battery's − to the case and its + to each terminal in turn, briefly, to see which is which.

  9. 9

    Saw the motor's crank arm down to about 30 mm each side of its nut, and drill two 5 mm holes through it, 30 mm apart, centered on the nut. Press the 16 mm pin into the motor adapter, bolt the adapter to the arm, and push the second pulley onto the pin.

    TrickyThe adapter has to sit centered on the motor's shaft, or the pulley wobbles and the belt walks off. Its six-sided recess fits over the arm's nut, which centers it. If your arm's nut is a different size, enlarge the recess until it fits snugly.

    CheckTurned by the motor, run slowly, the pulley's rim stays still to the eye, with no wobble.

  10. 10

    Bolt the plate upright on the middle foot with two corner brackets, so the motor's pulley sits right under the crank's and in line with it.

    CheckA straightedge laid against both pulleys' faces touches both.

  11. 11

    Loop the belt over both pulleys and slide the crank block up the post's slots until the belt is snug. Then tighten the block.

    TrickyLeave the belt snug, not tight. Loose enough, it skips a tooth if something jams, before anything breaks. The motor's gearbox won't turn backward, so with the belt on, the crank won't turn by hand. Take the belt off whenever you want to turn the crank yourself.

    CheckPressed midway, the belt gives about 5 mm.

  12. 12

    Make the connecting rod from threaded rod with a rod end screwed onto each end, about 47 cm between the eyes. Fit its bottom eye on an M5 screw through the crank wheel's middle hole, with a locknut, and its top eye on a long screw and spacer in the beam's front slot, 15 cm left of the middle.

  13. 13

    With the belt off, turn the crank by hand and watch the beam. Turn the rod ends in or out until the beam tips the same amount each way, about 9 degrees.

    CheckAt each end of its rock, each end of the beam sits about 6 cm above or below level.

  14. 14

    Cut the mallets' shafts, the inner pair to about 22 cm and the outer pair to about 30 cm. Press two 625 bearings into each mallet hub and melt in its insert, and put an M4 screw through its horn with a nut behind, for the spring's pin. Slide a hub onto each shaft, the right-pair hubs on the right mallets, so the head's middle is 15 cm from the hub's middle on the inner pair and 16 cm on the outer pair. The horn faces you, pointing up and a little toward the head when the shaft is level. Tighten the set screw. Then slide a tail clip onto the other end, 4.5 cm from the hub on the inner pair and 11 cm on the outer pair, the slot toward the post.

  15. 15

    Bolt a stop bar to the front of each post, its arm 2.4 cm below where the pivot will be. The spring's anchor, an M5 screw on a 40 mm spacer, goes through its tab into a T-nut 4 cm below the pivot, and a second screw below that. Screw two rubber feet onto M5 screws in the arm, with a nut under it.

  16. 16

    Hang each mallet on its post with an M5 screw through the hub, a spacer and a T-nut in the post's front slot, 3 cm below the post's top, the head pointing away from the middle. Hook a spring from the horn's pin down to the anchor screw.

    TrickyThe spring pulls about 30 N. Stretch it on with pliers, or a loop of string, with the mallet resting on a stop, and keep fingers clear of the shaft as it flips.

    CheckPushed past its tipping point either way, with the horn straight up, the mallet flips over and stays where it lands, on one of its two stops.

  17. 17

    Stick a strip of felt along each long side of each cradle's frame, and bolt a cradle to the front of each stand. Stand the stands on the rail's front half, under where each head lands, 32 cm and 63 cm each side of the middle. Set a woodblock in each cradle, the biggest on the left outer stand.

  18. 18

    Hold each head on its woodblock and slide its cradle up or down the stand until the mallet's shaft is a little below level, about 5 degrees. Then screw the head-side stop up until it holds the head 2 to 3 mm above the block, and the tail-side stop until the cocked mallet's head sits about 9 cm above it.

    TrickyThe head-side stop sets the sound. Too low, and the head rests on the block and deadens it; too high, and the shaft can't flex far enough for the head to reach it. A stiffer shaft wants a smaller gap.

    CheckFlicked down by hand, the head strikes the block and springs straight back off it to rest just above it.

  19. 19

    Make the four links. Screw a rod end onto each length of threaded rod, then hang it from a screw and 12 mm spacer in the beam's front slot, straight above its tail clip, and drop the rod down through the clip's slot. Thread on the upper nut and the spherical washers above the clip, and the rubber washer and the lower nut below it.

  20. 20

    With the belt off, turn the crank slowly by hand. Set each lower nut so it tips its mallet down just after its side of the beam passes level on the way up, the outer a little before the inner. Set each upper nut so it tips its mallet back up near the bottom of its side's travel. As drawn, the lower nut sits about 8 cm below the upper on the outer links and 4 cm on the inner ones.

    TrickyThis step is the rhythm. A lower nut further up its rod tips its mallet earlier. But after each snap, the link must not catch the clip again before the beam turns back, or it drives the mallet into its stop and the motor stalls. That leaves a few millimeters of room on the inner links, so set them last and check each one through a full turn.

    CheckThrough each whole turn, every mallet snaps down once and flips up once, and no nut is ever still pushing a mallet that's already on its stop. With the beam level, the right pair is cocked and the left pair rests on its stops.

  21. 21

    Put the belt back on. Wire it in the box on the back of the center post, following the wire list under Wiring. The fuse comes first, then the 5 V converter for the ESP32, and the stop button and the relay for the motor's power. The motor goes through the driver board, and the sensor to the ESP32 by four thin wires down the post. Join all the grounds.

    TrickySet the 5 V converter with a multimeter before the ESP32 is connected. Most come set higher, and more than about 6 V destroys the board.

    CheckWith the battery in and no code running, the ESP32's light is on, the motor is still, and the beam doesn't move. Press the stop button, release it, and nothing moves.

  22. 22

    Before playing, check what the ESP32 relies on. Run the motor slowly, with a hand on the stop button, and watch the angle the sensor reports. Then bring it to one turn a second.

    CheckThe angle rises and falls smoothly, with no jumps, twice level every turn. At one turn a second, the left and right pairs take turns about every half second.

Wiring

The fuse comes first, right after the battery. The ESP32-S3 runs from the 5 V converter. The motor's power goes through the stop button and then the relay, so either one cuts it, and the driver board sets the motor's speed. The status light, the number switches and the battery reading are wired the same way on every element, so they're on the Control page, not here.

Wiring · See-Saw Beam
PowerSignalMotorGround, all joinedPins drawn faint are left empty.

Wire list

  1. Battery adapter, +

    Fuse, 10 A, in

    PowerRed, 14 AWG

    Keep it as short as the adapter allows. Nothing connects ahead of the fuse.

  2. Fuse, 10 A, out

    5 V converter, IN+

    PowerRed, 22 AWG

  3. Fuse, 10 A, out

    Stop button, 11

    PowerRed, 16 AWG

  4. Stop button, 12

    Relay module, COM

    PowerRed, 16 AWG

    The stop button's main contact opens when pressed, cutting the motor's power itself, so a program that hangs can't ignore it.

  5. Relay module, NO

    Driver board, BTS7960, B+

    PowerRed, 16 AWG

  6. 5 V converter, OUT+

    ESP32-S3 board, 5V

    PowerRed, 22 AWG

    Connect it only once the converter is set to 5 V.

  7. 5 V converter, OUT+

    Relay module, VCC

    PowerRed, 22 AWG

  8. ESP32-S3 board, 3V3

    Driver board, BTS7960, VCC

    PowerRed, 22 AWG

    The board's logic runs at the ESP32's 3.3 V, so its inputs match the ESP32's pins.

  9. ESP32-S3 board, 3V3

    Angle sensor (AS5600), VCC

    PowerRed, 24 AWG

    The sensor runs at 3.3 V so its signals match the ESP32's.

  10. ESP32-S3 board, 3V3

    Resistor, 4.7 kΩ, 1

    PowerThe resistor's own leg

  11. ESP32-S3 board, 3V3

    Resistor, 4.7 kΩ, 1

    PowerThe resistor's own leg

  12. Battery adapter, −

    5 V converter, IN−

    GroundBlack, 22 AWG

  13. Battery adapter, −

    Driver board, BTS7960, B−

    GroundBlack, 16 AWG

    This is the motor's return.

  14. 5 V converter, OUT−

    ESP32-S3 board, GND

    GroundBlack, 22 AWG

  15. Relay module, GND

    ESP32-S3 board, GND

    GroundBlack, 22 AWG

  16. Driver board, BTS7960, GND

    ESP32-S3 board, GND

    GroundBlack, 22 AWG

  17. Driver board, BTS7960, LPWM

    ESP32-S3 board, GND

    GroundA short jumper to the board's own GND pin

    Held low, the board can only run the motor one way, which keeps the motor's case, and the frame it's bolted to, at ground.

  18. Resistor, 10 kΩ, 2

    ESP32-S3 board, GND

    GroundThe resistor's own leg

  19. Resistor, 10 kΩ, 2

    ESP32-S3 board, GND

    GroundThe resistor's own leg

  20. Stop button, 14

    ESP32-S3 board, GND

    GroundBlack, 22 AWG

  21. Test button, 2

    ESP32-S3 board, GND

    GroundBlack, 22 AWG

  22. Angle sensor (AS5600), GND

    ESP32-S3 board, GND

    GroundBlack, 24 AWG

  23. Angle sensor (AS5600), DIR

    ESP32-S3 board, GND

    GroundA short jumper to the board's own GND pin

    It sets which way the angle counts. Left loose, the reading can flip.

  24. ESP32-S3 board, GPIO 5

    Relay module, IN

    SignalAny color, 22 AWG

  25. Resistor, 10 kΩ, 1

    Relay module, IN

    SignalThe resistor's own leg

    It holds the relay off while the ESP32 starts, when its pins float.

  26. ESP32-S3 board, GPIO 16

    Driver board, BTS7960, R_EN

    SignalAny color, 22 AWG

  27. ESP32-S3 board, GPIO 16

    Driver board, BTS7960, L_EN

    SignalAny color, 22 AWG

    Both halves of the board are switched on together.

  28. Resistor, 10 kΩ, 1

    Driver board, BTS7960, R_EN

    SignalThe resistor's own leg

    It holds the driver off while the ESP32 starts.

  29. ESP32-S3 board, GPIO 21

    Driver board, BTS7960, RPWM

    SignalAny color, 22 AWG

    The motor's speed, as a fast on-off signal. The firmware keeps it to about 65 percent of the time on, so the motor never sees more than about 12 V on average.

  30. ESP32-S3 board, GPIO 17

    Angle sensor (AS5600), SDA

    SignalAny color, 24 AWG

    The sensor's four wires run from the pivot down the center post's back slot, about 60 cm. Keep them together, twisted if you can.

  31. Resistor, 4.7 kΩ, 2

    ESP32-S3 board, GPIO 17

    SignalThe resistor's own leg

    The two 4.7 kΩ resistors keep the sensor's signals crisp over the long run. If the board has its own, these do no harm.

  32. ESP32-S3 board, GPIO 18

    Angle sensor (AS5600), SCL

    SignalAny color, 24 AWG

  33. Resistor, 4.7 kΩ, 2

    ESP32-S3 board, GPIO 18

    SignalThe resistor's own leg

  34. Stop button, 13

    ESP32-S3 board, GPIO 4

    SignalAny color, 22 AWG

    This is the stop button's spare contact, so the ESP32 knows it's been pressed.

  35. Test button, 1

    ESP32-S3 board, GPIO 14

    SignalAny color, 22 AWG

    The test button. The ESP32's own pull-up holds the pin high until it's pressed, so nothing else goes on this pin.

  36. Driver board, BTS7960, M+

    Wiper motor, 53b

    MotorRed, 16 AWG

    The motor's fast winding. The slow one, often marked 53, is stronger and slower, and suits tempos under about 90 beats a minute.

  37. Driver board, BTS7960, M−

    Wiper motor, 31

    MotorBlack, 16 AWG

    The ground terminal, which is joined to the motor's case.

Get these right

Set the converter first
Most 5 V converters come set higher. Turn its screw with the battery in and a multimeter on its output until it reads 5.0 V, and only then connect the ESP32. More than about 6 V destroys the board.
Keep the motor to about 12 V
The battery gives 18 to 20 V, and the motor is made for 12. The driver board switches the full battery on and off thousands of times a second, and the firmware never lets it be on more than about 65 percent of the time, so the motor sees about 12 V on average. Running it near full on for long overheats it.
A bigger fuse than most elements
The motor draws a few amps as it runs and much more for an instant as it starts. Use a 10 A fuse, and a stop button and relay with contacts rated 10 A. The firmware starts the motor gently, over a quarter of a second, which keeps that first draw down.
The motor's case is ground
Inside a wiper motor the ground terminal is joined to its case, and the case is bolted to the frame. Wire that terminal to the driver's M− and keep LPWM tied low, so it always stays at ground. Run backward, the whole frame would sit at the battery's voltage, and anything touching it and ground would short.
The stop holds the beam
When the stop button cuts the power, the motor's worm gear stops the beam where it is and holds it. A head may be left lifted. Release the button and the firmware parks the beam level before anything else.
The pins
Any free ESP32-S3 pins will do, except 0, 3, 45 and 46, which the board reads as it starts, 19 and 20, which are its USB port, and 35 to 37 on boards with eight megabytes of extra memory (marked R8). Pins 1 and 4 to 15 go to the parts every element shares, as on the Control page, the test button on 14 among them. If you use others, change them at the top of the firmware.

Mounting

Everything fixes to the V-slot frame with T-nuts and screws, so any part can slide to a new place or come off with a hex key. Every post stands on the back half of the base rail with its front face in line, and everything that moves sits in front of the posts, in one plane.

The frame
The base rail sits on three feet, with a corner bracket on the front and back of each. The center post and the four mallet posts stand on the rail's back half, each held by a corner bracket on each side.
The beam's pivot
The two printed cheeks bolt to the front and back faces of the center post's top, four M5 screws each into the post's two slots. The shaft runs between them, just above the post's end, and the beam sits in its hub on top.
The links and the connecting rod
Each hangs from an M5 screw and spacer into a T-nut in the beam's front slot, so each slides along the beam to a new place. Further from the middle, a link rises and falls further and its head lifts higher.
The crank
Its printed block bolts to the center post's front face with four M5 screws in slots, so it slides up and down the post to tension the belt.
The motor
It's bolted to an aluminum plate that stands on the middle foot, in front of the rail, on two corner brackets, with its shaft right under the crank's.
The mallets
Each turns on an M5 screw through a spacer into a T-nut in its post's front slot, 3 cm below the top, so the whole mallet slides up or down its post.
The snap
Each stop bar's tab goes on its post's front face just below the pivot, held by the spring's anchor screw and one more. The spring hangs from that anchor in front of the pivot screw, so the mallet, its stops and its spring all slide up or down the post together.
The woodblocks
Each stand is a short V-slot upright on the rail's front half, under where its head lands. The cradle's slotted tab bolts to the stand's front face, so it slides up or down to meet the head.
The angle sensor
It's on its printed bracket on the back cheek, held by two M3 screws in heat-set inserts. Its wires run down the center post's back slot to the box.
The electronics
The box goes on the back of the center post, about 15 cm up, on two T-nuts, between the battery below and the sensor above.
The stop button
It's in its own housing on the front of the right outer post, below the mallet's pivot, where a hand finds it without reaching past anything that moves.
The battery
The adapter sits on the middle foot, behind the rail, on two T-nuts, so the pack slides on and off without moving anything else.
The wires
Clip-in slot covers hold the wires inside the extrusion's slots. The stop button's wires run along the rail's back slot to the middle.

The electronics

Hidden in a box, or on show?

Closed boxWhere we started

A small project box, bought or printed, bolts to the back of the post. It's tidy and safe, but it hides the electronics.

Open plate

The boards sit on standoffs on a flat plate on the post, with the wires dressed along the slot. The electronics become part of the look. It wants neat wiring, and nothing guards it.

DIN rail

A short length of 35 mm DIN rail goes on T-nuts, with each board in a snap-on holder. It looks like a control panel, and any board comes off with a flick. The holders add a few dollars.

Whichever you pick, keep the stop button on the outside, where anyone can reach it.

Tuning

Tuning

The test button
A short press plays each of its notes once, starting about a second after you let go: it starts, plays half time and double time, then stops level. With no Bridge in range it keeps its own beat of 120 a minute. A long press does nothing on this element. What it learns about the motor it learns as it plays, and level and the mallets' landings are measured by hand. It works only while the element is resting, with no Bridge in range or with the Bridge holding it silent. While it plays or is stopped, the button does nothing. A stop ends a test at once, and pressing again ends one early.
Strikes too quiet
Use a stiffer spring, or hang the anchor a little lower so the spring stretches further. Heavier heads, or hard plastic ones, sound louder at the same speed. Check the head-side stop too; a gap of 2 to 3 mm lets the head reach the block with most of its speed.
A dull, short knock
The head is resting on the block after it strikes, which deadens it. Raise the head-side stop a little, so the shaft stops the head just above the block.
A head snaps but never reaches its block
The gap is too big for the shaft to flex across, or the shaft is too stiff. Lower the head-side stop a little.
A mallet never snaps down
Its lower nut is too far down its rod to tip it past the tipping point. Run the nut up the rod.
A tick each time a mallet cocks
That's the mallet flipping up onto its tail-side stop, a quiet second voice between the strikes. A softer rubber foot quiets it, and so does setting the upper nut to tip it later, nearer the bottom of its side's travel.
The motor slows or stalls on one side
A nut is still pushing a mallet that's already on its stop. Move that nut away from the clip a little, and check each link hangs straight above its clip.
Left and right aren't evenly spaced
The connecting rod meets the beam to the left of the pivot, so the beam rises a little faster on the left than on the right. As drawn, at one turn a second, the left pair comes about 0.51 s after the right and the right about 0.49 s after the left. Set the left lower nuts a little later to even it out, or keep it; a slight unevenness gives a swing. Check the beam rocks evenly about level first.
Strikes landing early or late
The firmware plans each strike from where the beam is, and how long after it passes level each mallet strikes. A snap takes about a tenth of a second from its tipping point to the block. Moving a nut changes the timing, so let it measure the strikes again after any change.
The motor groans
It's a wiper motor. A belt that's too tight makes it louder, and so does a speed signal that's too slow; above about 20 kHz the driver's switching can't be heard.

Variations

Eight mallets
Hang a second set of four behind the posts, on a second row of links from the beam's back slot. They can play a different pattern on different blocks, so each side plays four notes.
Two beams on one crank
A second beam on its own post, driven by a second crank pin a quarter turn round the wheel, plays its pairs between the first beam's. Together they make four strikes a turn, like eighth notes.
A bigger see-saw
A 1.5 m beam on a post about 1.2 m tall rocks slowly and grandly, and its outer mallets swing much further. It strikes as hard, since the springs do the striking; the frame wants to be stiffer, and the outer tails longer.
Turned by hand
Leave out the motor and the electronics and put a handle on the crank wheel, so someone in the audience plays it. The tempo is theirs, and so is the swing.