Uwzględnienie tolerancji wilgotności do włączania przekaźnika

0

Witam. Mam pewien problem , dokładnie nie wiedziałem jak go poprawnie nazwać ale może tolerancja(?). Chodzi o to iż mam urządzenie które wykonuje mi pomiar wilgotności (czujnik) oraz ustawiam za pomocą potencjometru jaka ta wilgotność ma być w pomieszczeniu. Problem polega na tym iż nie wiem w jaki sposób uwzględnić , tak jakby , tolerancję +/- 1. Tzn. gdy zmienna "wartosc" która jest ustalana za pomocą potencjometru osiągnie mi wartość np .50 oraz zmienna "WILG" będzie wynosiła 50 to powinien mi się wyłączyć przekaźnik. Problem w tym iż nie jest praktycznie możliwe osiągnięcie tych samych wartości tych dwóch zmiennych. W jaki sposób napisać to żeby była tolerancja +/- 1? czyli żeby w przypadku np. wartosci 49 a wilg 50 już wyłączył się przekaźnik.

Fragment kodu:

if(wartosc==WILG)
{
  digitalWrite(relay_pin, HIGH);
  digitalWrite(relay_pin2, HIGH); 
0

Nie chodzi o to , w tym przypadku musi być operator równości bo wymaga tego program lecz z taką tolerancją +/- 1 . Da się to jakoś zrobić?

1
if (wartosc >= WILG - 1 && wartosc <= WILG + 1) {
  /* ... */
}

Bez większej wiedzy domenowej (o tym, co konkretnie robisz i jak to działa), to maks, co można podpowiedzieć.

2
if (wartoscZmierzona - wartoscDocelowa > epsilon) {
     osuszaj();
} else if (wartoscZmierzona - wartoscDocelowa < -epsilon) {
     nawilzaj();
} else {
     jestDobrze();
}
1

Dlaczego nie mozesz skorzystac z operatora "<" lub ">"? Z tego co zrozumialem w zadaniu masz narzucone wykorzystanie w warunkach tylko i wylacznie "=="? Totalny bezsens.
Ale jezeli chcesz to tak zrobic to mozesz w ten sposob:

 if(wartosc-1==WILG || wartosc == WILG || wartosc +1 == WILG)

Tylko w tym przypadki tolerancja musi wynosic dokladnie +-1. Jezeli bedzie mniejsza to warunek nie bedzie spelniony. Jakbys wykorzystal '<' to byloby prosciej i lepiej.

0

tyle mi wystarczy - dzięki wielkie za pomoc ,o to mi chodziło ;) można zamknąć :)

0

Z pomiarami to raczej hasla "histereza", "srednia kroczaca" i "czas minimalny pomiaru" (to ostatnie zmyslone na kolanie, stosowane np w klawiaturach)...

0

Wiem że histereza aczkolwiek jest to forum c++ więc chciałem to nazwać "pojętnie" dla wszystkich ;)

0

W takich zastosowaniach używałbym (z nawyku) właśnie < i > albo <= i >= dla podkreślenia w którą stronę idziemy i uniknięcia sytuacji w której z jakiegoś powodu przeskoczymy wartość dokładną, a nie ==.
Bo co jak ci zmierzona wartość skoczy z 49 do 51 a reagujesz tylko na == 50?

0

Tak, tak jak napisałem Patryk27 podesłał odpowiednie rozwiązanie za co dziękuje ;) innym też dziękuje za przedstawienie swoich - wiedzy nigdy za wiele ;)

0

Histereza na poziomie "1" jest za mała. Sam mówisz że pomiar jest bardziej szczegółowy i rzadko idealnie trafia. Może przeskoczyć z 49 na 52, i może się wahać, wentylator nic natychmiast nie zrobi.
Sterowanie tego typu (termiczne, wilgotnościowe) działa "do granicy" np 50, PLUS w razie że nie da się osiągnąć celu w dłuższym czasie, wyłączyć się aby nie zniszczyć.

Tutaj <50 wyłącz, >60 włącz (lub na odwrót), plus timer na pracę więcej niż X godzin

1 użytkowników online, w tym zalogowanych: 0, gości: 1