← Back
User guide · F3A Setup Tools

Angle Gauge

What it is and how to use it. A set of small wireless nodes that clip to an aircraft and read the angle between two surfaces — incidence, decalage, control throws, differential — to about 0.01°, without ever leveling the aircraft.

Want to get started?

Flash the firmware to each node straight from your browser — no toolchain, no app store.

Flash a node →

What it is

The Angle Gauge is a fleet of identical little nodes — each an M5StickS3 with a screen, a battery, and a motion sensor. Every node measures its own tilt against gravity and broadcasts it. Clip one to the wing and one to the stabilizer and a node shows you the difference between them directly.

That difference is the whole point. Because both nodes feel the same gravity, whatever attitude the fuselage happens to be sitting at cancels out — so the aircraft never needs to be leveled to measure decalage, incidence, control throws, washout, or symmetry. It resolves to roughly 0.01°, about 10–30× finer than a hobby angle meter (a Robart analog reads to 0.125°; digital angle cubes to about ±0.2°).

There is no master and no hub. Every node runs the same firmware, self-assigns a role (A, B, C…), and any node can put up a phone console on demand. Want the engineering behind it? See the design notes.

What you need

  • Two or more M5StickS3 nodes — ESP32-S3, 1.14" LCD, speaker, 250 mAh LiPo, with the Bosch BMI270 IMU built in. One node works for a single absolute angle; two or more unlock differential readings.
  • A USB-C cable to charge and to flash.
  • A Chromium-based desktop browser (Chrome, Edge, or Opera) for the one-time flash. A phone is optional — only needed if you want the web console.

Getting started

  1. Flash each node. Plug a node in, open the flash page, and install the firmware. Repeat for every node — they all get the same image. Settings survive a reflash.
  2. Power them on together. The first node to boot claims role A, the next B, and so on. Roles stick (they're saved on the device), so a node keeps its letter across power cycles.
  3. Let them warm up. For best-case accuracy, give a cold node about 15 minutes before precision work.
The one habit that matters Zero your nodes shortly before you measure, not hours ahead. The sensor's zero drifts slowly with temperature, so a fresh zero is what keeps you at 0.01°. Everything below is built around that.

Take a differential reading

The typical job — say decalage between wing and stabilizer:

  1. Pair-zero first. Sit both nodes flat on one true surface and run Match 0 (from the console Setup screen, or the on-device match). This cancels the fixed offset between the two units — the dominant error in differential work.
  2. Clip them on. One node on each surface you're comparing.
  3. Wait for green. Each node runs a MOVING → SETTLING → STABLE cycle. Grey means it's moving, yellow means it's settling, green means the reading is trustworthy. Hold still and let it reach green.
  4. Read the difference. Pick one node as the datum; the other shows the live angle between them. The aircraft can sit however it likes.
How the precision arrives When a surface stops moving the node starts averaging fresh samples, and precision improves the longer it sits still — about 0.005° after 2 seconds, 0.002° after 8. It caps the averaging automatically, so waiting longer than a few seconds past green doesn't help.

The three measuring modes

Most rigging measurements are a combination of three primitives — set from the phone console (and mirrored on every node's screen):

ModeWhat it showsUse it for
LiveEach node's own absolute tiltA single angle — dihedral, a surface against a level bench
TareZeroes now; then shows change from that zero (NET)Control throws — zero at neutral, then read the deflection
Δ DatumLive difference of every node against a chosen reference nodeDecalage, incidence, washout, L/R symmetry

On-device buttons

You can do the common things without a phone at all:

ButtonAction
Front (BtnA) — pressTare: first press arms it, then it zeroes at the next stable reading. Press again to clear.
Side (BtnB) — short pressCycle which other node you're reading the difference against.
Side (BtnB) — long press (1.5 s)Turn the phone console (Wi-Fi hotspot) on or off.
Side (BtnB) — held while powering onReset a stuck role and re-assign from scratch.
Power (side)Sleep / power the node off now.

The phone console

For the full set of measurements — and a nicer interface — any node can host a small web app:

  1. Long-press the side button (BtnB) on any node to start its hotspot.
  2. Join the Wi-Fi network named F3A Angle Gauge from your phone.
  3. Open http://192.168.4.1. It usually pops up on its own. On iPhone you can use Add to Home Screen to keep it one tap away.

The console has two areas. Measure gives you the three modes above plus about two dozen ready-made measurements built on them — rigging (decalage, incidence, washout, symmetry, dihedral, thrust line), throws (endpoints, differential ratio, L/R match, rates, flaps), and helicopter setups — along with auto-capture that grabs a reading each time a surface settles and chirps. Setup holds Match 0 (the pair-zero) and the motion/settle thresholds.

The Angle Gauge web console showing Live mode with sensor A stable at plus 0.395 degrees.
The console in Live mode, opened from a phone.

Accuracy tips

  • Everything is in degrees.
  • Zero shortly before measuring; allow ~15 minutes of warm-up after a cold power-on.
  • A node weighs about 20 g, enough to deflect a light surface — if in doubt, do a ballast test to see whether it moves.
  • For incidence, your accuracy is limited by the chord-line fixture you clip to, not the electronics.

Power & battery

  • Auto power-off after about 3 minutes idle (with a 10-second on-screen countdown first) — the pair counts as "in use" while either node is moving.
  • Wake a slept node with its power button; role and zero are remembered, tare and datum reset.
  • Battery % shows bottom-left; a cyan + means it's plugged in.

Troubleshooting

SymptomFix
Flasher says "Failed to initialize"Fully power the node off (hold the power button ~6 s — it has a battery, so unplugging USB isn't enough), then retry. See the flash page for the full checklist.
Two nodes don't see each otherMake sure both are flashed with the same firmware and powered on together. If a role looks stuck, hold the side button (BtnB) while powering the node on to re-assign.
Console shows stale numbers after a reflashRefresh the web app (or remove and re-add it to your Home Screen) — the cached copy keeps calling the old version.
Reading won't settle to greenThe surface (or the bench) is still moving, or the node is being nudged. Steady it and wait; drafts and a bumped table are common culprits.

Ready to try it?

Flash a node from your browser and pair it with a second one for differential readings.

Flash a node →
Loved this? If the Angle Gauge was useful to you, buy me a coffee. Everything here is built and shared for free — no accounts, no ads.
☕ Buy me a coffee
← Back