← All Projects

Smart Blind Stick with Obstacle Detection

25 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

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

Circuit Connections

ComponentPinPinComponent
ArduinoD9TRIGHC-SR04
ArduinoD10ECHOHC-SR04
Arduino5VVCCHC-SR04
ArduinoGNDGNDHC-SR04
ArduinoD7+Buzzer
ArduinoGND-Buzzer
ArduinoD6+Vibration Motor
ArduinoGND-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() {
  // Clear the trigger
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  
  // Send 10 microsecond pulse
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Read echo travel time in microseconds
  long duration = pulseIn(echoPin, HIGH, 30000); // 30ms timeout
  
  // Calculate distance in cm
  // Speed of sound is ~0.0343 cm/us
  return (duration * 0.0343) / 2.0;
}

void loop() {
  float dist = getDistance();
  
  // Filter out out-of-range readings (0.0 usually means timeout)
  if (dist > 0 && dist < 50) {
    Serial.print("Object Detected: ");
    Serial.print(dist);
    Serial.println(" cm");

    // Map distance to beep frequency: 
    // Closer (5cm) = 50ms delay (Fast)
    // Farther (50cm) = 500ms delay (Slow)
    int beepDelay = map(constrain((int)dist, 5, 50), 5, 50, 50, 500);
    
    // Trigger Alerts
    digitalWrite(buzzerPin, HIGH);
    digitalWrite(motorPin, HIGH);
    delay(100); 
    digitalWrite(buzzerPin, LOW);
    digitalWrite(motorPin, LOW);
    
    delay(beepDelay);
  } else {
    // Idle state
    digitalWrite(buzzerPin, LOW);
    digitalWrite(motorPin, LOW);
    delay(100);
  }
}

Safe motor wiring

Wiring: UNO Pin 6 → Resistor → Motor (+) → Motor (-) → GND