The SDI-12 Problem
Although SDI-12 is a cryptic hardware and software protocol, it is still a widely used standard interface between environmental sensors and data loggers. Until now, sensor vendors have had the difficult and costly burden of creating their own SDI-12 solutions from scratch. Because of the many eccentricities of the SDI-12 protocol, it is a difficult task to create a truly compliant SDI-12 sensor interface.
The SDI-12 Sensor Translator
Vegetronix has solved the problem of interfacing sensors to the SDI-12 bus by creating a small SDI12 Sensor Translator board which contains all of the necessary functionality. The SDI-12 Sensor Translator p powers the sensor, and samples it with a high resolution ADC when it receives a measurement command from an SDI compliant data logger. The SDI-12 Sensor Translator handles all of the communication, and power down features of the SDI-12 protocol.
Figure 1 shows a connection diagram for utilizing the SDI-12 Sensor Translator. Single sided or differential outputs of up to 3 different sensors are tied to the inputs of SDI-12 Sensor Translator. The Translator contains connection points for power, ground and the SDI-12 data line.
Because of its small size the sensor can often be incorporated into the sensor housing. Alternatively it can be used externally. For sufficiently large quantities, we can provide custom board shapes to fit most any form factor.
The Translator is extremely low power with only a 160uA current drain when it is sleeping, and it provides sensor power control, so that the sensor only receives power during a measurement cycle.
All standard SDI-12 commands are supported. In addition, it has extended commands which can be used to calibrate sensor outputs.
Each of the measurements can be scaled and offset with user supplied calibration coefficients.
Our Translator has been fully tested with the NR Systems SDI-12 Verifier.
In addition to all these features the SDI-12 Sensor Translator has an on board temperature sensor, that can be fully calibrated to your application.
Figure 1 - SDI12 Sensor Translator Connection Diagram.
- Ultra-fast prototyping of SDI-12 Sensor networks.
- Increasing time to market implementation of sensors.
- Protocol bridging.
- Fully SDI-12 Version 1.3 Compliant.
- Quick connect through screwless terminal blocks.
- Simultaneously measures up to 3 sensors with 16 bit resolution using a delta sigma ADC.
- ADC inputs are differential, and can be configured as single sided with a change to the input resistors.
- A wide range of sensor Voltage inputs can be accepted, by modifying the input resistors.
- On board temperature sensor, in addition to the 3 sensor inputs. User must calibrate.
- Low power operation with power consumption at less than 160uA in sleep mode.
- Has the ability to power sensors only when sampling.
- Wide input voltage range.
- Surge protection on sensor inputs.
- Each of the measurements can be adjusted with a scaling factor and offset. (out= scale*V + offset).
- Uses extended SDI-12 commands to set and retrieve all calibration parameters.
Other Vegetronix Products of Interest
- VH400 Soil Moisture Sensors
- Relay Control Boards
- SDI-12 to RS232 Translator
- SDI-12 to USB Translator
Pricing and Order Information
|SDI-SENSOR-ENG||SDI-12 Sensor Translator||$115.95||Buy Now|
SDI-12 Sensor Translator Specifications
|Sensor Protocol||SDI-12 Version 1.3|
|Power Supply Voltage||5.5V to 12V DC|
|Voltage to Sensor||Power supply voltage is switched to the sensor before sampling the sensor.|
|Sensor Input Voltage Range||Nominally 0 to +6V (The upper positive voltage is configurable by changing input resistor divider.) The sensor input does not read negative voltages.|
|Internal ADC input range||600mV|
|Input Resistance||Nominally 100K (Configurable by changing input resistor divider)|
|ADC resolution||16 bit|
|Number of Sensor Inputs||3|
|Sensor Input Types:||Differential|
|Supported SDI-12 commands||aM!, aMC!, aC!, aCC!, aD0!,
aI!, aV!, ?!, a!
See extended SDI commands below.
|Connections||Screwless terminal block|
SDI-12 Sensor Translator SDI-12 Command Explanation
For a good background on the SDI-12 protocol see www.sdi-12.org.
The commands assume that the sensor address is 0, but any address could be substituted into the commands below. "\r\n" is carriage return and line feed characters.
Calibration coefficients are modified by extended "X" commands, and are indexed by a 2 dimensional array, where the first zero based index is the measurement index, and the second is the parameter.
Each measurement has 3 parameters:
If you would like to calibrate the output of the second sensor such that it's voltage is multiplied by 2 and an offset of 3 is added to the result:
you would use the following two extended commands:
T 0XSET VAR[1,0]=3!
T 0XSET VAR[1,1]=2!
Each sensor input has a resistor divider circuit which can be used to divide the input voltage from a sensor. The maximum input voltage to the ADC is 600mV, so sensor output voltages must be scaled to this result. See the "Input Configuration" section below.
The Vegetronix THERM200 can be easily converted into a fully compliant SDI-12 sensor, returning temperature in degrees Celsius or Fahrenheit by configuring the translator with the appropriate coefficents.
For Celsius for channel 0 send these commands:
T 0XSET VAR[0,0]=-40!
T 0XSET VAR[0,1]=41.67!
For Fahrenheit :
T 0XSET VAR[0,0]=-40!
T 0XSET VAR[0,1]=75.006!
To verify that you've set the coefficents correctly use this sequence of commands:
T 0XLOAD VAR[0,0]!
T 0XLOAD VAR[0,1]!
SDI-12 Command Table
|?!||Returns address of a single sensor on the SDI-12 bus||"0\r\n"|
|0!||Ping, returns same address||"0\r\n"|
|0V!||Verify command. Subsequent 0D0! command will return the version of the Sensor Translator||"00001\r\n"|
|0M!||Begin a measurement. Subsequent 0D0! command will return the 3 measurements and the temperature.||"00034\r\n"|
|0MC!||Begin a measurement and respond with CRC on subsequent 0D0! command.||"00034\r\n"|
|0C!||Begin a concurrent measurement. (Same as 0M! command but no service request is issued.)||"00034\r\n"|
|0CC!||Begin a concurrent measurement and respond with CRC on subsequent 0D0! command.||"00034\r\n"|
|0D0!||Get data is called after a 0M!, 0MC!, 0C!, 0CC!, and 0V! commands. If called after the 0V command then the single result is the version number, otherwise it returns 4 results, namely the 3 sensor voltages, and the internal temperature of the Translator.||Response to 0V!
|0I!||This returns the standard SDI Identification command string response. The first 2 characters after the address are the SDI-12 version, the next 14 are manufacturer and product information, and the last 3 are the software version. The version field was not implemented prior to version 2.2.||013VEGETRONIXEN162.2\R\N|
|0XSET VAR[m,p]=VAL!||Set and store one of the calibration coefficients indexed by m,p, where m is the measurement, and n is the paramenter||"0XACK\r\n"|
|0XLOAD VAR[M,N]!||Retrieve and store the calibration coefficients indexed by m,p, where m is the measurement, and n is the paramenter, to a string buffer ready to be retrieved by the 0XGET command.||"0XACK\r\n"|
|0XGET!||Retrieve the string buffer that was filled from the previous 0XLOAD command||"0X +1.1\r\n"|
|0XER!||Retrieve a string for the last error generated by the use of an X command.||If no error:
"0XER BAD COMMAND\r\n"
"0XER BAD MEASUREMENT INDEX\r\n"
"0XER BAD COEF INDEX\r\n"
|0XW[ms]!||This sets the sensor warm up time. The VSENSOR output will turn on for this amount of time before the inputs are sample. The parameter is in miliseconds. For example 0XW500! sets the warm up time to 0.5 seconds To retrieve the current value, invoke the command without any parameters. Then invoke the 0XGET! command to retrieve the value. This command was implemented in V2.2 and above. See the 0XI! command above to get the version||"0XACK\r\n"|
Sensor Translator Input configurations
Sensors can be connected to the Translator through a screw less terminal block. Sensors can be differential, or single ended, depending how the input resistors are configured. The input range to the 16 bit delta sigma converter must be below 0.6V, and so a resister divider network must be used to divide down the voltage input, if the sensor voltage is greater than 0.6V. Figures 2 and 3, show resistor divider networks for a differential and single ended systems, respectively. Single ended and differential sensors can be mixed on an SDI board. Just let us know which type and the voltage range, before you order.
This online resistor divider calculator is useful for computing resistor values: http://www.daycounter.com/Calculators/Voltage-Divider-Calculator.phtml
For the single ended case, where Rp= 10K and Rs=91K the input voltage is divided by 10.1.
Figure 2: Differential input configuration.
Figure 3: Single ended input configuration.
0 to 20mA Current Sensing
The SDI-12 Translator can also be configured to turn any 0 to 20mA sensor into a fully SDI-12 compliant device. Figure 4 shows how to configure the input resistors. The calibration coefficients should be configured as follows so that the sensor returns it's measurements in milliamps:
You would send the following transparent commands to the Translator to calibrate it, if the current sensor was on channel 0.
TRANS 0XSET VAR[0,0]=0!
TRANS 0XSET VAR[0,1]=5!
The 20 ohm resistors allow currents to be measured from 0 to 30mA.
Figure 4: Input Configuration for 0 to 20mA current sensing.
Internal Temperature Sensor
The SDI Sensor Translator has an internal temperature sensor, however for higher accuracy it must be calibrated by the end user
Terminal Block Connections
|1||Sensor Input 1 +|
|2||Sensor Input 1 -|
|3||Sensor Input 2 +|
|4||Sensor Input 2 -|
|5||Sensor Input 3 +|
|6||Sensor Input 3 -|
|2||POWER TO SENSOR|
|5||POWER IN (5VDC to 12VDC)|
How to Get Started with the SDI-12 Sensor Translator
The best way to try out the SDI-12 Sensor Translator is to order a few samples and connect them to your sensor. The sample board contains terminal blocks for quick connections. Merely connect your sensor inputs to the SDI-12 Translator inputs, connect the Translator to your SDI compliant data logger, and start retrieving data from your sensor.