Inspiration
Steel mills, rail yards, warehouses and machine shops still run on people, and a lot of those people work alone or out of sight. When someone falls, the dangerous part often isn't the fall itself: it's the minutes before anyone notices. In 2024, 844 US workers died from falls, slips and trips on the job (BLS Census of Fatal Occupational Injuries). Big plants have cameras and safety staff. Small shops usually have nothing they can afford. This year's theme was Steel and Steam, so we wanted to build for the people inside those industries rather than the machines. Our goal: a cheap tag that notices a fall in seconds and makes sure a human hears about it, out loud.
What it does
Iron Sentinel is a clip-on safety tag plus a control room.
- Detect: an accelerometer watches for a fall: a jolt, a tilt past 60° , then the worker staying still for 2 seconds. Picking the tag up or bending over doesn't count.
- Ask: the tag beeps and gives the worker 10 seconds to press "I'm OK" . A cancelled fall is logged as a near-miss. Workers can also press an SOS trigger, which starts the same countdown.
- Alarm: if nobody responds, the tag sounds a siren and flashes a beacon, and the control room announces out loud who has fallen and where, using an ElevenLabs voice. The alarm can be repeated in the crew's languages (Spanish, Japanese, Hindi and more), translated by Gemini.
- Classify: the tag measures the fall itself at 50 Hz, so the system can tell a trip, a fall from height and a slow collapse (which can mean a medical emergency) apart, and change the advice: don't move them for a fall from height, bring the AED for a collapse.
- Report: Gemini writes an incident report from the last 30 seconds of sensor data, without inventing anything the data doesn't show. Responders can point a camera at the scene and Gemini's vision lists visible hazards (spills, clutter, unguarded edges) that may have caused the fall.
- Learn: every reading streams into Tiger Data (TimescaleDB). Supervisors can ask "any risky patterns this shift?" and get answers grounded in the shift's history. One board currently runs two workers, each with their own accelerometer, state machine and alarm. ## How we built it Hardware: Arduino UNO R4 WiFi with a Grove Base Shield: two MMA7660 ±1.5 g accelerometers, a touch sensor (SOS), a button (reset / "I'm OK"), a buzzer, an LED beacon and a light sensor for dark or confined spaces. Each alarm state has its own LED pattern (heartbeat when OK, accelerating blink during a countdown, a double-blink for SOS), so a rescuer can read the tag from across a room. Fall detection runs on the board at about 50 Hz. Tilt is the angle between the current acceleration vector $\mathbf{a}$ and the "upright" vector $\mathbf{u}$ calibrated at power- on: $$ \theta = \arccos\left(\frac{\mathbf{a}\cdot\mathbf{u}} {\lVert\mathbf{a}\rVert\,\lVert\mathbf{u}\rVert}\right) $$ To classify falls, the firmware measures how long the tag was in free fall (total acceleration under about 0.5 g) right before impact. Free-fall time gives a rough drop height: $$ h \approx \tfrac{1}{2} g t^2 \qquad\Rightarrow\qquad t = 450\ \text{ms} \;\Rightarrow\; h \approx 1.0\ \text{m} $$ A gradual tip-over with no impact is treated as a possible collapse. A rule-based label comes instantly, so the voice alarm isn't delayed, and Gemini then double-checks it against the numbers. Control-room server: a Python server built on the standard library only. It reads the tag over USB serial (or UDP over Wi-Fi) and streams live state to the browser with server-sent events. Every AI call has an offline fallback (template reports, the Mac's built-in voice), so the demo still works without Wi-Fi. AI and data:
- Gemini: incident reports, fall-type checks, hazard scans from photos, translations and Q&A. It falls back to backup models if one is overloaded.
- ElevenLabs: the spoken alarms in every language.
- Tiger Data: hypertables for readings and events, a per-minute continuous aggregate of each worker's motion, tilt and light, plus compression. Front end: a scrolling story site with a live demo panel, plus a full control-room dashboard with a holographic 3D worker (three.js, custom shader) that walks, falls and waves for help along with the real tag. ## Challenges we ran into
- Two identical sensors, one address. Both MMA7660s use the fixed I2C address
0x4C. Plugging in the second one didn't just fail: it froze the whole I2C bus, and the tag went silent. We moved the second sensor to a plain Grove port and wrote a bit-banged software I2C driver for it, then added a bus timeout so a bad connection can't freeze the tag again. - A tumbling tag looks like a person getting back up. During a real fall the tilt hovers around the 60° threshold, so the detector flipped between "fall" and "recovered" several times a second. We added hysteresis: a worker only counts as recovered after staying under 45° for half a second.
- Seconds matter more than eloquence. Waiting for Gemini before speaking added up to 20 seconds when the API was busy. Now the alarm is spoken immediately from a template, and the AI report fills in afterwards.
- A ±1.5 g sensor saturates on any real impact, so we rely on jolt size, saturation and free-fall time together rather than peak g.
- Models move fast. The Gemini model we started with was retired mid-hackathon, so we built a fallback chain. ## Accomplishments that we're proud of
- A full loop from fall to spoken alarm to written report in under 15 seconds, working on real hardware.
- Telling a trip from a fall from height from a collapse, using physics the tag measures itself.
- Two workers on one board, despite the address clash.
- A demo that still works if the venue Wi-Fi dies. ## What we learned Embedded constraints shape everything: fixed I2C addresses, sensor saturation, debouncing and threshold hysteresis matter as much as the AI.
- Latency is a safety feature. Anything slow has to come after the part that saves time.
- Prompts need limits: asking Gemini to translate "not responding" once produced "unconscious" . In a safety system the AI must never add facts, so we tell it so explicitly. ## What's next for IRON SENTINEL
- A wearable version: an ESP32 with a battery, clipped to the hard hat, running a full shift without a laptop tether.
- Zone-level location from cheap Bluetooth beacons, so "Bay 3" is measured rather than configured.
- Whole-crew dashboards with shift reports formatted for OSHA record-keeping.
Built With
- accelerometer
- arduino
- arduino-uno-r4-wifi
- c++
- css3
- elevenlabs
- gemini
- grove
- html5
- i2c
- javascript
- postgresql
- pyserial
- python
- server-sent-events
- three.js
- tiger-data
- timescaledb
- webgl
Log in or sign up for Devpost to join the conversation.