How To Make A Smart Stick For Blind People Using Arduino?

I am a strong believer in a quote by Helen Keller which states “The only thing worse than being blind is having sight but no vision”. The technology could help disabled people live a normal life as other human beings do. Everybody knows the Indian girl named Arunima Sinha who lost her leg in a train accident and she had to walk on the prosthetic legs for the rest of her life. After accident, she decided to climb Mount Everest on prosthetic legs and hence, the latest technology paved way for her to achieve her dream.

Smart Stick

The technology can indeed neutralize human disability; with this in mind let us use the power of Arduino and simple sensors to build a Blind man’s stick that could be a lifesaver for visually impaired persons. An Ultrasonic sensor will be installed in a stick which will sense the distance of a person from any obstacle, an LDR to sense lighting conditions and an RF remote which the blind man could use to remotely locate his stick. All the directions will be given to the blind man through a Buzzer. We can use a vibrator motor in place of Buzzer and advance a lot more using our creativity.

Smart Stick For Blind People (Picture Courtesy: Circuit Digest)

How To Use Arduino In Designing The Circuit?

Now as we know the abstract of the project, let us move forward and gather different information to start working. We will first make a list of the components, then study them briefly, then assemble all the components to make a working system.

Step 1: Components Needed (Hardware)

Step 2: Components Used (Software)

  • Proteus 8 Professional (Can be downloaded from Here)

After downloading the Proteus 8 Professional, design the circuit on it. We have included software simulations here so that it may be convenient for beginners to design the circuit and make appropriate connections on the hardware.

Step 3: Studying The Components

Now as we have made a list of all the components that we are going to use in this project. Let us move a step further and go through a brief study of all the main components.

  1. Arduino Nano: Arduino nano is a microcontroller board that is used to control or carry out different tasks in a circuit. We burn a  C Code on Arduino Nano to tell the microcontroller board how and what operations to perform. Arduino Nano has exactly the same functionality as Arduino Uno but in quite a small size. The microcontroller on the Arduino Nano board is ATmega328p.
    Arduino Nano
  2. Ultrasonic Sensor HC-SR04: HC-SR04 board is an ultrasonic sensor which is used to determine the distance between two objects. It consists of a transmitter and a receiver. The transmitter converts the electrical signal into an ultrasonic signal and the receiver converts the ultrasonic signal back to the electrical signal. When the transmitter sends an ultrasonic wave, it reflects after colliding with a certain object. The distance is calculated by using the time, that ultrasonic signal takes to go from the transmitter and come back to the receiver.
    Ultrasonic Sensor
  3. 433mhz RF transmitter and receiver: It operates on a specific frequency of 433MHz. There are several other radio frequency devices available in the market and as compared to them the performance of an RF module will depend on several factors like when we increase the transmitter’s power a large communication distance will be gathered. It will cause a high electrical power drain on the transmitter device, which causes a shorter operating life of the battery-powered devices. If we use this device at higher transmitted power then the device will create interference with other RF devices.
    RF Transmitter and Receiver
  4. 7805 Voltage regulator: Voltage regulators have significant importance in electrical circuits. Even if there is fluctuation in input voltage, this voltage regulator provides a constant output voltage. We can find the application of the 7805 IC in most of the projects. The name 7805 signifies two meanings, “78” means that it is a positive voltage regulator and “05” means that it provides 5V as output. So our voltage regulator will provide a +5V output voltage. This IC can handle current around 1.5A. A Heat sink is recommended for projects that consume more current. For example, if the input voltage is 12V and you are consuming 1A, then (12-5) * 1 = 7W. This 7 Watts will be dissipated as heat.
    Voltage Regulator

     

Step 4: Assembling The Circuit

We will need to design two circuits for this project. The first circuit will be placed at a suitable place in a blind man’s stick and the second one will be an RF transmitter circuit and it will be used to find out the main circuit. Before designing the circuit on Proteus we need to include the proteus library of RF receiver in the software. You can download the library from Here and after downloading the library open the Library folder and copy MODULO_RF.LIB file and paste it in the Library folder of Proteus. In case you don’t find the library folder, click on (C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\LIBRARY). When you have done this open MODELS folder and copy RX.MDF and paste it in the proteus MODELS folder. In case you don’t find the models folder, click on (C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\MODELS).

Circuit Diagram (Picture Courtesy: Circuit Digest)

The microcontroller which will be used to control all of the sensors in the circuit is Arduino Nano. The power supply used for working of the circuit is 9V battery and this 9V voltage is dropped down to 5V using a 7805 Voltage regulator. It can be seen in the circuit that the Ultrasonic sensor is powered by the Vout of the voltage regulator. The trigger and echo pins of the sensor are connected to pin 3 and pin 2 of Arduino respectively. The Light Dependent Resistor (LDR) is connected to the potentiometer of value 10k and the Analog to Digital conversion pin A1 of Arduino is connected to that point to note the voltage difference. We need to know the signal that is emitted by  RF receiver so we have connected ADC pin A0 to read the signal from RF receiver. The output of the whole circuit is given by the buzzer so, the positive pin of the buzzer is connected to the pin 12 of Arduino and the negative pin is connected to the ground of the ultrasonic sensor.

We haven’t included the RF transmitter in our circuit diagram because we will assemble it on hardware separately. Whenever we use 433 MHz superheterodyne transmitter and receiver we need a microcontroller to interface them with that but in this project we need the only transmitter to send signals to the receiver so, we have connected the data pin of the transmitter with the Vcc. The data pin of the receiver is passed through the RC filter and then connected to the data pin A0 of the Arduino respectively. We will press the push button placed on the transmitter repeatedly and when the button is pressed the receiver will give any constant value as output.

RF Transmitter

Step 5: Assembling The Hardware

As we have run the simulation no we are in a position to make a prototype. While soldering the components on the Perf board pay special attention towards the pins of Arduino Nano. make sure that the pins don’t touch each other, otherwise, Arduino could be damaged. Find a stick at your home and attach the circuit comprising of Arduino and RF receiver on it. You can use Hot glue gun for attaching the circuit on the stick and it is better to put some glue on the positive and negative terminals so, that the wires of the power supply may not be detached if the stick is stroked firmly onto the ground.

Circuit Assembled On Hardware (Picture Courtesy: Circuit Digest)

Step 6: Getting Started With Arduino

If you are not familiar with Arduino IDE before, don’t worry because below, you can see clear steps of burning code on the microcontroller board using Arduino IDE. You can download the latest version of Arduino IDE from here and follow the steps below:

  1. When the Arduino board is connected to your PC, open “Control panel” and click on “Hardware and Sound”. Then click on “Devices and Printers”. Find the name of the port to which your Arduino board is connected. In my case it is “COM14” but it may be different on your PC.
    Finding Port
  2. Click on the Tool menu. and set the board to Arduino Nano from the drop-down menu.
    Setting Board
  3. In the same Tool menu, set the port to the port number that you observed before in the Devices and Printers.
    Setting Port
  4. In the same Tool menu, Set the Processor to ATmega328P (Old Bootloader).
    Processor
  5. Download the code attached below and paste it into your Arduino IDE. Click on the upload button to burn the code on your microcontroller board.
    Upload

To download the code, click here.

Step 7: Understanding The Code

The code is well commented and self-explanatory. But still, it is explained below:

  1. At the start of the code, all the pins of the Arduino Nano board that are connected to the ultrasonic sensor and RF module, are initialized.
const int trigger = 3; //Trigger pin of 1st Sensor
const int echo = 2; //Echo pin of 1st Sensor
const int Buzz = 13; // Pin to connect buzzer
const int Remote = A0; 
const int Light = A1; 

long time_taken;
int dist;
int Signal;
int Intens;
int similar_count;

2. void setup() is a function that is used to set al the pins used, as INPUT and OUTPUT. Baud Rate is defined in this function. Baud Rate is the speed of communication by which the microcontroller board communicates with the sensors integrated with it.

void setup() 
{
Serial.begin(9600); 
pinMode(Buzz,OUTPUT);
digitalWrite(Buzz,LOW);
pinMode(trigger, OUTPUT); 
pinMode(echo, INPUT); 
}

3. Now, we will create a function that will calculate the distance.

void calculate_distance(int trigger, int echo)
{
 digitalWrite(trigger, LOW);
 delayMicroseconds(2);
 digitalWrite(trigger, HIGH);
 delayMicroseconds(10);
 digitalWrite(trigger, LOW);

 time_taken = pulseIn(echo, HIGH);
 dist= time_taken*0.034/2;
 if (dist>300)
 dist=300;
}

4.void loop() is a function that runs repeatedly in a cycle. In this function, we tell the microcontroller board how and what operations to carry out. In the main loop, we will read the data of the sensors. Here, first, the trigger pin is set to send a signal which will be detected by the echo pin. Some conditions are applied to sound the buzzer continuously if an object is detected at a particular distance. The buzzer will beep with a small break in it if it detects dark and will beep with a slightly greater break if it detects bright.

void loop() 
{ //infinite loop
calculate_distance(trigger,echo);
Signal = analogRead(Remote);
Intens = analogRead(Light);

//Check if Remote is pressed
int temp = analogRead(Remote);
similar_count=0;
while (Signal==temp)
{
 Signal = analogRead(Remote);
 similar_count++;
}

//If remote pressed
if (similar_count<100)
{
  Serial.print(similar_count); Serial.println("Remote Pressed");
  digitalWrite(Buzz,HIGH);delay(3000);digitalWrite(Buzz,LOW);
}

//If very dark
if (Intens<200)
{
  Serial.print(Intens); Serial.println("Bright Light");
  digitalWrite(Buzz,HIGH);delay(200);digitalWrite(Buzz,LOW);delay(200);digitalWrite(Buzz,HIGH);delay(200);
  digitalWrite(Buzz,LOW);delay(200);
  delay(500);
}

//If very bright
if (Intens>800)
{
  Serial.print(Intens); Serial.println("Low Light");
  digitalWrite(Buzz,HIGH);delay(500);digitalWrite(Buzz,LOW);delay(500);digitalWrite(Buzz,HIGH);delay(500);
  digitalWrite(Buzz,LOW);delay(500);
}

if (dist<50)
{
  Serial.print(dist); Serial.println("Object Alert");
  digitalWrite(Buzz,HIGH);
  for (int i=dist; i>0; i--)
    delay(10);
  digitalWrite(Buzz,LOW);
  for (int i=dist; i>0; i--)
    delay(10);
}

//Serial.print("dist=");
//Serial.println(dist);
//Serial.print("Similar_count=");
//Serial.println(similar_count);
//Serial.print("Intens=");
//Serial.println(Intens);
}

Step 8: Testing

As we have understood the code, uploaded it on the microcontroller and assembled the hardware too, now it’s time to test our project. Before testing ensure that the connections are made correctly and verify the continuity of the circuit using the Digital Multi Meter. For turning ON both of the circuits use 9V battery. Place an object onto the surface at which you are testing and move the Ultrasonic sensor in front of it and it is noticed that the sound of the buzzer increases as the sensor moves closer to the object. There are two possibilities if the LDR is covered in dark or if you are testing in the sunlight the buzzer will start beeping. If the push button is pressed on the RF transmitter the buzzer will beep for a long time. If the buzzer keeps beeping for a long time it means that the alarm is falsely triggered. If you are facing this kind of error open the serial monitor of the Arduino IDE and check for the parameters that are causing such kind of problem.

Testing The Hardware (Picture Courtesy: Circuit Digest)

That was the simplest way to make a smart stick for blind people using Arduino. Follow all of the steps mentioned above and after successful testing of the project look for a disable person and offer him this project to make his/her life easier.

Hamza Iqbal


Hey! I am Hamza. I am an Electrical Engineer who has a very innovative approach towards daily life stuff. I tend to make life easier by making circuits and designs to automate things around me. I mainly work with printed circuit boards on proteus to bring life to my inventions.
Close