Chytrá WiFi zásuvka Sonoff S26
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
Arduino průtokoměr je vstupní modul pro Arduino, který umožňuje uživateli monitorovat množství proudící kapaliny skrze měřící turbínu. Tento průtokoměr YF-S201 zvládá měřit průtok v rozsahu 1 až 30 litrů za minutu s poměrně dobrou přesností. Naměřené hodnoty mezi 0 až 1 litrem za minutu mohou být méně přesné díky návrhu turbíny, která je navržena právě na vyšší průtoky. Pracovní napětí průtokoměru je v rozsahu 5 až 18 V a maximální proudový odběr je 15 mA (při napětí 5V). Provozní teploty udávané výrobcem jsou pak -25 až +80°C. Pro připojení do oběhového systému je pak na obou přípojkách závit o velikosti ½“. Samotné měření průtoku probíhá detekováním pulzů na výstupním pinu průtokoměru, přičemž charakteristika pulzů je 450 pulzů na litr kapaliny.
Pro úspěšné propojení průtokoměru s Arduino deskou propojíme celkem 3 vodiče. Připojíme červený drát na +5V Arduina, žlutý drát na pin D2 a černý drát na zem. Výstupní pin (žlutý drát) můžeme zapojit i na jiný volný digitální pin s podporou přerušení, ale je nutné tuto volbu provést také na začátku programu. Seznam těchto pinů pro různé Arduino desky si můžete prohlédnout zde.
Ukázkový kód obsahuje na svém začátku nastavení čísla propojovacího pinu a pinu přerušení. Jako další vytvoříme kalibrační konstantu společně s pomocnými proměnnými, do kterých budeme ukládat data v průběhu programu. V podprogramu setup nastavíme komunikaci po sériové lince, směr vstupního pinu a nastavení přerušení. To je v tomto případě nastaveno na zmíněný přerušovací pin, pro aktivaci je nastaven podprogram prictiPulz a detekce je zvolena na sestupnou hranu. Nekonečná smyčka loop je nastavena tak, aby kromě vyhodnocení výsledků byla volná pro další příkazy. Pokud je v počáteční if podmínce detekován rozdíl uloženého a aktuálního času větší než 1 sekunda, tak provedeme všechny výpočty a vytiskneme výsledek. Jako první krok vypneme detekci přerušení, aby nám neovlivňovala naměřené výsledky. Dále vypočteme průtok z přesného rozdílu času, počtu naměřených pulzů a kalibračního faktoru. Poté tento výsledek přepočteme ještě na průtok kapaliny v mililitrech a přičteme aktuálně změřený průtok do proměnné udávající celkový objem. V dalším kroku vytiskneme všechny vypočtené údaje po sériové lince, vynulujeme počítadlo pulzů a uložíme aktuální čas pro další měření. V posledním kroku už jen znovu aktivujeme detekci přerušení a hlavní nekonečná smyčka se opakuje. Pod touto smyčkou se pak nachází ještě podprogram pro obsluhu přerušení, který obsahuje pouze inkrementaci čítače pulzů.
// Arduino průtokoměr YF-S201 // nastavení čísel propojovacích pinů #define pinPrutokomer 2 #define pinPreruseni 0 // 0 = digitální pin 2 // kalibrační proměnná, u senzoru YF-S201 // je to 4,5 pulzu za vteřinu pro 1 litr za minutu const float kalibrFaktor = 4.5; // pomocné proměnné volatile byte pocetPulzu = 0; float prutok = 0.0; unsigned int prutokML = 0; unsigned long soucetML = 0; unsigned long staryCas = 0; void setup() { // komunikace po sériové lince rychlostí 9600 baud Serial.begin(9600); // nastavení směru vstupního pinu pinMode(pinPrutokomer, INPUT); // nastavení vstupního pinu pro využití přerušení, // při detekci přerušení pomocí sestupné hrany (FALLING) // bude zavolán podprogram prictiPulz attachInterrupt(pinPreruseni, prictiPulz, FALLING); } void loop() { // místo pro další příkazy // pokud je rozdíl posledního uloženého času a aktuálního // 1 vteřina nebo více, provedeme měření if ((millis() - staryCas) > 1000) { // vypnutí detekce přerušení po dobu výpočtu a tisku výsledku detachInterrupt(pinPreruseni); // výpočet průtoku podle počtu pulzů za daný čas // se započtením kalibrační konstanty prutok = ((1000.0 / (millis() - staryCas)) * pocetPulzu) / kalibrFaktor; // výpočet průtoku kapaliny v mililitrech prutokML = (prutok / 60) * 1000; // přičtení objemu do celkového součtu soucetML += prutokML; // vytištění všech dostupných informací po sériové lince Serial.print("Prutok: "); Serial.print(prutok); Serial.print(" l/min"); Serial.print(" Aktualni prutok: "); Serial.print(prutokML); Serial.print(" ml/sek"); Serial.print(" Soucet prutoku: "); Serial.print(soucetML); Serial.println(" ml"); // nulování počítadla pulzů pocetPulzu = 0; // uložení aktuálního času pro zahájení dalšího měření staryCas = millis(); // povolení detekce přerušení pro nové měření attachInterrupt(pinPreruseni, prictiPulz, FALLING); } } // podprogram pro obsluhu přerušení void prictiPulz() { // inkrementace čítače pulzů pocetPulzu++; }
Po nahrání ukázkového kódu do Arduino desky s připojeným průtokoměrem dostaneme například tento výsledek:
Prutok: 0.00 l/min Aktualni prutok: 0 ml/sek Soucet prutoku: 0 ml Prutok: 3.77 l/min Aktualni prutok: 62 ml/sek Soucet prutoku: 62 ml Prutok: 3.11 l/min Aktualni prutok: 51 ml/sek Soucet prutoku: 113 ml Prutok: 0.00 l/min Aktualni prutok: 0 ml/sek Soucet prutoku: 113 ml
Arduino průtokoměr je zajímavý vstupní modul, s kterým můžeme obohatit Arduino o měřič průtoku kapaliny. Může nalézt uplatnění v různých projektech, jako například měřič spotřeby vody v domácnosti u jednotlivých spotřebičů, měřič objemu pro dávkovač vody a další. Vzhledem ke konstrukci je samozřejmě možné využít tento průtokoměr na měření průtoku jak kapalin, tak i plynů. Jen je nutné počítat s omezeným měřícím rozsahem, který je maximálně 30 litrů za minutu a u hodnot do 1 litru za minutu můžeme dostávat zkreslené výsledky.
Seznam použitých komponent:
https://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
https://dratek.cz/arduino/831-arduino-prutokomer-1-30l-min-1500635984.html
Chytrá domácnost umožňuje ovládat elektrické spotřebiče na dálku. A přesně to umožní zásuvka Sonoff S26.
e-Paper displeje už jsou dostupné i pro bastlení za rozumné ceny a pro jejich ovládání se hodí tento Driver.