Smart Stick - Complete DIY Tutorial & Code⭐ Featured
Both
Smart Stick - Complete DIY Tutorial & Code
Contact for pricing· Completed

Introduction & Project Overview Traditional white canes used by visually impaired individuals can only detect obstacles that are physically touched by the cane tip, leaving overhead obstacles, holes, and distant hazards undetected until it's too late. The Smart Stick project solves this by equipping a regular walking cane with ultrasonic sensors that detect obstacles at multiple heights and distances, alerting the user through vibration motors and buzzer sounds before they get close enough to collide. This project is a highly meaningful Final Year Project (FYP) or semester project for Biomedical, Electrical, and Computer Science students, since it directly addresses a real accessibility challenge, demonstrating genuine social impact alongside solid embedded systems engineering — a combination that consistently impresses FYP evaluators .

Contact Us About This Project

Working Process

Key Features & Functionality

Detects obstacles at both ground level and upper-body/head height using dual ultrasonic sensors
Alerts the user through distinct vibration motor patterns for near and far obstacles
Sounds a buzzer alert for immediate, close-range obstacles requiring urgent attention
Includes a water/puddle detection sensor at the cane tip to warn of wet or flooded ground
Optional GPS and GSM module sends the user's live location to a caregiver via SMS on request
Compact, lightweight design that attaches easily to any standard walking cane

Core Hardware Components Required

Arduino Nano: Compact microcontroller ideal for mounting directly onto the cane handle
HC-SR04 Ultrasonic Sensor (x2): One mounted low for ground-level obstacles, one mounted higher for head-level obstacles
Vibration Motor Module (x2): Provides silent, tactile alerts distinguishing near and far obstacles
Active Buzzer Module: Sounds an urgent alert for very close obstacles
Water Sensor Module: Detects puddles or wet ground at the cane's tip
9V Battery with Connector: Provides portable power for the entire cane-mounted circuit
Compact Project Enclosure: Houses the electronics neatly on the cane handle

Circuit Design & Pin Connections

Two ultrasonic sensors are positioned at different heights along the cane — one near the bottom to detect ground-level obstacles like curbs or steps, and one near the top to detect chest or head-height obstacles like tree branches or open cabinet doors. Each sensor is paired with its own vibration motor so the user can distinguish between a ground hazard and an overhead hazard purely by feel. The water sensor at the tip provides an additional layer of ground-condition awareness, and the buzzer serves as a universal urgent-proximity alert.

Complete Pin Connection Table

ComponentComponent PinMicrocontroller PinNotes / Description
Lower HC-SR04 (Ground)VCC / GND5V / GNDPower Line
Lower HC-SR04 (Ground)Trig / EchoPin 2 / Pin 3Ground-Level Obstacle Detection
Upper HC-SR04 (Head)VCC / GND5V / GNDPower Line
Upper HC-SR04 (Head)Trig / EchoPin 4 / Pin 5Head-Level Obstacle Detection
Ground Vibration MotorSignalPin 6Ground Obstacle Alert
Head Vibration MotorSignalPin 7Head Obstacle Alert
Buzzer ModuleSignalPin 8Urgent Close-Range Alert
Water Sensor ModuleVCC / GND5V / GNDPower Line
Water Sensor ModuleAO (Analog Out)A0Wet Ground Detection Signal

Bill of Materials (BOM)

Product / ComponentQuantityLink
Arduino Nano1
HC-SR04 Ultrasonic Sensor2
Vibration Motor Module2
Active Buzzer Module1
Water Sensor Module1
9V Battery with Connector1
Compact Project Enclosure1

Step by Step assembly

1.Step 1: Mount the Microcontroller Fix the Arduino Nano inside a small enclosure attached near the top handle of the cane, where it stays protected but remains easy to access for charging or reprogramming.
2.Step 2: Connect the Power Rails Wire the 9V battery to the Arduino's power input and run a shared 5V and GND connection along the length of the cane to reach all sensors and motors.
3.Step 3: Wire the Primary Sensor Mount the lower HC-SR04 sensor near the bottom third of the cane, angled slightly downward, and connect its Trig and Echo pins to Pin 2 and Pin 3.
4.Step 4: Wire the Secondary Sensor (if applicable) Mount the upper HC-SR04 sensor near the handle, angled forward at roughly chest/head height, and connect its Trig and Echo pins to Pin 4 and Pin 5.
5.Step 5: Setup the Communication Module If including the optional GPS/GSM emergency location feature, wire the GSM module's TX/RX pins to a SoftwareSerial pair on two spare digital pins at this stage.
6.Step 6: Connect Output Displays A display is not needed for this wearable-style project since all feedback is tactile and audible, so this step can be skipped in the basic build.
7.Step 7: Wire up the Buzzers/Alarms Connect the ground and head vibration motors to Pin 6 and Pin 7 respectively, and wire the buzzer to Pin 8 for close-range urgent obstacle alerts.
8.Step 8: Double-Check for Short Circuits Carefully route and secure all wires along the length of the cane with cable ties or heat-shrink tubing, checking that no bare wires are exposed where the user grips the handle.
9.Step 9: Connect the USB Cable and Power Up Connect the Arduino Nano to your computer via USB, confirm it powers on, and open the Arduino IDE ready to upload the obstacle detection code.
  1. Step 10: Final Assembly Check and Testing Walk the cane toward obstacles at both ground and head height, confirming the correct vibration motor activates at the appropriate distance and the buzzer sounds only when an obstacle is very close, before finalizing the cane assembly.

Arduino Source Code

// Detects ground and head-level obstacles, alerting via vibration and buzzer
 
// ----- Pin Definitions -----
#define groundTrig 2
#define groundEcho 3
#define headTrig 4
#define headEcho 5
#define groundVibration 6
#define headVibration 7
#define buzzerPin 8
#define waterSensorPin A0
 
// ----- Distance Thresholds (in cm) -----
| const int farThreshold = 100; | // Gentle vibration warning distance |
| --- | --- |
| const int nearThreshold = 40; | // Urgent buzzer alert distance |
const int waterThreshold = 500; // Analog threshold for wet ground detection
 
void setup() {
  pinMode(groundTrig, OUTPUT); pinMode(groundEcho, INPUT);
  pinMode(headTrig, OUTPUT); pinMode(headEcho, INPUT);
  pinMode(groundVibration, OUTPUT);
  pinMode(headVibration, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
 
  Serial.begin(9600);
}
 
void loop() {
  float groundDist = getDistanceCM(groundTrig, groundEcho);
  float headDist = getDistanceCM(headTrig, headEcho);
  int waterLevel = analogRead(waterSensorPin);
 
  handleObstacle(groundDist, groundVibration, "Ground");
  handleObstacle(headDist, headVibration, "Head");
  checkWater(waterLevel);
  checkUrgent(groundDist, headDist);
 
  delay(150); // Short delay between scans for responsive feedback
}
 
// Measures distance using a given ultrasonic sensor pair
float getDistanceCM(int trigPin, int echoPin) {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
 
  long duration = pulseIn(echoPin, HIGH, 30000);
  return duration * 0.034 / 2;
}
 
// Activates the corresponding vibration motor if an obstacle is within warning range
void handleObstacle(float distance, int motorPin, String label) {
  if (distance > 0 && distance < farThreshold) {
	digitalWrite(motorPin, HIGH);
	Serial.println(label + " obstacle detected at " + String(distance) + " cm");
  } else {
	digitalWrite(motorPin, LOW);
  }
}
 
// Sounds the buzzer if either sensor detects a very close, urgent obstacle
void checkUrgent(float groundDist, float headDist) {
  if ((groundDist > 0 && groundDist < nearThreshold) ||
  	(headDist > 0 && headDist < nearThreshold)) {
	tone(buzzerPin, 1500);
  } else {
	noTone(buzzerPin);
  }
}
 
// Checks the water sensor and gives a distinct vibration pattern if ground is wet
void checkWater(int level) {
  if (level > waterThreshold) {
	digitalWrite(groundVibration, HIGH);
	delay(100);
	digitalWrite(groundVibration, LOW);
	delay(100);
	digitalWrite(groundVibration, HIGH); // Double-pulse pattern signals "wet ground"
	delay(100);
	digitalWrite(groundVibration, LOW);
  }
}
 

Questions, Custom Pricing, or Requests

Want this project customized, a quote for your budget, help understanding a feature, or anything else related to it? Send us a message.

Prefer to talk? Call or WhatsApp us at +92 3176572690

Similar Projects

⭐ Featured
Blind Stick - Complete DIY Tutorial & Code
Blind Stick - Complete DIY Tutorial & Code
ProjectBoth
WhatsApp
⭐ Featured
Traffic Signal Monitoring & Controller System - Complete DIY Tutorial & Code
Traffic Signal Monitoring & Controller System - Complete DIY Tutorial & Code
ProjectBoth
WhatsApp
⭐ Featured
Solar Power Monitoring System - Complete DIY Tutorial & Code
Solar Power Monitoring System - Complete DIY Tutorial & Code
ProjectBoth
WhatsApp
⭐ Featured
Patient Health Monitoring Project - Complete DIY Tutorial & Code
Patient Health Monitoring Project - Complete DIY Tutorial & Code
ProjectBoth
WhatsApp