Skip to main content

Meadow.Foundation.Sensors.Environmental.AnalogWaterLevel

AnalogWaterLevel
StatusStatus badge: working
Source codeGitHub
NuGet packageNuGet Gallery for Meadow.Foundation

The analog water level sensor will output a voltage based on the amount of conductivity detected across the sensor area. Most sensors will jump to a signal of about ~1V as soon as the sensor area touches water and the voltage increases linearly as the depth increases.

Be careful to limit the water contact to only the the sensor area. Do not submerge the water level sensor.

Code Example

AnalogWaterLevel analogWaterLevel;

public override Task Initialize()
{
Resolver.Log.Info("Initializing...");

// configure our AnalogWaterLevel sensor
analogWaterLevel = new AnalogWaterLevel(
analogPin: Device.Pins.A00
);

// Example that uses an IObservable subscription to only be notified
// when the level changes by at least 0.1cm
analogWaterLevel.Subscribe(AnalogWaterLevel.CreateObserver(
h => Resolver.Log.Info($"Water level changed by 10 mm; new: {h.New}, old: {h.Old}"),
null //e => { return Math.Abs(e.Delta) > 0.1f; }
));

// classical .NET events can also be used:
analogWaterLevel.Updated += (object sender, IChangeResult<float> e) =>
{
Resolver.Log.Info($"Level Changed, level: {e.New}cm");
};

// Get an initial reading.
ReadLevel().Wait();

// Spin up the sampling thread so that events are raised and IObservable notifications are sent.
analogWaterLevel.StartUpdating(TimeSpan.FromSeconds(5));

return Task.CompletedTask;
}

protected async Task ReadLevel()
{
var conditions = await analogWaterLevel.Read();
Resolver.Log.Info($"Initial level: {conditions}");
}

Sample project(s) available on GitHub

Wiring Example

To wire a AnalogWaterLevel to your Meadow board, connect the following:

AnalogWaterLevelMeadow Pin
GNDGND
INA00
VCC3.3V

Class AnalogWaterLevel

Represents an analog water level sensor

Assembly: Meadow.Foundation.dll
View Source
Declaration
public class AnalogWaterLevel : SamplingSensorBase<float>, IObservable<IChangeResult<float>>, ISamplingSensor<float>, ISensor<float>, ISensor, ISamplingSensor

Inheritance: System.Object -> Meadow.Foundation.ObservableBase<UNIT>

Implements:
System.IObservable<Meadow.IChangeResult<System.Single>>, Meadow.Peripherals.Sensors.ISamplingSensor<System.Single>, Meadow.Peripherals.Sensors.ISensor<System.Single>, Meadow.Peripherals.Sensors.ISensor, Meadow.Peripherals.Sensors.ISamplingSensor

Properties

AnalogInputPort

AnalogInputPort connected to temperature sensor

View Source
Declaration
protected IAnalogInputPort AnalogInputPort { get; }

LevelCalibration

Calibration of water level

View Source
Declaration
public AnalogWaterLevel.Calibration LevelCalibration { get; protected set; }

WaterLevel

Water level

View Source
Declaration
public float WaterLevel { get; protected set; }

Methods

ReadSensor()

Convenience method to get the current water level. For frequent reads, use StartSampling() and StopSampling() in conjunction with the SampleBuffer.

View Source
Declaration
protected override Task<float> ReadSensor()
Returns

System.Threading.Tasks.Task<System.Single>

StartUpdating(TimeSpan?)

Starts continuously sampling the sensor

This method also starts raising Changed events and IObservable subscribers getting notified. Use the readIntervalDuration parameter to specify how often events and notifications are raised/sent.

View Source
Declaration
public override void StartUpdating(TimeSpan? updateInterval)
Parameters
TypeNameDescription
System.Nullable<System.TimeSpan>updateIntervalA TimeSpan that specifies how long to
 wait between readings. This value influences how often `*Updated`
events are raised and `IObservable` consumers are notified. |

StopUpdating()

Stops sampling the water level

View Source
Declaration
public override void StopUpdating()

VoltageToWaterLevel(Voltage)

Converts a voltage value to a level in centimeters, based on the current calibration values.

View Source
Declaration
protected float VoltageToWaterLevel(Voltage voltage)
Returns

System.Single

Parameters
TypeName
Meadow.Units.Voltagevoltage

Implements

  • System.IObservable<Meadow.IChangeResult<System.Single>>
  • Meadow.Peripherals.Sensors.ISamplingSensor<System.Single>
  • Meadow.Peripherals.Sensors.ISensor<System.Single>
  • Meadow.Peripherals.Sensors.ISensor
  • Meadow.Peripherals.Sensors.ISamplingSensor