← All Projects

Smart Blind Stick with Obstacle Detection

232 viewsFebruary 12, 2026
ArduinoHC-SR04BuzzerAssistiveBeginner

An assistive device for visually impaired individuals. Uses an ultrasonic sensor to detect obstacles ahead and alerts the user with a buzzer and vibration motor. Lightweight and battery powered.

Components & Supplies

×1Arduino Nano
×1HC-SR04 Ultrasonic Sensor
×1Active Buzzer
×1Vibration Motor
×19V Battery + Snap Connector

Circuit Connections

ComponentPinPinComponent
Arduino NanoD9TRIGHC-SR04
Arduino NanoD10ECHOHC-SR04
Arduino Nano5VVCCHC-SR04
Arduino NanoGNDGNDHC-SR04
Arduino NanoD7+Buzzer
Arduino NanoGND-Buzzer
Arduino NanoD6+Vibration Motor
Arduino NanoGND-Vibration Motor

Overview

The Smart Blind Stick is designed to help visually impaired users navigate safely. An HC-SR04 ultrasonic sensor mounted at the top of the stick continuously scans for obstacles. When an object is detected within 50cm, a buzzer beeps and a vibration motor activates to alert the user.

The beeping frequency increases as the obstacle gets closer, providing intuitive distance feedback — similar to a parking sensor.

Build Instructions

Build instructions:

  • Mount the HC-SR04 at the top of a walking stick, angled slightly downward.
  • Attach the buzzer and vibration motor near the handle for tactile + audio feedback.
  • Use an Arduino Nano for its compact size — mount it mid-stick with rubber bands or a 3D-printed holder.
  • Power with a 9V battery clipped to the stick body.
arduinoBlind Stick Sketch
const int trigPin = 9;
const int echoPin = 10;
const int buzzerPin = 7;
const int motorPin = 6;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(motorPin, OUTPUT);
}

float getDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return (duration * 0.0343) / 2.0;
}

void loop() {
  float dist = getDistance();
  Serial.print("Distance: ");
  Serial.println(dist);

  if (dist > 0 && dist < 50) {
    int beepDelay = map(constrain((int)dist, 5, 50), 5, 50, 50, 500);
    digitalWrite(buzzerPin, HIGH);
    digitalWrite(motorPin, HIGH);
    delay(100);
    digitalWrite(buzzerPin, LOW);
    digitalWrite(motorPin, LOW);
    delay(beepDelay);
  } else {
    digitalWrite(buzzerPin, LOW);
    digitalWrite(motorPin, LOW);
    delay(200);
  }
}