← Back to Lamia's Library

Accessibility case study · Class project · Arizona State University

360° Hat

A wearable that warns blind and low-vision users about obstacles in every direction, using vibration around the head and spoken alerts.

Completed · Spring 2024 · Working prototype

My role

Haptic feedback: vibration motor control in Python and the mapping from danger level to vibration pattern

Team

4 students. Labels on each section show which parts were my individual work.

Timeline

March 2024 – May 2024

Tools

Python, Raspberry Pi, RPi.GPIO, ultrasonic sensors, MPU-6050 gyroscope, vibration motors, espeak text-to-speech

How urgency feels: count the pulses

Each pulse is 0.25 s on and 0.25 s off. The motor on the side of the obstacle does the buzzing. Drawn to scale:

Level 1 1 pulse · slow approach or far away
Level 2 2 pulses · closer or approaching faster
Level 3 3 pulses + spoken alert: “Behind you”
Motor on (0.25 s)Pause (0.25 s)

Problem

Obstacles coming from the side or from behind are easy to miss without sight. The team wanted to warn users in all four directions early enough to react.

What I did

Built the vibration motor control and designed how urgency is felt: where the buzz is tells you the direction, how many pulses tells you how urgent it is, and voice is saved for the most urgent case.

Outcome

10 students tested the first version: 9 of 10 rated the alerts clear, but telling which side buzzed was the weak spot, in my area. The team rebuilt the hat around that feedback.

March · GoalTeam

Awareness in every direction, without looking

The 360° Hat helps users avoid both stationary and moving obstacles. It warns them about an impending collision based on two things: how close an object is and how fast it is approaching. The goal was to give users enough time to react and avoid contact, injuries and head-on collisions.

It was designed for blind and low-vision users, but anyone who wants more awareness of their surroundings without relying only on their eyes could use it.

March – April · SystemTeam

Four sensors in, four motors and a voice out

Inputs

  • 4 ultrasonic sensors facing front, back, left and right measure distance. Comparing two readings in a row gives the speed of an approaching object.
  • 1 gyroscope (MPU-6050) detects head turns and body turns, so the hat doesn't mistake the user's own movement for an approaching object.

Outputs

  • 4 vibration motors, one on each side of the head, are the main alerts.
  • Headphones play a short spoken warning that names the direction, for the most dangerous cases only.

The sensors take turns, one at a time with a 0.25-second pause between each, so their pings don't interfere with each other. A Raspberry Pi runs one Python loop that reads each side, works out a danger level and triggers that side's feedback.

April · Feedback designMy work

Telling someone where and how urgent, without sight

My part was the haptic feedback: the code that drives the vibration motors and the rules for what each alert should feel like. The question I was designing for: how do you tell someone where an obstacle is and how urgent it is, without overwhelming them?

Direction

The buzz points to the obstacle

Each sensor is paired with the motor on the same side of the head. A buzz on the left means something on the left, with nothing to decode.

Urgency

Count, not strength

Danger levels 1, 2 and 3 become 1, 2 and 3 pulses. A number of pulses is easier to tell apart through a hat than small differences in vibration strength.

Voice

Saved for the worst case

Spoken alerts like “Behind you” and “On your left” only play at level 3. Kept rare, they stay meaningful instead of turning into background noise.

The rules

LevelSpeed ruleDistance-only fallbackFeedback
1Slow approach (5–73 cm/s) within 200 cm400–800 cm away1 pulse
2Medium approach (73–129 cm/s) between 200 and 400 cm200–400 cm away2 pulses
3Fast approach (over 129 cm/s)Closer than 200 cm3 pulses + spoken alert

Speed thresholds came from an in-class experiment. Alerts pause while the gyroscope reports a head turn or body turn.

The pulse function I wrote
def VMbeep(vm, x):
    while x > 0:
        vmOn(vm)            # motor on
        time.sleep(.25)
        vmOff(vm)           # motor off
        time.sleep(.25)
        x -= 1
April · Testing the first versionTeam

Ten students wore it and rated it

The first version put the electronics between two hats: an outer hat for the sensors and a second hat inside it. Ten fellow students wore it, tried it out, and rated it in a survey.

9 / 10

rated the alerts clear and understandable (6 or 7 out of 7)

8 / 10

rated the sensors accurate (6 or 7 out of 7)

8 / 10

felt warned ahead of time (4 or 5 out of 5)

April · What testing showedAbout my design

Direction was the hardest part to feel

The survey asked how well testers could tell which side the vibration came from. This is the part of the hat I designed, and it had the widest spread of any question.

“How well could you tell which side you were feeling the vibration on?” Rated 1–10 by 10 testers. Median 8, but 4 of 10 rated it 6 or lower.
“It was difficult to determine which vibrators were going off.”
“Due to double hat I was not able to feel the buzzer properly.”
“Stronger vibrations on the side it is sensing.”

What I took from it

  • Counting pulses only works if you can feel them. Using pulse count for urgency held up, but the vibration had to reach the head clearly first.
  • The hardware muffled the haptics. The second hat sat between the motors and the head and absorbed the buzz. Feedback design and physical design can't be separated.
  • Voice worked. Testers called the audio clear and easy to follow.
April – May · ChangesTeam

Rebuilding the hat around the feedback

The team turned the survey into a plan and rebuilt the hat for the final version.

What testers saidWhat we changed
Hard to tell which side was buzzing; the double hat muffled itRemoved the second hat and put the vibration motors in fabric pocket straps against the head
“Instead of a second hat, using cushioning would be more effective”Sewed a cloth lining inside the hat to hold the Raspberry Pi and breadboard
Comfortable, but “quite loose”Added an adjustable chin strap
Visible wires; “very wearable, but not aesthetic”Covered visible wires with feathers
“Volume should be loud”Kept the volume as it was, on purpose: users who rely heavily on hearing could be startled or overwhelmed by louder alerts
May · Final hatTeam

The final hat

In the final version, the electronics sit in a black cloth lining so the Raspberry Pi and wires never touch the wearer's hair or scalp. The vibration motors sit in orange fabric pockets against the inner lining, invisible from outside. A zipper hides the headphones when they aren't needed, and the strap keeps the hat stable on any head size.

The feathers aren't just decoration. They also give the hat a texture that a blind user can recognize by touch, so it's easy to tell apart from other hats.

Team photos.

Team photos of the final hat.

How the final hat behaves

SituationWhat the hat does
Nothing nearbyStays silent: no vibration, no voice
User slowly walks toward a wall1 pulse on the side facing the wall
Object approaches at medium speed2 pulses on that side
Object approaches fast3 pulses on that side, then the spoken warning for that direction
User turns their headGyroscope pauses alerts so the turn isn't read as an approaching object
Looking back · LimitsMy takeaways

What I'd do differently

LimitWhy it mattersNext time
My pulse function blocks the program.My codeVMbeep uses sleep, so a level 3 alert pauses everything for 1.5 s while the other three sides go unchecked.Run haptics on their own thread or with non-blocking timers.
Sensors are read one at a time.With a 0.25 s pause per side, one full sweep takes over a second. A fast object can move more than a meter between readings, and one tester noticed the sensing “lags a bit.”Read sensors in parallel and alert on the newest reading.
Direction still needs proof.My areaThe pocket straps were meant to fix side detection, but a rating is a weak measure of it.Ask people to name the side that buzzed and count how often they get it right. Try stronger motors with adjustable intensity.
Gyroscope thresholds are rough.The cutoffs came from trial and error, so turn detection can mute real alerts.Calibrate per user and smooth readings over time.
Testing was with other students only.The people the hat is for weren't part of testing, and the survey didn't check whether people could tell 2 pulses from 3 while walking.Test with blind and low-vision users and an orientation and mobility specialist.
ReflectionMy takeaways

What I learned

Feedback design is UX, even without a screen.

Choosing where a vibration happens and how many times it repeats is an interface decision, just like choosing a button label.

Silence is part of the design.

Keeping the voice for the most dangerous moments is what makes it worth listening to.

Test on the real hardware.

My vibration patterns made sense on paper, but testers struggled to feel them through two layers of hat. The physical build is part of the feedback design.

Timing is a shared resource.

The 1.5-second pattern I designed competed with the sensing loop for time. Feedback and sensing have to be designed together.