Гистерезис управления водяным насосом

Я использую Arduino с аналоговым датчиком давления, датчиком температуры и реле для управления водяным насосом. Простой код, который я написал, работает, но я хочу лучшего контроля.

#include <OneWire.h>
#include <DallasTemperature.h>

 const int pinCidlaDS = 2;
 int pinA0 = A0;
 int teplota;
 int rele;
 float tlak = 0;  //идеальный 290+-

OneWire oneWireDS(pinCidlaDS);
DallasTemperature senzoryDS(&oneWireDS);

void setup() {
 senzoryDS.begin();
 rele = 3;
 pinMode(3, OUTPUT);
 Serial.begin(9600);
}

void loop() {
 tlak = analogRead(A0);
 teplota = (senzoryDS.getTempCByIndex(0));
  if ((tlak < 285) && (teplota < 30)) {
   digitalWrite(rele, LOW);
   delay(7000);
 }
   else {
   digitalWrite(rele, HIGH);
   delay(500);
 };
 Serial.print("Tlak: ");
 Serial.println(tlak);
 Serial.print("Teplota: ");
 senzoryDS.requestTemperatures();
 Serial.print(senzoryDS.getTempCByIndex(0));
 Serial.println(" stupnu Celsia");
 teplota = (senzoryDS.getTempCByIndex(0));
 delay (200);

}

Теперь я использую задержку, чтобы уйти от порогового значения. И я хотел написать код, который бы работал так:

Давление ниже «x», реле включено. Давление поднимается до «Y», реле ВЫКЛ до тех пор, пока давление не станет ниже «x».

Что мне следует использовать? Не могли бы вы привести пример, если он есть? Большое спасибо! :)

, 👍1


1 ответ


2

Реализация гистерезиса оказывается довольно простой:

float pressure = read_pressure();
if (pressure < x)
    turn_relay_on();
else if (pressure >= y)
    turn_relay_off();
,

В дополнение к этому ответу вы также можете использовать функцию millis(); вместо задержки, взгляните на пример **BlinkWithoutDelay** в Arduino IDE., @ElectronSurf

@newbie, с соответствующими значениями гистерезиса вам может вообще не понадобиться логика задержки, используя либо millis(), либо delay(). Диапазон гистерезиса позволяет вам иметь диапазон «мертвой зоны», в котором ничего не меняется. Требуется время, чтобы температура перешла от значения температуры/давления «включено» к «значению выключения», поэтому насос включается и выключается реже., @Duncan C

Похоже, что приложение OP принимает решения о включении / выключении насоса на основе температуры ** и ** давления. Нам нужно знать значения как для включения помпы, так и для значений, при которых помпа должна снова отключаться., @Duncan C

@DuncanC: гистерезис для двух переменных более сложен. Обычно я рисую на плоскости (T, P) три области: «накачка включена», «насос выключена» и полоса гистерезиса между ними. Затем напишите предикат для пары (T, P) для каждого из слов «включить насос» и «выключить насос». Вырезание четверти плоскости (T<T1 && P<P1 и T>=T2 || P>=P2) — самый простой случай, но я бы не стал доверять чему-то с таким острым углом, чтобы быть где-то рядом. оптимально для любого приложения., @Edgar Bonet