Introduction: Animated Sonic Ruler / Parking Sensor Using Arduino

## UPDATED WITH CODE, SCHEMATICS AND PARTS WITH LINKS ##

= Introduction =

Hi everyone! This is my first instructable!

After reading hundreds of instructables, I decided to make one myself!

As a brazilian, my mother language is portuguese. So, please be patient with my english.

= What did I make? =
I have built an animated Sonic Ruler using an Arduino, an HC-SR04, a buzzer, two resistors, some wires and a LCD Display. I also used an expansion module for Arduino (optional) and a breadboard. It had a very defying coding and debugging, but now I see it did worth the effort!

The mounting should be easy if you have already mounted some gadgets on breadboards, so any Arduino enthusiast can actually build it! Even begginers!

= Why did I make it? =

There are many projects so far using a HC-SR04 as a measurement gadget, but I have seen none using an animated LCD and a buzzer integrated. This one got style and personality!

My project can also be used as a parking sensor. Just by adding some meters of wire you can actually install this on your vehicle to make sure you'll never hit that wall again.

Step 1: Gathering Materials...

Total cost (suposing you already have an Arduino - do the math) = LESS THAN 10 DOLLARS!!!

Step 2: Breadboard Mounting and Wiring

    Mount the components using these images as guidelines. The most important thing is to make the connections as follows:

    • LCD VSS pin to ground;
    • LCD VDD pin to +5V;
    • 2K2Ohm resistor: ends to LCD VO pin and ground;
    • LCD RS pin to digital pin 9;
    • LCD R/W pin to ground;
    • LCD Enable pin to digital pin 8;
    • LCD D4 pin to digital pin 5;
    • LCD D5 pin to digital pin 4;
    • LCD D6 pin to digital pin 3;
    • LCD D7 pin to digital pin 2;
    • LCD A pin to +5V;
    • LCD K pin to ground;
    • Buzzer + to 220Ohm Resistor leg and - to ground. The other resistor leg goes to pin 12.;
    • HC-SCR GND to ground;
    • HC-SCR Echo to pin 11;
    • HC-SCR Trig to pin 10; and
    • HC-SCR Vcc to +5V.

    Step 3: Code & Upload

    Here goes the code:

    https://github.com/Raphango/Animated-Sonic-Ruler/blob/master/AnimatedSensor.ino

    And the sounds library used with the code:

    https://github.com/Raphango/Animated-Sonic-Ruler/blob/master/pitches.h

    DO NOT FORGET TO PUT THE SOUNDS LIBRARY IN THE SAME FOLDER OF THE .INO FILE!

    Step 4: Final Thoughts

    At this project you have learned how to use the HC-SR04 and the LCD with Arduino.

    Feel free to make yourself one! And once you make it, why not to make it more permanent, by putting it on a PCB? Why not to embed it in a 3D printed case?

    Use your creativity!


    Thank you for reading!

    Comments

    author
    BurakTutal (author)2015-01-19

    Nice work bro. I will try it soon. I hope I can ((:

    author
    Raphango (author)BurakTutal2015-01-19

    Thanks man! =D

    author
    universiteti (author)Raphango2015-05-23

    Hi , i made same project but first i tried without buzzer now im trying to use the buzzer but i cant find the code . Can you help me .

    author
    Raphango (author)universiteti2015-05-26

    The code piece for using the buzzer is already in the code available. Mind, however, that you should download the "pitches.h" file at the bottom of this instructable in order to make the buzzer work correctly.

    Good luck!

    author
    BurakTutal (author)Raphango2015-04-25

    I made same project. But mine is telling the distance when a block appears in front of the ultrasonic sensor. You can check my project. :)

    https://www.instructables.com/id/Arduino-wtv020-Sd-16P-Talking-Distance-Meter/

    author
    HavocRC (author)2014-02-20

    Excellent!

    author
    qamarsk made it! (author)2016-12-29

    Nice work bro,Its GR8

    REGARDS

    P1.jpgP2.jpg
    author
    idzharA (author)2016-11-19

    how to put the sound library inthe same folder.i dont understand

    author
    Raphango (author)idzharA2016-11-21

    The sounds library is the "pitches.h" file.
    You have to put it in the same folder of the Arduino Sketch (.ino file).

    Any more doubts? =)

    author
    jaskasd (author)2016-04-21

    Mine is saying fora do alcance, what is wrong?

    author
    Raphango (author)jaskasd2016-04-21

    Take a look at this fragment of code:

    if (distance >= 400 || distance <= 0){//Evaluate the distance value.
    lcd.setCursor(0, 0);
    lcd.print("Fora do alcance ");
    lcd.setCursor(0, 1);
    lcd.print(" ");
    }
    else {

    If your sensor gets a measure greater than 400cm or equal to 0cm, the it will show you the "Fora do alcance" text, that means that it's out of range.

    I see two possible solutions for this error:

    1) Check the connections; see if there's any incorrect wiring. You may use a multimeter to check the continuity of the wires. The default value for the "distance" variable is "0" so, if your sensor reading is never updated, it will give you "Fora do alcance " forever.

    2) Check if your ultrassonic sensor is working properly, and if it's receiving enough voltage.

    I hope it helps!

    author
    Wildan PerdanaP (author)2016-03-15

    the sketch not work for me, please help me

    author
    Raphango (author)Wildan PerdanaP2016-03-16

    Did you follow the steps exactly? Can you describe the problem?

    author
    MarianG1 (author)2015-05-08

    Hi, awesome project.
    I am trying to get this project on my car but I'd like to use 6 sensors and a temperature sensor (for replacing "out of range")
    When I tried to add the second sensor everything become slow and doesn't work on real time.
    I can post the code I made if you /anybody can help me please

    author
    MarianG1 (author)2015-05-08

    author
    atambade (author)2015-04-22

    It's so awesome...!!!!!!

    I succeeded in making this.....

    Thank you so much....

    Where will I get the detailed working information and the function of the components???

    author
    Raphango (author)atambade2015-04-23

    Thank you! ^^ All the info I've gathered from the internet: other instructables, google, datasheets, etc.
    A good source for an overall vision at the components is the link to the site where I bought it (DX.com for the HC-SR04 and LCD Display). You'll have to look at the description of the itens.

    And if you really like the subject "Sensors" (what includes the HC-SR04 ultrasonic sensor) you could buy this book (which I have and is very good).

    Happy making and God Bless you!! =D

    author
    araibirshad (author)2015-03-21

    Nice work ! Although if I were to make it for myself , I would get rid of all the extra shiny things and just use it to display the distance and buzz without the use of special characters and custom music. :) Any pointers as to how I would go about doing that ?

    author
    Raphango (author)araibirshad2015-03-31

    LoL! xD

    I just made all these extra shiny things to make the project more fancy... ^^

    So... to get rid of the mario theme just delete this line of code:

    //Plays intro song

    playSong(0,1.30);

    And to get rid of the special charachters, just remove these lines:

    //Each of these "lcd.setCursor" and "lcd.write" are responsible for the drawings.

    lcd.setCursor(10, 0);//This positionates the cursor on the desired slot

    lcd.write(byte(0));//This writes the prefab symbols lcd.write(byte(1));

    lcd.write(byte(4));

    lcd.write(" ");

    lcd.write(" ");

    lcd.write(" ");

    Mind that you might have to adjust the position of the other texts... =)

    author
    radiomqfm.jogja (author)2015-03-14

    Sir, what is the meaning of "1.30" on this sketch: "playSong(0,1.30)". Thx for your answer. Nice project for newbie like me.

    author
    Raphango (author)radiomqfm.jogja2015-03-31

    Thanks! ^^

    Take a look at this piece of code:

    int playSong(int track, float durConst){

    for (int thisNote = 0; thisNote < sizes[track];

    thisNote++) { int noteDuration = 1000/noteDurations[track][thisNote];

    tone(buzPin, music[track][thisNote],noteDuration);

    int pauseBetweenNotes = noteDuration * durConst;

    delay(pauseBetweenNotes); noTone(buzPin);

    }

    }

    Actually, this is the function "playSong". When I invoke this function as in

    "playSong(0,1.30)" I'm telling Arduino to play the "track" number "0" for the 1.30 constant time factor multiplier. The higher the number, the more will last the note.

    Got it? =D

    author
    Fahmee Ahmad (author)2015-02-27

    please.... i need you project, can you show step by step on compile the code

    author
    Raphango (author)Fahmee Ahmad2015-03-31

    First of all, you have to include the "pitches" library (the file is above) with the following command line:

    #include "pitches.h"

    This is the part of the code responsible for the sounds:

    ////Sound notes setupint melody0[] = {NOTE_B3, NOTE_B3,NOTE_B3, NOTE_G3, NOTE_B3,0, NOTE_D4, NOTE_D3};int melody1[] = {NOTE_C6,NOTE_C6,NOTE_C6,NOTE_C6};int melody2[] = {NOTE_C6,NOTE_C6,NOTE_C6};int melody3[] = {NOTE_C6,NOTE_C6};int melody4[] = {NOTE_C6};//Add melodies here, and at the end of the "music" array.int* music[6/*number of melodies + 1*/] = {melody0, melody1, melody2, melody3, melody4 /*,add here*/};////Sound notes durationsint notesMelody0[] = {8,4,4,8,8,8,2,4};int notesMelody1[] = {8,8,8,8};int notesMelody2[] = {8,8,8};int notesMelody3[] = {8,8};int notesMelody4[] = {4};//Add durations of the melodies here, and at the end of the "noteDurations" array.int* noteDurations[6/*number of melodies + 1*/] = {notesMelody0, notesMelody1, notesMelody2 , notesMelody3 , notesMelody4 /*,add here*/};////Sound sizesint sizeMelody0 = sizeof(melody0)/sizeof(int);int sizeMelody1 = sizeof(melody1)/sizeof(int);int sizeMelody2 = sizeof(melody2)/sizeof(int);int sizeMelody3 = sizeof(melody3)/sizeof(int);int sizeMelody4 = sizeof(melody4)/sizeof(int);//Add sizes here, and at the end of the "sizes" array.int sizes[] = {sizeMelody0,sizeMelody1,sizeMelody2,sizeMelody3,sizeMelody4 /*,add here*/};////Tone Function - Plays the toneint playSong(int track, float durConst){ for (int thisNote = 0; thisNote < sizes[track]; thisNote++) { int noteDuration = 1000/noteDurations[track][thisNote]; tone(buzPin, music[track][thisNote],noteDuration); int pauseBetweenNotes = noteDuration * durConst; delay(pauseBetweenNotes); noTone(buzPin); }}

    But what actually plays the tone is this function callback:

    playSong(1,1.30);

    Hope it helps!!

    author
    Fahmee Ahmad (author)2015-02-27

    I just want to make simulation..

    author
    Fahmee Ahmad (author)2015-02-27

    How to make pitches into the code

    author
    mataberks (author)2014-12-13

    this code gives many erors how can i solve it

    author
    Raphango (author)mataberks2014-12-15

    Follow these steps:

    1-Double check the circuit. See if every single piece of the circuit is attached correctly.

    2-Did you download all the files and libraries (including pitches.h)? You'll need it for the correct functioning of the project.

    3- Se if your LCD is compatible with the libraries you've been using.

    If you still can't make it work after all these steps, please post these errors you talk about, so I can help you.

    author
    John135 (author)2014-11-15

    Finally made my own!! Cool project though.. Thanks for sharing it!

    temp_-1399548411.jpgtemp_1059581954.jpg
    author
    Raphango (author)John1352014-11-15

    Awesome!!! xD

    Congratulations!

    It's not ugly! Seriously! =D

    If you really liked the project and do want to make a permanent version of it you could start to think how to put it in a PCB using a barebone arduino.. just an idea to think about! ^^

    author
    John135 (author)John1352014-11-15

    This is just a prototype so it looks ugly :P

    author
    tharindurc (author)2014-09-17

    awesome project thanks for uploading :-P

    author
    Raphango (author)tharindurc 2014-09-19

    Thanks! ^^

    author
    VitalieS (author)2014-09-08

    Hi,i have a problem with code...
    arduino software give me a error:
    int melody0[] = {NOTE_B3, NOTE_B3,NOTE_B3, NOTE_G3, NOTE_B3,0, NOTE_D4, NOTE_D3};
    this is the problem:
    sketch_sep08c.ino:44:21: error: pitches.h: No such file or directory

    sketch_sep08c:60: error: 'NOTE_B3' was not declared in this scope

    sketch_sep08c:60: error: 'NOTE_B3' was not declared in this scope

    sketch_sep08c:60: error: 'NOTE_B3' was not declared in this scope

    sketch_sep08c:60: error: 'NOTE_G3' was not declared in this scope

    sketch_sep08c:60: error: 'NOTE_B3' was not declared in this scope

    sketch_sep08c:60: error: 'NOTE_D4' was not declared in this scope

    sketch_sep08c:60: error: 'NOTE_D3' was not declared in this scope

    sketch_sep08c:61: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:61: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:61: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:61: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:62: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:62: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:62: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:63: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:63: error: 'NOTE_C6' was not declared in this scope

    sketch_sep08c:64: error: 'NOTE_C6' was not declared in this scope

    Please help me!

    author
    Raphango (author)VitalieS2014-09-08

    Did you download the sound library and put it in the right directory?

    author
    VitalieS (author)Raphango2014-09-08

    Sorry,i don't download sound library....put in the right directory where in folder of arduino..or in code...?thanks for you help!
    wait for reply!

    author
    Raphango (author)VitalieS2014-09-08

    You have to put the file in the same folder of your sketch. The line " #include "pitches.h" " at the code does the 'link' between your code and the "pitches.h" file. Be sure to copy and paste the code exactly so you won't have any problem.....

    Let me know if you've managed to make it work! ^^

    author
    sempi (author)2014-02-21

    would love the step by step guide and arduino schematic. awesome project!

    author
    Raphango (author)sempi2014-02-21

    Thank you very much!

    I have just updated it with the code and schematics!

    author
    rgrodziski (author)2014-02-21

    Thank you ! Can I have the schematics of the circuit and the arduino sketch please :)

    author
    Raphango (author)rgrodziski2014-02-21

    Off course!

    I'll post the schematics and the mouting images as soon as I make it.

    For the sketch, I'll post it by the moment I put the schematics in.

    author
    karmons (author)2014-02-21

    buen projecto,me gusta lo de la animación de la distancia :-) el código me gustaría tenerlo

    author
    Raphango (author)karmons2014-02-21

    Gracias!

    Yo créo que en poco tempo tendré un "step-by-step guide".

    Mientras no lo concluo, me ponería muy grato si puede votar en mi proyecto.

    author
    gada888 (author)2014-02-20

    cool project

    author
    Raphango (author)gada8882014-02-20

    Thank you!