Skip to the content.

Walking Stick For the Visually Impaired

My project is a Smart Walking Stick for the Visually Impaired. It helps the visually people cross streets, navigate potential obstacles, and helps them go about their day! It has a ultrasonic sensor that detects objects and plays a higher sound the closer the object is. I also have a water sensor attached to detect puddles. However, none of this could be possible without me joining Bluestamp. I joined Bluestamp to bridge the gap between my software engineering background and the tangible world of hardware. Working with an Arduino, connecting wires, experimenting with resistors, and integrating various sensors was a thrilling new challenge that pushed me to expand my engineering skill set.

Engineer School Area of Interest Grade
Saanvi P. The Bishop’s School Engineering Incoming Freshman

Headstone Image

Final Milestone

Since my previous milestone, I actually put all my wires and sensors together in a usable product that people can use. I placed the Arduino, breadboard, speaker, and vibrating module in the box; the ultrasonic and water sensors were outside of the box. Now, this cane can be used by a user. This wouldn’t have been possible through everything I learned at BSE. I learned how to use an Arduino, attach different wires into the breadboard, how different sensors work, and how to code using the Arduino language. This was a hands-on approach I had never experienced while engineering. In the future, I hope to take all the knowledge I learned at BSE to improve my current project by adding more sensors and creating new projects.

Second Milestone

I have worked on many things for this milestone. I added a sound that changes based on how far the object is. For example, if an object is detected less than 14cm away a different sound will play than a object detected 27cm away. Another thing I added for this milestone was my water sensor to help detect puddles. It will print on the serial moniter on the computer of how deep the water is. For my next steps I plan to add actual serial moniter (not just my computer) and attach it to my walking stick. If I have enough time, I will try to add a temparature sensor. One challenge that I faced was using my water sensor. The readings were the exact opposite of what I wanted them to be. When it was out of the water, the readings were supposed to be low and high inside the water. However, it was the exact opposite for me. I solved this by changing the code to fit this. When the sensor read a low number, I coded it so that the serial moniter would print that something was in the water.

First Milestone

I have completed my first milestone! I have finished the wiring of the different components such as the arduino, ultrasonic sensor, and the vibrating motor. This code continuously measures the distance using an ultrasonic sensor. If an object is detected within a certain range, the code activates the motor and sounds the buzzer as an alarm. The delay between measurements prevents overwhelming the sensor and allows for smoother operation. Next, I plan to find a way to store all of this wiring into a box, so that it can be attached to the walking cane. I also plan to add a speech when an object is a certain distance away, not just a loud buzzing noise.

Schematics

Speaker Image second Image Main Image

Code

#define trigPin 11
#define echoPin 12
#define motor 7
#define buzzer 3
#define switchPin 5

const int read = A1; //Sensor AO pin to Arduino pin A0
int value;   

long duration, cm;

#include"pitches.h"

void setup() {
 Serial.begin(9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(motor, OUTPUT);
 pinMode(buzzer, OUTPUT);
 pinMode(switchPin, OUTPUT);
 pinMode(read,INPUT);
}

void loop() {
 // Calculate distance
 digitalWrite(trigPin, LOW);
 delayMicroseconds(2);
 digitalWrite(trigPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH);
 cm = microsecondsToCentimeters(duration);

if(cm <= 14 )
 {
   tone(switchPin, 784);
   digitalWrite(switchPin, HIGH);
   delay(1000);
   Serial.println("in condition 1");
    digitalWrite(motor,HIGH); // When the the distance below 100cm
    digitalWrite(buzzer,HIGH);
 }
   else if(cm <= 24)
   {
      tone(switchPin, 698);
      delay(1000);
      Serial.println("in condition 2");
       digitalWrite(motor,HIGH); // When the the distance below 100cm
       digitalWrite(buzzer,HIGH);
   }
   else if(cm <= 34 )
   {
     tone(switchPin, 659);
     delay(1000);
     Serial.println("in condition 3");
      digitalWrite(motor,HIGH); // When the the distance below 100cm
      digitalWrite(buzzer,HIGH);
   }
   else if(cm <= 44)
   {
     tone(switchPin, 587);
     delay(1000);
     Serial.println("in condition 4");
      digitalWrite(motor,HIGH); // When the the distance below 100cm
      digitalWrite(buzzer,HIGH);
   }
   else if(cm <= 55 )
   {
     tone(switchPin, 523);
     delay(1000);
     Serial.println("in condition 5");
      digitalWrite(motor,HIGH); // When the the distance below 100cm
      digitalWrite(buzzer,HIGH);
   }
   else if(cm <= 65 )
   {
     tone(switchPin, 494);
     delay(1000);
     Serial.println("in condition 6");
      digitalWrite(motor,HIGH); // When the the distance below 100cm
     digitalWrite(buzzer,HIGH);
   }
 else
 {
   noTone(switchPin);
   digitalWrite(switchPin, LOW);
 }
 delay(100);
value = analogRead(read);
Serial.println(value);
  if (value >=540){
   Serial.println("Water level: 0mm - Empty!");
 }
 else if (value>220 && value<=260){
   Serial.println("Water level: 0mm to 5mm");
 }
 else if (value>185 && value<=220){
   Serial.println("Water level: 5mm to 10mm");
 }
 else if (value>177 && value<=185){
   Serial.println("Water level: 10mm to 15mm");
 }
 else if (value>172 && value<=176){
   Serial.println("Water level: 15mm to 20mm");
 }
 else if (value>168 && value<=171){
   Serial.println("Water level: 20mm to 25mm");
 }


}


long microsecondsToCentimeters(long microseconds) {
 return microseconds / 29 / 2;
}

Bill of Materials

Part Note Price Link
ELEGOO UNO Project Super Starter Kit Wiring,Arduino $44.99 Link
8-Count 9 Volt Alkaline Performance All-Purpose Batteries Power $12.36 Link
Walking Cane Base for project $10.99 Link
Vibrating Motor Module To alert user $8.69 Link
Wire Screw Terminal Block Connector Connecting thin wires $11.99 Link
Rain Drops Sensor Sensing Puddles $6.49 Link
Temparature Sensor Detecting between sidewalk and road $14.99 Link
Speaker Amplifying sound $6.99 Link
Color Recognition Sensor Detecting Trash $13.99 Link
Box To hold all of my components $8.99 Link
Serial Monitor To display puddle depth $9.99 Link