1 2 3 4 5 6 7 8 9 10 0/10 0,00оценок: 0

Аквасторож на Arduino

Тема в разделе "Умный дом", создана пользователем seval, 28.04.14.

Метки:
  1. seval
    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33

    seval

    Живу здесь

    seval

    Живу здесь

    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33
    Адрес:
    Орел
    Аквасторож на Arduino
    Была у меня проблемка, оборвало шланг на горячую воду. Пока нас дома не было. Залило весь первый этаж. Ремонт в копеечку. И решил обезопасить свой дом от такой напасти.
    Поделюсь как сделал.
    http://ru.aliexpress.com/item/1pcs-motorized-ball-valve-DN25-2-way-electrical-valve/708997483.html
    Купил кран шаровый с двигателем. На 12 Вольт.
    Установил его на входе в дом. Кран двухпроводный, со встроенными концевиками.
    Сделал пару самодельных датчиков протечки.
    http://www.shaksh.in/2012/05/water-leak-detector/
    Ну и собственно мозги.
    http://www.ebay.com/itm/200957063666?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
    Подключал датчики обычной витой парой.
    Сам скетч писал в программе FLProg. Мне как наладчику язык LAD более понятен чем С+.
    Код:
    bool _k1 = 0;
    bool _tim1I = 0;
    bool _tim1O = 0;
    unsigned long _tim1P = 0;
    bool _ktim1 = 0;
    bool _k2 = 0;
    bool _k3 = 0;
    bool _k4 = 0;
    bool _k5 = 0;
    bool _tim2I = 0;
    bool _tim2O = 0;
    unsigned long _tim2P = 0;
    bool _ktim2 = 0;
    bool _gen1I = 0;
    bool _gen1O = 0;
    unsigned long _gen1P = 0;
    bool _kgen1 = 0;
    bool _k6 = 0;
    bool _bounseInput7S = 0;
    bool _bounseInput7O = 0;
    unsigned long _bounseInput7P = 0;
    bool _bounseInput8S = 0;
    bool _bounseInput8O = 0;
    unsigned long _bounseInput8P = 0;
    void setup()
    {
    pinMode(7, INPUT);
    pinMode(1, OUTPUT);
    pinMode(3, INPUT);
    pinMode(6, OUTPUT);
    pinMode(4, INPUT);
    pinMode(2, INPUT);
    pinMode(5, OUTPUT);
    pinMode(0, OUTPUT);
    pinMode(8, INPUT);
    
    _bounseInput7O =  digitalRead(7);
    _bounseInput8O =  digitalRead(8);
    }
    void loop()
    {
    
    bool  _bounceTmp7 =  (digitalRead (7));
    
    if (_bounseInput7S)
        {
         if (millis() >= (_bounseInput7P + 40))
             {_bounseInput7O= _bounceTmp7; _bounseInput7S=0;}
         }
    else
        {
         if (_bounceTmp7 != _bounseInput7O )
             {_bounseInput7S=1; _bounseInput7P = millis();}
          }
    bool  _bounceTmp8 =  (digitalRead (8));
    
    if (_bounseInput8S)
        {
         if (millis() >= (_bounseInput8P + 40))
             {_bounseInput8O= _bounceTmp8; _bounseInput8S=0;}
         }
    else
        {
         if (_bounceTmp8 != _bounseInput8O )
             {_bounseInput8S=1; _bounseInput8P = millis();}
          }
    
    
    _k1 = ((_bounseInput7O) || (_bounseInput8O));
    _k2 = ((((_k1) || (_k2))) &&((!_k4)));
    digitalWrite (1, ((_ktim1) || (_k6)));
    _k3 = (((((digitalRead (3))) || (_k1))) &&((!_ktim2)));
    if (_k3)
    {
    _tim1O  = 1;
    _tim1I  = 1;
    }
    else
    {
    if (_tim1I)
    {
    _tim1I = 0;
    _tim1P = millis();
    }
    else
    {
    if (_tim1O)
    {if ( _isTimer(_tim1P, 4000)) _tim1O = 0;
    }
    }
    }
    if(_tim1O)
    {_ktim1 = 1;}
    else
    {_ktim1 = 0;}
    digitalWrite (6, (!_ktim1));
    _k4 = (digitalRead (4));
    _k5 = (((((digitalRead (2))) &&((!_k2)))) &&((!_ktim1)));
    if (_k5)
    {
    _tim2O  = 1;
    _tim2I  = 1;
    }
    else
    {
    if (_tim2I)
    {
    _tim2I = 0;
    _tim2P = millis();
    }
    else
    {
    if (_tim2O)
    {if ( _isTimer(_tim2P, 4000)) _tim2O = 0;
    }
    }
    }
    if(_tim2O)
    {_ktim2 = 1;}
    else
    {_ktim2 = 0;}
    digitalWrite (0, _ktim2);
    digitalWrite (5, (!_ktim2));
    
    if (((_k2) &&((!_k4))))
       {
       if (! _gen1I)
          {
          _gen1I = 1;
          _gen1O = 1;
          _gen1P = millis();
          }
       }
    else
       {
       _gen1I = 0 ;
       _gen1O= 0;
       }
    if (_gen1I )
       {
       if ( _isTimer ( _gen1P , 500 ))
          {
          _gen1P = millis();
          _gen1O = ! _gen1O;
          }
       }
    if(_gen1O)
    {_kgen1 = 1;}
    else
    {_kgen1 = 0;}
    _k6 = _kgen1;
    
    
    }
    bool _isTimer(unsigned long startTime, unsigned long period )
      {
      unsigned long endTime;
      endTime = startTime+period;
      return (millis() >= endTime);
      }
    По началу были ложные срабатывания. Добавил защиту от дребезга, и все заработало как надо.

    Есть три кнопки, две сигнальные арматурины на 12 вольт.
    Схема.
    [​IMG]

    На схеме номера пинов не соответствуют тем что в скетче. Схема старая, но верная:)

    Кнопки - Открыть Закрыть и Сброс.
    Лампы Открыто и Авария/Закрыто.
    При срабатывании датчика протечки, Ардуино закрывает задвижку в течении 4 секунд (на всякий случай), и мигает лампа Авария. Сбрасываем Аварию кнопкой Сброс и открываем задвижку кнопкой Открыть. Пока задвижка открывается - горит лампа Открыто. Так же при закрытии задвижки (лампа Авария/Закрыто).
     
    Последнее редактирование: 29.04.14
    seval , 28.04.14
    #1 + Цитировать
  2. berrimor
    Регистрация:
    07.07.11
    Сообщения:
    225
    Благодарности:
    57

    berrimor

    Живу здесь

    berrimor

    Живу здесь

    Регистрация:
    07.07.11
    Сообщения:
    225
    Благодарности:
    57
    Адрес:
    Санкт-Петербург
    Интересный и полезный топик.

    Вопрос - а почему шаровый, а не электромагнитный клапан? Давление вроде небольшое, клапан дешевле будет и прощу в управлении.
     
    berrimor , 02.05.14
    #2 + Цитировать
  3. seval
    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33

    seval

    Живу здесь

    seval

    Живу здесь

    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33
    Адрес:
    Орел
    Не берусь утверждать, но клапану нужно постоянно подавать напряжение. А здесь только 4 секунды. Пока закрывается или открывается.
     
    seval , 02.05.14
    #3 + Цитировать
  4. berrimor
    Регистрация:
    07.07.11
    Сообщения:
    225
    Благодарности:
    57

    berrimor

    Живу здесь

    berrimor

    Живу здесь

    Регистрация:
    07.07.11
    Сообщения:
    225
    Благодарности:
    57
    Адрес:
    Санкт-Петербург
    Все верно - обычно, пока напряжение подано, клапан открыт. Но там расход энергии минимален (4.8 Ватт при стоимости в 200 руб против 700 за шаровый и стоимости киловатта в 3.5 рубля срок окупаемости шарового 40 месяцев :)), зато отключает сразу, даже при авариях в электросети и управление Ардуиной нативное - логическим ноликом/единицей и гарантия от заклинивания в каком-либо положении.
     
    berrimor , 05.05.14
    #4 + Цитировать
  5. seval
    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33

    seval

    Живу здесь

    seval

    Живу здесь

    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33
    Адрес:
    Орел
    Я бы все равно не поставил себе клапан. Я много лет работал наладчиком по профилю КИПиА. Там где нужно перекрывать что то, всегда ставится задвижка. Наверное надежнее. А так если вдруг свет выключится, я без воды останусь. Как то так.
     
    seval , 05.05.14
    #5 + Цитировать
  6. Владимиp
    Регистрация:
    06.07.11
    Сообщения:
    1.051
    Благодарности:
    1.004

    Владимиp

    Живу там

    Владимиp

    Живу там

    Регистрация:
    06.07.11
    Сообщения:
    1.051
    Благодарности:
    1.004
    Адрес:
    Россия
    На будущее, датчик протечки лучше делать таким.
    [​IMG]
     
    Владимиp , 05.05.14
    #6 + Цитировать
  7. berrimor
    Регистрация:
    07.07.11
    Сообщения:
    225
    Благодарности:
    57

    berrimor

    Живу здесь

    berrimor

    Живу здесь

    Регистрация:
    07.07.11
    Сообщения:
    225
    Благодарности:
    57
    Адрес:
    Санкт-Петербург
    Переубеждать не буду. Просто, раз уж форум -> все читающие должны иметь полную картину, потому раскрою альтернативный вариант.

    В моем случае (нет центрального водоснабжения, насос у меня) если нет электричества, то нет и воды :)
    Но если вдруг сломался сам клапан (кто знает - может, заклинило его в закрытом положении), то в обход клапана должна идти труба с шаровым вентилем (обычно все время закрыт, открывается руками при поломке клапана).

    В Вашем варианте, кстати, такой "обход" тоже, думаю, необходим - шаровый кран тоже может заклинить в закрытом положении.
     
    berrimor , 05.05.14
    #7 + Цитировать
  8. berrimor
    Регистрация:
    07.07.11
    Сообщения:
    225
    Благодарности:
    57

    berrimor

    Живу здесь

    berrimor

    Живу здесь

    Регистрация:
    07.07.11
    Сообщения:
    225
    Благодарности:
    57
    Адрес:
    Санкт-Петербург
    А что они бывают какие-то принципиально другие?
    В моем понимании, у всех именно такие - плата с близкорасположенными непересекающимися дорожками.
     
    berrimor , 05.05.14
    #8 + Цитировать
  9. seval
    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33

    seval

    Живу здесь

    seval

    Живу здесь

    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33
    Адрес:
    Орел
    Так я и не против. Расскажите только как сделать такие? Что бы с корпусом и так далее!
    Когда куплю 3Д принтер, тогда буду такие делать.
     
    seval , 05.05.14
    #9 + Цитировать
  10. seval
    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33

    seval

    Живу здесь

    seval

    Живу здесь

    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33
    Адрес:
    Орел
    Байпас это называется, по моему. Такую штуку предусмотрел я. Но еще не сделал. :)
     
    seval , 05.05.14
    #10 + Цитировать
  11. Владимиp
    Регистрация:
    06.07.11
    Сообщения:
    1.051
    Благодарности:
    1.004

    Владимиp

    Живу там

    Владимиp

    Живу там

    Регистрация:
    06.07.11
    Сообщения:
    1.051
    Благодарности:
    1.004
    Адрес:
    Россия
    @seval, я вообще про рисунок дорожек. У большинства датчиков всего два контакта выведено и этим ограничились, яркий пример - нептун. Здесь же площадь сработки гораздо выше, при одинаковом размере датчиков ентот даст аларм раньше.
     
    Владимиp , 05.05.14
    #11 + Цитировать
  12. seval
    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33

    seval

    Живу здесь

    seval

    Живу здесь

    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33
    Адрес:
    Орел
    Я так думаю, что если я сам сделаю такой датчик то долго он не проживет. Медь быстро окислится. Покрыть золотишком в домашних условиях проблематично. Потому датчик из двух проводков ВВГ предпочтительнее. Опять же это только мое мнение.
     
    seval , 05.05.14
    #12 + Цитировать
  13. AlexMann
    Регистрация:
    20.02.08
    Сообщения:
    8.773
    Благодарности:
    4.327

    AlexMann

    FestoolFun

    AlexMann

    FestoolFun

    Регистрация:
    20.02.08
    Сообщения:
    8.773
    Благодарности:
    4.327
    Адрес:
    Санкт-Петербург
    Прикольная тема. Но я бы поставил датчики расхода воды... точнее их и поставлю :) ибо не понятно где и когда что то может потечь...
     
    AlexMann , 13.05.14
    #13 + Цитировать
  14. seval
    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33

    seval

    Живу здесь

    seval

    Живу здесь

    Регистрация:
    17.11.10
    Сообщения:
    321
    Благодарности:
    33
    Адрес:
    Орел
    Это интересно. Надо подумать об этом.
     
    seval , 13.05.14
    #14 + Цитировать
  15. DIYMan
    Регистрация:
    19.05.13
    Сообщения:
    4.181
    Благодарности:
    3.362

    DIYMan

    Любопытный рукосуй :)

    DIYMan

    Любопытный рукосуй :)

    Регистрация:
    19.05.13
    Сообщения:
    4.181
    Благодарности:
    3.362
    Адрес:
    80 км от Краснодара
    Электромагнитные клапана есть двух видов - нормально закрытые и нормально открытые. В системах типа аквастоп, что на стиралках - стоят нормально закрытые клапана, которые при отсутствии напряжения на входе не пропускают ничего. Нормально открытые работают по инверсной схеме.

    То есть в зависимости от задач можно применять тот или иной вид клапана. Но, конечно, в вашем случае шаровый с приводом удобнее, на случай перебоев с напряжением. Только для чистоты совести надо предусмотреть опрос положения задвижки, т. к. 4 секунды - это чертовски долго, и как раз за это время могут рубануть свет (беда никогда одна не приходит :)), и что там будет в дальнейшем с работой скетча - кто знает?
     
    DIYMan , 13.05.14
    #15 + Цитировать