Professional Documents
Culture Documents
BUY NOW
HC-SR04 is an ultrasonic ranging module designed for embedded system projects like
this. It has a resolution of 0.3cm and the ranging distance is from 2cm to 500cm. It
operates from a 5V DC supply and the standby current is less than 2mA. The module
transmits an ultrasonic signal, picks up its echo, measures the time elapsed between
the two events and outputs a waveform whose high time is modulated by the measured
time which is proportional to the distance. .The photograph of an HC-SR04 module is
shown below.
HC-SR04 ultrasonic ranging module (Fig1)
The supporting circuits fabricated on the module makes it almost stand alone and what
the programmer need to do is to send a trigger signal to it for initiating transmission and
receive the echo signal from it for distance calculation. The HR-SR04 has four pins
namely Vcc, Trigger, Echo, GND and they are explained in detail below.
2) Trigger: The trigger signal for starting the transmission is given to this pin. The
trigger signal must be a pulse with 10uS high time. When the module receives a valid
trigger signal it issues 8 pulses of 40KHz ultrasonic sound from the transmitter. The
echo of this sound is picked by the receiver.
3)Echo: At this pin, the module outputs a waveform with high time proportional to the
distance.
HC-SR04 Timing diagram
From the timing diagram, you can see that the 40KHz pulse train is transmitted just after
the 10uS triggering pulse and the echo output is obtained after some more time. The
next triggering pulse can be given only after the echo is faded away and this time period
is called cycle period. The cycle period for HC-SR04 must not be below 50mS.
According to datasheet, the distance can be calculated from the echo pulse width using
the following equations.
The ultrasonic module is interfaced to the microcontroller through P3.0 and P3.1 pins.
Port0 used for transmitting the 8 bit display data to the display and port pins P1.0, P1.1,
P1.2 are used for transmitting display drive signals for the corresponding display units
D1, D2, D3. Push button switch S1, capacitor C3 and resistor R9 forms a de-bouncing
reset circuitry. Capacitors C1,C2 and crystal X1 are associated with the clock circuit.
Program.
MAIN: MOV TL1,#207D // loads the initial value to start counting from
RET
ACALL DELAY
ACALL DISPLAY
MOV P0,A // moves digit drive pattern for 2nd digit to P0
ACALL DELAY
ACALL DELAY
ACALL DISPLAY
MOV P0,A // moves the digit drive pattern for 3rd digit to P0
ACALL DELAY
ACALL DELAY
RET
DELAY: MOV R7,#250D // 1mS delay
RET
DISPLAY: MOVC A,@A+DPTR // gets the digit drive pattern for the content in A
RET
DB 06H
DB 5BH
DB 4FH
DB 66H
DB 6DH
DB 7DH
DB 07H
DB 7FH
DB 6FH
END
The first part of the program sets the initial conditions. Port 0 and P0rt 1 are set as
output ports for sending digit drive patterns and digit drive signals respectively. Port pin
3.0 is set as an output pin for sending the trigger signal to the ultrasonic module for
starting transmission and port pin 3.1 is set as an input pin for receiving the echo.
TMOD register of the microcontroller is so loaded that the Timer 1 operates in mode2 8
bit auto-reload mode. Timer 0 of the microcontroller is not used here. In the next part of
the program (loop MAIN) the TL1 and TH1 registers of Timer1 are loaded with the initial
values. TL1 is loaded with the initial value to start counting from and TH1 is loaded with
the reload value. This is how timer 1 in mode 2 works: When TR1 bit of the TCON
register is set the TL1 starts counting from the initial value loaded into it and keeps
counting untill roll over (ie; 255D). When roll over occurs, TF1 flag is set and TL1 is
automatically loaded with the reload value stored in TH1 and the sequence is repeated
until TR1 is made low by the program. The TF1 goes high at the first roll over and if you
want it as an indicator for each roll over, you have to clear it using the program after
each roll over. In the next part of the MAIN loop P3.0 is set high for 10uS and then
cleared to make 10uS triggering pulse. The ultrasonic module issues a 40Khz pulse
wave form after receiving this trigger and the program waits until a valid echo is
received at P3.1. The pulse width of the echo signal is proportional to the distance to
the obstacle and so the next job of the program is to measure the pulse width.
Whenever there is a valid echo pulse at P3.1, the Timer1 starts and it counts from the
initial value to 255 ie: 255-207= 48 counts. Then the counter restarts and accumulator
increments by one for every restart. This sequence is repeated until the echo signal at
P3.1 vanishes (ie; P3.1 goes low). Now the content in A will be equal to the number of
Timer1 reloads which is in fact proportional to the distance. From the datasheet it is
clear that 58uS echo pulse width indicates 1cM distance. When the processor is
clocked by a 12MHz crystal, 58 counts of Timer1 indicates 1cM. That means 1 reload is
equal to 1cM. But here we are letting the Timer1 to count only 48 times before reload
and this is done in order to compensate for the time lags caused by the branching
instructions used for checking the status of P3.0 and P3.1 pins. If this trick is not done,
the individual time lags caused by the branching instructions will be cumilatively added
to the observed pulse width and the range finder will show a reading higher than the
original distance. Some trial and error was required for getting the correct Timer1 reload
value and with the 207D (ie; 48 counts) used here the error was found to be less than
half a centimeter which is quite fine in this context. The next part of the program does
necessary mathematics on the current content in A and displays it as 3 digit readout on
the display.
Notes.
1) The LUT used here was originally made for a common cathode seven segment
display and here we are using common anode displays. The CPL A instruction will just
complement the obtained digit drive pattern and make is suitable for the common anode
scheme. If you have time ,then cook up an LUT for common anode scheme and replace
the current one using it. By this you can avoid the extra CPL A instruction and it is the
correct method.
3) Be careful while handling the Ultrasonic module. There are a lot of sensitive surface
mount devices fabricated on its back side.
4)Go through these articles: Interfacing seven segment display to 8051, Delay using
8051 timer, Software delay routines using 8051.
Tags: ultrasonic rangefinder
Categories:
8051 projects