Měření aktuálního objemu vody v nádrži

Měření aktuálního objemu vody v nádrži

V tomto článku si ukážeme, jak lze řešit měření výšky hladiny vody v nádrži (např. zásobník dešťové vody). Hodnoty si budeme přepočítávat na objem v litrech. V OpenHAB 3 zobrazíme aktuální hodnotu a procentualní hodnotu. K dispozici bude i graf historie hodnot.

 

Hardware

Ultrazvukový voděodolný senzor vzdálenosti JSN-SR04T

Pi-Home - pokud nemáte, viz sekci Jak na to

Software

OpenHAB

 

Aplikace

Tento senzor se skládá ze dvou částí, elektronické desky a voděodolného senzoru. Elektronickou část je tedy nutné uložit také do voděodolného pouzdra. Senzor pracuje na základě akustických vln. Více o funkci naleznete například zde: https://www.electronicwings.com/sensors-modules/ultrasonic-module-hc-sr04. Senzor dokáže měřit od cca 20 cm do 450 cm v úhlu cca 45 °. Je proto nutné, aby v blízkosti senzoru a také po stranách nebyly překážky, kde by mohlo dojít k rušení. Ideální je mít vlastní senzor v plastové trubce a umístit jej cca 25 cm nad maximem vodní hladiny doprostřed nádrže.

Senzor hladiny vodni nadrze

 

 

Postup

Senzor osadíme do libovolné trubky. Hlava senzoru má průměr 25 mm, případně lze zvolit trubku s větším vnitřním průměrem a vypolstrovat, aby v ní senzor držel. Trubku pak uchytíte v nádrži. Kabel od senzoru pak vede do elektronické desky. Elektronicka deska je pak přes UTP kabel připojena do domu do Arduina (cca 20m). Naše krabička je osazena těsnicí průchodkou pro UTP kabel. Zapojte čtyři libovolné žíly dle toho, jak to vypadá v zapojení na desce Arduina dle sketche (viz níže). Do Arduina nahrajeme sketch, který bude odečítávat hodnoty vzdálenosti. Dále je zde přepočet na objem nádrže a frekvence odečtu hodnoty. Zaměřte se a editujte tuto část sketche dle vaší nádrže. Kód je samozřejmě možné kombinovat a na jednom Arduinu sbírat hodnoty vzdálenosti, teplot, pir a dalších užitečných senzorů.

 

 

Výpočet objedmu nádrže dešťové vody

 

 

Celý sketch:

/*
Script to read volume of liquid medium in water tank

- connect to MQTT server
- publishes "Hello world - Arduino XYZ" to the topic
- read sensor value, calculate volume and filter results
- multiple arduino's with same generic sketch can run parallel to each other
- multiple arduino's need each to have a unique ip-addres, unique mac address and unique MQTT client-ID
- tested on arduino-mega with W5100 ethernet shield

*/


//MQTT
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
//Tank level
#include <NewPing.h>
#include <MedianFilter.h>
#include <Wire.h>

//Tank Level
#define TRIGGER_PIN 3
#define ECHO_PIN 4
#define MAX_DISTANCE 200 // (in centimeters). Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
MedianFilter filter(31,0);

//Time variable
unsigned long time_now = 0;

//Char strings for MQTT
char tankDV[10];


//---------------------------------------------------------------------------

// Arduino MAC address must be unique for every node in same network
byte mac[] = { 0xCC, 0xFA, 0x00, 0x1B, 0x19, 0x77 };

// Unique static IP address of Arduino
IPAddress ip(192,168,4,101);

// IP Address of your MQTT broker (OpenHAB server)
byte server[] = { 192,168,4,30 };

// Handle and convert incoming MQTT messages ----------------------------------------
void callback(char* topic, byte * payload, unsigned int length) {

}

// Initiate instances -----------------------------------
EthernetClient arduino_XYZ;
PubSubClient client(server, 1883, callback, arduino_XYZ);
//-------------------------------------------------------


void setup()
{


// Setup ethernet connection to MQTT broker
Ethernet.begin(mac, ip);
if (client.connect("arduino_XYZ", "openhabian", "openhabian")) { // change as desired - clientname must be unique for MQTT broker
client.publish("sensors","Hello world - here Arduino XYZ with IP 192.168.4.101");
}
}


//-----------------------------------------------
long lastReconnectAttempt = 0;

boolean reconnect() {
if (client.connect("arduino_XYZ", "openhabian", "openhabian")) {
// Once connected, publish an announcement...
client.publish("sensors","Arduino XYZ - reconnected");
// ... and resubscribe
client.subscribe("sensors");
}
return client.connected();
}
//----------------------------------------------

void loop()
{

if (!client.connected()) {
long now = millis();
if (now - lastReconnectAttempt > 5000) {
lastReconnectAttempt = now;
// Attempt to reconnect
if (reconnect()) {
lastReconnectAttempt = 0;
}
}
} else {
// Client connected

client.loop();
}

// Collect sensor data every 30 seconds. Change value 30000 ms to another if you want
if(millis() >= time_now + 30000){
time_now += 30000;

//============TANK LEVEL SENSOR============================
unsigned int otank1,uStank1 = sonar.ping(); // Send ping, get ping time in microseconds (uStank1).
filter.in(uStank1);
otank1 = filter.out();
//Calculate volume in litres (add values in centimeters): ((sensor height from bottom - sensor value) * pi * r2)/1000
float cmtank1 = ((160-(otank1 / US_ROUNDTRIP_CM))*3.14*6400)/1000;
//Filter value - we should get only values between maximum volume of tank and minimum volume
if ((cmtank1 <=2700) && (cmtank1 >= 50)){
dtostrf(cmtank1,3, 0, tankDV);
client.publish("pihome/sensor/water/rain", tankDV);
}
}
delay(1000);

}

// End of sketch ---------------------------------

 

OpenHAB

Do OpenHAB 3 dostaneme hodnoty ze senzoru následovně. Vytvoříme si Thing typu MQTT. Pak přidáme Channel. Moje záložka Code by v tomto případě vypadala takto:

UID: mqtt:topic:pihome:sensors-other
label: Sensors other
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:pihome
channels:
  - id: SW101
    channelTypeUID: mqtt:number
    label: WaterTank Litres Rain
    description: null
    configuration:
      stateTopic: pihome/sensor/water/rain

Pak vytvořte Item ze záložky Channels. Když už máte hodnotu v OpenHAB, pojďte si ji dát na plochu uživatelskeho rozhraní podle následujících screenů:

PiHome - Automatizace měření výšky hladiny

PiHome - Automatizace měření hladiny vody

 

PiHome - OpenHAB UI Měření hladiny

PiHome - Graf měření hladiny vody

Hladina dešťové vody v nádrži v mobilu

 

PS: Pokud hledáte co znamená hodnota SW101p - je to procentualní obsah vody v nádrži. Jak toto dostat? jednoduše si vytvořte prázdný item typu number "SW101p" a přidejte následující pravidlo. Pravidlo podělí aktuální objem jedním procentem. Pro mou nádrž je výpočet jednoho procenta následovný  2700 litrů / 100 = 27. Viz níže:

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: SW101
      state: ""
      previousState: ""
    type: core.ItemStateChangeTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: "

        \   sendCommand(SW101p, (SW101.state as Number)/27)

        \   "
    type: script.ScriptAction

Co dál?

 

Můžete přidat různe pravidla pro chování dalších zařízení a čerpadel, např:

  • je-li stav nižší než 300 L, doplnit vodu z řádu
  • je-li vyšší než 2500, přečerpat do další nádrže
  • je-li nižší než 1000, nepoužívat k zálevce atd. atd.

Použité knihovny ke stažení:

Package icon libraries.zip
Použité knihovny

 

Hodnocení článku:

Průměr: 4.9 (12 hlasů)

Podpořte nás:

Přidat komentář:

Komentáře

Your profile picture

Dekuji za navod. Presne tohle jsem pred nedavnem resil.

Patrik

Your profile picture

Děkuji za nasměrování ohledně tohoto problému.Jen bych se chtěl zeptat, jakou  knihovnu medianFilter.h používáte?
Děkuji za odpověď.

Your profile picture

Dobrý den,
nedohledal jsem zdroj knihovny. Přikládám knihovny v zipu na konci článku ke stažení.

Přidat komentář

Nejnovější články v blogu

Linux Live Distribution Persistent USB
Vytvoření Persistent Live USBHodnocení: 
20%

Jak si vyzkoušet Linux? Přímo na vašem notebooku nebo počítači nabootováním z USB flash disku, nebo ještě lépe z externího SSD. Pokud se vám to zalíbí, v tomto návodu naleznete postup, jak vytvořit persistentní live distribuci, což znamená, že všechny změny, které v Linuxu uložíte, tam zůstanou. Můžete si tedy nainstalovat aplikace, ukládat dokumenty atd. Prostě takový přenositelný Linux v kapse, který lze spustit na jakémkoliv podporovaném počítači nebo notebooku.

SmartHome WhatsApp notifikace OpenHAB, Home Assistant
WhatsApp - notifikace zdarmaHodnocení: 
0%

Rádi byste dostávali notifikace z chytré domácnosti formou zpráv do WhatsApp messengeru? Ačkoliv z tohoto messengeru nejsme nadšení, mnoho lidí jej používá a je zbytečné instalovat jiný pouze kvůli chytrému domu. Pro daný kontakt je pak možné nastavit specifické zvonění, takže budete hned vědět, že zpráva přišla z vašeho domu. Našli jsme možnost, jak toto využívat bez poplatku. Jmenuje se CallMeBot...

Tailscale - VPN bez veřejné IP
Tailscale - přístup bez veřejné IP adresyHodnocení: 
100%

Služba Tailscale řeší přístup mezi jednotlivými zařízeními, pokud nemáte možnost veřejné IP adresy. Pro jednoho uživatele je zdarma s podporou max 100 zařízení. Ukážeme si jak Tailscale nainstalovat na Raspberry Pi, které budeme mít někde doma a do klienta (Android, iPhone) ze kterého budeme chtít přistupovat k domácímu Raspberry Pi. Náším příkladem bude vzdálený přístup k OpenHAB běžícím na Raspberry Pi. Nicméně stejné nastavení platí pro spoustu jiných aplikací - domácí NAS, PiHole, Home Assistant, Domoticz, NextCloud a jiné.

Shelly MQTT implementace
Shelly a OpenHABHodnocení: 
100%

Značka Shelly je známa svými produkty komunikujicími hlavně přes WiFi a zahrnujicími ovládané zásuvky, relé pod vypínače, relé pro ovládaní žaluzíí a mnoho dalších produktů. Jedna z výhod pro nasazení je možnost načítat a taky ovládat tyto zařízení pomocí univerzálního protokolu MQTT. Napříč existujícímu addonu pro OpenHAB i Home Assistant si ukážeme jak používat Shelly zařízení bez instalace jakéhokoliv rozšíření.

Victron & OpenHAB
Victron a chytrý důmHodnocení: 
100%

V tomto příspěvku si ukážeme jak načítat informace z fotovoltaické elektrárny od firmy Victron. Propojíme se s jednotkou Cerbo přes MQTT. Na základě těchto hodnot pak můžeme spínat různé spotřebiče (topení, bojler atp.) a předejít plýtvání baterie pro velké spotřebiče v době, kdy nemusí běžet atp.

GoodWe a chytrá domácnost
Smart Home a GoodWeHodnocení: 
100%

V příspěvku ukážeme krok po kroku jak komunikovat chytrou domácnosti přímo se střídačem Goodwe a dostávát aktuální informace (narozdíl od SEMS portálu). Tyto informace jsou nezbytné pokud chceme v chytrém domě nějak reagovat na aktuální parametry např. spínání dodatečného chlazení nebo spínání zásuvky se zátěží.

Ovládání domu hlasem
Hlasové ovládání domu AlexouHodnocení: 
100%

V tomto článku propojíme hlasového asistenta Amazon Echo Dot s open source domácí automatizací. Nepoužíváme OpenHAB Cloud, tz. vše běží lokálně. V tomto případě je nutných pár nastavení navíc, nicméně výsledek stojí za to!

NFC Tag Chytrý dům
NFC tagy v chytrém doměHodnocení: 
100%

NFC (Near Field Communication) tagy jsou malé plastové nebo papírové nálepky, které mohou být použity k automatizaci různých funkcí v domácnosti. V čláku vám ukážeme příklady použití a návod jak zapsat akci na NFC tag pomocí mobilního telefonu.

WireGuard iOS
Nastavení WireGuard připojení v iOSHodnocení: 
0%

V tomto článku najdete podrobný návod, jak se připojit k WireGuard VPN z iOS.

WireGuard z Androidu
Nastavení WireGuard připojení v AndroiduHodnocení: 
100%

V tomto článku najdete podrobný návod, jak se připojit k WireGuard VPN z Androidu.