Vision! a Simple Blindman Stick With Arduino UNO

by Saeed Kassim in Circuits > Arduino

118 Views, 3 Favorites, 0 Comments

Vision! a Simple Blindman Stick With Arduino UNO

ilo.png

About the project:

This project has been developed by many innovators on several occasions; however, I felt the need to acknowledge the efforts made by my students, who were fairly new to the world of coding and programming. So here we go!


Why this project:

In the vocational school where I work, the students come from different backgrounds, some of whom have visual and hearing impairments. Hence, the other students are taught sign language as part of their curriculum in order to communicate with people with these challenges. At the same time, every Tuesday and Thursday, the students with these challenges have after-school club activities where they learn a variety of interesting skills, including carpentry, pottery, and fabrication, in a very interesting approach and methodologies. This really got me and my students excited, and we got started!


The Approach:

We began by first understanding how to use anArduinoo and working with a variety of sensors, which included a project-based learning methodology for every sensor they got their hands on. Eventually, we began combining the electronics, coding/programming skills, and addressing challenges that we found are yet to be solved. From which, this concept rose, where the students decided to build a smart stick through an obstacle course to share their experience as well as showcase how the use of simple and low-cost technology can have a huge impact.


How it works:

The ultrasonic sensor measures distance based on the time taken for the sonic wave to be received echo pin, after being transmitted by the trigger pin. We generate multiple "waves" by providing short-term delays to the trigger pin by switching it on and off.

We then began configuring the distances for which each range would have the buzzer and/or motor vibrate frequently, the closer you got to the object ahead.

Note: We used a buzzer and a mini vibrating motor to serve the purpose of aiding people with visual and/or hearing impairments.

Supplies

Arduino Uno.jpg

Arduino UNO

Ultrasonic Sensor

LEDs

Vibrating motor

WIRING IT!

cio.png

Begin by reviewing the detailed schematics provided to understand the layout and connections required for each component.

Carefully wire all components according to the schematics, paying attention to the following:

Connection Security: Make sure that each connection is secure to prevent any loose wiring.

Color Codes: Follow the specified color codes for wires to maintain organization and clarity in your wiring.

Component Placement: Double-check the placement of each component to ensure it aligns properly with the schematic.

Pin Orientation: Take note of any special instructions regarding pin orientation or component polarity. Use the pinout from the code provided below.

Ensure that all solder joints are clean and free from any shorts, as this is crucial for the circuit's functionality.

After completing the wiring, conduct a thorough visual inspection to confirm that everything matches the schematic before proceeding to power the circuit.

NB: The circuit diagram given doesn't show the real pins used in the code, so use pinouts from the code for each component, or you can just use your own pins if you like and edit them in the code.

PROGRAMMING IT!

Screenshot (6).png
int trigpin=12; // Defines trigger pin for ultrasonic sensor on pin 12
int echopin=11; // Defines echo pin for ultrasonic sensor on pin 11

long distance, duration; // Declares variables for distance and pulse duration

int buzzer =3; // Defines buzzer pin on pin 3
int motor =2; // Defines motor pin on pin 2

void setup() { // Setup function runs once at startup
// put your setup code here, to run once:
Serial.begin(9600); // Initializes serial communication at 9600 baud rate
pinMode(buzzer,OUTPUT); // Sets buzzer pin as output
pinMode(motor,OUTPUT); // Sets motor pin as output
pinMode(trigpin,OUTPUT); // Sets trigger pin as output
pinMode(echopin,INPUT); // Sets echo pin as input
}

void loop() { // Loop function runs repeatedly
// put your main code here, to run repeatedly:
digitalWrite(trigpin,LOW); // Sets trigger pin low to ensure clean pulse
delayMicroseconds(10); // Waits 10 microseconds
digitalWrite(trigpin,HIGH); // Sets trigger pin high to send pulse
delayMicroseconds(12); // Waits 12 microseconds for pulse duration
digitalWrite(trigpin,LOW); // Sets trigger pin low to end pulse
delayMicroseconds(10); // Waits 10 microseconds before reading echo

duration=pulseIn(echopin,HIGH); // Measures duration of echo pulse
distance=((duration/2)*0.034); // Calculates distance in cm (speed of sound: 0.034 cm/µs)
Serial.print("Distance is "); // Prints "Distance is" to serial monitor
Serial.println(distance); // Prints calculated distance to serial monitor
delay(100); // Waits 100 milliseconds before next measurement

if (distance<=20 && distance>=15) // If distance is between 15 and 20 cm
{
digitalWrite(buzzer,HIGH); // Turns buzzer on
digitalWrite(motor,HIGH); // Turns motor on
delay(500); // Waits 500 ms
digitalWrite(buzzer,LOW); // Turns buzzer off
digitalWrite(motor,LOW); // Turns motor off
delay(500); // Waits 500 ms
}
else if(distance<15 && distance >=8) // If distance is between 8 and 14.99 cm
{
digitalWrite(buzzer,HIGH); // Turns buzzer on
digitalWrite(motor,HIGH); // Turns motor on
delay(80); // Waits 80 ms
digitalWrite(buzzer,LOW); // Turns buzzer off
digitalWrite(motor,LOW); // Turns motor off
delay(80); // Waits 80 ms
}
else if (distance<8 && distance>=0) // If distance is between 0 and 7.99 cm
{
digitalWrite(buzzer,HIGH); // Turns buzzer on
digitalWrite(motor,HIGH); // Turns motor on
delay(30); // Waits 30 ms
digitalWrite(buzzer,LOW); // Turns buzzer off
digitalWrite(motor,LOW); // Turns motor off
delay(30); // Waits 30 ms
}
else // If distance is outside the above ranges
{
digitalWrite(buzzer,LOW); // Keeps buzzer off
digitalWrite(motor,LOW); // Keeps motor off
}
}

Downloads

BUILDING IT!

FM93347MEUA2VML.png

To achieve optimal functionality, securely fasten the Arduino Nano at the center of the stick, ensuring it is stable and easily accessible for any necessary adjustments.

Position the buzzer or vibrating motor just beneath the top grip area, allowing it to be clearly felt or heard when activated, enhancing user feedback. Place the ultrasonic sensor slightly closer to the tip of the stick, angling it outward to accurately measure distances ahead.

This arrangement will maximize the sensor's effectiveness while keeping the components balanced for ease of use during operation.

TESTING IT!

img_5072_7h7oAa12yL (1).png
img_5073_VgLmjjAcUZ.png

I made the decision to genuinely engage with the hearing-impaired community and deliver my solution. I went to a local school for the hearing impaired, enjoyed lunch with the students, and collaboratively created a maze game to evaluate our "invention." 😁

With assistance from several volunteers, we blindfolded participants so they could experience the vibrations from the motor that activated an alarm! Everyone was amazed, and the experience was incredibly fulfilling for everyone who took part. I truly valued my time there; the warmth and friendliness of the students left a deep impact on me, and I wish to go back. 😥

We celebrated our success, with one team earning first place and another taking second, as depicted in the images above. This has been the most rewarding project I have ever worked on, sparking a desire within me to pursue further initiatives. So please FOLLOW ME! I’m eager to announce my next project soon.

Let’s collaborate to improve our world.