Нужно сделать, чтобы насос переключался по заданным условиям

polyana
Offline
Зарегистрирован: 23.04.2022

Я делаю стенд для регулирования уровнем воды, но у меня возникла проблема. Ультразвуковой датчик HC-SR04 измеряет уровень воды, в случае, если вода достигнет нужного уровня, который заранее задан в скетче, должен переключиться насос, но насос не переключается. Если нажимаю на клавишный переключатель, насос также не отключается. Ультразвуковой датчик определяет уровень, это можно понять по видео, когда подношу руку к датчику и на плате arduino загорается тусклый световой сигнал, также уровень отображается в мониторе порта, в программе arduino ide. Поплавковый датчик, сенсорная кнопка и пьезо-пищалка работают нормально.

Подключал всё по схеме подключения:

**![|497px;x319px;](upload://shAA1W80rdqvTseLNtWgeu9Sscu.jpeg)**

Система состоит из:

Ультразвуковой датчик HC-SR04

Сенсорная кнопка TTP223

Arduino Nano V3

Кнопочный переключатель KCD1-101

Литиевая аккумуляторная батарея HG2

Сигнализирующая пьезо-пищалка

Водяной насос MINI DC6-12V R385

Одноканальный релейный модуль JQC-3FF-S-Z

Поплавковый выключатель

Скетч для работы системы:

//Программа управления насосом по датчику расстояния
#include "Ultrasonic.h"


boolean pereliv = 0; //переменная для хранения значения с датчика перелива
boolean key = 0;    //переменная для хранения значения с кнопки (1 если кнопка нажата, 0 если нет)
boolean trevoga = 0; //переменная сигнализирующая о наличии тревоги
float maxLevel=4.00;  //расстояние в сантиметрах, соответствующее максимальному уровню жидкости в емкости
float minLevel=7.00; //расстояние в сантиметрах, соответствующее минимальному уровню жидкости в емкости

Ultrasonic ultrasonic(3, 4); //подключили датчик расстояния (TRIG к 3 пину. ECHO к 4)



void setup()
{
  Serial.begin(9600); 	 // запускаем серийный порт
  pinMode(8, INPUT_PULLUP);  //ПОДКЛЮЧИЛИ ПИН КНОПКИ (ИСПОЛЬЗУЕТСЯ ДЛЯ ОТКЛЮЧЕНИЯ РЕЖИМА ТРЕВОГИ)
  pinMode(10, INPUT_PULLUP);  //ПОДКЛЮЧИЛИ ПИН ПОПЛАВКОВОГО ВЫКЛЮЧАТЕЛЯ (НА СЛУЧАЙ ПЕРЕЛИВА)
}

void loop()
{
  float rast = ultrasonic.Ranging(CM); 	// получаем расстояние с ультразвукового датчика и сохраняем его в rast
  pereliv = digitalRead(10); // считываем состояние поплавкового выключателя
  key = digitalRead(8); // считываем состояние кнопки

  Serial.print(rast); 					// выводим растояние до воды в монитор порта
  
  if (rast > minLevel) { //если растояние до поверхности воды больше 7 см
    digitalWrite(12, HIGH);  //включаем питание на реле
    digitalWrite(13, HIGH);  //подаем сигнал реле на включение насоса
    Serial.println("    OnNasos");
  }

  if (rast < maxLevel) { //если растояние до поверхности воды меньше maxLevel;
    digitalWrite(13, LOW); //даем сигнал на отключение реле
    digitalWrite(12, LOW); //отключаем питание реле
      Serial.println("    OFFNasos");
  }

  if (pereliv == 1) {//если сработал поплавковый выключатель, то
    trevoga = 1;  //включаем режим тревоги
  }

  if (trevoga == 1) {  //если режим тревоги включен, то
    digitalWrite(13, LOW); //даем сигнал на отключение реле
    digitalWrite(12, LOW); //отключаем питание реле
    tone(7, 2500, 250); //подаем сигнал тревоги с частотой 2500 и длительностью 250мс
  }

  if (key == 1) {  //если нажата кнопка, то
    trevoga = 0;  //отключаем режим тревоги
  }

 if (trevoga == 0) {  //если режим тревоги отключен, то
    noTone(7);  //отключаем пьезопищалку
  }



  delay(500); 								// задержка

  
}

Видео как у меня работает система: https://www.youtube.com/watch?v=R5m0cp_jRFo&t=21s

Видео как должна работать система:

https://www.youtube.com/watch?v=5aiIxOBYARY&list=WL

Вся система должна работать по принципу, микроконтроллер Arduino Nano опрашивает ультразвуковой датчик, получая расстояние до поверхности жидкости. В программе можно указать минимальное и максимальное расстояние до неё. Микроконтроллер Arduino Nano будет отключать и включать насос, автоматически поддерживая уровень жидкости в заданных диапазонах. Для защиты от перелива дополнительно установлен поплавковый выключатель. В случае нештатной ситуации, например, если не сработает ультразвуковой датчик расстояния, то для предотвращения затопления сработает поплавок и микроконтроллер Arduino Nano отключит насос и подаст сигнал на звуковой излучатель, сигнал которой будет говорить об аварийной ситуации, чтобы выключить сигнализацию, нужно коснуться сенсорной кнопки.

Ваша задача: найти ошибку, из-за которой не переключается насос в заданных диапазонах и исправить её.

polyana
Offline
Зарегистрирован: 23.04.2022

Cхема подключения: 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

нам учитель задаёт с иксами задачу...
Тут и код и эмуляция, всё работает
Что не устраивает?

polyana
Offline
Зарегистрирован: 23.04.2022

ua6em пишет:

нам учитель задаёт с иксами задачу...
Тут и код и эмуляция, всё работает
Что не устраивает?

Можете скинуть пожалуйста свою почту или ссылку на страницу вконтакте?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ua6em @ yandex.ru

Для начала ты бы подключение выключателя и бесконтактной кнопки проверил бы )))

Бармалей
Бармалей аватар
Offline
Зарегистрирован: 23.09.2019