SRF02 Ultrasonic range finder
Technical Specification
Serial Mode
For I2C mode click here
Serial Communication
To use the SRF02 in Serial mode, make sure the Mode pin is connected to 0v
Ground.
Serial data is fixed at 9600 baud 1 start, 2 stop and no parity bits. Serial
data is a TTL level signal - It is NOT RS232. Do not connect the SRF02 to an
RS232 port - you will destroy the module! If you would like to connect the SRF02
to your PC's RS232 port, you must use a MAX232 or similar device. It can also be
used (in I2C mode) with the USBI2C module to make a self powered USB ranger, see
the examples page for details. Many small controllers such as the OOPic, Stamp
BS2p, PicAxe etc. as well as a wide variety of micro-controllers have serial
ports. To communicate with the SRF02, you simply need to send two bytes, the
address of the SRF02 (factory default is 0) and the command. The default shipped address
can be changed by the user to any of 16 addresses 0, 1,
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, or 15, therefore up to 16 sonar's can be
used.
Connections
The connections to the SRF02 are shown below. The "Mode" pin must be
connected to 0v ground to place the SRF02 in serial mode. The Rx pin is data
into the SRF02 and should be connected to the Tx pin on your controller. The Tx
pin is data out of the SRF02 and should be connected to the Rx pin on your
controller. If you're using multiple SRF02's, you can connect them all up to the
same serial port on your controller. Connect the Tx from your controller to all
the Rx pins on the SRF02's and connect the Rx pin on your controller to all the
Tx pins on the SRF02's. This works because the Tx pins are high impedance (just
a weak pull-up to 5v), except when actually sending data. Just make sure all the
SRF02's are programmed to different addresses.
Commands
To send a command to the SRF02, you need to send two bytes. The first is the
SRF02's address 0 to 15, (0x00 to 0x0F) and then the actual command itself - see
below. The are three commands to initiate a ranging (80 to 82), to produce the result in inches, centimeters or
microseconds. These three commands don't Tx the result back to your controller.
You should wait 70mS and then use command 94 to get the result of the ranging. Another set of three commands
(83 to 85) do the same, but also transmits the result of the ranging back to
your controller as soon as it is available. Together, these six commands (80 -
85) are called "Real" because they perform a complete ranging. There
is another set of six commands (86 - 91) called "Fake". They are the
same as the "Real" commands except that they do not send the 8-cycle
burst out. These are used where the burst has been transmitted by
another sonar. It is up to you to synchronize the commands to the two sonar's. There is
a command (92) to transmit a burst without doing the ranging.
Command 93 is used to get the firmware revision of the SRF02.
Command 94 gets returns two bytes (high byte first) from the most recent
ranging. Put them together to make a 16-bit result.
Commands 95 and 96 are used by the Autotune algorithms - See the Autotune
section below for details.
Command | Action | |
Decimal | Hex | |
80 | 0x50 | Real Ranging Mode - Result in inches |
81 | 0x51 | Real Ranging Mode - Result in centimeters |
82 | 0x52 | Real Ranging Mode - Result in micro-seconds |
83 | 0x53 | Real Ranging Mode - Result in inches, automatically Tx range back to controller as soon as ranging is complete. |
84 | 0x54 | Real Ranging Mode - Result in centimeters, automatically Tx range back to controller as soon as ranging is complete. |
85 | 0x55 | Real Ranging Mode - Result in micro-seconds, automatically Tx range back to controller as soon as ranging is complete. |
86 | 0x56 | Fake Ranging Mode - Result in inches |
87 | 0x57 | Fake Ranging Mode - Result in centimeters |
88 | 0x58 | Fake Ranging Mode - Result in micro-seconds |
89 | 0x59 | Fake Ranging Mode - Result in inches, automatically Tx range back to controller as soon as ranging is complete. |
90 | 0x5A | Fake Ranging Mode - Result in centimeters, automatically Tx range back to controller as soon as ranging is complete. |
91 | 0x5B | Fake Ranging Mode - Result in micro-seconds, automatically Tx range back to controller as soon as ranging is complete. |
92 | 0x5C | Transmit an 8 cycle 40khz burst - no ranging takes place |
93 | 0x5D | Get software version - sends a single byte back to the controller |
94 | 0x5E | Get Range, returns two bytes (high byte first) from the most recent ranging. |
95 | 0x5F | Get Minimum, returns two bytes (high byte first) of the closest range measurable - see Autotune section |
96 | 0x60 | Force Autotune Restart - same as power-up. You can ignore this command. |
160 | 0xA0 | 1st in sequence to change I2C address |
165 | 0xA5 | 3rd in sequence to change I2C address |
170 | 0xAA | 2nd in sequence to change I2C address |
LED
The red LED is used to flash out a code for the I2C address on power-up (see
below). It also gives a brief flash during the "ping" whilst ranging.
Changing the SRF02 Address
To change the address of the SRF02 you must have only one sonar connected.
Write the 3 sequence commands in the correct order followed by the address.
Example; to change the address of a sonar currently at 0 (the default shipped
address) to 5, write the following to address 0; (0xA0, 0xAA, 0xA5, 0x05
). These commands must be sent in the correct sequence to change the I2C
address, additionally, No other command may be issued in the middle of the
sequence. The sequence must be sent as four separate commands to the current
address of the sonar. i.e. 0x00, 0xA0 then 0x00, 0xAA, then 0x00, 0xA5 and
finally 0x00, 0x05. When done, you should label the sonar with its new address, however if you
do forget, just power it up without sending any commands. The SRF02 will flash
its address out on the LED. One long flash followed by a number of shorter
flashes indicating its address. The flashing is terminated immediately on
sending a command the SRF02.
Address | Long Flash | Short flashes | |
Decimal | Hex | ||
0 | 00 | 1 | 0 |
1 | 01 | 1 | 1 |
2 | 02 | 1 | 2 |
3 | 03 | 1 | 3 |
4 | 04 | 1 | 4 |
5 | 05 | 1 | 5 |
6 | 06 | 1 | 6 |
7 | 07 | 1 | 7 |
8 | 08 | 1 | 8 |
9 | 09 | 1 | 9 |
10 | 0A | 1 | 10 |
11 | 0B | 1 | 11 |
12 | 0C | 1 | 12 |
13 | 0D | 1 | 13 |
14 | 0E | 1 | 14 |
15 | 0F | 1 | 15 |
Take care not to set more than one sonar to the same address, there will be a bus collision and very unpredictable results.
Note - there is only one module address stored in the SRF02. If
you change it, the equivalent I2C address will also change:
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F Serial addresses
0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE, 0xF0, 0xF2, 0xF4, 0xF6, 0xF8,
0xFA, 0xFC, 0xFE Equivalent I2C addresses
AutoTune
The SRF02 does not require any user calibration. You power up and go right ahead
and use the SRF02.
Internally, there are tuning cycles happening automatically in the background.
After the ultrasonic burst has been transmitted, the transducer keeps on ringing
for a period of time. It is this ringing which limits the closest range the
SRF02 can measure. This time period varies with temperature and from transducer
to transducer, but is normally the equivalent of 11 to 16cm (4" to
6"), a bit more if the transducer is warm. The SRF02 is able to detect the
transducer ring time and move its detection threshold right up to it, giving the
SRF02 the very best performance possible. On power up, the detection threshold
is set to 28cm (11"). The tuning algorithms quickly back this right up to
the transducer ring. This happens within 5-6 ranging cycles - less than half a
second at full scan speed. After this the tuning algorithms continue to monitor
the transducer, backing the threshold up even further when possible or easing it
out a bit when necessary. The tuning algorithms work automatically, in the
background and with no impact on scan time.
The minimum range can be checked, if required by sending command 95. This will
return the closest measurable range in uS, cm or inches, the same as the range. It is also
possible to make the SRF02 re-tune by writing command 96 but you can ignore this
command. It is used during our testing.