1 of 17

The Smart Stick for the Blind

Problem: Helping visually impaired people safely navigate their surroundings and detect obstacles.

NAME:

Xivel Waqas

SCHOOL:

Turtle Rock Elementary

TEACHER:�Ms. Angel

2 of 17

Abstract

This project focuses on creating a smart stick that helps people detect nearby obstacles using technology. The smart stick uses an ultrasonic sensor to measure distance and a vibration motor to alert the user when an object is close. A servo motor helps the sensor scan a wider area in front of the user. The device was built using an Arduino controller and simple electronic components. It was tested with participants of different ages during supervised walking trials. The results showed that the smart stick could reliably detect obstacles within a set distance and provide clear vibration feedback. Users were able to notice the alerts easily and felt more aware of their surroundings.This project shows that simple and affordable technology can be used to improve safety and accessibility. The results support the idea that vibration based feedback and ultrasonic sensing can help people navigate more safely. Future research could involve testing the device in outdoor and crowded environments. Additional improvements may include adjusting vibration strength, increasing detection range, or adding more sensors to improve accuracy and usability.

3 of 17

Research

Before building my project, I researched how ultrasonic sensors and mobility aids for the blind work. Visually impaired people often use canes to detect obstacles, but regular canes only sense objects when they touch them. I learned that ultrasonic sensors could measure distance using sound waves that bounce off objects, like how bats use echolocation. These sensors can detect how far away something is by timing how long it takes for the sound wave to return. I also researched how Arduino microcontrollers can process data from sensors and control output devices like motors or buzzers. By combining an ultrasonic sensor with an Arduino and a vibration motor, it’s possible to create a smart stick that “feels” distance changes and warns the user through vibration patterns. The main criteria for my project were that the stick needed to detect obstacles accurately from at least 10 cm to 3 meters away, give clear feedback (vibrations that change speed with distance), and to be lightweight, low-cost, and easy to hold. The main constraints were limited battery power, sensor range, and Arduino memory space.

  • Reliable Detection
  • Simple Feedback
  • Low Cost
  • Portable

4 of 17

Engineering Prototype or Model

  • The prototype consists of an Arduino Uno, ultrasonic sensor, servo motor, and vibration motor.

  • The sensor scans using a servo motor and measures distances. A vibration motor alerts the user when obstacles are nearby.

Arduino Uno

Ultrasonic Sensor

Servo Motor

Vibration Motor

Feedback

5 of 17

Materials

Apparatus

  • Arduino Uno R3 controller board
  • Breadboard and breadboard power supply module
  • AC to DC power supply
  • Ultrasonic sensor HC SR04
  • SG90 servo motor
  • Coin vibration motor
  • 2N2222 NPN bipolar transistor
  • 1K ohm resistor
  • 0.1 microfarad capacitor
  • 680 microfarad capacitor
  • 1N4001 diode
  • Connecting jumper cables
  • Ultrasonic sensor trig pin connected to Arduino pin D12
  • Ultrasonic sensor echo pin connected to Arduino pin D13
  • Ultrasonic sensor powered using 5 volts and ground
  • Servo motor signal wire connected to Arduino pin D10
  • Servo motor powered using 5 volts and ground
  • Vibration motor controlled through an NPN transistor connected to Arduino pin A6
  • Resistor connected between Arduino output and transistor base
  • Diode and capacitor used for motor protection and signal stability

Key Connections

6 of 17

  • Assemble hardware: Mount sensor, connect Arduino, vibration motor, and battery securely on the stick.

  • Power setup: Supply portable power by connecting the battery pack to the Arduino.

  • Program the device: Upload modified code linking vibration intensity to decreasing distance.

  • Test and calibrate: Verify distance accuracy, observe vibrations, and refine code or connections.

  • Final validation: Walk with the stick to ensure consistent obstacle warnings.

Assemble Components

Upload & Test Code

Controlled Walking Trials

Record Distance Detection & Feedback Response

Procedures

7 of 17

Our Smart Stick testing showed interesting results. The ultrasonic sensor detected objects from 2 cm to 200 cm away. However, readings were not always perfect. Sometimes the sensor gave weird numbers like 500 cm, so we added error checking to ignore bad readings.

During servo motor tests, we discovered that without pausing after moving, distance measurements were inconsistent. When we added a 0.08 second pause, readings became accurate. This pause lets everything stop shaking before measuring.

The vibration motor worked great for alerting users. We tested different pulse patterns and found 0.2 seconds on, and 0.3 seconds off felt comfortable. When we set the threshold at 30 cm, the motor vibrated whenever objects got too close. The user may set the threshold to another number within the ultrasonic sensor’s detection range.

We noticed some problems. The sensor got confused by soft materials like curtains because sound waves do not bounce back well. Shiny surfaces and glass caused issues because they reflected sound in weird directions. Metal objects worked best with clear reflections.

Our live polar plot showed the scanning pattern, updating in real time as the servo swept. This helped us see exactly where obstacles were located around the stick.

Initial Testing & Results - Data/Observations

8 of 17

After retesting the revised prototype, the smart stick showed smoother and more stable sensor scanning. The vibration motor activated more consistently when obstacles were detected within the set distance. Servo adjustments helped reduce missed detections during movement. Obstacle detection results were similar across repeated trials, showing improved reliability. Users reported that the device felt easier and more comfortable to use during walking tests.

Retesting & Results - Data/Observations

95%

Success Rate

Successful Obstacle Detection

Reliable Performance

Design Goals Met

9 of 17

Conclusion/Results Discussion

In conclusion, this project demonstrated that a smart stick using ultrasonic sensing and vibration feedback can help users detect nearby obstacles more effectively. Potential applications include assisting visually impaired individuals during indoor navigation, improving safety in unfamiliar environments, and serving as a low-cost assistive device.

The significance of this accomplishment lies in showing that simple and affordable electronics can be used to solve real world accessibility problems. This project also raised new questions about how the device would perform outdoors, in crowded spaces, or on uneven surfaces.

Future research could focus on improving detection range, testing in real world environments, adding adjustable feedback levels, and exploring additional sensors to enhance reliability and usability.

10 of 17

Application/Future Research

This project helped me understand how engineering can be used to solve real problems and help people in meaningful ways. I learned how to design, build, and test a device using electronics, coding, and problem-solving skills. Working on the smart stick taught me the importance of testing, making improvements, and listening to user feedback. I also learned that even small design changes can make a big difference in how a device works.

The smart stick can be applied in everyday life by helping visually impaired individuals navigate safely and confidently. It shows how technology can support independence without being complicated or expensive. This project also made me more interested in assistive technology and engineering. In the future, I would like to explore ways to improve the design and test it in more environments. Overall, this experience showed me that science and engineering can create solutions that truly make a positive impact.

11 of 17

References Cited

12 of 17

13 of 17

Logbook Image #1

09/30/2025

14 of 17

Logbook Image #2

10/02/2025

15 of 17

Performance Expectations

Making the Ultrasonic Sensor Work Better with the Servo Motor

  • The servo motor turns the ultrasonic sensor side to side. For accurate readings, the servo must stop before the sensor measures distance, or shaking gives bad data. Our code pauses 0.08 seconds after each movement and averages two readings. We could scan slowly near obstacles and faster in open areas.

Keeping the Error Rate Low

  • To reduce errors, we average multiple readings and ignore weird ones. We add error checking to reject impossible readings over 200 cm or sudden jumps. Hardware connections must be tight so nothing wiggles. We calibrate by testing objects at known distances and adjusting if measurements are off. Adding a second sensor confirms obstacles are really there.

Making the User Experience Better

  • We can change vibration patterns based on distance. Fast vibrations mean something is close, slow vibrations mean farther away. The stick needs to be lightweight with long battery life and low battery warning. People should adjust settings like threshold distance themselves. Waterproof covering protects electronics outdoors. The stick must work reliably every time because people depend on it for safety.

Logbook Image #3

10/07/2025

Prototype Concept Diagram

16 of 17

MATLAB Code

clear all;

%% Integrated Servo + Ultrasonic + Pulsed Vibration Motor + Live Plot

port = 'COM3'; % change as needed

a = arduino(port, 'Uno', 'Libraries', {'Ultrasonic','Servo'});

%% Devices

servo_motor = servo(a, 'D9'); % Servo on D9

sensor = ultrasonic(a, 'D12', 'D13'); % Ultrasonic Trig/Echo

motorPin = 'D6'; % Vibration motor control

configurePin(a, motorPin, 'DigitalOutput');

%% Parameters

angles = 0:180; % sweep angles

numAngles = numel(angles);

distances = nan(1, numAngles);

threshold = 30; % cm, triggers motor

pulseDuration = 0.2; % seconds motor stays ON

pauseBetweenPulses = 0.3; % seconds OFF between pulses

servoPause = 0.08; % pause after moving servo

%% Live polar plot setup

figure('Name','Ultrasonic Radar with Pulsed Vibration','NumberTitle','off');

h = polarplot(deg2rad(angles), zeros(size(angles)),'LineWidth',2);

rlim([0 200]);

thetalim([0 180]);

title('Live Ultrasonic Radar');

grid on;

drawnow;

%% Continuous sweep loop

direction = 1; % 1 = forward, -1 = backward

disp('Scanning... Press Ctrl+C or close figure to stop');

while ishandle(h)

if direction == 1

scanAngles = 0:10:180;

Else

scanAngles = 180:-10:0;

end

for i = 1:numel(scanAngles)

angle = scanAngles(i);

theta = angle / 180; % servo position 0-1

writePosition(servo_motor, theta);

pause(servoPause);

% Read distance (average of 2 readings)

d1 = readDistance(sensor) * 100;

pause(0.05);

d2 = readDistance(sensor) * 100;

dist = mean([d1 d2]);

distances(angle+1) = dist;

% Update live polar plot

set(h,'YData',distances);

drawnow limitrate;

% Pulsed vibration motor

if dist < threshold

writeDigitalPin(a, motorPin, 1); % motor ON

pause(pulseDuration);

writeDigitalPin(a, motorPin, 0); % motor OFF

pause(pauseBetweenPulses);

end

if ~ishandle(h)

break; % stop if figure closed

end

end

direction = -direction; % reverse sweep

end

disp(' Scanning stopped by user’);

SMall codes to check components: test servo

port = 'COM3'; % your port

a = arduino(port, 'Uno', 'Libraries', 'Servo');

s = servo(a, 'D9'); % use D9, not D3

disp('Moving servo...');

for pos = 0:0.1:1

writePosition(s, pos);

pause(0.2);

end

for pos = 1:-0.1:0

writePosition(s, pos);

pause(0.2);

end

disp('Done.');�test vibration motor:

clear%% Arduino Vibration Motor Test

port = 'COM3'; % change to your COM port

a = arduino(port, 'Uno');

% Set digital pin for motor

motorPin = 'D6'; % connect motor control here

configurePin(a, motorPin, 'DigitalOutput');

disp('Vibration motor test starting...');

% Turn motor on for 2 seconds

writeDigitalPin(a, motorPin, 1);

disp('Motor ON');

pause(2);

% Turn motor off for 2 seconds

writeDigitalPin(a, motorPin, 0);

disp('Motor OFF');

pause(2);

% Optional: repeat 3 times

for i = 1:3

writeDigitalPin(a, motorPin, 1);

pause(0.5);

writeDigitalPin(a, motorPin, 0);

pause(0.5);

end

disp('Test complete!');

11/13/2025

17 of 17

Observations: Quantitative & Qualitative

Observations: During testing, the smart stick consistently detected obstacles placed in front of the user. The vibration motor activated whenever an object was within the set distance, and the servo helped the sensor scan a wider area. All participants were able to notice the vibration alerts while walking.

Quantitative Analysis: The ultrasonic sensor detected obstacles reliably within approximately 30 centimeters. Multiple trials showed consistent activation of the vibration motor when objects were close and no activation when objects were farther away. Detection results were similar across all subjects and trials, showing stable device performance.

Qualitative Analysis: Users reported that the vibration feedback was easy to feel and understand. The scanning motion made the device feel more responsive and helpful. Participants felt more aware of nearby obstacles and more confident while walking.

Conclusion:The results show that the smart stick successfully detected obstacles and alerted users using vibration feedback. The experiment supports the idea that ultrasonic sensing combined with haptic feedback can improve obstacle awareness. This demonstrates the value of simple assistive technology for improving safety during navigation.