EC / Salinity device: measuring, setup and calibration

Reading time: ~10 minutes · Execution time: ~30 minutes (hardware excluded) + 5 minutes of calibration · Audience: anyone who wants to measure their tank's salinity with an EC probe and see every reading on the portal

🔵 Advanced guide — not part of the 01-08 onboarding path. Tackle it only if you have already set up your tank and sensors (guide 04).


1. What you are about to do

In JoyReef, salinity is measured with a dedicated device: a small standalone board (type ec, name ec-XXXXXX) with its own ESP board, its own ADS1115 module and a conductivity (EC) probe designed for marine water. It's the twin of the pH device (guide 18): you flash it, connect it to WiFi, it appears on the portal as "EC / Salinity probe", you assign it to a tank — and from that moment every reading you take lands on the portal, with historical chart and dashboard widget.

⚠️ The EC probe does not live in the tank. It's the instrument you take the reading with, not a sensor to install and forget: you dip it, read, pull it out and rinse it. The electrodes carry an extremely thin platinum layer that gets covered by biofilm and limescale within days in tank water, and from then on the reading slides in one direction while nothing has changed in the water. How to work with it and how to clean it are in sec. 6.

How it works: the probe measures the water's electrical conductivity (EC, in mS/cm), which in marine water is directly related to salinity. The firmware compensates for temperature and converts the value to ppt (parts per thousand): the classic 35 ppt of ocean water. Everything on board: the portal receives the value ready to use.

In this guide:

⚠️ The EC device and the pH device must never share a power supply. The EC probe injects a small electrical signal into the tank: if the EC device and the pH device share power or ground (same powered USB hub, same multi-port power supply), the pH reading gets disturbed. Use two separate USB power supplies, each in its own outlet. This is why EC and pH are two separate devices and not a single board. It also helps to keep the two probes apart (about 20 cm, not side by side), since the disturbance falls off quickly with distance. See guide 18.


2. What you need (hardware)

💡 "Clean" build: if you want to mount everything in a 3D-printed box with a perfboard (like the original JoyReef devices), the perfboard and wiring diagrams are in the project repo. To get started, though, the modules and a few dupont wires are enough.


3. Assembly

The chain is: EC probe → DFR0300-H board → ADS1115 → ESP board. The DFR0300-H board has its own 3-wire cable (Gravity connector): signal, power and ground.

EC board → ADS1115 / board

Gravity wire (DFR0300-H) Goes to Notes
Blue (signal) A0 of the ADS1115 0-3.2 V analog signal
Red (VCC) 3V3 of the board everything at 3.3 V
Black (GND) GND of the board

ADS1115 → ESP board (I2C, 2 wires)

ADS1115 ESP board Notes
VDD 3V3 power
GND GND ground
SDA board's SDA pin I2C data
SCL board's SCL pin I2C clock

The I2C pins are the same as the pH device: SDA = GPIO0 (D3), SCL = GPIO2 (D4).

🔘 Factory reset button (optional). It goes on D0 (GPIO16), wired to 3V3 — not on GPIO2, which here is the ADS1115's I2C clock. Held for 8 seconds it erases WiFi and configuration.

EC device wiring diagram: D1 mini, ADS1115 via I2C and DFR0300-H board

⚠️ The probe is delicate, and so is the connector. The electrodes are platinum and must never be touched, scrubbed or dry-wiped (see sec. 6). Secure the DFR0300-H board well in the box and leave some slack on the probe cable, so pulling it out of the water for each reading doesn't stress the connector.


4. Firmware flash + WiFi

The EC device is flashed and connected to WiFi exactly like the other JoyReef devices:

  1. Firmware flash: follow guide 16 choosing the EC probe firmware. (For later updates: OTA from the portal, guide 17.)
  2. WiFi connection: on first boot the device creates the joyreef-XXXXXX configuration network (captive portal). Same procedure as the controller, described in guide 03b.

After a few seconds the device appears on the portal in Config → Devices with the type "EC / Salinity probe" and the name ec-XXXXXX.


5. Configuration wizard (basics + calibration)

Open the newly appeared device in Config → Devices and click "Start configuration": a 2-step wizard begins.

Step 1 — Basics

Give the device a meaningful name (e.g. "Tank salinity") and assign it to a tank. Assign it to the same tank as the controller measuring the temperature: it's needed for automatic compensation.

💡 Automatic temperature compensation (ATC). Conductivity depends heavily on temperature (~1.85% per °C). The EC device receives the tank temperature automatically from the portal and normalises the reading to 25 °C — you don't have to wire any temperature probe. If no temperature arrives for more than ~10 minutes, the device falls back to 25 °C until the data returns.

Step 2 — Calibration

The K=10 probe leaves the factory with a generic factor and must be calibrated. Do not use the 12.88 mS/cm standard solution, not even the one in the box: make a 35 ppt seawater sample and calibrate with that.

⚠️ Why not the 12.88. Standard conductivity solutions are not seawater: they have a different composition, meant for laboratory calibration, and the probe behaves differently in them than it does in salt water. Calibrating on one liquid and measuring another is like setting a scale with a reference weight and then weighing something made of a different material. On top of that, 12.88 sits four times below the point you actually measure at (tank water is around 53 mS/cm), so any calibration error reaches you amplified. Reference solutions formulated for seawater do exist (Aquaforest AF Reference Solution, for one), but there's no need to buy them: the sample you make at home is the better reference, because it is exactly the water you want to measure, made with your own salt.

Make the sample — once, then reuse it:

  1. Fill a clean bottle with RO water
  2. Dissolve the synthetic salt you use for water changes until you reach 35 ppt measured with your calibrated refractometer
  3. Let it dissolve fully and wait until the liquid is at room temperature

Calibrate — from the wizard, or later from the Salinity page:

  1. Rinse the probe in RO water and pat it dry
  2. Immerse it in the 35 ppt sample and wait 1-2 minutes for it to stabilise
  3. Enter the solution conductivity: 53.0 mS/cm, the value matching 35 ppt at 25 °C. Replace the pre-filled 12.88
  4. Enter the solution temperature (required field — measure the liquid in the bottle, not the tank: a 4-5 °C difference means an 8-9% error)
  5. Press "Calibrate now": the factor is saved on the device
📷 PLACEHOLDER-EC-WIZARD-CALIBRATION

🖼️ Image to insert here (EC calibration wizard): screenshot of wizard step 2 with the "Solution conductivity (mS/cm)" and "Solution temperature (°C)" fields and the "Calibrate now" button.

When the wizard finishes, the portal takes you straight to the Salinity page.

💡 You can skip calibration and do it later (it's also on the Salinity page): the device still measures with the default factor, but absolute accuracy is not guaranteed. The "Restore factory calibration" button undoes a bad calibration at any time.

⚠️ Recalibrate every 2-3 months, or whenever the value doesn't match your refractometer. Before recalibrating, clean the probe as described in sec. 6 and make a fresh 35 ppt sample as above: calibrating a dirty probe just freezes the dirt into the calibration.


6. How to use it: the probe does not live in the tank

The EC probe goes into the water only for as long as the reading takes. Left in the tank it gets coated with biofilm and limescale within days: the reading starts drifting in one direction, and recalibrating in that state fixes nothing — it freezes the fault into the calibration.

A full reading, start to finish:

  1. Power the device and wait for Online on the portal.
  2. Dip the probe into the tank (or into a glass of freshly drawn water), in a spot with moderate flow, and shake it gently to release bubbles from the electrodes.
  3. Leave it still for 2-3 minutes: the value on the portal settles.
  4. Once you've read it, take the probe out, rinse it with RO water and unplug the device.

For a stable tank, one or two readings a week is plenty, plus one before and one after each water change.

💡 Why unplug it. The device publishes a reading every 5 minutes as long as it's powered: left on with the probe out of the water, it fills the chart with meaningless values and can trigger the "Salinity out of range" alert (which is off by default for exactly this reason, see guide 15). Powered only while you measure, the chart keeps a clean series of points.

Between readings: rinse with RO water and store it wet — the probe cap, or a small jar with a finger of RO water. Never let it dry out covered in salt water: the salt crystallises between the electrodes.

Cleaning

Needed when you see film or deposits, or when the value doesn't match the refractometer despite a proper calibration.

⚠️ Never use brushes, cloths, paper, cotton buds or your fingers on the electrodes. Never scrape, never use alcohol, acetone or household descalers, never dry it by rubbing. The platinum is an extremely thin deposit: scratch it or polish it and the probe changes cell constant for good — at that point it really is a replacement.

  1. Rinse thoroughly with RO water, never tap water.
  2. Biofilm: 10-15 minutes in lukewarm water (lukewarm, not hot) with a drop of mild dish soap, without scrubbing — let the soak do the work. Then a long RO rinse.
  3. Limescale (white film): 5-10 minutes in white vinegar diluted one part in five of RO water. No longer, and not twice in a row. Then a long RO rinse.
  4. Don't touch the electrodes with your fingers afterwards either: skin grease alone will skew the reading.
  5. Shake it and let it drip dry.

💡 How to tell whether the probe is still good. After cleaning, put it in a fresh 35 ppt sample and leave it still for ten minutes without touching anything. If the value settles and moves by hundredths, it's fine: recalibrate and you're done. If it keeps sliding in the same direction, the probe is at the end of its life and calibration won't bring it back.


7. The Salinity page

You'll find it under Monitoring → Salinity (URL portal.joy-reef.com/sensors/salinity), or via the "Details →" link on the dashboard widget. It shows:

📷 PLACEHOLDER-SALINITY-PAGE

🖼️ Image to insert here (Salinity page): screenshot of the Monitoring → Salinity page with the current value in ppt, Live badge, 28-42 scale with the 34-36 target zone highlighted and the EC Calibration section.

On the dashboard, salinity has its own widget: current value, last-24-hours chart and 24h average.

💡 The journal benefits too: when you create a journal entry, the salinity field comes pre-filled with the EC device's reading ("Automatic detection") — no more manual transcriptions from the refractometer.


8. If something goes wrong

Symptom Probable cause What to do
Salinity missing / "No EC device assigned" Device not assigned to the tank Config → Devices → open the device → Tank field
EC device offline WiFi/MQTT down Check power and WiFi (repeat the captive portal of guide 03b if you changed network)
ADS1115 not detected Wrong I2C pins or wiring Verify SDA/SCL (GPIO0/GPIO2) and VDD/GND
Obviously wrong readings (e.g. 20 or 50 ppt with a healthy tank) Calibrated with the 12.88 standard solution, or solution temperature not entered Recalibrate with the 35 ppt sample (sec. 5), entering 53.0 mS/cm and the liquid's temperature; in extreme cases "Restore factory calibration" and recalibrate
"Jumpy" readings Air bubbles on the electrodes, probe next to a pump, or probe out of the water Gently shake the probe to free the bubbles and keep it in an area with moderate flow; if it's out of the water the value means nothing
The value keeps sliding in one direction (day after day, or within a single reading) Dirty electrodes: biofilm or limescale Clean the probe (sec. 6), then repeat the ten-minute test before recalibrating
The value doesn't match the refractometer Dirty probe, probe drift or uncalibrated refractometer Clean the probe (sec. 6), calibrate the refractometer with its solution, then recalibrate the EC device
Salinity "frozen" while temperature changes No temperature arriving → ATC on 25 °C fallback Assign the EC device to the same tank as the controller with the temperature probe
pH went crazy since the EC device arrived Shared EC/pH power supply Two separate USB power supplies, never the same powered hub (sec. 1)

JoyReef guide · v1.0 · Questions? Write to supporto@joy-reef.com