Posts Tagged ‘audio output’

Arduino Project 2: The Audible Eye Part 2

January 9, 2013 Leave a comment

Alright, if you’re following along from Part 1, you should have your headphones/speakers as well as your ultrasonic rangefinder wired up and operational. Next we have to write the code to marry these two devices.

The Code

Alex Glover
Copyright December 2012
The Audible Eye - handheld device that utilizes an ultrasonic rangefinder to determine distance to whatever object the device is pointed at.
Feedback will be delivered to operator via sound - tone will increase pitch for shorter distances, no tones played for extreme distances.

Credit to:
YourDuino SKETCH UltraSonic Serial 1.0

Uses: Ultrasonic Library (Copy to Arduino Library folder)

/* Libraries */
#include "Ultrasonic.h"
/* Pin Assignments */
//Pin designated for controlling the emission of ultrasonic 'pings'
#define TRIG_PIN 2
//Pin designated to 'listen' for ultrasonic 'pings'
#define ECHO_PIN 7
//Pin used to drive the audio output through the headphones
#define SOUND_PIN 12
/* Declare objects */
//Create an object of type 'Ultrasonic' and call it 'Sensor,' passing the trig pin and echo pin numbers into the constructor
Ultrasonic Sensor(TRIG_PIN, ECHO_PIN);
/*-----( Declare Variables )-----*/
//Variable to hold the tone value; this value will be calculated first, and then passed to the tone() function
int toneToPlay=0;

void setup()
//Pring the following text to the serial monitor
Serial.println("The Audible Eye");

void loop()
delay(200); //20 millisend delay to let echos from room dissipate

//The sensor occasionally returns 0 incorrectly. 0 would also give us a divide by zero error in the next line of code. To address these issues
//we use this simple if statement. Basically, if a 0 is returned, we play no tones through the headphones.
if (Sensor.Ranging(INC) != 0){
//Calculating the tone to play as 1000 hertz divided by the number of inches. So if the device is one inch away from an obstacle, we play
//a 1000 hertz tone. If the device is 10 inches away, it plays a 100 hertz tone. Anything greater than 20 inches reduces the tone to almost inaudible.
//Here we take whatever value toneToPlay was calculated at and pass it into the tone() function. The parameter of 200 is the number of milliseconds to play
//the tone. The loop takes about 200 milliseconds in total, so if the loop hangs or crashes, the tone won't keep getting played indefinitely.
tone(SOUND_PIN,toneToPlay, 200);

Upload that sketch to your Arduino and test. If all’s well, you should be hearing various tones coming out of your headphones depending on what’s in front of your rangefinder.

The Finishing Touches

Now at this point, you could declare this project a success. The device works as intended. However, I wanted to give this project a few finishing touches that I usually skip over, so let’s put it all inside an enclosure, make it portable (i.e. battery powered), and throw on a badass toggle switch for the fun of it.

First, let’s wire up the toggle switch. Take one of your 9V battery adapters and cut both wires about halfway between the battery clip and the male adapter. Now take the battery clip side and strip the wires. Connect the red wire to the voltage-in connection on the switch and the black wire to the ground. Now take the male adapter piece and strip the wires. Connect the red wire to the voltage-out connection on the switch and connect the black wire to the same ground connection on the switch we used before. My wiring is quite ugly, but you should get something that looks like this:


Now for the enclosure. I was having a hard time finding a legitimate project enclosure of the right size, so I just used an old cardboard box. Cut out a small rectangle for the the rangefinder to protrude from at the front of your device. On a different side, cut out another hole (size will depend on what size of toggle switch you use). Once you have your holes cut, start installing your components. For my enclosure, I installed everything but the Arduino on one ‘level’ and used some packing foam to wedge things into place.


Then I installed the Arduino and connected the power adapter, leaving the headphones outside of the box as I closed the lid. Here’s a final closeup:


That’s it, hope you enjoyed the post!

Arduino Project 2: The Audible Eye Part 1

January 7, 2013 6 comments

The Audible Eye is a short proof-of-concept project that I came up with while looking for ways to experiment with some new gear. The idea of combining an ultrasonic rangefinder and some sort of signaling audio output jumped out to me – it would give you a depth perception, not unlike echo location that bats and dolphins use. As far as practical use, I believe it could be used by the visually impaired as a complement to a white cane, but not as a replacement.

Basically, the tone/pitch of the audio signal would get higher as the operator moves closer to a wall or object, indicating to the operator that they are getting closer. Similarly, as the operator moves away from the wall the tone will drop until it’s almost inaudible.

Let me provide some context to make this more clear. Let’s imagine our operator is blindfolded. If the operator pointed the device down an empty hallway for example, they would hear almost no tone, telling them it’s safe to walk forward. As they approached a wall, the tone would increase. The operator would then scan around them with the device, find another path that was unobstructed, and could continue walking.

This video is all but unwatchable (quality is IMPRESSIVELY bad), but it will at least give you an idea of how it works. And of course I disassembled the project before I realized the video was botched.

Alright, let’s open up the enclosure and start breaking down the project. The entire project can be broken down into just a few components. Here’s a view inside of the enclosure.


Component List:

Building the project can be broken down into phases. Let’s focus on the ultrasonic rangefinder first, and build from there.

Setting up the Ultrasonic Rangefinder

There are 4 pins on the HC-SR04 ultrasonic sensor module: voltage in (labeled “Vcc” on my module), ground, TRIG, and ECHO. The TRIG pin will control the transmission of ultrasound. The ECHO pin will be the receiver pin. Use your jumper wires to connect the ground on the module to the ground on the Arduino (red wire near the top of the above picture) and connect the voltage in pin to the +5v pin on the Arduion (white wire near the top of the above picture). Next, use jumper wires to connect the TRIG and ECHO pins to two of the digital pins on the Arduino. These will be the numbered pins on the Arduino that do NOT have the tilde (~) prefix. In my build, I used pin 2 for the TRIG connection and pin 7 for the ECHO connection. Here’s a better picture:


OK we’re all wired up! There are several libraries for interacting with ultrasonic rangefinders. The one I used is probably out of date, but you can download it here.

Note: If you’re having issues with this library, edit Ultrasonic.cpp and Ultrasonic.h. Replace this line:
#include “WProgram.h”

with this:
#include “Arduino.h”

Once you’ve downloaded it, add the entire directory (should contain Ultrasonic.h, Ultrasonic.cpp, keywords.txt, and an examples directory) to your Arduino’s libraries directory. I’m being lazy and have the Arduino install on my desktop, so my library directory is here:

Once that’s done, open up the Arduino IDE. Click on the “Sketch” dropdown menu, click “Import Library” and verify that Ultrasonic is a listed library. If it’s there, you’re in good shape.

Visit and check out the Arduino Sketch provided there. Edit the TRIG_PIN and ECHO_PIN variables to coincide with the pins you used (remember I used 2 and 7 in my case). Connect your Arduino via USB and upload the Sketch. Finally, open the serial monitor (Tools dropdown –> Serial Monitor). You should see readings in inches and centimeters being reported back to the serial monitor.

Awesome – this is our first building block.

Setting up the Audio Output

This step is super easy, unless you’re me and you waste an hour getting stereo wires confused. If you’re using a piezo-electric piece or a simple mono-speaker or headphones, there should be only 2 wires – a voltage in and a ground. Simple. Now, the scrap headphones I had were stereo headphones, which threw me off. If you have a stereo device, you’ll likely have 2 separate insulated sections with 2 types of wiring each. In each insulated wire is one plain copper wire and one painted wire. The copper wires are both grounds and the painted wires are the right and left voltage-in connections. Since we’re just doing simple mono output, go ahead and twist the two copper wires together and twist the two painted wires together. Next, connect the copper ground wires to one of the grounds on the Arduino. For the voltage-in wires, connect them to one of the PWM pins on the Arduino (I used pin 11). Here’s a closeup of the headphone wiring:


Now to test! Conveniently, the Arduino IDE (at least version 1.01) includes a few audio output sketches. Go to File –> Examples –>2. Digial –> Tone Melody. Search the Sketch for the tone() function – change the pin number in each of these functions to coincide with the pin you connected your headphones/speaker to. Now upload the Sketch to your Arduino – if everything is working, you should hear some the melody of “Shave and a haircut, two bits.”

Awesome – now we have two of our building blocks completed.

Cliffhanger! In part 2, we’ll wire up the toggle switch and battery, as well as write the code to combine the rangefinder and the headphones to complete “The Audible Eye.”

%d bloggers like this: