EZO-DO
Notice: This page is an original repo-authored summary informed by Atlas Scientific documentation. It is not an official Atlas Scientific manual.
Purpose
This page captures the repo-relevant behavior of the EZO dissolved-oxygen family.
Product Summary
- default transport mode is UART
- default I2C address is
97(0x61) - typical one-shot read timing is about
600 ms - supports one-point and two-point calibration
- supports temperature, salinity, and atmospheric-pressure compensation
- can expose dissolved oxygen in more than one output form
Measurement Model
DO is not just a scalar sensor with a single correction term.
The product can report dissolved oxygen as:
- mg/L
- percent saturation
The enabled output set affects payload shape, so callers should not assume one fixed-field response unless device configuration is already controlled by the application.
Shared Command Families Present
The DO family includes the common acquisition, calibration, identity, control, and protocol-switching families, plus calibration export and import.
Product-Specific Features
Compensation Surface
DO has the broadest compensation surface among the current products:
- temperature
- salinity
- atmospheric pressure
That is why the current typed helper layer exposes these settings explicitly, because they shape both calibration practice and measurement interpretation.
Output Selection
The product can enable or disable mg/L and percent-saturation outputs. As with EC and HUM, payload parsing belongs in a product-aware layer.
The documented output-config query reply uses the alternate vendor form ?,O,... rather than the more common ?Prefix,... shape. The typed DO parser accepts that response directly.
Pressure Compensation Query Shape
The atmospheric-pressure query is another vendor oddball: the documented reply uses ?,P,.... That shape differs from the simpler ?T,... and ?S,... query families, so the DO helper treats it as product-specific parsing instead of relying on the generic shared query helper.
Calibration Procedure
Calibration Model
DO supports:
- a high-point atmospheric calibration with
Cal - an optional low-point zero-oxygen calibration with
Cal,0
The command surface is:
CalCal,0Cal,clearCal,?
Cal,? reports:
?Cal,0= not calibrated?Cal,1= atmospheric point only?Cal,2= low point plus atmospheric point
Plan on about 1300 ms for Cal and Cal,0, and about 300 ms for Cal,clear and Cal,?.
Before You Begin
- Verify the probe basically works before calibrating. Vendor guidance is to read in air first; readings above
10 mg/Lare treated as a healthy starting point, while readings below5 mg/Lpoint to a probe issue that should be fixed first. - Reset compensation to the default calibration values before you calibrate:
- temperature
20 C - atmospheric pressure
101 kPa - salinity
0
- temperature
- Do not apply temperature, pressure, or salinity compensation until the base calibration is complete.
- Watch live readings and calibrate only after the values stabilize.
Why The Default Compensation Matters
With the default compensation state, the atmospheric high-point calibration has a known expected value of about 9.09 mg/L. Once you add custom compensation, the “correct” post-calibration value becomes application-specific and much harder to verify.
Step-By-Step Procedure
Step 1: Low-Point Calibration
- Place the probe in a zero dissolved oxygen solution.
- Stir or move the probe enough to release trapped air, since trapped air can push the reading artificially high.
- Continue reading until the value reaches zero, or until you have waited as long as the vendor guidance allows for your situation.
- Issue
Cal,0.
The vendor guidance is unusually specific here:
- a new probe usually reaches zero in a few minutes
- if it has not reached zero after about
4 hours, calibrate to zero anyway - after a fresh electrolyte refill, reaching zero may take several hours
- if it still has not reached zero after about
12 hoursin that post-refill case, calibrate to zero anyway
Step 2: High-Point Atmospheric Calibration
- Expose the probe to air.
- Wait until the reading stabilizes; vendor guidance treats roughly
5to30seconds as typical. - Issue
Cal. - With default compensation values still in place, confirm that the final reading settles around
9.09to9.1x mg/L.
Advanced Temperature Recalibration
Probe temperature recalibration is not the same thing as changing the temperature-compensation setting. The vendor guidance is:
- complete the normal calibration first
- move the probe to its real operating temperature
- let it acclimate for about
10 minutes - rerun the atmospheric
Calstep at that operating temperature
This is only needed when the operating temperature is materially different from the temperature where the probe was last calibrated.
What “Stabilized” Means
DO calibration is extremely sensitive to blind calibration. If the reading is still walking when you issue Cal or Cal,0, the post-calibration output will drift instead of staying fixed.
Timing Notes
The generic repo read hint is conservative for normal DO reads. Calibration and compensation changes should still be treated as command-specific operations rather than inferred from the measurement timing alone.
Code Implications
The current typed DO module now owns:
- typed parsing for configured outputs
- explicit compensation commands
- calibration query/set/clear helpers
Application code should still treat DO payload shape as configuration-dependent unless output configuration is controlled explicitly.
Repo Entry Points
- Linux staged examples:
examples/linux/i2c/advanced/do_calibration.candexamples/linux/uart/advanced/do_calibration.c - Arduino staged example:
examples/arduino/i2c/advanced/do_calibration/do_calibration.ino - Compensation workflows:
examples/linux/i2c/advanced/do_workflow.c,examples/linux/uart/advanced/do_workflow.c,examples/linux/i2c/advanced/do_full_compensation_chain.c,examples/linux/uart/advanced/do_full_compensation_chain.c, and the matching Arduino I2C examples - Calibration transfer helpers:
src/ezo_calibration_transfer.h