Spatial Audio for blind person

Hi there!

For a student project last year, we equipped a RC-car with Lidar sensors, so a blind person can navigate the car safely in the field or on a racetrack (https://www.youtube.com/watch?v=nQv-j7ngsEg&t=1s).

The prototype consists of two Arduino R4 Uno's and Lidar sensors.
The first Arduino is mounted to the car and connected to three sensors, one facing front, one to the left and one to the right. The sensors measure with a frequency of 100Hz to see if there are any obstacles in front of the car. The data gets sent via Wifi to the second Arduino.
The second Arduino receives the data and generates a beeping-sound, which gets faster the closer the obstacle is to the car.

void loop() {
  // Überprüfen, ob Daten empfangen wurden
  int packetSize = udp.parsePacket();
  if (packetSize) {
    // Das Paket in einen Puffer lesen
    char packetBuffer[packetSize];
    udp.read(packetBuffer, packetSize);

    // Sensorwerte aus dem Paket extrahieren
    String packetData = String(packetBuffer);
    int comma1 = packetData.indexOf(',');
    int comma2 = packetData.indexOf(',', comma1 + 1);
    
    String leftStr = packetData.substring(0, comma1);
    String frontStr = packetData.substring(comma1 + 1, comma2);
    String rightStr = packetData.substring(comma2 + 1);
    
    int left = leftStr.toInt();
    int front = frontStr.toInt();
    int right = rightStr.toInt();

    Serial.print(left);
    Serial.print(",");
    Serial.print(front);
    Serial.print(",");
    Serial.println(right);

    // Ton für den linken Sensor
    if (left < 50) {
      int toneDuration_left = left / 5;
      tone(buzzerPin_left, 440);
      delay(toneDuration_left);
      noTone(buzzerPin_left);
      
    }

    // Ton für den vorderen Sensor
    if (front < 50) {
      int toneDuration_front = front / 5;
      tone(buzzerPin_front, 660);
      delay(toneDuration_front);
      noTone(buzzerPin_front);
    }

    // Ton für den rechten Sensor
    if (right < 50) {
      int toneDuration_right = right / 5;
      tone(buzzerPin_right, 880);
      delay(toneDuration_right);
      noTone(buzzerPin_right);
    }
  }
}

This is an example of the data that the second Arduino receives:

60, 45, 32
60, 56, 23
67, 90, 12

Right now we use the tone() funcions to generate the sound, where you can set the tone frequency and duration. For the user, this is similar to a car parking assistant.

This works but for the user it's very hard to process the input fast enough and manouver the car. Mabye there is a way to give him a spatial imagination with the sensor data? Or a completely different approach?

I'd be happy to hear your thoughts about the project.

1 Like

How are the 3 sensor readings currently translated into tones?

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.