Pocket-Sized Ultrasonic Ruler

by bergerab in Circuits > Sensors

57486 Views, 732 Favorites, 0 Comments

Pocket-Sized Ultrasonic Ruler

539bc96d26ece2a0ca0000b6.jpg
539bcaf626ece2e5a8000012.jpg
539bcc1e26ece2df3c000002.jpg
539bca3a26ece2e9a4000102.jpg
539cc19826ece23464000080.jpg

Today everything is digitalized. So why not make a digital ruler? Using this pocket-sized ultrasonic ruler, you can simply point at any object, click a button, and the distance will be displayed on the 8 LED display. And you don't have to pay hundreds of dollars, like most commercially available ultrasonic measurers. This ruler is the smallest (5cm by 7cm) and cheapest (about 5 USD) ultrasonic measuring device available today.

Although the ultrasonic range sensor is widely used, I haven't seen many DIY devices that simply act as rulers. Its main application seems to be in robotics. However, in robotics typically the precision of the sensor is not fully used. I found that this sensor is precise enough to make a ruler out of it. This prototype is accurate to +/- one centimeter, which is great for quick measurements and can be more efficient than a physical ruler.

Parts

539bd7c726ece2e5a8000022.jpg
539cc01426ece22e120000b8.jpg
539cc02f26ece2df3c0000d1.jpg

You will need these parts:

-Attiny85 (with socket)

-74hc595 Shift Register

-7805 Voltage Regulator

-HC-SR04 Ultrasonic Range Sensor

-Eight 330 Ohm Resistors

-One Tactile-Switch Button

-One Two-way Slide Switch

-Eight LEDs

-One Indicator LED (with 2k resistor)

-Perfboard (5cm by 7cm)

-9v Battery (with connector)

You will need these tools:

-Computer

-Soldering Iron (with rosin)

-Another Arduino (for programming attiny)

-Hot Glue Gun

You will need these skills:

-How to program an attiny

-How a 74hc595 works

-Basic arduino programming skills

Pre-Making (Planning)

539cbfc226ece22e120000b7.jpg
539cbfe626ece262590000bd.jpg

Before we get into the schematic, lets go over exactly what we will be making. This step is essential since there are several changes you may want to make to this design before even breadboarding the circuit. My design will use the following:

1. A eight LED binary display (controlled with a shift register)

2. 9v Battery

3. Will read a distance measured in CENTIMETERS

The "binary display" is basically what it sounds like. The value from this measuring device will be displayed in binary. If you feel that this is a problem, you could replace the binary display with a 7-segment display or an lcd. However, I personally like the style of the binary display and it helps me to be more fluent in reading binary which is why I chose it. (This DOES limit your distance to 255 though)

I used a 9v battery since I love how easy it is to interchange 9v batteries via their connectors; however, 2 or 3 AA or AAA batteries would give you a longer battery life. Or to make this even more portable you could use coin batteres (such as a 2032).

Once you have given these issues some thought we can move onto breadboarding the circuit!

Prototype the Prototype (Breadboarding)

539bde2626ece2be50000006.jpg
539bde6026ece2be50000007.jpg
539bde9526ece2e5a8000028.jpg
539bdeba26ece2df3c000013.jpg

Lets build the circuit on a breadboard before we think about making anything on perfboard. Be sure to check out the next two steps for the schematic and code. As I said in the first step, I expect that you already know how to program an attiny and how a shift register works.

As a reference you can see the pictures attached to this step, since it is the real circuit; however, it is rather hard to see with all the wires and where they go.

Once you are finished, be sure to keep your breadboarded circuit together since we still have to test its measuring capabilities and it is nice to have it around for when we solder!

Schematic

DigitalRuler_schem.png

In the attached picture you will see the schematic I made for this circuit. For simplicity I'll explain it in three parts:

1. Voltage Regulator

2. The 74HC595 and LEDs

3. The HC-SR04

The circuit for the voltage regulator is straight forward. All you have to do there is connect the positive terminal of the battery to the VIN (Voltage IN) and the GROUND to the negative terminal. (Be sure to connect a two-way switch before as an ON/OFF switch). You may add two capacitors to smoothen out the current through the voltage regulator, but that is not necessary in this circuit.

For the 74HC595, connect the clock line to attiny's physical pin 5 and the data line to pin 6. Then all the outputs of the shift register to the LED's positive leads (via 330 ohm resistors). For the "latch" pin on the shift register, we are going to connect a button. This is so that when the user wants to know the distance, it will be latched out when the button is pressed. (It saves us pins on the attiny). So we will attach a button (which is attached to ground via a 10k ohm resistor) which when pressed is connected to 5v.

The HC-SR04 only has four pins to worry about. Connect the ground to ground and VCC to 5v. Then connect the TRIG pin to the attiny's physical pin 7 and the ECHO pin to pin 3.

When you have finished implementing the circuit in this schematic, you can upload the code shown in the following step!

The Code

539cab3d26ece2cc5800002d.jpg

The program for this circuit is quite small and simple. I'm not going to take the time to explain how the code interacts with the HC-SR04 since it has been done many times before (give it a google search), but I'll go over it briefly.

Basically, all the code does is every 500 milliseconds, the distance between the HC-SR04 and an object infront of it is shifted out to the shift register via the data and clock pins attached to the attiny85. When the user presses the button on the device, they are actually activating the "latch" on the 74hc595. This illuminates the need for attaching the latch pin to the attiny and attaching a button to the attiny85. Some good ol' discrete logic!

The code is attached to this step below feel free to use it anyway you'd like.

Testing (How to Read Binary)

539ca3b726ece2ea5d000022.jpg
539ca3db26ece2d27300002c.jpg
539ca41826ece2bb70000051.jpg

Before we think about soldering a final implementation of our circuit, lets make sure it is accurate. To measure, I taped a tape measure to the ground and checked if the number on the ultrasonic ruler matched the values on the tape measure. Keep in mind, the ruler may be off by + or - one centimeter. But this is expected, so don't be worried.

For those of you who are not familiar with binary:

As I mentioned before our device will read out values in binary. Don't worry if you do not know how to read binary since it is easy.

So... we have eight LEDs here. Lets call each LED a "bit" for now. And lets name the "bit" closest to the HC-SR04 is the Most Significant Bit (MSB). Now I'm going to assign each of these "bit"s a value. The MSB will have a value of 1 (2 to the power of 0), and each bit to the right of that will be the following: 2, 4, 8, 16, 32, 64, 128. Whenever an "bit" is ON just add its value to the answer . Now lets think of these "bit"s as LEDs again.

Lets read a value with the ultrasonic ruler so that some LEDs become lit. In the first attached picture on this step, you see that the 6th LED is ON. So lets just see what value the 6th LED has and add it to our answer. As I mentioned before, the value for the 6th "bit" is 32. 32 + 0 = 32. So our ruler is telling us that it is 32cm away from an object. If this is still a foggy idea to you, there are plenty of resources online on binary.

Planning the Perfboard

539be05926ece263e3000002.jpg
539be03626ece2e9a400011a.jpg

"Planning makes perfect!". Well that's not really how the phrase goes... but I know planning makes a great perfboard layout! So before we solder lets check out how we can use the perfboard space to make the most useable design. For my layout, I didn't have all that many options. The main concerns for laying out this project on perfboard are:

1. Having space for one row of 8 LEDs (for the binary display)

2. Ensuring the HC-SR04 can face outwards straightly

3. Basic component placement (finding a good place for the 74hc595 and attiny85)

Once you have met those guidelines for your board you are all set to begin soldering!

Soldering

539cad4326ece2ea5d00002b.jpg
539cadc526ece23464000077.jpg

Time to put the circuit together one last time and lets make sure you don't have to fix it later. While soldering be sure to:

-Keep all ICs and LEDs flush against the perfboard.

-Make sure no resistor leads are able to create any shorts (hot glue helps for this)

-Refer back to the schematic often. I often keep my breadboarded circuit close by to make sure I don't misread anything.

Once you are finished you may want to go back to the "Testing" step and make sure your device is returning the proper values. If it is we can move on to the next step!

A Case (Optional)

539cbd9c26ece2bb7000006f.jpg
539cbd8226ece22e120000b5.jpg

Finally, we can finish our device by creating a case. I decided to leave my device case-less, since like most people I don't have a 3d printer or laser cutter or any other sort of CNC. However, if you do have any of those tools, I'd love to see what kind of cases you can come up with.

If you are looking to make a simple case without any expensive tools, I usually make a small acrylic back panel for my "pocket-sized' projects. Simply cut a piece of acrylic to the dimensions of your perfboard, and screw it in as a back panel.

Measure Stuff!

539cc32526ece2df3c0000d7.jpg
539cbeb026ece262590000bb.jpg
539cbec926ece2cc5800003d.jpg

Now you can put away all those old rulers and tape measurers and enter the electronic world of measuring! Next time you are asked to take a quick measurement, all you have to do is click a button instead of searching for those old measuring tools. I hope you learned crafty ways to use the 74HC595, attiny85 and the HC-SR04. If you think this instructable is worthy, give me a vote for either the Epilog, Battery Powered, or Sensor Contests! Thank you for your interest in my project!