Introduction: Electronic Cane for Blind People

About: biomedical engineer

This is a simple project can make a big difference in someone's life and you are here because you are interested
what you need to know about this project:
I used a wood cane and customize it the way I need for electronic parts like Arduino, ultrasonic, PCB etc...

How the electronics work together:
So I put the ultrasonic sensor in the top of servo motor that rotate about 90 degrees (Like Radar) to scan the area in front, Right and Left of blind patient, when this radar see's something closer than Ex:10 cm it give an alert through vibrating motor(I used two of them you can use more to increase accuracy).
But what if the patient lost his cane ?!
I used a Bluetooth HC-05 to give an alert through android app to cane so a buzzer on the cane make noise then the patient find the cane.

that's it.

Step 1: We Need to Build Our Pcb

you can see the circuit I built on Eagle software.

Parts you need:

1- Two vibrate motors you can use mobile vibrator for better results.
2- Any kind of Arduino chips but this project built on Arduino uno R3.
3- Bluetooth module Hc-05 (i used) or Hc-06.
4- Buzzer.
5- 2×lm7805 volt regulator.
6- 3×Bc337 transistor.
7- 3×Diodes any kind can handle 5 volt can work with you.

Step 2: Connect Every Thing Together

Alert: if you power up this project from the arduino say good bye to the chip because it needs a lot of current that your arduino can't handel.

some parts like Bluetooth and servo i attached directly to arduino without connecting to PCB to shorten the wires.

The connection between arduino and PCB is simple, just follow the numbers on each line to the destination, not so hard.

If you have any question about connections send me Email.

Step 3: Upload the Code

i attached the arduino code, you have to put this file on a Folder with the same name on English directory or it will not work for you.

you can edit the code the way you want like servo angle and the rules when the motors work and delay duration's.

Hope you enjoy.

#include

/*------------"int timer 2"---------*/

void Timer2init() {

// Setup Timer2 overflow to fire every 8ms (125Hz)

// period [sec] = (1 / f_clock [sec]) * prescale * (255-count)

// (1/16000000) * 1024 * (255-130) = .008 sec

TCCR2B = 0x00; // Disable Timer2 while we set it up

TCNT2 = 130; // Reset Timer Count (255-130) = execute ev 125-th T/C clock

TIFR2 = 0x00; // Timer2 INT Flag Reg: Clear Timer Overflow Flag

TIMSK2 = 0x01; // Timer2 INT Reg: Timer2 Overflow Interrupt Enable

TCCR2A = 0x00; // Timer2 Control Reg A: Wave Gen Mode normal

TCCR2B = 0x07; // Timer2 Control Reg B: Timer Prescaler set to 1024

}

void measure(void);

int trig = 6; // attach pin 6 to Trig

int echo = 7; //attach pin 7 to Echo

int L_motor =8;

int R_motor =4;

long duration, cm,dis; //for Echo calc

float Light = 0; //for analog light sensor

int buzzer =9;

int Light_int_b =2; //if high measure light

int state =0; //for blutooth state

Servo myservo; // create servo object to control a servo

int pos = 45; // variable to store the servo position

void setup() {

// put your setup code here, to run once:

/*---------------Echo-------------------*/

pinMode(trig, OUTPUT);

pinMode(echo,INPUT);

/*--------------serial------------------*/

Serial.begin(9600);

pinMode(L_motor,OUTPUT);

pinMode(R_motor,OUTPUT);

pinMode(buzzer,OUTPUT);

pinMode(Light_int_b,INPUT);

myservo.attach(3); // attaches the servo on pin 3 to the servo object

Timer2init();

sei();

}

void loop() {

// put your main code here, to run repeatedly:

dis=Distance(); //measure distance

test_m(); //test if there is an object in front of sensor

blutooth(); //test blutooth

delay(2);

}

//------------------loop end-----------------------

int Distance()

{

digitalWrite(trig,LOW);

delayMicroseconds(2);

digitalWrite(trig,HIGH);

delayMicroseconds(10);

digitalWrite(trig,LOW);

duration=pulseIn(echo,HIGH);

cm=duration*0.034/2;

Serial.print(cm);

Serial.println();

return cm;

}

void test_m()

{

if(dis>=5 && dis<=100)

{

if(pos>=45 && pos<=60)

{

//Serial.print("L");

//Serial.println();

digitalWrite(L_motor,HIGH);

delay(500);

digitalWrite(L_motor,LOW);

}

else if(pos >=61 && pos<=120)

{

//Serial.print("F");

//Serial.println();

digitalWrite(R_motor,HIGH);

digitalWrite(L_motor,HIGH);

delay(500);

digitalWrite(R_motor,LOW);

digitalWrite(L_motor,LOW);

}

else if(pos>=121 && pos<=135)

{

//Serial.print("R");

//Serial.println();

digitalWrite(R_motor,HIGH);

delay(500);

digitalWrite(R_motor,LOW);

}

}

}

void blutooth()

{

while (Serial.available() > 0) {

state = Serial.read();

}

if(state =='0'){

digitalWrite(buzzer,LOW);

state = 0;

}

if(state =='1'){

digitalWrite(buzzer,HIGH);

state=0;

}

}

ISR(TIMER2_OVF_vect) {

myservo.write(pos); //servo rotate

pos++;

if(pos>=135)

{

pos=45;

}

TCNT2 = 130; // reset timer ct to 130 out of 255

TIFR2 = 0x00; // timer2 int flag reg: clear timer overflow flag

};

Step 4: We Are Done

download the android app to control the buzzer (on or off)

hit the Bluetooth picture on the app and connect to HC-05 then it will say connected and you are done.

you can use any app and send '1' or '0' if this not work for you try to send 1 0

Enjoy

Step 5: Contact Me

you can contact me on:

Email: alaanasef159357@gmail.com

FB: https://www.facebook.com/alaa.alnasef

linked in: alaa naser alnasef

Yt: alaa nasef