Plate travel drawn 3× for visibility
Energy per step, per day, per season
A step can give up at most the walker's weight times how far the plate sinks. Springs take a share to lift the plate back; gears, generators and electronics lose more. What reaches the 24 V line is below.
Where one step's energy goes
Results
Electricity per step vs plate travel
Checks
Visitor figure: up to 60,000 on peak days (amNY, GrowNYC). Electricity price: Con Edison 2026 all-in residential average, about $0.29/kWh. Solar comparison is approximate. Steps per visitor are estimates to be checked with hand counts.
Bench tile: full build guide
A plywood plate on four springs pushes a rack. The rack turns a pinion, a belt makes a stepper motor spin almost four times faster, and the motor works as a generator. Two diode bridges turn its AC into DC, which heats a known resistor; an Arduino measures the voltage across that resistor and adds up each step's energy. Allow two afternoons: one for the frame, one for the board.
1 · How the circuit works
2 · Schematic
Arrows show the direction each diode conducts; the bar end is the stripe on the real part. Crossing lines without a dot are not connected.
3 · Parts (approximate prices)
| Part | Qty | Why | Approx. |
|---|---|---|---|
| 12 mm plywood, 60 × 60 cm | 2 | Top plate and base | $20 |
| Compression springs, about 4 N/mm, ~25 mm long | 4 | Hold the plate up and return it | $12 |
| Rack and pinion, module 1, 8 mm bore pinion | 1 | Turns plate travel into rotation | $12 |
| KFL08 bearings and 8 mm × 100 mm shaft | 2 + 1 | Carry the pinion and big pulley | $10 |
| GT2 pulleys 60T (8 mm bore) and 16T (5 mm bore), 200 mm belt | 1 set | Spins the motor 3.75× faster | $12 |
| NEMA 17 stepper motor | 1 | The generator | $14 |
| 1N5819 Schottky diodes | 8 | Two bridge rectifiers | $2 |
| 10 Ω, 10 W ceramic resistor (R1) | 1 | Known load | $3 |
| 47 kΩ (R2) and 10 kΩ (R3) resistors, ¼ W | 1 each | Voltage divider | $1 |
| 1N4733A 5.1 V Zener (D9), 10 nF ceramic capacitor (C1) | 1 each | Protect and filter the A0 input | $2 |
| Arduino Nano or compatible, USB cable | 1 | Samples voltage, sums energy | $12 |
| Perfboard 5 × 7 cm, 4-way screw terminal, standoffs | 1 each | The circuit board | $4 |
| 22 AWG solid and stranded wire, heat-shrink, jumper leads | — | Rails, links, leads | $8 |
| 8 mm dowel, wood blocks, screws, washers for shims | — | Guides, mounts, end stops | $15 |
| Total | ≈ $127 | ||
4 · Tools and safety
- Temperature-controlled soldering iron, chisel or conical tip
- Lead-free rosin-core solder, 0.8 mm, and a flux pen
- Brass-wool tip cleaner, helping hands or a small vise
- Flush cutters, wire strippers, needle-nose pliers
- Multimeter with resistance, continuity and diode test
- Desoldering braid, heat-shrink and a heat gun or lighter
- Calipers (or a ruler and feeler shims) for setting travel
- Safety glasses on: trimmed leads and solder spatter fly.
- A fan pulling flux smoke away from your face; window open.
- The iron's metal is at 340 °C: always return it to its stand.
- Wash your hands after soldering, before eating.
- Never connect the + rail straight to the Arduino: only A0 through the divider.
- If you're new to soldering, practise ten joints on a spare piece of perfboard first.
5 · Build the frame
- Cut two 60 × 60 cm plywood squares. Drill a 10 mm hole 3 cm in from each corner of the base; glue 8 mm dowels into matching spots on the top plate so they slide in the holes as plungers.
- Slip a spring over each dowel between the plates. Unloaded, the top plate should sit about 10 mm above the end stops.
- Screw the rack upright to the underside of the top plate, near one edge, teeth facing inward.
- Screw two KFL08 bearings to a wood block on the base. Push the 8 mm shaft through them with the pinion meshing on the rack and the 60-tooth pulley on the other end. Tighten both set screws on the shaft's flat.
- Mount the stepper on a second block with the 16-tooth pulley on its 5 mm shaft. Fit the belt, slide the motor back until the belt is snug, and screw it down. Without this 3.75× step-up the motor turns too slowly to get past the diodes.
- Glue four end-stop blocks to the base under the corners. Stack washers on them until the plate stops after 6 mm of travel; you'll change this to 4 and 8 mm in testing.
- There is no one-way clutch on the bench tile. On the way back up the springs turn the motor backwards; the bridges rectify that too, so you also measure the energy the springs give back.
6 · Solder the board, step by step
Click through the steps. The board view highlights what each step adds; faded parts come later. The view is from the component side.
What a good joint looks like
7 · Multimeter checks before any power
| Probe between | Setting | Expect | If not |
|---|---|---|---|
| + pad (column 22, top) and GND pad | Ω | ≈ 10 Ω | 0 Ω: solder bridge between the rails. Open: an R1 lead is loose. |
| Each diode: red on the plain end, black on the stripe | Diode | 0.15–0.35 V | Swap probes and it should read OL. OL both ways: open joint. Low both ways: shorted diode or bridge. |
| A0 pad and GND | Ω | ≈ 8.2 kΩ | About 10 kΩ: R2 side open. About 47 kΩ: R3 side open. Much lower: D9 is in backwards. |
| Each J1 screw and its row-7 node | Continuity | beep | The jumper wire's joint is open. |
| Column 5 node and column 10 node | Continuity | no beep | Solder bridge between the two bridges. |
| Stepper wires, before connecting | Ω | 1–5 Ω in a pair | Wires from different coils read open: that's how you find the two pairs. |
8 · First power-up
- Find the coil pairs with the ohmmeter. Put one pair in J1's A+ and A−, the other in B+ and B−. Which wire of a pair goes where doesn't matter; the bridge rectifies either way.
- Meter on DC volts across R1. Spin the big pulley by hand: the reading should flick up to a few volts.
- Move the meter to A0 and GND. Stomp on the plate as hard as you can: it must stay under 5 V.
- Plug the Nano into a laptop by USB, connect the A0 and GND leads, upload the sketch below, and open Serial Monitor at 115200 baud.
- Step on the tile. Each step prints one line: step number, joules, peak volts and the running average.
9 · Logger sketch and calibration
Before trusting the numbers, measure three things and type them into the top of the sketch: R1 with its leads (R_LOAD), R2 and R3 to work out (R2 + R3) ÷ R3 (DIVIDER), and the Nano's 5V pin while on USB (VREF; often 4.7–5.1 V). The output is comma-separated, so you can paste it straight into a spreadsheet.
// Harvest Steps bench logger v2: energy of each step into the load resistor
// Put your own measurements in the four values below.
const float R_LOAD = 10.0; // ohms: R1 plus its leads, measured
const float DIVIDER = 5.70; // (R2 + R3) / R3, from measured values
const float VREF = 5.00; // volts on the Nano's 5V pin, measured on USB
const float THRESH = 0.20; // volts across R1 that count as "producing"
const unsigned long DT_US = 500; // sample every 0.5 ms (2 kHz)
const unsigned long QUIET_MS = 400; // this long below THRESH ends a step
float joules = 0, peakV = 0, total = 0;
unsigned long quietSince = 0;
int steps = 0;
void setup() {
Serial.begin(115200);
Serial.println("step,joules,peak_volts,average_joules");
}
void loop() {
static unsigned long next = micros();
while ((long)(micros() - next) < 0) {} // wait for the next sample
next += DT_US;
float v = analogRead(A0) * VREF / 1023.0 * DIVIDER; // volts across R1
if (v > THRESH) {
joules += v * v / R_LOAD * DT_US * 1e-6; // P = V^2/R, times dt
if (v > peakV) peakV = v;
quietSince = millis();
} else if (joules > 0 && millis() - quietSince > QUIET_MS) {
steps++;
total += joules;
Serial.print(steps); Serial.print(',');
Serial.print(joules, 4); Serial.print(',');
Serial.print(peakV, 2); Serial.print(',');
Serial.println(total / steps, 4);
joules = 0; peakV = 0;
}
}
10 · Test plan
- Weigh three walkers of different builds on a bathroom scale.
- With the end stops at 4 mm, each walker takes 20 normal steps across the tile. Save the serial output.
- Repeat at 6 mm and 8 mm. Average each walker's joules at each travel.
- In the Energy physics tab, set the mass and travel, then adjust the efficiencies until the prediction matches your average. That tells you which stage loses the most.
- If 6 mm gives under 1 J, raise the step-up ratio (a 20T pinion or a bigger pulley) before changing anything else.
11 · Troubleshooting
| What you see | Likely cause | Fix |
|---|---|---|
| Nothing prints when you step | Voltage never passes THRESH; motor spinning too slowly | Check the belt isn't slipping; spin the pulley fast by hand to test; lower THRESH to 0.1 |
| Lines print with nobody on the tile | Noise on A0 | Twist the A0 and GND leads together; check C1; raise THRESH |
| Only half the expected voltage | Both wires of one coil in the same bridge as the other coil's wire | Recheck the pairs with the ohmmeter; one pair per bridge |
| A0 reads near 0 always | D9 backwards, or A0 lead on the wrong pin | Stripe of D9 toward the A0 line; check the Nano pin label |
| Joules far below the physics tab | Diode drops dominate at low voltage; loose end stops | More step-up; check travel with calipers; heavier walker |
| R1 warm after drill tests | Continuous spinning, not steps | Normal; keep drill spins under 10 s |