Akcje warunkowe w Arduino IDE

User avatar
klew
Posts: 9200
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Kolejna nowość :)

Na moim branchu są dostępne do testowania nowe rodzaje akcji: warunkowe.
Akcje warunkowe można dodać na kanałach, które posiadają jakąś wartość liczbową (na chwilę obecną poza "electricity meter").
Działa to np. tak:

Code: Select all

#include <supla/control/relay.h>
#include <supla/sensor/DS18B20.h>

...
auto grzalka = new Supla::Control::Relay(...);
auto termometr = new Supla::Sensor::DS18B20(...);

termometr.addAction(Supla::TURN_ON, grzalka, OnLess(21.8));
termometr.addAction(Supla::TURN_OFF, grzalka, OnGreater(22.2));
Albo:

Code: Select all

#include <supla/control/relay.h>
#include <supla/sensor/DHT.h.h>

...
auto nawilzacz = new Supla::Control::Relay(...);
auto dht = new Supla::Sensor::DHT(...);

dht.addAction(Supla::TURN_ON, nawilzacz, OnLess(40, true));
dht.addAction(Supla::TURN_OFF, nawilzacz, OnGreater(55, true));
Wszystkie akacje "On" działają na zasadzie wyzwolenia w momencie spełnienia warunku. Wyzwolenie następuje tylko raz po spełnieniu warunku. Następne wykonanie będzie dopiero po tym, gdy warunek przestanie być spełniony i ponownie wejdzie w zakres "spełnienia".
Przykładowo dla termometru z powyższego przykładu, gdy temperatura spadnie z 21.8 do 21.7, to zostanie włączona grzałka. Następne włączenie nastąpi, dopiero, gdy temperatura wzrośnie powyżej 21.8 i następnie znowu spadnie poniżej 21.8. Nie ma przy tym znaczenia, czy my lub inna akcja przełączy "grzałkę".

Lista dosępnych warunków:

Code: Select all

OnLess(liczba) - warunek: wartość kanału < liczba
OnLessEq(liczba) - warunek: wartość kanału <= liczba
OnGreater(liczba) - warunek: wartość kanału > liczba
OnGreaterEq(liczba) - warunek: wartość kanału >= liczba
OnEqual(liczba) - warunek: wartość kanału == liczba
OnBetween(liczba1, liczba2) - warunek wartość kanału > liczba1 i wartość < liczba2
OnBetweenEq(liczba1, liczba2) - warunek wartość kanału >= liczba1 i wartość <= liczba2
Dodatkowo każdy z powyższych warunków przyjmuje dodatkowy parametr typu bool - działa on przy kanałach "wilgotność+termometr" (np. DHT22). Gdy ustawimy ten parametr na "true", to będzie sprawdzana druga wartość z kanału (czyli wilgotność). Przykładowe użycie jest w drugim przykładzie powyżej.
Dla kanału ciśnienia z BME280 jeszcze tych warunków nie zaimplementowałem, ale nie wiem czy ktoś będzie chciał tego używać, więc jakby co - dajcie znać.

Inny przykład użycia warunków dodałem w przykładach Arduino: GarageParkingAssistLight - czyli proste urządzenie do zapalania lampek zielonej, pomarańczowej i czerwonej na podstawie odległości z sensora HC_SR04.

W planach mam jeszcze dodanie obsługę liczników energii, aby dało się np. sterować jakimś przekaźnikiem na postawie danych produkcji prądu (np. aby włączać podgrzewacz wody, gdy produkujemy > 1 kW.

Mimo tego, że warunków można użyć do budowy termostatu, to chciałbym jasno napisać, że to nie jest termostat. Termostat będzie dużo fajniejszy ;), ale na będziemy musieli jeszcze poczekać, aż pojawi się odpowiedni kanał do tego typu funkcji.

Dajcie znać, jeśli macie jakieś ciekawe pomysły użycia tej funkcjonalności, oraz jeśli macie pomysły co by można jeszcze dodać.
Widzimy się na Supla Offline Party - 19.10.2024
https://forum.supla.org/viewtopic.php?t=15820
User avatar
lukfud
Posts: 2189
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

wow, rozkręcasz się widzę :)
https://www.facebook.com/groups/supladiy/
krycha88
Posts: 5370
Joined: Fri Nov 16, 2018 7:25 am

Post

Fajne, można to wykorzystać do zabezpieczenia układu przed przegrzaniem wykorzystując termistor NTC ;)
https://gui-generic-builder.supla.io/
User avatar
Gang
Posts: 639
Joined: Fri Nov 09, 2018 12:44 pm

Post

To już wiem, dlaczego nie ma BME w GUI.
Jakby się dało to jednak ten czujnik dodać i @krycha88 wrzuciłby to do GUIa byłoby pięknie, bo bym nie musiał rozbierać mojej czujki w łazience.
Która w zamyśle ma włączać wentylator kiedy żona tam saune robi.

Z dodatkowych, to mi się gdzieś rzucił w oczy projekt wagi, która pokazuje ile gazu w butli zostało, czy to jest wtedy też wartość liczbowa? można by dodać aby zapalało czerwone światło jak waga spada poniżej X. Chociaż ja tego nie wykorzystam, bo indukcja.
Tu jest za mało miejsca abym wszystko mógł wypisać, co mam z supli :mrgreen:
User avatar
klew
Posts: 9200
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Gang wrote: Sat Feb 06, 2021 6:06 am To już wiem, dlaczego nie ma BME w GUI.
Jakby się dało to jednak ten czujnik dodać i @krycha88 wrzuciłby to do GUIa byłoby pięknie, bo bym nie musiał rozbierać mojej czujki w łazience.
Która w zamyśle ma włączać wentylator kiedy żona tam saune robi.
Bme działa z warunkami dla temperatury i wilgotności. Nie działają tylko warunki dla ciśnienia
Widzimy się na Supla Offline Party - 19.10.2024
https://forum.supla.org/viewtopic.php?t=15820
User avatar
Kamil Ból
Posts: 193
Joined: Tue May 05, 2020 6:55 pm
Location: Chęciny

Post

Super sprawa tylko pasowało by tu zastosować coś na zasadzie histerezy ponieważ w chwili punktu 0 przekaźnik będzie narażony na częste przełączanie. Może wystarczy tu jakieś opóźnienie czasowe lub temperaturowe.
krycha88
Posts: 5370
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Sat Feb 06, 2021 8:06 am
Gang wrote: Sat Feb 06, 2021 6:06 am To już wiem, dlaczego nie ma BME w GUI.
Jakby się dało to jednak ten czujnik dodać i @krycha88 wrzuciłby to do GUIa byłoby pięknie, bo bym nie musiał rozbierać mojej czujki w łazience.
Która w zamyśle ma włączać wentylator kiedy żona tam saune robi.
Bme działa z warunkami dla temperatury i wilgotności. Nie działają tylko warunki dla ciśnienia
Ok nie wiedziałem tego, więc dzisiaj dodam ;)
https://gui-generic-builder.supla.io/
User avatar
Gang
Posts: 639
Joined: Fri Nov 09, 2018 12:44 pm

Post

A ja zaraz update wrzucę i będę testował, już nawet nawilżacz z szafy wyciągnąłem :mrgreen:
Tu jest za mało miejsca abym wszystko mógł wypisać, co mam z supli :mrgreen:
krycha88
Posts: 5370
Joined: Fri Nov 16, 2018 7:25 am

Post

Kamil Ból wrote: Sat Feb 06, 2021 8:17 am Super sprawa tylko pasowało by tu zastosować coś na zasadzie histerezy ponieważ w chwili punktu 0 przekaźnik będzie narażony na częste przełączanie. Może wystarczy tu jakieś opóźnienie czasowe lub temperaturowe.
Zwróć uwagę, że warunkowanie działa na dwóch wartościach on/off a nie jednej jak w termostacie więc nie będzie takiego problemu ;)
https://gui-generic-builder.supla.io/
User avatar
Kamil Ból
Posts: 193
Joined: Tue May 05, 2020 6:55 pm
Location: Chęciny

Post

Siadłem i doczytałem dokładniej i rzeczywiście masz rację. :shock: Sory że zawracam Gitarę :D Pozdrawiam

Return to “Arduino IDE”