Hackster is hosting Hackster Holidays, Ep. 6: Livestream & Giveaway Drawing. Watch previous episodes or stream live on Monday!Stream Hackster Holidays, Ep. 6 on Monday!
Jeswin MS
Created September 1, 2024

TrailBlaze: Assistive Navigation for the Visually Impaired

A wearable system that combines GPS, sensors, and audio-haptic feedback to aid visually impaired individuals in outdoor navigation.

23
TrailBlaze: Assistive Navigation for the Visually Impaired

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1
GPS Module with Internal & External Antenna (NEO-M8N)
M5Stack GPS Module with Internal & External Antenna (NEO-M8N)
×1
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×1
Speaker: 0.25W, 8 ohms
Speaker: 0.25W, 8 ohms
×1
HC-05 Bluetooth Module
HC-05 Bluetooth Module
×1
Li-Ion Battery 1000mAh
Li-Ion Battery 1000mAh
×1
Breadboard (generic)
Breadboard (generic)
×1
Male/Female Jumper Wires
Male/Female Jumper Wires
×1
Female/Female Jumper Wires
Female/Female Jumper Wires
×1
Hammond Enclosure
×1
Pico Vibe 10mm Vibration Motor
×1
PCBWay Custom PCB
PCBWay Custom PCB
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free

Story

Read more

Schematics

hack1_22ekd3AuC4.png

Code

Arduino Code

C/C++
#include <SoftwareSerial.h>
#include <TinyGPS++.h>

// Define pins for sensors and output
#define GPS_RX_PIN 4
#define GPS_TX_PIN 3
#define PROXIMITY_SENSOR_PIN A0
#define VIBRATION_MOTOR_PIN 5
#define AUDIO_PIN 6

// Initialize GPS module
SoftwareSerial gpsSerial(GPS_RX_PIN, GPS_TX_PIN);
TinyGPSPlus gps;

// Initialize variables
int proximityValue = 0;
bool obstacleDetected = false;

void setup() {
  // Start serial communication
  Serial.begin(9600);
  gpsSerial.begin(9600);

  // Set pin modes
  pinMode(PROXIMITY_SENSOR_PIN, INPUT);
  pinMode(VIBRATION_MOTOR_PIN, OUTPUT);
  pinMode(AUDIO_PIN, OUTPUT);

  // Initialize components
  digitalWrite(VIBRATION_MOTOR_PIN, LOW);
  digitalWrite(AUDIO_PIN, LOW);
}

void loop() {
  // Read GPS data
  while (gpsSerial.available() > 0) {
    gps.encode(gpsSerial.read());
  }

  // Check for valid GPS data
  if (gps.location.isUpdated()) {
    Serial.print("Latitude= "); Serial.print(gps.location.lat(), 6); 
    Serial.print(" Longitude= "); Serial.println(gps.location.lng(), 6);
  }

  // Read proximity sensor
  proximityValue = analogRead(PROXIMITY_SENSOR_PIN);
  if (proximityValue < 100) { // Threshold value for detecting obstacles
    obstacleDetected = true;
  } else {
    obstacleDetected = false;
  }

  // Provide feedback if an obstacle is detected
  if (obstacleDetected) {
    digitalWrite(VIBRATION_MOTOR_PIN, HIGH);
    tone(AUDIO_PIN, 1000); // Emit a tone
  } else {
    digitalWrite(VIBRATION_MOTOR_PIN, LOW);
    noTone(AUDIO_PIN); // Stop tone
  }

  // Add any additional logic or communication with the mobile app via Bluetooth here

  delay(100); // Small delay for stability
}

Credits

Jeswin MS

Jeswin MS

1 project • 1 follower

Comments