DR-DO1, DR-DO2 -- Dissolved Oxygen Sensor

1. Introduction
1.1 Specification
DO1 and DO2 have the same functions
-
Applicable environment
- DO1 is for use in ordinary waters.
- DO2 is suitable for seawater.
-
Measuring range: 0-20mg/L, 0--50°C
-
Accuracy: 3%, ±0.5°C
-
Resolution: 0.01 mg/L, 0.01°C
-
Maximum operating pressure: 6 bar
-
Output signal: A: 4-20mA (current loop); B: RS485 (standard Modbus-RTU protocol, device default address: 01)
-
Power supply voltage: 5-24V DC
-
Working environment:
- Ambient Temperature: 0--60°C
- Relative Humidity: <85% RH(Specifically refers to the cable male and female)
-
Power consumption: ≤0.5W
-
Wire length: 5 meters
1.2 wiring

1.3 Impedance requirements for current signals
| Supply Voltage | 9V | 12V | 20V | 24V |
|---|---|---|---|---|
| Max Impedance | <250Ω | <400Ω | <500Ω | <900Ω |
1.4 Mechinical Drawing
DO1:
DO2(Seawater version):
1.5 Instructions for use and maintenance
-
It can be directly put into water without adding a protective tube, ensuring the long-term stability, reliability and accuracy of the sensor.
-
If the water conditions are complex and you want accurate data, you need to wipe the sensor probe frequently.
1.6 RS485 Commands
RS485 signaldefault address 0x14 Standard Modbus-RTU protocol, baud rate: 9600; check bit: none; data bit: 8; stop bit: 1
1.6.1 Query address
send:
| Original address | Function code | Register address high | Register address low | Register length high | Register length low | CRC16 low | CRC16 high |
|---|---|---|---|---|---|---|---|
| 0XFF | 0X03 | 0X00 | 0X0A | 0X00 | 0X02 | 0XF1 | 0XD7 |
If you forget the original address of the sensor, you can use the broadcast address 0XFF instead. When using 0XFE, the host can only connect to one slave, which can be used as a method of address query.
response:
Register 0 data high and register 0 data low indicate the actual address of the sensor: 1 Register 1 data high and register 1 data low indicate the sensor version
| Address | Function code | Data length | Register 0 Data high | Register 0 Data low | Register 1 Data high | Register 1 Data low | CRC16 low | CRC16 high |
|---|---|---|---|---|---|---|---|---|
| 0XFF | 0X03 | 0X04 | 0X00 | 0X01 | 0X00 | 0X00 | 0XB4 | 0X3C |
1.6.2 Change address
For example: Change the address of the sensor with address 1 to 2(address range: 1-119), master → slave
| Original address | Function code | Starting register address high | Starting register address low | Register length high | Register length low | Data length | Start address high | Start address low | Sensor version | Sensor version | CRC16 high | CRC16 low |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0X01 | 0X10 | 0X00 | 0X0A | 0X00 | 0X02 | 0X04 | 0X00 | 0X02 | 0X00 | 0X00 | 0XD2 | 0X10 |
response:
| Address | Function code | Starting register address high | Starting register address low | Register length high | Register length low | CRC16 low | CRC16 high |
|---|---|---|---|---|---|---|---|
| 0X01 | 0X10 | 0X00 | 0X0A | 0X00 | 0X02 | 0X61 | 0XCA |
1.6.3 Query data
Query the data (dissolved oxygen) of the sensor (address 14), host → slave
| Address | Function code | Starting register address high | Starting register address low | Register length high | Register length low | CRC16 low | CRC16 high |
|---|---|---|---|---|---|---|---|
| 0X14 | 0X03 | 0X00 | 0X14 | 0X00 | 0X01 | 0XC6 | 0XCB |
If the sensor receives correctly, the following data will be returned, slave → host
| Address | Function code | Data length | Register 0 Data high | Register 0 Data low | CRC16 low | CRC16 high |
|---|---|---|---|---|---|---|
| 0X14 | 0X03 | 0X02 | 0X03 | 0X78 | 0XB5 | 0X55 |
After the query, 7 bytes will be returned. For example, the returned data is 14 03 02 03 78 B5 55. 03 78 is the value of dissolved oxygen.
Converted to decimal, it is 888. Add two decimal places to get the actual value. 03 78 means the current dissolved oxygen is 8.88mg/L
Query the data (temperature) of the sensor (address 14), host → slave
| Address | Function code | Starting register address high | Starting register address low | Register length high | Register length low | CRC16 low | CRC16 high |
|---|---|---|---|---|---|---|---|
| 0X14 | 0X03 | 0X00 | 0X11 | 0X00 | 0X01 | 0XD6 | 0XCA |
If the sensor receives correctly, the following data will be returned, slave → host
| Address | Function code | Data length | Register 0 Data high | Register 0 Data low | CRC16 low | CRC16 high |
|---|---|---|---|---|---|---|
| 0X14 | 0X03 | 0X02 | 0X09 | 0XA4 | 0XB2 | 0X6C |
After the query, 7 bytes will be returned. For example, the returned data is 14 03 02 09 A4 B2 6C. 03 78 is the value of dissolved oxygen temperature.
Converted to decimal, it is 2468. Add two decimal places to get the actual value. 09 A4 means the current dissolved oxygen temperature is 24.68°C
The following is the command for CO2
Query the data of the sensor (address 21), host → slave
Command Frame:
| Address Code | Function Code | Register Address | Register Content | Checksum (Low Byte) | Checksum (High Byte) |
|---|---|---|---|---|---|
| 0x21 | 0x03 | 0x00 0x00 | 0x00 0x06 | 0xc2 | 0xA8 |
Response Frame:
| Address Code | Function Code | Byte Count | Register Content | Checksum (Low Byte) | Checksum (High Byte) |
|---|---|---|---|---|---|
| 0x21 | 0x03 | 0x0c | 0x3f 0x6a 0xeb 0x52 0x40 0xe2 0x48 0xb0 0x41 0xe5 0x85 0xc5 | 0xc5 | 0x87 |
Big-endian float 3f 6a eb 52 is 0.917653, representing a dissolved oxygen saturation of 91.8%.
Big-endian float 40 e2 48 b0 is 7.071373, representing a dissolved oxygen concentration of 7.07 mg/L.
Big-endian float 41 e5 85 c5 is 28.690317, representing a temperature of 28.7°C.
Example 2: Write atmospheric pressure
Command Frame: Write atmospheric pressure of 101.35 kPa to the device with address 1.
Write 10135 (hexadecimal 2797) to register 0x1022.
| Address Code | Function Code | Register Address | Register Content | Checksum (Low Byte) | Checksum (High Byte) |
|---|---|---|---|---|---|
| 0x21 | 0x06 | 0x10 0x22 | 0x27 0x97 | 0x70 | 0x3e |
Response Frame: (According to the ModBus standard, the response is a mirror of the command frame)
| Address Code | Function Code | Register Address | Register Content | Checksum (Low Byte) | Checksum (High Byte) |
|---|---|---|---|---|---|
| 0x21 | 0x06 | 0x10 0x22 | 0x27 0x97 | 0x70 | 0x3e |
Example 3: Zero-point calibration
After the sensor reading stabilizes in oxygen-free water, write 0x0001 to register 1010H.
| Address Code | Function Code | Register Address | Register Content | Checksum (Low Byte) | Checksum (High Byte) |
|---|---|---|---|---|---|
| 0x21 | 0x06 | 0x10 0x10 | 0x00 0x01 | 0x4a | 0x6f |
Response Frame: (According to the ModBus standard, the response is a mirror of the command frame)
| Address Code | Function Code | Register Address | Register Content | Checksum (Low Byte) | Checksum (High Byte) |
|---|---|---|---|---|---|
| 0x21 | 0x06 | 0x10 0x10 | 0x00 0x01 | 0x4a | 0x6f |