Smart Blind Stick using Arduino

Arduino

ByB.Aswinth Raj 54

Smart Blind Stick Project using Arduino and Sensors

Ever heard of Hugh Herr? He is a famous American rock climber who has shattered the limitations of his disabilities; he is a strong believer that technology could help disabled persons to live a normal life. In one of his TED talk Herr said Humans are not disabled. A person can never be broken. Our built environment, our technologies, is broken and disabled. We the people need not accept our limitations, but can transfer disability through technological Innovation. These were not just words but he lived his life to them, today he uses Prosthetic legs and claims to live to normal life. So yes, 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 perform more than just a stick for visually impaired persons.

This Smart stick will have an Ultrasonic sensor to sense distance from any obstacle, LDR to sense lighting conditions and a RF remote using which the blind man could remotely locate his stick. All the feedbacks will be given to the blind man through a Buzzer. Of course you can use a vibrator motor in place of Buzzer and advance a lot more using your creativity.

Arduino Based Blind Stick circuit board

 

Materials Required:

  1. Arduino Nano (Any version will work)
  2. Ultrasonic Sensor HC-SR04
  3. LDR
  4. Buzzer and LED
  5. 7805
  6. 433MHz RF transmitter and receiver
  7. Resistors
  8. Push button
  9. Perf board
  10. Soldering Kit
  11. 9V batteries

 

Circuit Diagram:

This Arduino Smart Blind Stick Project requires two separate circuits. One is the main circuit which will be mounted on the blind man’s stick. The other is a small remote RF transmitter circuit which will be used to locate the main circuit. The main board’s circuit diagram is shown below:

Receiver circuit diagram of arduino based blind stick project

 

As we can see an Arduino Nano is used to control all the sensors. The complete board is powered by a 9V battery which is regulated to +5V using a 7805 Voltage regulator. The Ultrasonic sensor is powered by 5V and the trigger and Echo pin is connected to Arduino nano pin 3 and 2 as shown above. The LDR is connected with a resistor of value 10K to form a Potential divider and the difference in voltage is read by Arduino ADC pin A1. The ADC pin A0 is used to read the signal from RF receiver. The output of the board is given by the Buzzer which is connected to pin 12.

 

The RF remote circuit is shown below. Its working is also further explained. 

 

I have used a small hack to make this RF remote control circuit to work. Normally while using this 433 MHz module requires an Encoder and Decoder or two MCU to work. But, in our application we just need the receiver to detect if the transmitter is sending some signals. So the Data pin of the transmitter is connected to Ground or Vcc of the supply.

The data pin of the receiver is passed through an RC filter and then given to the Arduino as shown below. Now, whenever the button is pressed the Receiver output some constant ADC value repeatedly. This repetition cannot be observed when the button is not pressed. So we write the Arduino program to check for repeated values to detect if the button is pressed. So that is how a Blind person can track his stick. You can check here: how RF transmitter and receiver work.

I have used a perf board to solder all the connections so that it gets intact with the stick. But, you can also make them on a breadboard. The boards that I made are below.

working of arduino based blind stick project

Backside image of arduino based blind stick pcb board

 

Arduino Program for Smart Blind Stick:

Once we are ready with our hardware, we can connect the Arduino to our Computer and start programming. The complete code used for this page can be found at the bottom of this page, you can upload it directly to your Arduino board. However, if you are curious to know how the code works read further.

 

Like all programs we start with void setup() to initialise Input Output pins. In our program the Buzzer and Trigger pin is an Output device and the Echo pin is an Input device. We also initialise the serial monitor for debugging.

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

Inside the main loop we are reading all the sensors data.  We begin with reading the sensor data of Ultrasonic sensor for distance, LDR for light intensity and RF signal to check if the button is pressed. All these data is saved in a variable as shown below for future use.

calculate_distance(trigger,echo);
Signal = analogRead(Remote);
Intens = analogRead(Light);

 

We start with checking for the Remote signal.  We use a variable called similar_count to check how many times the same values are being repeated from the RF receiver. This repetition will occur only when the button is pressed. So we trigger the Remote pressed alarm if the count exceeds a value of 100.

//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);
}

 

You can also check it on Serial Monitor on your computer:

serial monitor screen for arduino based blind stick project

 

Next we check for the intensity of light around the blind man. If the LDR gives a value of less than 200 it is assumed to be very dark and we give him the warning through buzzer with a specific tone of delay with 200ms. If the intensity is very bright that is more than 800 then also we give a warning with another tone. The alarm tone and intensity can be easily varied by changing the respective value in the below code.

//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);
}

serial monitor screen showing measurement of distance for ultrasonic sensor

 

Finally, we start measuring the distance from any obstacle. There will be no alarm if the measured distance is more than 50cm. But, if it is less than 50cm the alarm will start by beeping the buzzer. As the object gets closer to the buzzer the beeping interval will also decrease. The closer the object is the faster the buzzer will beep. This can be done by creating a delay that is proportional to the distance measured. Since the delay () in Arduino cannot accept variables we have to use a for loop which loop based on the measured distance as shown below.

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);
}

Learn more about measuring the distance using Ultrasonic sensor and Arduino.

 

The program can be easily adapted for your application by changing the value which we use to compare. You use the serial monitor to debug if a false alarm is trigger. If you have any problem you can use the comment section below to post your questions

 

Arduino Blind Stick in Action:

Finally it’s time to test our project. Make sure the connections are done as per the circuit diagram and the program is successfully uploaded. Now, power both the circuits using a 9V battery and you should start to see results. Move the Ultra Sonic sensor closer to object and you will notice the Buzzer beeping and this beeping frequency increases as the stick goes closer to object. If the LDR is covered in dark or if there is too much light the buzzer will beep. If everything is normal the buzzer will not beep.

When you press the button on the remote the buzzer will give a long beep. The complete working of this Smart Blind Stick is shown in the Video given at the end of this page. I also use a small stick to mount the complete assembly you can use a larger one or an actual blind stick and put it in action.

Arduino Based Blind Stick project in working

If your buzzer is always beeping it means the alarm is being false triggered. You can open the serial monitor to check for the parameters and check which is falling in critical and adjust that. As always you can post your problem in the comment section to get help. Hope you understood the project and enjoyed building something.

Code

/*
 * Program for Blind Man Stick
 * Code by B.Aswinth Raj
 * Dated: 03-11-2017
 * Website: www.circuitdigest.com
 */

const int trigger = 3; //Trigger pin of 1st Sesnor
const int echo = 2; //Echo pin of 1st Sesnor
const int Buzz = 13; //Echo pin of 1st Sesnor
const int Remote = A0; //Echo pin of 1st Sesnor
const int Light = A1; //Echo pin of 1st Sesnor

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

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

}

/*###Function to calculate 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;
}

void loop() { //infinite loopy
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);
}

Video

Comments

  • salem's picture
    salem
    Nov 22, 2017

    the buzzer is always beeping and the serial monitor is like that
    object alert
    remote pressed
    bright light
    and its keep like this. what's the problem can you help me please?
    and i am using an UNO arduino

  • Saad's picture
    Saad
    Jan 04, 2018

    I was also having the same issue , did you resolve it somehow?

  • Dave's picture
    Dave
    Jan 28, 2018

    I have the same problem. Buzzer is beeping and serial monitor show " Remote pressed " even if I am doing nothing.
    May someone help me?

  • AISHA's picture
    AISHA
    Jan 30, 2018

    Alter your code to remove remote option. Check if everything else is working. Then tweak your RC values to get the Remote working properly 

  • Dave's picture
    Dave
    Feb 01, 2018

    Hi AISHA!
    Thanks for your answer. I removed remote option and everyting is fine, it' s working properly. But now I would like to add remote control. Have you any suggestions to RC values? Thanks in advance for your help.

  • Areeba's picture
    Areeba
    Feb 17, 2018

    We removed the remote option but the problem is same .
    It’s still beeping. Can you give the alter code.

  • Dave's picture
    Dave
    Feb 19, 2018

    Hi Areeba!
    What is your problem? If You remove remote control option, everything - according to the diagram - work correctly. Just remember to change the code from D13 to D12 to which the buzzer is connected.

  • gourish's picture
    gourish
    Mar 11, 2018

    What exact RC values has to be connected for proper working of remote. It is being detected continuously.

  • manish's picture
    manish
    Jun 14, 2018

    can u send me the codes without rf receiver
    or the corrected code
    pls send codes as soon as possible

  • Amna's picture
    Amna
    Feb 17, 2018

    Im facing the same problem the buzzer is beeping itself.. Have u figured out the problem?? If so please help me.

  • Neelima's picture
    Neelima
    Dec 14, 2017

    is this code really works

  • B.Aswinth Raj's picture
    B.Aswinth Raj
    Dec 14, 2017

    Yes it does, but you should change the trigger point values since it will change based on your hardware

  • Sharath's picture
    Sharath
    Jan 14, 2018

    I want codings about to give instructions to a blind person in such a way that it tells move right there is a object in front of you and take left there is a tree in front of you.And suggest name for that project.

  • Dinesh's picture
    Dinesh
    Jan 27, 2018

    Sir, sorry to disturb you but,the receiver and transmitter sections of this smart blind stick on which I'm working on made me to do this,as .. I'm done with proper dumping of code u mentioned in this page and all connection stuff but I'm getting output

  • AISHA's picture
    AISHA
    Jan 30, 2018

    What problem are you facing? What is your Serial monitor Outputing?

  • Dinesh's picture
    Dinesh
    Jan 29, 2018

    Sorry I'm not getting the output

  • Solomon Gezehagn's picture
    Solomon Gezehagn
    Feb 07, 2018

    does the code really works? i didn't get output.please help me i want the project to simulate b/c it is interesting work!!

  • Amna's picture
    Amna
    Feb 10, 2018

    Where can I find rf receiver in proteus ??? By which name ??

  • Rida's picture
    Rida
    Feb 15, 2018

    We want to use wifi in our project.whenever obstacle is found then it should be detected by circuit. when wifi chip recieves signals then phone should vibrate. can any one help please.....

  • dinesh's picture
    dinesh
    Mar 01, 2018

    heck! you got the output for the circuit using the code uploaded in this site, if so please help us

  • Bandana Mohpatra's picture
    Bandana Mohpatra
    Feb 16, 2018

    can we use a speaker of instead buzzer that speak the blind person to go whether left or right

  • Gourish's picture
    Gourish
    Feb 17, 2018

    I want all the components values (like resistor aridino ect... Plz any 1 helps me

  • AISHA's picture
    AISHA
    Mar 01, 2018

    Gourish the resistor values are mentioned in the circuit diagram above

  • Israr's picture
    Israr
    Mar 06, 2018

    How can we use speaker replace of buzzer or vibrator they can giva a instruction to a person.....

  • B.Aswinth Raj's picture
    B.Aswinth Raj
    Mar 07, 2018

    Just remove the buzzer and replace it with a vibrator. It will vibrate every time the buzzer made sound.

    If you want to make pre-defined patterns in vibration you have to change the code, which is also very easy 

     

  • gourish's picture
    gourish
    Mar 11, 2018

    Can anyone give the exact RC values for operation of remote.

  • AISHA's picture
    AISHA
    Mar 13, 2018

    You can either calculate the value of RC which is heptic or experiment your own. A value of 5.7k and 0.1uF would be a good value to start with 

  • Shikhar's picture
    Shikhar
    Apr 04, 2018

    Hi Aisha! The project is working well without adding the remote code in it. Could you please suggest some values for RC. Or should I make some changes in the code to make the remote work?

  • Rohit munde's picture
    Rohit munde
    Mar 17, 2018

    I make same project n it working properly bt a wanna add more function of detecting a water so which water sensor is suitable n I used for this plz suggest me

  • shreya's picture
    shreya
    Mar 21, 2018

    Sir,
    The code is not working in my case can u plz help me out. I urgently need the project to be done

  • Shubahm's picture
    Shubahm
    Mar 18, 2018

    Can I use aurdiuno uno rather than the aurdiuno Nano if yes what changes have to done.

  • P. SMIT's picture
    P. SMIT
    Mar 21, 2018

    Why is the blind man using a remote-control to make buzzer sound in the receiver? I presume the receiver with the ultrasonic is hanging on his chest for example. What is the purpose of signaling by remote control?

  • Adarsha's picture
    Adarsha
    Mar 24, 2018

    Can't we use directly a 5V input ..instead of regulating the 9V to 5V???

  • Bandana mohapatra's picture
    Bandana mohapatra
    Mar 24, 2018

    My remote is not working please help me

  • Vijyesh's picture
    Vijyesh
    Mar 28, 2018

    Where we have to write the code ??
    How is it working since it is not connected to pc or laptop ?

  • suraj's picture
    suraj
    Apr 01, 2018

    it is showing a1 is not declared in the scope
    what changes i have to make
    its urgent

  • Easha's picture
    Easha
    Apr 03, 2018

    Can anyone tell which circuit designing software I should use to draw and run the circuit please

  • B.Aswinth Raj's picture
    B.Aswinth Raj
    Apr 06, 2018

    You cannot simulate this circuit completely , here the software Proteus is used 

  • arduino250's picture
    arduino250
    Apr 06, 2018

    am Livus from RWANDA
    can anyone plz help me to make the code of remote control work because the buzzer is always beeping and the serial monitor display that the remote is pressed and similar_count value is always 0.

  • Sunethra's picture
    Sunethra
    Apr 13, 2018

    The code given here cannot support the circuit..overall it ws a bad experience referring to this.

  • Hansraj's picture
    Hansraj
    Apr 16, 2018

    Sir Aapne jase bataya h wase hi mane thik thik connection kare h par Aapka programme work nhi Kar rha h ultra sonic sensor or nano board bilkul thik h mane nano or ultra sonic sensor 2 pec manga rakhe h sir isme koi liabray to nhi add Karni padegi plz reply bsir

  • John Leonard Sabangan M.'s picture
    John Leonard Sa...
    Apr 16, 2018

    Hey Good Morning i just wanted to ask some question about the circuit could you please at least give a tutorial how did you solder the pins and to be specific could you please a tutorial make a full tutorial how did you created it. Please it's very urgent sorry to tell this but we cannot leave or were not going to graduate if we don't solve or created this robot thank you so much i hope you receive this.

  • Aldhi's picture
    Aldhi
    Apr 22, 2018

    sir, i want to ask why its always say 0object alert, even though i already put an object very very close to the ultrasonic sensor?? please reply sir, its urgent, thank you.

  • Roshan Gangani's picture
    Roshan Gangani
    Apr 27, 2018

    Through Arduino Uno implement same project with same code?

  • jade lucero's picture
    jade lucero
    May 15, 2018

    Hi aisha!
    I am facing problem with the output on the serial monitor. it keeps on printing object alert. please help me solve this problem. thank you in advance

  • jade lucero's picture
    jade lucero
    May 15, 2018

    sir i have a problem on the output. it keep on displaying object alert even though i don't put any object below 50cm. and it doesn't also beep. please help me solve this problem sir. thank you

  • B.Aswinth Raj's picture
    B.Aswinth Raj
    May 16, 2018

    It is because the ultrasonic sensor is not working properly. Try using the serial monitor to check what values your us sensor is giving 

  • Pradeep's picture
    Pradeep
    Jun 04, 2018

    Sketch uses 3914 bytes (12%) of program storage space. Maximum is 32256 bytes.
    Global variables use 246 bytes (12%) of dynamic memory, leaving 1802 bytes for local variables. Maximum is 2048 bytes

  • Siddhant kosabe's picture
    Siddhant kosabe
    Jun 27, 2018

    Is this used for detecting living things also.. or if not wht type of sensor or any thing we can used for it..???

  • Jayant's picture
    Jayant
    Jun 28, 2018

    The sensor used here is ultrasonic sensor, it will detect ever obstacle including living beings 

  • sandeep dubey's picture
    sandeep dubey
    Jul 08, 2018

    sir , i want to add google navigations or google maps to the smart blind stick is it possible to add .if it is can u help the code .

  • Ranajoy's picture
    Ranajoy
    Aug 27, 2018

    Where we connect the led with this circuit

  • lionel's picture
    lionel
    Sep 01, 2018

    i need help my buzzer is steel beeping

Log in or register to post Comment