Difference between revisions of "Tanklevel"

From Ethersex_Wiki
Jump to: navigation, search
(Created page with "{{i18n|Tanklevel}} {{Module |NAME=Tank level meter |MENUCONFIG={{Applications}}->Tank level meter |STATUS={{stable}} |PINNING=yes |ECMD={{has_ecmd}} |DEPENDS=ECMD, Clock,…")
 
(SNMP support)
 
(4 intermediate revisions by the same user not shown)
Line 10: Line 10:
 
|CODE=[https://github.com/ethersex/ethersex/tree/master/services/tanklevel https://github.com/ethersex/ethersex/tree/master/services/tanklevel]
 
|CODE=[https://github.com/ethersex/ethersex/tree/master/services/tanklevel https://github.com/ethersex/ethersex/tree/master/services/tanklevel]
 
}}
 
}}
 +
 +
Tanklevel provides an application for measurement of tank levels by hydrostatic pressure.
 +
 +
== Internals ==
 +
 +
You need an aquarium air pump, some kind of pipe/tube, a Freescale MPX5050DP
 +
pressure sensor and an relay for the pump. Parameters are configurable by ECMD
 +
and stored in EEPROM.
 +
 +
== Configuration ==
 +
 +
  │ │                  (0) ADC channel                                    │ │ 
 +
  │ │                  [ ] Measure on system startup                      │ │ 
 +
  │ │                  [ ] Measure at 12 am and 12 pm                    │ │ 
 +
  │ │                  [ ] Inverted pump output                          │ │ 
 +
  │ │                  [ ] Check lock input                              │ │ 
 +
  │ │                  [ ] Inverted lock input                            │ │ 
 +
  │ │                  [ ] Inline tank level                              │ │ 
 +
 +
* ADC channel - ADC channel that is connected to the MPX5050DP pressure sensor.
 +
* Measure on system startup - Start initial measurement at system startup.
 +
* Measure at 12 am and 12 pm - Start measurement at fixed time. Can be changed in services/cron/cron_static.c.
 +
* Inverted pump output - Output pin for pump is inverted.
 +
* Check lock input - Check lock pin before measurement and wait if needed. This is used to delay the measurement e.g. if the oil burner is running.
 +
* Inverted lock input - Lock input pin is inverted.
 +
* Inline tank level - Inline a page to query the tank level.
 +
 +
== Pinning ==
 +
 +
Example pinning from pinning/hardware/netio.m4:
 +
 +
ifdef(`conf_TANKLEVEL', `
 +
  pin(TANKLEVEL_PUMP, PC3, OUTPUT)
 +
')
 +
ifdef(`conf_TANKLEVEL_LOCK', `
 +
  pin(TANKLEVEL_LOCK, PA2, INPUT)
 +
')
 +
 +
Meaning:
 +
 +
* TANKLEVEL_PUMP - output pin for driving the pump relay
 +
* TANKLEVEL_LOCK - optional pin for external lock signal (see Configuration)
 +
 +
== Mechanical setup ==
 +
 +
                    +-------+
 +
                    |Sensor |
 +
                    +---+---+
 +
                        | +--------+
 +
        +---------------+-+  Pump  |
 +
        |                +--------+
 +
+------+------+
 +
|      |      |
 +
|      |      |
 +
|------|------|
 +
|      |      |
 +
|      |      |
 +
|      |      |
 +
+-------------+
 +
      Tank
 +
 +
See the following example:
 +
 +
[[File:Tanklevel_pump_assy.jpg|Pump assembly|177px]]
 +
[[File:Tanklevel_tank_assy.jpg|Tank assembly|100px]]
 +
 +
== Electrical setup ==
 +
 +
Electrical setup is quite simple. Connect the TANK_PUMP port with an relay
 +
(usually via an Transistor as current amp) and the output of the Sensor
 +
with the selected ADC channel (have a look at the datasheet for power supply
 +
decoupling and output filtering). Select a optimal Vref for the ADC if
 +
possible. Schematic could look like this:
 +
 +
[[File:Tanklevel_schem.png|Electrical setup]]
 +
 +
== Parameters ==
 +
 +
Parameters can be viewed/set by ECMD commands:
 +
 +
* sensor_offset - zero offset of the pressure sensor in mV
 +
* med_density - medium density in g/ltr (default of 840 for fuel oil)
 +
* ltr_per_m - Ltr per meter tank level
 +
* ltr_full - Tank capacity in ltr
 +
* raise_time - Pump time (in 1/50 secs)
 +
* hold_time - Hold time before measurement (in 1/50 secs)
 +
 +
== SNMP support ==
 +
 +
If SNMP is enabled the level can be queried by this OID's:
 +
 +
* .1.3.6.1.4.1.39967.4.0 = INTEGER: current level in ltr
 +
* .1.3.6.1.4.1.39967.4.1 = INTEGER: tank capacity in ltr
 +
* .1.3.6.1.4.1.39967.4.2 = INTEGER: timestamp of last measurement (unix date)
 +
* .1.3.6.1.4.1.39967.4.3 = STRING: timestamp of last measurement (clear text)

Latest revision as of 13:31, 14 July 2012

Tank level meter
Status
Stable
menuconfig Applications->Tank level meter
Pinning yes
Ecmd yes
Depends on ECMD, Clock, ADC, Cron (optional)
Code https://github.com/ethersex/ethersex/tree/master/services/tanklevel

Tanklevel provides an application for measurement of tank levels by hydrostatic pressure.

Internals

You need an aquarium air pump, some kind of pipe/tube, a Freescale MPX5050DP pressure sensor and an relay for the pump. Parameters are configurable by ECMD and stored in EEPROM.

Configuration

 │ │                  (0) ADC channel                                    │ │  
 │ │                  [ ] Measure on system startup                      │ │  
 │ │                  [ ] Measure at 12 am and 12 pm                     │ │  
 │ │                  [ ] Inverted pump output                           │ │  
 │ │                  [ ] Check lock input                               │ │  
 │ │                  [ ] Inverted lock input                            │ │  
 │ │                  [ ] Inline tank level                              │ │  
  • ADC channel - ADC channel that is connected to the MPX5050DP pressure sensor.
  • Measure on system startup - Start initial measurement at system startup.
  • Measure at 12 am and 12 pm - Start measurement at fixed time. Can be changed in services/cron/cron_static.c.
  • Inverted pump output - Output pin for pump is inverted.
  • Check lock input - Check lock pin before measurement and wait if needed. This is used to delay the measurement e.g. if the oil burner is running.
  • Inverted lock input - Lock input pin is inverted.
  • Inline tank level - Inline a page to query the tank level.

Pinning

Example pinning from pinning/hardware/netio.m4:

ifdef(`conf_TANKLEVEL', `
  pin(TANKLEVEL_PUMP, PC3, OUTPUT)
')
ifdef(`conf_TANKLEVEL_LOCK', `
  pin(TANKLEVEL_LOCK, PA2, INPUT)
')

Meaning:

  • TANKLEVEL_PUMP - output pin for driving the pump relay
  • TANKLEVEL_LOCK - optional pin for external lock signal (see Configuration)

Mechanical setup

                   +-------+
                   |Sensor |
                   +---+---+
                       | +--------+
       +---------------+-+  Pump  |
       |                 +--------+
+------+------+
|      |      |
|      |      |
|------|------|
|      |      |
|      |      |
|      |      |
+-------------+
     Tank

See the following example:

Pump assembly Tank assembly

Electrical setup

Electrical setup is quite simple. Connect the TANK_PUMP port with an relay (usually via an Transistor as current amp) and the output of the Sensor with the selected ADC channel (have a look at the datasheet for power supply decoupling and output filtering). Select a optimal Vref for the ADC if possible. Schematic could look like this:

Electrical setup

Parameters

Parameters can be viewed/set by ECMD commands:

  • sensor_offset - zero offset of the pressure sensor in mV
  • med_density - medium density in g/ltr (default of 840 for fuel oil)
  • ltr_per_m - Ltr per meter tank level
  • ltr_full - Tank capacity in ltr
  • raise_time - Pump time (in 1/50 secs)
  • hold_time - Hold time before measurement (in 1/50 secs)

SNMP support

If SNMP is enabled the level can be queried by this OID's:

  • .1.3.6.1.4.1.39967.4.0 = INTEGER: current level in ltr
  • .1.3.6.1.4.1.39967.4.1 = INTEGER: tank capacity in ltr
  • .1.3.6.1.4.1.39967.4.2 = INTEGER: timestamp of last measurement (unix date)
  • .1.3.6.1.4.1.39967.4.3 = STRING: timestamp of last measurement (clear text)