// управляем мотором в ручном режиме в соответствии с состоянием кнопки 1 **(открыть)**
if(buttonState == LOW) {
digitalWrite (**IN1**, HIGH); // включить мотор
// управляем мотором в ручном режиме в соответствии с состоянием кнопки 2 **(закрыть)**
if(buttonState_2 == LOW) {
digitalWrite (**IN2**, HIGH); // включить мотор
Сигналы подаются с IN 1 на открытие, и с IN 2 на закрытие.
Что я описал неправильно? Работоспособность системы уже опробована на практике, так что этот код не просто теоретическая разработка. При ручном управлении достаточно кратковременного нажатия на кнопку, после чего напряжение на мотор подаётся в течении 7 секунд. Сигналы с ардуины идут через драйвер L298N, я об этом написал ещё в первом сообщении.
При автоматическом режиме, когда краны естественно открыты, после сигнала тревоги краны закрываются.
После устранения протечки (датчики сухие) краны открываются кнопкой открытия.
Если протечка НЕ устранена (датчики мокрые) нажатие на кнопку открытия краны не открывает. При этом звучащий прерывистый сигнал тревоги сменяется непрерывным писком. Это всё проверено.
Это наверно промышленные системы, когда датчики разнесены на десятки и сотни метров. По аналогии с сигнализацией: зачем знать через какое окно залезли воры?)
Конечно, если уж так труднодоступны коммуникации, то вопрос не в датчиках, а в неправильном дизайне. Всё должно быть доступно.
Не, ну я по себе сужу. Если квартира 8ми комнатная 200м2 или коттедж, тогда да, нужны независимые датчики.
Обязательно предусмотрите кнопку “заткнись” – возможность отключить звуковой сигнал аварии (с сохранением световых сигналов), иначе он вынесет Вам мозг пока Вы будете заниматься устранением и пока датчики не просохнут.
У меня не было такой кнопки на сигнализаторе утечки газа, а он любит срабатывать, когда, например, где-то рядом поработаешь лаком или ацетоном, так задолбало. В итоге, переделал сигнализатор добавил такую кнопку – как разорётся, давлю, он умолкает, но мигать красным продолжает. Когда состояние тревоги уйдёт, через несколько минут (для гистерезиса) сам возвращается в обычный дежурный режим (это, чтобы не было так, что “выключил, забыл и оно больше вообще не верещит никогда”).
У меня вапще алармит 2 минуты, потом, если вручную не отключишь, то сам отключается. Это на случай, если оварея случилась ночью, а нас никаво дома нет, зачем соседям эти писки слушать? А так, краны перекрыл, попикал 2 минуты, 4 СМС отправил на 2 номера - и спи-отдыхай.
Upd. Даччики у меня беспроводные на Тиньках, 6 штук. По HC-12 передают состояние раз в минуту, чтоб я знал, када батарейки менять.
Upd2. Нада, наерна собрать всё в кучу, да проект выкласть штоли. 9 лет пока без нареканий работает.
Это можно исправить сделав прописывание датчиков в памяти. У вас уже “даром” на борту энергонезависимая память. При включении проверяйте состояние кнопки, если она в этот момент нажата, определяйте какие из датчиков дают “мокрое” состояние (а такими же будут и отключенные), запоминайте их. Проверку производите только по тем датчикам, которые были в момент “калибровки” сухими. А после перезапуска у вас в памяти сохраненные рабочие датчики, применяйте эти параметры.
Кстати, если у вас система сработает на протечку, то через не очень определенное время (варьируется в пределах месяца с хвостиком) она начнет глючить - сигнализация будет то работать то не работать (но кранами будет управлять). Это касается беспрерывного режима работы, без перезапуска (штатный режим для такой системы).
Ничего хитрого в логике: при включении проверяет: если датчики сухите, то открывает краны, если они закрыты. При сработке закрывает и пищит минут 10. Потом не помню, вроде попискивает тоже периодически, а может и нет. То есть там из управления только сетевой выключатель.
В алгоритме “блинк” на него завязан. Сработав на больших значениях и после выхода на второй круг будет молчать до наступления момента прошлого срабатывания по циклу переполнения.
Исправляется применением abs в условии блинка (разница по модулю).
Но тут же не? Обсуждение не идеального кода, а опубликованного как рабочий и протестированный проект.
if (millis() - myTimer >= 500) { // таймер на 500 мс (2 раза в сек)
myTimer = millis();
Итак, вводные условия. Последнее срабатывание протечки было на значениях millis()==1000000. Прошло время и сейчас millis()==1000, сработал датчик. Не моргаем, не пищим.
Вот кстати для кода полезно, когда это сначала “теоретическая разработка”, а не подгонка под частные случаи. Такие ошибки еще на этапе проектирования отсекаются.