Чужой проект. Автоматическая регулировка воды в газовой колонке.

Тема в разделе "Arduino & Shields", создана пользователем Viacon, 25 окт 2016.

  1. Viacon

    Viacon Нуб

    Хочу реализовать этот проект с geektimes.ru. Это реализация автоматической регулировки температуры в газовой колонке (водогрейки). Автору писал, но он пока не ответил, то-ли не увидел, то-ли уже не интересно. Мне необходимо изменить проект: установка регулятора температуры в виде потенциометра. Прошу помощи в виде советов, предложений и прочего. Опыт обращения с паяльником (небольшой) - есть. Опыт программирования только на фортран и бейсик. Но есть желание разобраться в этом проекте.
    PS: уже заказал:
    1. Китайскую ардуинку UNO
    2. Сервопривод - http://amperka.ru/product/servo-fs5106b
    3. Что ещё надо - не знаю
     
    Последнее редактирование: 25 окт 2016
  2. rkit

    rkit Гуру

    Ну стандартный совет - не лезть без опыта в пожароопасные вещи. Отложи пока. Сделаешь 2-3 проекта по-безопаснее, наберешься опыта - вернешься.
     
  3. ostrov

    ostrov Гуру

    Такие вещи надо делать как минимум с двойным энергонезависимым контуром. Как минимум еще один контроллер, датчик пламени, термопару, газовый клапан, датчик газа и два источника питания. Но лучше этим не заниматься, перепутаете плюс с минумом и получится как обычно.
     
  4. Viacon

    Viacon Нуб

    у меня сосед - работает в газовой службе, он точно поможет :), ему самому интересно...
    Ну, а, по поводу простоты - сам, то проект, мне кажется, не сильно сложный - из комплектующих (как я думаю) всего ардуинка, привод, датчик температуры - все это уже заказал. Всё равно жду помощи!
    -как минимум с двойным энергонезависимым контуром -это не двойное питание?
    -как минимум еще один контроллер - что он должен делать?
    -датчик пламени - для чего?, если пламени не будет - будет холодная вода (в смысле - не опасно, неприятно конечно...)
    -термопару - для чего? (как датчик пламени?)
    -газовый клапан - присутствует в колонке
    -датчик газа - для чего? (давление в газовой магистале?)
    -два источника питания - сделаю
    Устройство планируется сделать полностью автономное, связь только механическая - тяги, со своим питанием. Легко ставить, легко снять.
    При отсутствии питания на ардуино - обычный режим - вроде как и нет автоматики.

    PS: а вообще-то, аргументы те-же, что и в статье, планируется крутить, при помощи привода, только регулятор количества газа (сильнее-слабее), который и так крутим, только руками.... по просьбе (крикам) из душа.
     
    Последнее редактирование: 25 окт 2016
  5. ostrov

    ostrov Гуру

    Если задаете такие вопросы, зачем датчик пламени и газа, то точно лучше не браться. И ваш товарищ, монтажник газовых колонок, тут не поможет. Если и будет работать такая самоделка, то пусть как можно дальше от живых людей. И от правохранительных органов, так как такие изделия должны быть обязательно сертифицированы.
     
  6. rkit

    rkit Гуру

    Вот рука не выкрутит этот регулятор на максимальную мощность из-за ошибки с типами чисел, или плохой пропайки.
     
  7. ostrov

    ostrov Гуру

    Или вообще заклинит серву, погаснет факел, встанет МК, отвалится проводок какой нибудь и полетели...
     
  8. rkit

    rkit Гуру

    Или просто статическим электричеством ударит от кошки.
     
  9. ostrov

    ostrov Гуру

    Или если давление газа неустойчиво, например от баллона да при прочих потребителях.
     
  10. ostrov

    ostrov Гуру

    Да, забыл еще про датчик давления воды. Воду перекроют даже частично и потекла сама колонка.

    И непонятно как вы собираетесь делать регулятор температуры без термопары, то есть термометра этой самой температуры.
     
  11. rkit

    rkit Гуру

    Или вот еще какое замечательное явление бывает
    http://alex-avr2.livejournal.com/211190.html
    Сосед-газовщик обязательно расскажет, как с ним бороться.
     
  12. Viacon

    Viacon Нуб

    "из комплектующих (как я думаю) всего ардуинка, привод, датчик температуры - все это уже заказал" - см. выше.
    колонка на стенке - кошек там не бывает.
    Спасибо за предупреждения, а по сути вопроса кто-то подскажет?
     
  13. ostrov

    ostrov Гуру

    Скажите в каком городе вы живете, постараемся там не появляться в ближайшее время и других предупредим.
     
  14. Viacon

    Viacon Нуб

    Разбираюсь в оригинальном скетче. Для себя подробно комментирую все строки. Но пока не всё понятно. Вот часть скетча:
    // Библиотека сервопривода
    #include <Servo.h>
    // создать переменную "termalPin" для показаний датчика
    // температуры на порт А5
    int termalPin=A5;
    // создать переменную "enablePin" для включения Ардуино
    // на порт 8
    int enablePin=8;
    // На 7 порт - индикатор включения (led)
    int ledPin=7;
    // создать переменную "temp" для фактической температуры
    int temp;
    // для чего? не нашел применение
    int lastTemp=0;
    // ???????????? не знаю
    boolean enabled=false;
    // задать min угол сервы = 5 градусов
    static int minAngle=5;
    // задать max угол сервы = 100 градусов
    static int maxAngle=100;
    // задать поддерживаемую температуру = 40
    static int needTemp=40;
    // создать объект "myservo" типа Servo
    Servo myservo;
    Вопрос 1.
    // для чего это? не нашел применение
    int lastTemp=0;
    Вопрос 2.
    boolean enabled=false;
    что делает эта строка

    Подскажите пжта
     
  15. Igor68

    Igor68 Гуру

    // для чего? не нашел применение
    int lastTemp=0;

    похоже, что проект не допилен, и про параметр забыли. По идее прежнее измерение - возможно идея усреднения измерения... Но:
    //смотрим на температуру и куда ее крутить
    if(temp>needTemp) decTemp();
    if(temp<needTemp) incTemp();

    это уже и есть "гистерезис" по минимальному значению изменения, реализующий устранение ложного управления (ошибка измерения в младшем разряде).

    // ???????????? не знаю- начальная инициализация - колонка выключена, я понял что управление в дальнейшем по кнопке.
    boolean enabled=false;

    //колонка включена
    if(!enabled)
     
  16. Viacon

    Viacon Нуб

    1. проще говоря - можно удалить.
    2. это необходимо
     
  17. Igor68

    Igor68 Гуру

    1. (похоже)можно удалить - нигде не встретил! наверное ранее в проекте было:
    if(temp>needTemp) decTemp();
    if(temp<=needTemp) incTemp();

    или
    if(temp>=needTemp) decTemp();
    if(temp<needTemp) incTemp();

    а не
    if(temp>needTemp) decTemp();
    if(temp<needTemp) incTemp();

    ну или что-то подобное и автор хотел "усреднять" с предыдущим значением температуры. По крайней мере не нашёл.

    2 - похоже там не кнопка, а двухпозиционный выключатель. Наверное удобнее пользоваться не флагом enabled а значением состояния переключателя. Может это "мусор" от варианта с кнопкой без фиксации - тогда надо переделать код!
    Код (C++):
     if(digitalRead(enablePin)==HIGH)
      {
    //колонка включена
        if(!enabled)
        {
    //если до этого не была включена

    //атачим серву
          myservo.attach(9);
    //ставим на середину
          myservo.write(50);
         Serial.println("WARMING UP BOILER.");
    //ждем пока колонка разогреется
          delay(10000);
          Serial.println("BOILER READY!");
         
        }
    //поехали
        enabled=true;
    //зажигаем светодиод
        digitalWrite(ledPin,HIGH);
        Serial.print("BOILER ONLINE. CURRENT TEMP: ");
        Serial.print(temp);
        Serial.println(" C");
    //смотрим на температуру и куда ее крутить
          if(temp>needTemp) decTemp();
          if(temp<needTemp) incTemp();
     
        delay(300);
      }
      else
      {
        if(enabled)
        {
    //выключение
          Serial.println("BOILER OFFLINE. GOOD LUCK!");
    //ставим серву посредине
          myservo.write(50);
    //детачим чтоб не жужжала
          myservo.detach();
          enabled=false;
        }
    //гасим лампочку
        digitalWrite(ledPin,LOW);
      }
    }
     
  18. Viacon

    Viacon Нуб

    в ориг. скетче есть строка с коментами:
    // мапим показания датчика на температуру
    temp = map(analogRead(termalPin),800,635,31,51);

    хочу через потенциометр задать желаемую температуру:
    FactTemp = map(analogRead(termalPin),0,1024,31,51);
    получится так?

    а температуру получать с датчика DS18B20 (уже получил), нашел такой скетч для этого:
    #include <OneWire.h>
    OneWire ds(9);

    void setup() {
    Serial.begin(9600);
    }

    void loop() {

    byte data[2];
    ds.reset();
    ds.write(0xCC);
    ds.write(0x44);
    delay(750);
    ds.reset();
    ds.write(0xCC);
    ds.write(0xBE);
    data[0] = ds.read();
    data[1] = ds.read();
    int Temp = (data[1]<< 8)+data[0];
    Temp = Temp>>4;
    Serial.println(Temp);
    }
    правда его ещё не проверил у себя, ардуинка запаздывает

    Если температуры равны (последний вариант у Вас) - температуру корректировать не нужно - разве не так?
    или просто в программе такое не допустимо? поправлю если так
     
    Последнее редактирование: 28 окт 2016
  19. Igor68

    Igor68 Гуру

    Если температуры равны (последний вариант у Вас) - температуру корректировать не нужно - разве не так?
    Именно так - ничего делать не надо!
     
  20. Viacon

    Viacon Нуб

    переделал на это
    после этого у Вас участок скетча... Отличия от своего не увидел, что там надо переделать?

    Да, это не кнопка а питание на подсветку дисплея газовой колонки - он является сигналом для включения устройства на ардуино
    // создать переменную "enablePin" для включения Ардуино
    // на порт 8
    int enablePin=8;

    //устанавливаем режимы портов:
    pinMode(enablePin,INPUT); // установить "enablePin" на приём
    // данных (вход)
     
    Последнее редактирование: 28 окт 2016