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

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

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

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

01//Программа управления насосом по датчику расстояния
02#include "Ultrasonic.h"
03 
04 
05boolean pereliv = 0; //переменная для хранения значения с датчика перелива
06boolean key = 0;    //переменная для хранения значения с кнопки (1 если кнопка нажата, 0 если нет)
07boolean trevoga = 0; //переменная сигнализирующая о наличии тревоги
08float maxLevel=4.00;  //расстояние в сантиметрах, соответствующее максимальному уровню жидкости в емкости
09float minLevel=7.00; //расстояние в сантиметрах, соответствующее минимальному уровню жидкости в емкости
10 
11Ultrasonic ultrasonic(3, 4); //подключили датчик расстояния (TRIG к 3 пину. ECHO к 4)
12 
13 
14 
15void setup()
16{
17  Serial.begin(9600);    // запускаем серийный порт
18  pinMode(8, INPUT_PULLUP);  //ПОДКЛЮЧИЛИ ПИН КНОПКИ (ИСПОЛЬЗУЕТСЯ ДЛЯ ОТКЛЮЧЕНИЯ РЕЖИМА ТРЕВОГИ)
19  pinMode(10, INPUT_PULLUP);  //ПОДКЛЮЧИЛИ ПИН ПОПЛАВКОВОГО ВЫКЛЮЧАТЕЛЯ (НА СЛУЧАЙ ПЕРЕЛИВА)
20}
21 
22void loop()
23{
24  float rast = ultrasonic.Ranging(CM);  // получаем расстояние с ультразвукового датчика и сохраняем его в rast
25  pereliv = digitalRead(10); // считываем состояние поплавкового выключателя
26  key = digitalRead(8); // считываем состояние кнопки
27 
28  Serial.print(rast);                   // выводим растояние до воды в монитор порта
29   
30  if (rast > minLevel) { //если растояние до поверхности воды больше 7 см
31    digitalWrite(12, HIGH);  //включаем питание на реле
32    digitalWrite(13, HIGH);  //подаем сигнал реле на включение насоса
33    Serial.println("    OnNasos");
34  }
35 
36  if (rast < maxLevel) { //если растояние до поверхности воды меньше maxLevel;
37    digitalWrite(13, LOW); //даем сигнал на отключение реле
38    digitalWrite(12, LOW); //отключаем питание реле
39      Serial.println("    OFFNasos");
40  }
41 
42  if (pereliv == 1) {//если сработал поплавковый выключатель, то
43    trevoga = 1;  //включаем режим тревоги
44  }
45 
46  if (trevoga == 1) {  //если режим тревоги включен, то
47    digitalWrite(13, LOW); //даем сигнал на отключение реле
48    digitalWrite(12, LOW); //отключаем питание реле
49    tone(7, 2500, 250); //подаем сигнал тревоги с частотой 2500 и длительностью 250мс
50  }
51 
52  if (key == 1) {  //если нажата кнопка, то
53    trevoga = 0;  //отключаем режим тревоги
54  }
55 
56 if (trevoga == 0) {  //если режим тревоги отключен, то
57    noTone(7);  //отключаем пьезопищалку
58  }
59 
60 
61 
62  delay(500);                               // задержка
63 
64   
65}

Видео как у меня работает система: 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