//Программа управления насосом по датчику расстояния
//#include <Ultrasonic.h>
#define ECHO_PIN 2
#define TRIG_PIN 3
#define BUTTON_PIN 8
#define POPLAVOK_PIN 10
#define RELE_PIN 12
boolean pereliv = 0; //переменная для хранения значения с датчика перелива
boolean key = 0; //переменная для хранения значения с кнопки (1 если кнопка нажата, 0 если нет)
bool nasos_off = 1;
boolean trevoga = 0; //переменная сигнализирующая о наличии тревоги
float maxLevel=40.00;//расстояние в сантиметрах, соответствующее максимальному уровню жидкости в емкости
float minLevel=70.00;//расстояние в сантиметрах, соответствующее минимальному уровню жидкости в емкости
void setup()
{
Serial.begin(9600); // используем серийный порт
pinMode(LED_BUILTIN, OUTPUT);
pinMode(RELE_PIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // ПОДКЛЮЧИЛИ ПИН КНОПКИ (ИСПОЛЬЗУЕТСЯ ДЛЯ ОТКЛЮЧЕНИЯ РЕЖИМА ТРЕВОГИ)
pinMode(POPLAVOK_PIN, INPUT_PULLUP); // ПОДКЛЮЧИЛИ ПИН ПОПЛАВКОВОГО ВЫКЛЮЧАТЕЛЯ (НА СЛУЧАЙ ПЕРЕЛИВА)
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void loop()
{
pereliv = digitalRead(POPLAVOK_PIN); // считываем состояние поплавкового выключателя
key = digitalRead(BUTTON_PIN); // считываем состояние кнопки
delay(5); // задержка на дребезг контактов
float rast = readDistanceCM();
Serial.println(rast); // выводим растояние до воды в монитор порта
if (rast > minLevel && !trevoga) { // если растояние до поверхности воды больше 7 см
digitalWrite(RELE_PIN, HIGH); // включаем питание на реле
digitalWrite(LED_BUILTIN, HIGH); // подаем сигнал реле на включение насоса
Serial.println(" OnNasos");
}else{trevoga=0;}
if (rast < maxLevel) { //если растояние до поверхности воды меньше maxLevel;
digitalWrite(LED_BUILTIN, LOW); //даем сигнал на отключение реле
digitalWrite(RELE_PIN, LOW); //отключаем питание реле
Serial.println(" OFFNasos");
}
if (!pereliv && !trevoga) {//если сработал поплавковый выключатель, то
trevoga = 1; //включаем режим тревоги
digitalWrite(LED_BUILTIN, LOW); //даем сигнал на отключение реле
digitalWrite(RELE_PIN, LOW); //отключаем питание реле
tone(7, 2500, 250); //подаем сигнал тревоги с частотой 2500 и длительностью 250мс
}
delay(100); // задержка
}