# AGRINOVO-F-100: Digital Fluoride (F⁻) Ion Selective Electrode Sensor

Agrinovo technical datasheet, revision 1.2 (October 2026).
PDF version: https://agrinovo.io/datasheets/sensors/AGRINOVO-F-100_Datasheet.pdf

## 1. Overview

The AGRINOVO-F-100 is a digital ion-selective electrode (ISE) sensor for measuring fluoride concentration in water. It integrates electronics and a microprocessor for real-time ion concentration and temperature measurement via RS485 Modbus-RTU, with up to 5-point calibration and automatic or manual temperature compensation.

### Key Features

- Measurement range: 0 to 1000 mg/L
- Resolution: 0.01 mg/L
- Accuracy: ±5% F.S.
- Built-in temperature sensor (NTC10K)
- Up to 5-point calibration
- Auto/manual temp compensation
- RS485 Modbus-RTU
- Low power: ≤0.5W

### Applications

- Drinking water fluoride monitoring
- Wastewater treatment
- Environmental water quality monitoring
- Industrial process control

## 2. Specifications

| Parameter | Specification |
|:----------|:--------------|
| **Ion Range** | 0 to 1000 mg/L (customizable) |
| **Ion Resolution** | 0.01 mg/L |
| **Ion Accuracy** | ±5% F.S. |
| **Temperature Range** | −10.0 to 110.0°C |
| **Temperature Resolution** | 0.1°C |
| **Temperature Accuracy** | ±0.5°C |
| **Temperature Sensor** | Thermistor NTC10K |
| **Temperature Compensation** | Automatic / Manual |

## 3. Electrical Characteristics

| Parameter | Specification |
|:----------|:--------------|
| **Supply Voltage** | 12-24 VDC |
| **Power Consumption** | ≤0.5W |
| **Isolation** | 2500Vrms |
| **Housing Material** | PPS |
| **Mounting Thread** | 3/4 inch front thread |

## 4. Wiring

| Wire Color | Function | Description |
|:-----------|:---------|:------------|
| **Red** | V+ | DC Power Supply (12-24V DC) |
| **Black** | GND | DC Power Ground |
| **Yellow** | RS485-A | Data T/R+ |
| **White** | RS485-B | Data T/R− |

## 5. Communication Settings

| Parameter | Value |
|:----------|:------|
| **Protocol** | Modbus-RTU |
| **Baud Rate** | 9600 bps (configurable: 1200/2400/4800/9600/19200) |
| **Data Bits** | 8 |
| **Parity** | None |
| **Stop Bits** | 1 |
| **Default Address** | 0x01 (range 1 to 247) |

**Notes:**

- All registers are dual-byte (16-bit). Transmitted high byte first, low byte second.
- Negative integers use two's complement (−1 = 0xFFFF, −2 = 0xFFFE).
- CRC16: Standard Modbus, high byte first, low byte second. CRC bypass code: 0x2A2A.
- Command frame length is fixed at 8 bytes. Frames shorter than 8 bytes after a 0.1s gap are ignored.

## 6. Register Map

The sensor has three register groups: **Measurement** (real-time data), **Parameter** (configuration), and **Information** (device status/identity).

### 6.1 Measurement Registers  -  Integer Mode (Function 0x04)

| Address | Description | Range | Scaling | R/W |
|:--------|:------------|:------|:--------|:----|
| 0x0000 | Ion Concentration | 0 to 20000 | See decimal register | R |
| 0x0001 | Ion Decimal + Unit | - | See unit table | R |
| 0x0002 | Electrode Signal | −7500 to 7500 | ÷10 → mV | R |
| 0x0003 | Signal Decimal + Unit | - | See unit table | R |
| 0x0008 | Temperature | −100 to 1100 | ÷10 → °C | R |
| 0x0009 | Temp Decimal + Unit | - | See unit table | R |

**Over-range indicators:** 0x7FFF = above upper limit, 0x8000 = below lower limit.

### 6.2 Measurement Registers  -  Float Mode (Function 0x03)

Each value occupies 2 registers (float32):

| Address | Description | Range | Unit | R/W |
|:--------|:------------|:------|:-----|:----|
| 0x0000 to 0x0001 | Ion Concentration | 0.000 to 20000 | ppm | R |
| 0x0002 to 0x0003 | Electrode Signal | −750.0 to 750.0 | mV | R |
| 0x0008 to 0x0009 | Temperature | −10.0 to 110.0 | °C | R |

### 6.3 Parameter Registers (Function 0x03 read / 0x06 write)

| Address | Description | Range | Default | R/W |
|:--------|:------------|:------|:--------|:----|
| 0x0019 | Calibration Status | BIT1 - BIT5 (see calibration) | - | R/D |
| 0x001C | Electrode Efficiency | 70.0 to 130.0% (int: 700 to 1300) | 100.0% | R/D |
| 0x001D | Calibrated Point Count | 0 to 5 | 0 | R/D |
| 0x001E | Slave Address | 1 to 247 (0xFF = broadcast) | 1 | R/W |
| 0x001F | Baud Rate | 0:1200 · 1:2400 · 2:4800 · 3:9600 · 4:19200 | 3 (9600) | R/W |
| 0x0020 | Temp Compensation Type | 0: Manual · 1: Automatic | 1 (Auto) | R/W/D |
| 0x0021 | Temp Setpoint / Offset | Manual: −10.0 to 110.0°C · Auto: −10.0 to 10.0°C (×10) | 25.0 / 0.0°C | R/W/D |
| 0x0023 | Ion Valence | 0: Not set · 1: Monovalent · 2: Divalent | - | R/W |

**R/W/D:** D = reset to default by factory restore. Registers without D are unaffected by factory restore.

### 6.4 Information Registers (Function 0x03 read / 0x06 write)

| Address | Description | Values | R/W |
|:--------|:------------|:-------|:----|
| 0x0040 | Working Mode | 0x0010: Measurement · 0x0050: Settings · 0x0060: Calibration | R/W |
| 0x0041 | Mode Parameter | See settings/calibration sections | R/W |
| 0x0042 | Work Event | - | R |
| 0x0043 | Calibration Status & Operation | See calibration section | R/W |
| 0x0044 | Device Type | 0x0010 (ION) | R |
| 0x0045 | Device Model | 0x1210 (ION1210) | R |
| 0x0046 | Software Version | BCD coded | R |
| 0x0047 | Hardware Version | BCD coded | R |
| 0x0048 | Serial Number High | BCD coded | R |
| 0x0049 | Serial Number Low | BCD coded | R |

## 7. Reading Data

### Integer Mode  -  Read ion concentration, electrode signal, and temperature (Function 0x04)

Read 10 registers from 0x0000:

```
Request:  01 04 00 00 00 0A 70 0D
Response: 01 04 14 03 EB 02 11 03 EC 01 00 00 00 00 00 00 00 00 00 00 FA 01 0B F1 B7
```

**Decoding:**

| Register | Hex | Decimal | Scaling | Result |
|:---------|:----|:--------|:--------|:-------|
| 0x0000 Ion Value | 0x03EB | 1000 | ÷100 (from 0x0001) | **10.00 mg/L** |
| 0x0002 Electrode Signal | 0x03EC | 1001 | ÷10 (from 0x0003) | **100.1 mV** |
| 0x0008 Temperature | 0x00FA | 250 | ÷10 (from 0x0009) | **25.0°C** |

### Float Mode  -  Read ion concentration, electrode signal, and temperature (Function 0x03)

Read 10 registers from 0x0000:

```
Request:  01 03 00 00 00 0A C5 CD
Response: 01 03 14 00 00 41 20 33 33 42 C8 00 00 00 00 00 00 00 00 E3 E8 41 C7 43 0C
```

**Decoding:**

| Register | Float Value | Result |
|:---------|:------------|:-------|
| 0x0000 to 0x0001 Ion | 10.00 | **10.00 mg/L** |
| 0x0002 to 0x0003 Electrode | 100.1 | **100.1 mV** |
| 0x0008 to 0x0009 Temperature | 24.986282 | **25.0°C** |

## 8. Address Configuration

### Change Address (0x01 → 0x02)

```
Request:  01 06 00 1E 00 02 68 0D
Response: 01 06 00 1E 00 02 68 0D
```

### Change Baud Rate (9600 → 2400)

```
Request:  01 06 00 1F 00 01 79 CC
Response: 01 06 00 1F 00 01 79 CC
```

### Set Ion Valence (→ Monovalent)

Fluoride is a monovalent ion (F⁻). Set ion valence to 1:

```
Request:  01 06 00 23 00 01 B9 C0
Response: 01 06 00 23 00 01 B9 C0
```

### Broadcast Discovery

Use address 0xFF with only one device connected.

## 9. Calibration

The ion electrode requires calibration with 2 or more standard solutions before it can calculate ion concentration. Up to 5 calibration points are supported.

### Standard Solution Codes

| Concentration | Code | Bit Position |
|:-------------|:-----|:-------------|
| 0.1 ppm | 0x0002 | BIT1 |
| 1 ppm | 0x0004 | BIT2 |
| 10 ppm | 0x0008 | BIT3 |
| 100 ppm | 0x0010 | BIT4 |
| 1000 ppm | 0x0020 | BIT5 |

### Calibration Flow

1. Set ion valence to monovalent (write 0x0001 to register 0x0023) if not already set.
2. Place the electrode in standard solution.
3. Write the standard solution code to calibration register (0x0043).
4. Wait for completion. Read 0x0043 status:
   - **0:** Calibration successful (returned to measurement mode)
   - **1:** Calibrating  -  read again shortly
   - **2:** No valid standard value received within 180s (returned to measurement)
   - **3:** Signal unstable or out of range within 180s (returned to measurement)
   - **4:** Sensor performance (efficiency/offset) out of limits (returned to measurement)

### Calibration Notes

- Each successful calibration calculates electrode efficiency. If out of range, error 4 is returned.
- Writing 0x7FFF to 0x0043 clears all calibration data.
- Calibration status can be read from register 0x0019 and electrode efficiency from 0x001C.
- Ion valence must be set to monovalent (1) before calibration for fluoride.

### Calibration Commands

| Command | Addr | Func | Register | Value | CRC |
|:--------|:-----|:-----|:---------|:------|:----|
| Clear all calibration | 01 | 06 | 00 43 | 7F FF | 18 6E |
| Calibrate 0.1 ppm | 01 | 06 | 00 43 | 00 02 | F9 DF |
| Calibrate 1 ppm | 01 | 06 | 00 43 | 00 04 | 79 DD |
| Calibrate 10 ppm | 01 | 06 | 00 43 | 00 08 | 79 D8 |
| Calibrate 100 ppm | 01 | 06 | 00 43 | 00 10 | 79 D2 |
| Calibrate 1000 ppm | 01 | 06 | 00 43 | 00 20 | 79 C6 |
| Query calibration status | 01 | 03 | 00 43 | 00 01 | 75 DE |

## 10. Temperature Compensation

### Set to Manual Compensation

```
Request:  01 06 00 20 00 00 88 00
Response: 01 06 00 20 00 00 88 00
```

When manual: register 0x0021 is the manual temperature setpoint (×10).

### Set to Automatic Compensation

```
Request:  01 06 00 20 00 01 49 C0
Response: 01 06 00 20 00 01 49 C0
```

When automatic: register 0x0021 is the temperature offset (×10). Default 0.0°C.

### Set Temperature Offset to −5.0°C

```
Request:  01 06 00 21 FF CE 19 A4
Response: 01 06 00 21 FF CE 19 A4
```

## 11. Factory Reset

Factory reset requires two sequential commands:

**Step 1  -  Enter Settings Mode** (write 0x0050 to 0x0040):

```
Request:  01 06 00 40 00 50 88 22
Response: 01 06 00 40 00 50 88 22
```

**Step 2  -  Execute Factory Reset** (write 0x7FFF to 0x0041):

```
Request:  01 06 00 41 7F FF B9 AE
Response: 01 06 00 41 7F FF B9 AE
```

This clears all calibration data, resets temperature mode to automatic, offset to 0.0°C, and restores default parameter values. The device will restart.

## 12. Error Handling

When an invalid command is received, the device responds with the function code + 0x80:

| Error Code | Description |
|:-----------|:------------|
| 01 | Invalid function code (only 0x03, 0x04, 0x06 supported) |
| 02 | Invalid register address |
| 03 | Invalid register count (exceeds register group boundary) |
| 04 | Invalid modification value (out of range) |
| 05 | CRC error |
| 06 | Write to read-only register |

## 13. Common Commands Reference

### Read Registers

| Command | Addr | Func | Start | Count | CRC |
|:--------|:-----|:-----|:------|:------|:----|
| Read measurement (integer) | 01 | 04 | 00 00 | 00 0A | 70 0D |
| Read measurement (float) | 01 | 03 | 00 00 | 00 0A | C5 CD |
| Read all parameters | 01 | 03 | 00 19 | 00 0C | 94 08 |
| Read all info registers | 01 | 03 | 00 40 | 00 0A | C4 19 |

### Write Registers

| Command | Addr | Func | Register | Value | CRC |
|:--------|:-----|:-----|:---------|:------|:----|
| Set address to 0x02 | 01 | 06 | 00 1E | 00 02 | 68 0D |
| Set baud to 2400 | 01 | 06 | 00 1F | 00 01 | 79 CC |
| Temp comp → manual | 01 | 06 | 00 20 | 00 00 | 88 00 |
| Temp comp → auto | 01 | 06 | 00 20 | 00 01 | 49 C0 |
| Temp offset −5.0°C | 01 | 06 | 00 21 | FF CE | 19 A4 |
| Ion valence → monovalent | 01 | 06 | 00 23 | 00 01 | B9 C0 |

## 14. Unit Lookup Table

The low byte of "Decimal + Unit" registers (0x0001, 0x0003, 0x0009) contains the unit code:

| Code | Unit | Code | Unit | Code | Unit |
|:-----|:-----|:-----|:-----|:-----|:-----|
| 0x00 | mV | 0x01 | nA | 0x02 | uA |
| 0x03 | mA | 0x04 | Ω | 0x05 | KΩ |
| 0x06 | MΩ | 0x07 | uS | 0x08 | mS |
| 0x09 | S | 0x0A | pH | 0x0B | °C |
| 0x0C | °F | 0x0D | ug/L | 0x0E | mg/L |
| 0x0F | g/L | 0x10 | ppb | 0x11 | ppm |
| 0x12 | ppt | 0x13 | % | 0x14 | mbar |
| 0x15 | bar | 0x16 | mmHg | | |

The high byte contains the number of decimal places for the value register.

## 15. Installation Notes

**Placement**

- Mount using 3/4 inch thread fitting
- Ensure sensing tip is fully submerged
- Avoid air bubbles on electrode surface

**Maintenance**

- Clean electrode periodically
- Re-calibrate after extended use or cleaning
- Store in clean water when not in use
- PPS housing is corrosion-resistant

## Ordering Information

| Part number | Description |
|:------------|:------------|
| AGRINOVO-F-100 | Digital Fluoride (F⁻) Ion Selective Electrode Sensor |

## Revision History

| Rev | Date | Changes |
|:----|:-----|:--------|
| 1.0 | June 2026 | Initial release |
| 1.1 | August 2026 | Layout revision; calibration command table corrected |
| 1.2 | October 2026 | New layout; corrected Modbus example CRC values |

## Contact

Agrinovo, https://agrinovo.io/products, contact@agrinovo.io, +972 54 688 8148 (direct / WhatsApp).
Specifications subject to change without notice.
