Skip to the content.

Third Eye for the Blind

This project is a wearable device for visually impaired individuals that alerts them of incoming obstacles using beeps and vibrations. The ultrasonic sensor, mounted on a hat, can detect objects that come within a set distance. This triggers a buzz from the buzzer and a vibration from tje vibrating motor, which can be turned on and off by a set of buttons. Without bulky components or an expensive price, the Third Eye is an innovative and effective solution for those that are visually impaired.

Engineer School Area of Interest Grade
Sameha V Smithtown High School West Computer Engineering Rising Sophomore

Headstone Image

Final Milestone

I achieved my final milestone by separating my setup onto 2 separate breadboards, one with the ultrasonic sensor and Arduino A, and another one with the buzzer, 2 buttons, vibrating motor, and Arduino B. This way, I can attach the setup with Arduino A on a hat and I can attach the setup with Arduino B onto an armband for making the device more user friendly. As of now, I am in the process of attaching these components to their respective locations. Unfortunately, my modification with the HC 05 Bluetooth modules did not work out due to a technical difficulty with one of the modules. However, I hope to incorporate Bluetooth into a future project with the lessons I learned from this attempt. In the place of my Bluetooth modules, there are 3 wires running from the hat to the armband to connect the 2 setups. I am very glad that I chose this project for this summer, as I learned a lot from it and I had a lot of fun along the way. BlueStamp was a great experience for me and I’ll be sure to use all the skills I learned on more projects that I will do in the future.

Second Milestone

I achieved my second milestone by incorporating a vibrating motor and two buttons into my circuit. I decided to switch to using buttons instead of switches since the switches I received were not compatible with my current setup. Now, the two buttons control the vibrating motor and the buzzer, such that when an object comes within the distance established in the code (ex. 10 centimeters), the LED will light up, but the buzzer and the vibrating motor will only activate and vibrate/buzz if their corresponding buttons are pressed. This way, the user may control whether they wish to be informed of an obstacle with a vibration or with a sound, as sometimes one may be more preferable due to situational circumstances. Next, I want to incorporate HC 05 Bluetooth modules into my circuit so that the sensor and the rest of the components may be placed in separate locations with ease.

First Milestone

I achieved my first milestone by learning and understanding circuit fundamentals and implementing them through the creation of my circuit. With jumper wires, I connected the Arduino to the LED, the buzzer, and the sensor, and I attached it to the breadboard. I also learned and understood the fundamentals of the code and was able to adapt a program to work for my circuit. The circuit works by having the sensor emit an ultrasonic pulse, which echoes back to the sensor. The time it takes for this echo to return is calculated, and from that, the distance the object is from the sensor is determined. If this distance is less than the distance I established in the code (ex: 10 centimeters), the buzzer will make a sound, informing the user of the obstacle, and the LED will light up. Currently, I am still waiting for the vibration motor and the switch to arrive, so that I may incorporate them into my current circuit and adapt my code to accommodate them.

Schematics

Below are the schematics for my 2 setups. (Note: The diagram below uses Arduino Unos in the place of the Arduino Micros that I used.)

Schematics

Code

This first block is for the armband setup which contains the vibrating motor, the buzzer, and the 2 buttons.

const int buzzerPin = 4;
const int motorPin = 5;
const int buzzerButtonPin = 6;
const int motorButtonPin = 7;
const int TX = 11; // Connect to RX of Setup A
const int RX = 10; // Connect to TX of Setup A

bool buttonStateBuzzer = false;
bool buttonStateMotor = false;
bool lastButtonStateBuzzer = LOW;
bool lastButtonStateMotor = LOW;
bool buzzerOn = false;
bool motorOn = false;

void setup() {
  Serial.begin(9600);
  pinMode(buzzerPin, OUTPUT);
  pinMode(motorPin, OUTPUT);
  pinMode(buzzerButtonPin, INPUT_PULLUP);
  pinMode(motorButtonPin, INPUT_PULLUP);
  pinMode(TX, OUTPUT);
  pinMode(RX, INPUT);
}

void loop() {
  // Read the button states
  bool currentButtonStateBuzzer = digitalRead(buzzerButtonPin) == LOW;
  bool currentButtonStateMotor = digitalRead(motorButtonPin) == LOW;

  // Check if the buzzer button state changed
  if (currentButtonStateBuzzer != lastButtonStateBuzzer) {
    if (currentButtonStateBuzzer == LOW) {
      buzzerOn = !buzzerOn; // Toggle buzzer state
    }
    delay(50);
  }
  lastButtonStateBuzzer = currentButtonStateBuzzer;

  // Check if the motor button state changed
  if (currentButtonStateMotor != lastButtonStateMotor) {
    if (currentButtonStateMotor == LOW) {
      motorOn = !motorOn; // Toggle motor state
    }
    delay(50);
  }
  lastButtonStateMotor = currentButtonStateMotor;

  // Check if data is available from Setup A
  if (digitalRead(RX) == HIGH) {
      Serial.println("Received"); // Indicate receipt of message
      // Control buzzer
      if (buzzerOn) {
        tone(buzzerPin, 2200);
        delay(300);
        noTone(buzzerPin);
      } else {
        noTone(buzzerPin);
      }

      // Control motor
      if (motorOn) {
        digitalWrite(motorPin, HIGH);
        delay(300);
        digitalWrite(motorPin, LOW);
      } else {
        digitalWrite(motorPin, LOW);
      }
    } else {
      // If no object detected, ensure buzzer and motor are off
      digitalWrite(motorPin, LOW);
      digitalWrite(buzzerPin, LOW);
    }
  }

}

This second block of code is for the setup on the hat, with the ultrasonic sensor.

const int trigPin = 2;
const int echoPin = 3;
const int TX = 11; // Connect to RX of Setup B
const int RX = 10; // Connect to TX of Setup B

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(TX, OUTPUT);
  pinMode(RX, INPUT);
}

void loop() {
  long duration, cm;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  cm = microsecondsToCentimeters(duration);

  if (cm <= 10 && cm > 0) {
    Serial.println("Object detected.");
    digitalWrite(TX, HIGH);
  } else {
    digitalWrite(TX, LOW);
  }
  delay(100);
}

long microsecondsToCentimeters(long microseconds) {
  return microseconds / 29 / 2;
}


}

Bill of Materials

Part Description Price (USD) Link
Arduino Micro (2x) Controls components on both of the setups $24.90 Link
Micro USB Cable Connects the Arduinos to their respective power sources and allows uploading $5.19 Link
Electronics Kit Contained the buzzer, resistors, jumper wires, and a breadboard needed for the project $13.99 Link
Ultrasonic Sensor Used for object detection on the hat setup $9.99 Link
DMM Checks voltage and ensure proper wiring $16.23 Link
Velcro Used to fasten components to the armband and hat $10.59 Link
USB Power Bank and Cable (Cylinder) Used as a power source for the armband setup $29.99 Link
Vibration Motor Vibrates to inform the user of an obstacle $8.69 Link
USB Power Bank and Cable Used as a power bank for the hat setup $15.95 Link
10 cm Jumper Wires Used to connect components on the hat setup wich required shorter wires $8.99 Link
Armband Allows the buzzer and motor setup to be easily worn by the user $12.99 Link
Baseball Cap Allows the sensor setup to be easily worn by the user $13.99 Link

Helpful Resources

Below are some resources that I used to help me on my project.