ModularSensors > Modules > Supported Sensors > SDI-12 Sensors > Decagon ES-2

Decagon ES-2 module

Classes for the Decagon ES-2 conductivity and temperature sensor.

Introduction

If you still have one of these sensors, it is implemented as a sub-classes of the SDI12Sensors class. It requires a 3.5-12V power supply, which can be turned off between measurements. While contrary to the manual, they will run with power as low as 3.3V. On the version with a stereo cable, the power is connected to the tip, data to the ring, and ground to the sleeve. On the bare-wire version, the power is connected to the white cable, data to red, and ground to the unshielded cable.

Sensor Datasheet

Build flags

Sensor Constructor

DecagonES2(char SDI12address, int8_t powerPin, int8_t dataPin, uint8_t measurementsToAverage = 1)

Construct a new Decagon ES2 object.

Parameters
SDI12address The SDI-12 address of the ES-2; can be a char, char*, or int.
powerPin

The pin on the mcu controlling power to the ES2 Use -1 if it is continuously powered.

  • The ES2 requires a 3.5-12V power supply, which can be turned off between measurements
dataPin The pin on the mcu connected to the data line of the SDI-12 circuit.
measurementsToAverage The number of measurements to take and average before giving a "final" result from the sensor; optional with a default value of 1.

The SDI-12 address of the sensor, the Arduino pin controlling power on/off, and the Arduino pin sending and receiving data are required for the sensor constructor. Optionally, you can include a number of distinct readings to average. The data pin must be a pin that supports pin-change interrupts.



Example Code

The Decagon ES-2 is used in the menu a la carte example.

#include <sensors/DecagonES2.h>

// NOTE: Use -1 for any pins that don't apply or aren't being used.
const char*   ES2SDI12address   = "3";  // The SDI-12 Address of the ES2
const int8_t  ES2Power          = sensorPowerPin;  // Power pin
const int8_t  ES2Data           = 7;               // The SDI-12 data pin
const uint8_t ES2NumberReadings = 5;

// Create a Decagon ES2 sensor object
DecagonES2 es2(*ES2SDI12address, ES2Power, ES2Data, ES2NumberReadings);

// Create specific conductance and temperature variable pointers for the ES2
Variable* es2Cond = new DecagonES2_Cond(&es2,
                                        "12345678-abcd-1234-ef00-1234567890ab");
Variable* es2Temp = new DecagonES2_Temp(&es2,
                                        "12345678-abcd-1234-ef00-1234567890ab");

Classes

class DecagonES2
The Sensor sub-class for the Decagon ES-2 sensor.
class DecagonES2_Cond
The Variable sub-class used for the conductivity output from a Decagon ES-2 electrical conductivity sensor.
class DecagonES2_Temp
The Variable sub-class used for the temperature output from a Decagon ES-2 electrical conductivity sensor.

Defines

#define ES2_NUM_VARIABLES = 2
Sensor::_numReturnedValues; the ES2 can report 2 values.
#define ES2_INC_CALC_VARIABLES = 0
Sensor::_incCalcValues; we don't calculate any additional values.

Sensor Timing

The sensor timing for a Decagon ES-2

#define ES2_WARM_UP_TIME_MS = 250
Sensor::_warmUpTime_ms; maximum warm-up time in SDI-12 mode: 250ms.
#define ES2_STABILIZATION_TIME_MS = 0
Sensor::_stabilizationTime_ms; the ES2 is stable as soon as it warms up (0ms stabilization).
#define ES2_MEASUREMENT_TIME_MS = 250
Sensor::_measurementTime_ms; maximum measurement duration: 250ms.
#define ES2_EXTRA_WAKE_TIME_MS = 0
Extra wake time required for an SDI-12 sensor between the "break" and the time the command is sent. The ES-2 requires no extra time.

Conductivity

The conductivity variable from a Decagon ES-2

  • Range is 0 – 120 mS/cm (bulk)
  • Accuracy is ±0.01mS/cm or ±10% (whichever is greater)

DecagonES2_Cond(DecagonES2* parentSense, const char* uuid = "", const char* varCode = ES2_COND_DEFAULT_CODE) explicit

Construct a new DecagonES2_Cond object.

Parameters
parentSense The parent DecagonES2 providing the result values.
uuid A universally unique identifier (UUID or GUID) for the variable; optional with the default value of an empty string.
varCode A short code to help identify the variable in files; optional with a default value of "ES2Cond".

#define ES2_COND_RESOLUTION = 1
Decimals places in string representation; conductivity should have 1.

0 are reported, adding extra digit to resolution to allow the proper number of significant figures for averaging - resolution is 0.001 mS/cm = 1 µS/cm

#define ES2_COND_VAR_NUM = 0
Sensor variable number; conductivity is stored in sensorValues[0].
#define ES2_COND_VAR_NAME = "specificConductance"
Variable name in ODM2 controlled vocabulary; "specificConductance".
#define ES2_COND_UNIT_NAME = "microsiemenPerCentimeter"
Variable unit name in ODM2 controlled vocabulary; "microsiemenPerCentimeter" (µS/cm)
#define ES2_COND_DEFAULT_CODE = "ES2Cond"
Default variable short code; "ES2Cond".

Temperature

The temperature variable from a Decagon ES-2

  • Range is -40°C to +50°C
  • Accuracy is ±1°C

DecagonES2_Temp(DecagonES2* parentSense, const char* uuid = "", const char* varCode = ES2_TEMP_DEFAULT_CODE) explicit

Construct a new DecagonES2_Temp object.

Parameters
parentSense The parent DecagonES2 providing the result values.
uuid A universally unique identifier (UUID or GUID) for the variable; optional with the default value of an empty string.
varCode A short code to help identify the variable in files; optional with a default value of "ES2Temp".

#define ES2_TEMP_RESOLUTION = 2
Decimals places in string representation; temperature should have 2.

1 is reported, adding extra digit to resolution to allow the proper number of significant figures for averaging - resolution is 0.1°C

#define ES2_TEMP_VAR_NUM = 1
Sensor variable number; temperature is stored in sensorValues[1].
#define ES2_TEMP_VAR_NAME = "temperature"
Variable name in ODM2 controlled vocabulary; "temperature".
#define ES2_TEMP_UNIT_NAME = "degreeCelsius"
Variable unit name in ODM2 controlled vocabulary; "degreeCelsius" (°C)
#define ES2_TEMP_DEFAULT_CODE = "ES2Temp"
Default variable short code; "ES2Temp".