Picture of DIY 360 Degree SODAR Device
First off, why did we decide to call this thing SODAR? SOnic Detection and Ranging, or SODAR, is a lot like SONAR and RADAR. However, we don't feel comfortable calling it SONAR because we have no desire to use it for navigation and we aren't under water. Also, it's definitely not RADAR as we are using ultrasonic pulses, not radio waves to find objects. 

With the technicalities out of the way, here are the project's objectives:
 1) To create a freely rotatable SODAR system that can continuously detect objects
 2) To create a UI that displays objects similarly to radar
 3) To make it as portable as possible

To accomplish objective #1, we need a way to prevent wires from tangling while the motor spins. There are two ways that we thought would be relatively easily implementable. The first method would be to use two Arduinos and transceivers for a wireless transmission of data from the spinning platform to the computer for display. The other method would be to use something similar to a rotating electrical connection (REC), where the electrical connection would be maintained using a conductive liquid at the intersection. 

While it seems to go against objective #3, we decided to go with the rotating electrical connection idea. This is mostly because we didn't know if it'd work and wanted to try something new. On top of this, commercial slip rings are upwards of 20 dollars (price found by ellisgl) and we wanted to see how hard it would be to make a reliable REC. In our project, we are using a vinegar-salt solution as an electrical conductive liquid because it is functional and inexpensive.

Future Work Suggestion:

Use wireless transceivers so the project can be placed in one area and send data to the laptop in another area.


Electrical circuit designer/builder extraordinaire: intensePancake
Remove these adsRemove these ads by Signing Up

Step 1: Get Materials

Non-electrical materials:

1) PVC couplings - 2", 3", and 4" diameter
2) PVC Bushing - 1"X3/4"
3) Household Goop adhesive (water-proof)
4) Gorilla glue adhesive
5) Elmer's glue adhesive
6) 12" x 12" commercial vinyl tile
7) 6" diameter cylindrical styrofoam
8) Balsa wood: 1/2"x1/2"x36", and 3/8"x3/8"x36"
9) Fun tack
10) Coupler (we used a pen body)
11) Extra cardboard (from packaging, etc)
12) Clear tape
13) White vinegar
14) NaCl
15) 3/4" Dowel

Electrical materials:

1) Arduino Uno board
2) Parallax PING))) Ultrasonic Distance Sensor
3) Stepper motor
4) SN754410 H-Bridge motor driver
5) LM7805 5V voltage regulator
6) 1kΩ resistor (1)
7) 100μF electrolytic capacitor (1)
8) 100nF capacitor (1)
9) Perforated board (1)
10) 9V batteries (2)
11) 9V battery connectors (2)
12) alligator clips (2)
13) connection wire
14) soldering iron and solder
15) solderless breadboard

PVC sidenote: We bought 4 PVC pieces thinking we would need 3 spaces for liquid electrical conductors (ground, power, signal), but we found that our vinegar-salt solution couldn't transfer 5V to the sensor, so we only ended up using two sections and put a 9V on the spinning platform.

Step 2: Cutting and Drilling

Picture of Cutting and Drilling
We are writing these instructions the same way we made the SODAR but this is a reminder that we only ended up needing 3 PVC pieces.

PVC editing:

Using a miter box, saw the PVC so that all 4 PVC pieces are the same height. In our scenario, that would be approximately 1 & 3/8" in. Afterwards, level the PVC bases with coarse grain sand paper so that it would be flush against the tile.

Tile editing:

Cut a 6" x 6" piece off to use as a base for the PVC. From the center of the piece, mark the outer edges of the 4 PVC pieces with a compass. Then drill a central hole atleast 5/16" and three holes for the wires at 1/16" (one hole per section).

Step 3: Gluing: PVC to Base & Balsa to Styrofoam

Picture of Gluing: PVC to Base & Balsa to Styrofoam
Secure the PVC

With the goop, glue wires with stripped ends into the 1/16" holes that were drilled into the tile. Glue these so that about an inch of exposed copper is above the tile and at least a foot of sheathed wire protrude below. Afterwards, apply an even, thick layer of Household Goop on the bottom of the PVC pieces and secure them to the 6" x 6" tile. Use the outlines drawn in the previous step for proper placement. Make sure that each wire is only in its own section (to prevent shorts in the circuit) and that there are no gaps in the glue that liquids could pass through (and short the circuit). Let the goop dry as described in the instructions. 

Secure the styrofoam

Find the center of the styrofoam with a ruler and poke a hole through the middle with a pin. This pin will act as a guide for centering the coupler. In our scenario, we dug through our pens searching for a pen body that fit somewhat snugly to the stepper motor shaft. Once the coupler is centered on the styrofoam, secure 4 6" pieces of 3/8" x 3/8" balsa wood around the coupler with Gorilla Glue. Do not glue the coupler into the center yet. The balsa wood design is shown in the picture.

Note: You may want to clamp the balsa wood down or put something flat and heavy on top of it to prevent the Gorilla Glue from expanding in such a way that the balsa wood is not level. Also, since you will be putting the coupler into the center of this later, be careful not to use too much Gorilla Glue or risk filling the center piece when it expands.

Warning: There are a good amount of strong adhesives out there that will eat through styrofoam (think napalm-like reaction). We first tried adhesion with the household goop and, needless to say, we had to go buy a new 6" styrofoam piece.

Step 4: Test for Water-Tight Seal

Picture of Test for Water-Tight Seal
Fill the sections with water, looking for any leaks. If you want to, you can fill all three and then put a drop of food coloring in each looking for cross bleeding. In our scenario, we did this step after Step 5, but a leak would be much less damaging if found before that step so we recommend doing the test at this point.

Step 5: Add Lower Platform

Picture of Add Lower Platform
With the upper platform flipped so the tile is on top, place the stepper motor shaft into the center hole. Cut eight 3" long 3/4" diameter dowel pieces as spacers between the upper and lower platforms. Using Goop, glue four of the pieces so that the motor is stabilized. Glue the other four farther away from the center so that the weight is more evenly displaced. Glue a second 6" x 6" piece of the tile to the bottom of this and let it dry. It is best to have the motor securely flat against the bottom tile.  However, if you don't want glue on the motor (like us), and lift it, you run the risk of having to put small spacers to level is after everything dries (like us). The picture shows the piece after this step with the uncut coupler (a pen with fun tack).

Note: An alternative to this step would be to not have the innermost PVC piece (since only three are needed), and instead have the motor up, level with the PVC on the initial tile base.

Step 6: Binding Bottom to Top

Picture of Binding Bottom to Top
Cut the coupler:

Measure the length of coupler (pen) that you want to use, including a gap between the PVC and balsa wood. In our project, the gap was 1/2". 

Binding the pieces:

Add Gorilla Glue to the center of the styrofoam, between the 4 balsa wood pieces. Place the styrofoam upside down so the balsa wood is facing up and put spacers between the balsa wood and PVC (we used 3" x 1/2" x 1/2" balsa wood pieces). After securing the coupler to the stepper motor shaft, place it on top of the styrofoam. The weight of this piece will prevent the expansion of the Gorilla Glue from tilting the styrofoam relative to the coupler.

Step 7: Downloading Code

Picture of Downloading Code
Arduino, Processing, and Our Code

To control the SODAR device, the Arduino must be correctly programmed, and the computer must communicate with it through the serial port. We have written Arduino code and Processing code to do just that, and it's all available at our GitHub repository.

Stepper library

In order to get the required angular functionality from the stepper motor, we have made some custom additions to the Arduino stepper library. The updated library supports all of the same functions as the default stepper library. It is included in the libraries/Stepper directory in our repository. Just find the libraries/Stepper directory that Arduino uses and replace it with the new one.

NewPing library

For smooth operation, we also implemented interrupt-based PING sensor code using the NewPing library, available for download here. Download this and place it in the libraries directory of your Arduino sketchbook.

Note: The Arduino code must be uploaded to the board before running the Processing UI because the UI takes control of the serial port.

Step 8: Controlling the Stepper Motor

Picture of Controlling the Stepper Motor
An Arduino Uno was used to control the stepper motor. Follow the schematic to connect the Arduino to the motor driver, and the driver to the stepper. The motor can be driven by a 9 volt battery, and our current measurements show us that battery life is about 1.5 hours of continuous use.

The "GND" and "PING))) Signal" wires are the same wires that were glued through holes in the tile in Step 3. These are for communication between the Arduino and the PING sensor. For an easy connection, put alligator clips on these wires, and use them to finish the connection. Now, one end of these wires should be in the vinegar-salt solution chamber, and the other end should have an alligator clip on it.

After building this circuit, you should be able to control the motor with the Arduino Stepper library.

Step 9: Connecting the PING))) Sensor

Picture of Connecting the PING))) Sensor
Building the circuit

Follow the schematic to build the PING Sensor power supply circuit. Solder it together on a perforated board for stability. This circuit will go on top of the rotating platform, and will supply a constant 5 volts to the sensor. The capacitors are there to stabilize the input and output and minimize electrical noise.

The two wires that lead into the circuit, "GND" and "PING))) Signal", must be long enough to make it through the styrofoam and into the salt-vinegar solution below. For us, they needed to be about 7 inches long. When in doubt, though, it's always better to cut them long and adjust them later.

Mounting the board

Once this circuit is completed, place it on top of the styrofoam platform. You may need to angle the sensor upward so that it doesn't only see the platform. We secured the circuit board to the styrofoam with extra pieces of wire that we stuck into the styrofoam. These weren't electrically connected to anything. We also made a 9V battery holder from a piece of cardboard and clear tape, and glued it to the styrofoam with normal Elmer's glue to keep it there.

Step 10: Final Construction

Picture of Final Construction
Vinegar-salt solution

Add salt into about one cup of white vinegar, stirring constantly, until the solution is saturated (no more salt will dissolve). This liquid can conduct electricity. Pour it into the PVC chambers to an acceptable height. There needs to be enough to touch both wires in each chamber as it spins. There should be no leakage, especially after testing in Step 4.

We noticed that when a current was running, many bubbles formed at the wire in the vinegar-salt solution due to hydrolysis reactions.

Note: When pouring the solution into the chambers, the rotating platform should probably not be attached.

Reattaching the platform

If your coupler is a pen (like ours) or a similarly shaped object, there is likely a gap between the inner walls of the coupler and the motor shaft. To alleviate this problem, we used fun tack to secure the coupler. To do this, put some fun tack into the bottom end of the coupler before placing it back on the motor shaft. Slowly push the coupler onto the motor shaft, possibly holding it with needle-nose pliers, until there is about a 1/2" gap between the PVC and the balsa wood.

Connecting through the vinegar-salt solution

In Step 9, we made the signal wire and ground wire coming out of the PING sensor circuit long. Guide those wires through the styrofoam into their respective chambers so the exposed ends are in the vinegar-salt solution. The integrity of this connection must be maintained throughout rotation of the platform, so make sure enough wire is touching the solution.

Step 11: Final Product

Picture of Final Product
Four Little Things

1) Connect the Arduino to your computer through a USB cable.
2) Program the board with the Arduino code from our GitHub repository.
3) Connect both 9V batteries to the battery holders.
4) Start the Processing code.

You are now running a portable SODAR device capable of detecting objects up to 300cm away in any direction. Congratulations!
1-40 of 50Next »
BrendaC73 days ago

can someone compile all the code into one file because I cannot do so effecively and link it to github etc.

John1353 months ago


Is there anyway to use HC-SR04 sensor instead of ping? I can't seem to find it in my country and importing it costs around 65$

burstolava (author)  John1353 months ago

There would be some changes to the project you would have to make because the HC-SR04 looks to be a 4 pin sensor instead of 3 pin. But the NewPing library supports the HC-SR04, so you should be able to use it.

hello, am making now the sodar system as my final project and its almost finish with using a serial communication the uart to send and receive the data wireless. i want to ask u about the two pins that going into pvc, are they the echo and trigger or the 5V and gnd ?

thank you and ur help is really appreciated

burstolava (author)  mohammad.s.tarifi4 months ago

The circuit diagrams in steps 8 and 9 should be helpful for your question. Specifically, the PING signal and ground signal are the two pins that project into the PVC apparatus. Instead of a 5V wire into the PVC, we put a battery on the top of the styrofoam and connected it to the PING sensor. Hopefully this helps!

good job burstolava ;)

azwarc6 months ago

what code arduino???

Dill pickles8 months ago
Will your sodar system operate upside down ? Also , if I do use wireless transceivers how far away can the system be from the laptop before it stops producing information on the laptop's screen ?

well done

this is definitely going to my future DIY projects list.

i will make it and post it when im done and probably going to do both the REC and and try it with wireless communication

Awesome! Good luck and please post back here when you're up and running...or if you have any questions!

hi how are you i need your help i want to do your radar as my project can u please me all the details regarding to it plz plz plz i shalll be very thankfull to yo here is my yahoo email address and as well as my yahoo profile id plz help me.



hi how are you i need your help i want to do your radar as my project can u please me all the details regarding to it plz plz plz i shalll be very thankfull to yo here is my yahoo email address and as well as my yahoo profile id plz help me.



k_byte11 months ago
hey..this is indeed an awesome project.. I am currently working on something similar for my project but I am making use of an ATMEL microcontroller. Any advice as to my project? also making use of a stepper motor for its rotation. although there isn't an connection with a computer. Just a LCD display to show the number of objects detected. Do u mind also sharing your email address so I can contact you more often and tell you more about my project.
burstolava (author)  k_byte11 months ago

Sounds like a good idea. We used an Arduino, which has an Atmel microcontroller. You'll need to find a way to program your microcontroller and be sure to use the correct pin-out for that specific microcontroller. As for your LCD, you can use the Arduino LCD library as a reference. Although you won't be using an Arduino, the LCD code will be very similar. Most of our Arduino code for the sensor and motor control is directly applicable but the Processing code obviously won't work for your application.

k_byte burstolava11 months ago
thanks a lot..
jmance112 months ago

Could you help me with this:

I assemble it all and upload sodar.ino u Arduino, and open UI in Processing. As soon as I upload sodar.ino the stepper motor starts spinning. When I press Run in Processing it shows error: "Error opening serial port COM6: Port busy"

This is weird because my Arduino connected to COM11...

Any ideas? Thank you!

burstolava (author)  jmance112 months ago

Also, if you would prefer the motor to not automatically start spinning when the code is uploaded to the Arduino, you can initialize the stopMotor boolean to true in the sodar.ino file.

burstolava (author)  jmance112 months ago

Hey! So it sounds like your error might be due to this line. There are two ways that we could think would easily fix this:

1) Disconnect all USB connections and connect the Arduino first.

2) Change the referenced index of the Serial.list() (eg Serial.list()[1] or Serial.list()[2] ...) until you locate the correct index.

Jan_Henrik1 year ago


Have you figured out a way to make it wireless yet?

burstolava (author)  youngdavid9331 year ago

We haven't been working on making this project wireless. We saw that as a potential next step for those who were interested and wanted to build upon the project. Two of the possible ways to go about this would be using a bluetooth shield or radio transceivers for the communication between the sensor and the terminal.

tomega31 year ago

Hi, Great instructable. I will try to get it running. The processing code is excellent.

I found a website that shows using a stepper motor and an adafruit slip ring connected via gears. I will try to build it.

see http://curantilrobot.wordpress.com/2013/08/04/rang...

If anyone can help with the cutting out of the mounting frame pieces I would really appreciate the help.

can i use this sensor in this project ???
burstolava (author)  parameshwarnp1 year ago

The NewPing library doesn't document whether or not it supports that sensor specifically. A major concern with it is that it has a minimum input pulse width of 10 microseconds, while it's only 5 microseconds for our ping sensor. From looking at the NewPing source code, it seems like it'll work for sensors with an input pulse width less than 18 milliseconds, but because it's not specifically mentioned, there is a chance it may not work.

That being said, it's probably worth a shot to try out our code as written. It looks like it'll work, but we can't be completely sure. If you're set on using that sensor and it doesn't work, you could always rewrite that part of the code specifically for your sensor. You'd probably learn something from doing that.

can i use L293D instead of SN754410 ???
burstolava (author)  parameshwarnp1 year ago
As long as it is a Quadruple Half-H Motor Driver, it will work for this project. However, you should compare the datasheets of the L293D and SN754410 to see if there are any differences in how the connections have to be set up. If there are, the circuit you have to build won't be exactly the one we built, but it should work.
its showing error in the code:
'NewPing' does not name a type
plz help
burstolava (author)  parameshwarnp1 year ago
This is probably occurring because the compiler can't find the NewPing library. After downloading it, make sure to extract the contents into the general Arduino sketchbook directory. When we installed the Arduino environment, a "libraries" folder was created inside the sketchbook directory. This is where you would want to put the NewPing library.
thanks , it worked . but i'm getting another error :
'class Stepper' hs no member named 'getAngle'
what should i do ??
burstolava (author)  parameshwarnp1 year ago
This is probably happening because the compiler is trying to use the default Stepper library instead of our editted one. We altered the Stepper library to support some basic angle functions that we wanted to use in this project. As stated in Step 7, you should replace the libraries/Stepper directory with the Stepper folder from our repository. This libraries/Stepper directory should be in the Arduino program files (where the executable is for the actual Arduino program). As a side note, we did not alter any of the default functions in the library, so you do not have to worry about our version messing up your other projects that involve the Stepper library. If this does not work, please let me know.
its working , 0 errors . thankyou
amartin531 year ago
is there a way to extend the range, say to 20 m?
burstolava (author)  amartin531 year ago
Since the PING sensor's maximum range is 3m, you'd have to either find another ultrasonic distance sensor with that range or buy ultrasonic transducers with that range and build a circuit that uses them. Also, you'd have to change the Arduino code to interface with your new sensor. Finally, you may want to consider slowing down the rotation speed to get more accurate measurements. But yea, 20m is definitely more useful than 3m.
Raphango1 year ago
Great project man! Congratulations!
rluquett2 years ago
nice project! yoi should upload a video shoing it working though
I would love something like this for riding in a velo @ night so I can tell just how far behind me a car is before they even get there.
zomfibame2 years ago
I love the home made REC "slip ring substitution". Too cool.
Absolutely amazing instructable, I was wondering if this could be used on a small LCD screen display rather than a laptop. Would anyone know how to accomplish this?
burstolava (author)  notnowmyheadhurts2 years ago
We aren't that familiar with programming small LCD screens, but if you're planning to use something like a tft screen from arduino, you could use their tft library. You'd have to rewrite the visualization code that we wrote in processing. But the arduino tft library has many similar functions to what we used in processing. One plus is that you wouldn't need to use serial communication like we did. Sounds like a great addition, though. Good luck!
daliad1002 years ago
Nice project, You could try using an audio jack and socket as your connector as you aren't sending much power through it and the sensor kicks out either 5V or 0V so a bit of noise shouldn't matter.
1-40 of 50Next »