Eye Maxxer — Smart Eye Strain Prevention Wearable
Inspiration
University students spend an average of 8–12 hours a day staring at screens. Computer Vision Syndrome (CVS) affects an estimated 70% of them — causing dry eyes, headaches, blurred vision, and long-term deterioration of eye health. Existing solutions are either passive reminder apps that get ignored, or expensive clinical devices far out of reach for students.
We wanted to build something that actually lives with the student — something wearable, context-aware, and genuinely intelligent about when and how to intervene. Eye Maxxer is the result.
What It Does
Eye Maxxer is a smart wearable clip that attaches to any glasses frame and monitors the four real root causes of eye strain in real time:
- Screen distance — if you drift closer than 30 cm to your screen, the device delivers an immediate haptic + visual alert
- Head posture — forward head lean is detected before distance becomes critical, acting as an early warning layer
- Break discipline — after prolonged focused work, Eye Maxxer prompts you to rest using the 20-20-20 principle, with break intervals that shorten in dry air
- Environmental awareness — ambient humidity and temperature modulate how aggressively Eye Maxxer urges breaks, because dry air accelerates tear evaporation and eye fatigue
All alerts adapt to context: in a quiet library, only the vibrating motor fires. In a loud environment, the RGB LED flashes too.
How We Built It
Hardware
The device is built around an Arduino, housed in a custom 3D-printed clip designed to fit any standard glasses frame. The sensor suite consists of:
| Component | Role in the system |
|---|---|
| HC-SR04 Ultrasonic Sensor | Measures screen-to-eye distance in real time |
| MMA8452 3-Axis Accelerometer | Detects forward head tilt angle (posture warning) |
| DHT11 Temperature & Humidity Sensor | Adjusts break frequency based on ambient dryness |
| KY-037 Sound Sensor | Determines alert modality — silent vs. visual |
| Vibrating Pad Motor | Haptic feedback for non-disruptive alerts |
| RGB LED | Continuous colour-coded status (green / yellow / red) |
Every sensor actively changes what the device does — none are decorative. The DHT11 directly compresses break intervals in dry conditions. The KY-037 switches the alert output channel. The MMA8452 fires preemptive posture warnings before distance crosses a threshold.
MATLAB / Simulink
MATLAB is the brain of Eye Maxxer, not just a dashboard.
We modelled the Eye Strain Index (ESI) as a full dynamical system in Simulink: four penalty subsystems (distance, posture, humidity, time-on-task) feed a summation block, which drives an integrator. A break-decay block depresses the ESI when the user steps away. Threshold comparators at 40 / 70 / 100 output alert flags.
Using the Simulink Support Package for Arduino and Embedded Coder, we generated the ESI firmware directly from the Simulink model. The Arduino is running code that Simulink wrote — not code we hand-wrote.
Additionally, we built:
- A live MATLAB App Designer dashboard with a real-time ESI gauge, scrolling sensor plots, session timer, and status indicator
- An offline simulation script that models a full 2-hour study session with degrading inputs, used to validate thresholds before hardware deployment
- Signal processing filters (moving average + sliding window RMS) applied to distance and noise readings to eliminate false alerts from sensor jitter
CAD & Enclosure
The housing was designed in Fusion 360 and FDM-printed in two iterations. The clip mechanism is designed to be glasses-agnostic, and the front face of the housing positions the HC-SR04 forward-facing with a clean aperture. Internal channels route wiring cleanly, with dedicated pockets for the vibrating motor and LED diffuser window.
Challenges We Ran Into
- I²C address conflict — the MMA8452 has a configurable address (0x1C / 0x1D) and requires 3.3V logic level. Running an i2c_scanner to resolve this and adding a level-shifter cost us time early on, but we got ahead of it before it became a blocker.
- Sensor fusion timing — getting all four sensors reading and serialising cleanly at 10 Hz without blocking delays required careful restructuring of the Arduino loop.
- Simulink code generation — getting Embedded Coder to fully target the Arduino with all sensor peripheral bindings was the hardest MATLAB challenge. We resolved most of it, and the process forced us to understand the model architecture far more deeply than a pure Arduino sketch would have.
Accomplishments We're Proud Of
- Every single sensor actively changes device behaviour — there are no decorative components
- The firmware on the chip was generated from a Simulink model, not written by hand
- The device runs fully standalone — no phone, no wifi, no cloud required
- A clean 3D-printed form factor that looks like a real product, not a breadboard taped to a pair of glasses
What We Learned
- Dynamical systems modelling in Simulink is a genuinely powerful way to design control logic — it forced us to be explicit about every variable and threshold rather than burying magic numbers in code
- Hardware hackathons live and die on the critical path — knowing which demo-breaking dependencies to solve first saved us hours
- The difference between a sensor that informs and a sensor that actuates is the difference between a dashboard and a product
What's Next
- Bluetooth + mobile app for weekly session history and personalised break scheduling
- Prescription glasses compatibility — working with optometrists to design a clip that integrates with lens thickness
- Clinical validation — partnering with a university eye health clinic to run a proper study on ESI thresholds vs. measured optometric outcomes
- Dry eye biofeedback — integrating a miniature IR blink-rate sensor to add blink frequency as a fifth ESI input
Built With
arduino matlab simulink embedded-coder app-designer fusion-360 hc-sr04 mma8452 dht11 ky-037
Log in or sign up for Devpost to join the conversation.