Introduction: Blind Assist Ultrasonic Navigation
This is a navigation assistant for the visually impaired, not necessarily just for the 'blind,' but rather it is a useful tool for anyone with blurry vision or difficulty seeing, legally blind or otherwise.
It uses an ultrasonic sensor - HC-SR04 - to 'read' the environment and get a distance reading, while a buzzer relays the distances to the user by changing in pitch and frequency. The closer the beeps and the higher the pitch the closer an object is.
It is also designed to be mounted onto of a sunglasses so the user can wear it and point their head to the distance they want to be conveyed.
Step 1: BoM
* ESP32 [or Arduino but ESP32 has a smaller form factor, so it is preferable.]
* Buzzer
* Ultrasonic Sensor - HC-SR04
* Jumper Cables
* Breadboard [for the ESP32 to sit on]
* Sunglasses [Optional, you can choose other mounts]
Step 2: Circuit Connections
Follow the table below for the proper wiring of the Ultrasonic Sensor and Buzzer to the ESP32. I have also provided the jumper wire colour as a reference to help clarify the wirings from the pictures above.
I/O | I/O Pin# | Jumper Wire Colour | ESP32 Pin# |
---|---|---|---|
Buzzer | 1 | Red | 2 |
2 | White | GND | |
Ultrasonic sensor | VCC | Red | 3.3V |
Trig | Yellow | 4 | |
Echo | Grey | 5 | |
GND | White | GND |
Step 3: Mount
I mounted the Ultrasonic Sensor to the middle of the sunglasses since that was the most natural placement for it. To secure it in place, add a bead of hot glue onto the jumper wire casings and glue it onto the top nose arch of the glasses.
Organize the cables by gluing the wires to the frame of the sunglasses.
Then glue the breadboard circuitry to one of the arms of the sunglasses with a hot glue gun. It is not too heavy so mounting it there is not much of a hassle. Alternatively, you can also use more jumper wires to extend the wire length of the ultrasonic sensor and keep this circuit in your pocket.
Step 4: Code
// defines pins numbers
const int trigPin = 9; const int echoPin = 10; const int buzzer = 6;
// defines variables long duration; int distance; int safetyDistance;
void setup() { pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input pinMode(buzzer, OUTPUT);
safetyDistance = 100; tone(buzzer, 2500); delay(500); tone (buzzer, 2500);
Serial.begin(9600); // Starts the serial communication }
void loop() {
// Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH);
// Calculating the distance distance= duration*0.034/2;
int beep = map (distance, 0, 3000, 0, 10000); int time1 = map (distance, 0, 3000, 0, 300); tone(buzzer, beep, time1); delay(time1); noTone (buzzer);
}
Step 5: Enjoy!
Plug the micro usb cable to a battery pack, keep it in your back pack or pocket and you're ready to go!
Enjoy and I hope this has made a difference in your life!