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

Автоматика управления ТТ котлами своими руками

Тема в разделе "Котлы, горелки, котельное об-е своими руками", создана пользователем Senkiivan, 28.03.14.

Метки:
  1. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503
    Адрес:
    Боровичи
    @staska, какие обиды:)
    Уровень програмирования у каждого разный.
     
  2. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503
    Адрес:
    Боровичи
    Все расчеты/опросы делались за время после открывания тиристора, кстати, расчет велся таймером, так как делай не стабилен, та же задержка на 750 мс - это снова не тупой делау (750), а 75 циклов :) И тому подобные изверги... Опрос клавиатуры с антидребезгом - 3 цикла проверки.

    Тоже пользуюсь таймерами, делау по минимуму.
    Особено когда надо выдержки более 1часа.

    Только для реализации такого метода програмирования надо иметь определенные знания и навыки.
    Мы говорим о людях которым надо разово изготовить определенное изделие и иметь возможность в дальнейшем корректировать его работу.
    Для них понятие делау простое и понятное, а делать определеное действие через эное количество циклов расплывчатое.
    Для полного понимания надо написать костяк программы потом его дошлифовывать, согласно советам более опытных товарищей:)
     
  3. Prosto ja
    Регистрация:
    26.12.11
    Сообщения:
    468
    Благодарности:
    160

    Prosto ja

    Самоделкин

    Prosto ja

    Самоделкин

    Регистрация:
    26.12.11
    Сообщения:
    468
    Благодарности:
    160
    Адрес:
    Ровно
    В своей прошивке, которую еще не дописал, делай вообще не использовал. С дребезгом контактов боролся использованием переменных (флагов), значение которых устанавливалось при нажатии кнопки и сбрасывалось после исполнения действия и по истечению некоторого времени (millis).
     
  4. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503
    Адрес:
    Боровичи
    Я использую аналоговую клавиатуру, делаю 2 чтения и сравнение.
    вот так:
    /Читаем в цикле аналоговый вход, для подавления дребезга
    /и нестабильности читаем по два раза подряд, пока значения
    /не будут равны.
    /Если значения равны 1023 – значит не была нажата ни одна клавиша.

    do {
    KeyValue1=analogRead (keyPin);
    KeyValue2=analogRead (keyPin);
    } while (KeyValue1=KeyValue2&&KeyValue2!=1023);
    /Интерпретируем полученное значение и определяем код нажатой клавиши
    if (KeyValue2<ButtonUp_HIGH&&KeyValue2>ButtonUp_LOW) {KeyNum=1;}/Up
    if (KeyValue2<ButtonDown_HIGH&&KeyValue2>ButtonDown_LOW) {KeyNum=2;}/Down
    if (KeyValue2<ButtonLeft_HIGH&&KeyValue2>ButtonLeft_LOW) {KeyNum=3;}/Left
    if (KeyValue2<ButtonRight_HIGH&&KeyValue2>ButtonRight_LOW) {KeyNum=4;}/Right
    if (KeyValue2<ButtonSelect_HIGH&&KeyValue2>ButtonSelect_LOW) {KeyNum=5;}/Select

    /Возвращаем код нажатой клавиши
    return KeyNum;

    И далее в програме используем KeyNum для определения нажатой клавиши. выделеные переменые значения АЦП, которые соответствуют разным клавишам. Поскольку значения могут колебаться в некоторых пределах, определяем границы диапазонов (LOW-HIGH), в которых обеспечивается однозначная идентификация клавиш
     
  5. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503
    Адрес:
    Боровичи
    Управление реле делал так:

    /Реле подключено к пину D11
    #define RELAY_PIN 11

    /Объявим переменную для хранения состояния реле
    boolean relayStatus1=LOW;
    void setup() {

    /Настроим пин для управления реле
    pinMode (RELAY_PIN,OUTPUT);
    digitalWrite (RELAY_PIN,LOW);
    }
    void loop() {
    /Проверка условия включения/выключения
    if (temp1<setTmp&&relayStatus1=LOW) / в примере сравнение температуры
    {relayStatus1=HIGH; digitalWrite (RELAY_PIN,HIGH);} /включаем реле
    if (temp1>setTmp&&relayStatus1=HIGH) / сравниваем температуры
    {relayStatus1=LOW; digitalWrite (RELAY_PIN,LOW);} / отключаем реле
    }
     
  6. strop1
    Регистрация:
    28.03.14
    Сообщения:
    54
    Благодарности:
    20

    strop1

    Живу здесь

    strop1

    Заблокирован

    Живу здесь

    Регистрация:
    28.03.14
    Сообщения:
    54
    Благодарности:
    20
    Адрес:
    Киев
    А у немцев в старину просто было два биметаллических тягорегулятора - по воде отрывает, а по дыму закрывает:aga:
     
  7. Prosto ja
    Регистрация:
    26.12.11
    Сообщения:
    468
    Благодарности:
    160

    Prosto ja

    Самоделкин

    Prosto ja

    Самоделкин

    Регистрация:
    26.12.11
    Сообщения:
    468
    Благодарности:
    160
    Адрес:
    Ровно
    У меня клавиатура с отдельных кнопок.
    Логика работы с кнопками примерно такая.
    Для каждой кнопки объявляем переменную флаг которая может равняться 0 или 1 (выкл вкл) (подавление дребезга) и одну общую переменную блок (0 или 1) (блокировка одновременно нажатых кнопок, предотвращение зацикливания при удержании кнопки).
    В блоке программы опроса кнопок читаем входы кнопок. Если кнопка нажата и переменная блок = 0:
    флагу кнопки =1,
    блок = 1,
    запоминаем время нажатия кнопки.
    В обработчике нажатий.
    Если флаг = 1 исполняем необходимое действие и после этого флаг =0. Действие исполниться лишь один раз.
    В конце обработчика. Сравниваем время. Если прошло больше чем (например) 0,5с от нажатия кнопки блок=0. Только после этого сможет прочитаться кнопка с изменением значения флага.
    При удержании кнопки соответсвующий параметр будет изменяться циклически.
    Недостаток такого алгоритма: изменение параметров будет происходить не чаще 2 раз в с. Хотя можно уменьшить время в сравнении. Вместо 0,5 поставить 0,25.
     
  8. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503
    Адрес:
    Боровичи
    @Prosto ja, у вас мега:) куча входов:)
    Я делаю на уно (самая доступная по цене) тут битва за каждый вход выход:)
    Разгонял изменение параметра при нажатой кнопке 1значение за 100мс.
    И ограничение верхнего и нижнего значения.
    При редоктировании параметра изменнеия идут медлено и потом ускоряются, кнопку отпускаем и при следуещем нажатии опять идут медлено с ускорением.
    С аналоговой клавой один минус только раз за основной цикл вываливаемся в под цикл для опроса клавиатуры, с цифровыми входами такого нет:)
     
  9. staska
    Регистрация:
    12.02.08
    Сообщения:
    3.324
    Благодарности:
    1.560

    staska

    Stanislav

    staska

    Stanislav

    Регистрация:
    12.02.08
    Сообщения:
    3.324
    Благодарности:
    1.560
    Адрес:
    Вильнюс
    И я свой вариант покажу.

    #define OK 2
    #define MENU 3
    #define MINUS 4
    #define PLUS 5
    #define BTNp PINC
    #define BTNDEBOUNCE 0b11110000

    if (bit_is_set (BTNp, PLUS)
    {
    btnPlus+ +;
    }
    btnPlus=btnPlus< <1;

    if (btnPlus = = BTNDEBOUNCE)
    {
    if (backligth > 0) menuKey (KEY_PLUS);
    turn_on_backligth();
    }

    Сдвигаем одну переменную. Разгон делается по той же схеме, только другая переменная и вызов другой функций.
     
  10. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503
    Адрес:
    Боровичи
    Какой размер:)]
    Просто вариант написания кода, каждый человек думает по разному)
    Как понимаю у вас тоже кнопки сидят на цифровых входах?

    Можете показать как вы делаете меню?
     
  11. Prosto ja
    Регистрация:
    26.12.11
    Сообщения:
    468
    Благодарности:
    160

    Prosto ja

    Самоделкин

    Prosto ja

    Самоделкин

    Регистрация:
    26.12.11
    Сообщения:
    468
    Благодарности:
    160
    Адрес:
    Ровно
    Каждому пункту меню присваивается номер. По этому номеру решаеться что именно выводить на экран.
     
  12. Senkiivan
    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503

    Senkiivan

    электронщик

    Senkiivan

    электронщик

    Регистрация:
    23.08.12
    Сообщения:
    2.634
    Благодарности:
    1.503
    Адрес:
    Боровичи
    С начала делал так же не понравилось, сделал последовательное кнопкой меню входим и последовательно все страницы перелистываем кнопкой меню, сохраняя изменения.
    Тоже не фонтан зато ничего не пропустишь)
     
  13. staska
    Регистрация:
    12.02.08
    Сообщения:
    3.324
    Благодарности:
    1.560

    staska

    Stanislav

    staska

    Stanislav

    Регистрация:
    12.02.08
    Сообщения:
    3.324
    Благодарности:
    1.560
    Адрес:
    Вильнюс
    Меню делаю так:

    MAKE_MENU (m_s1i1, m_s1i1, NULL_ENTRY, NULL_ENTRY, m_s2i1, VARIABLE_TEXT, MODE, 5, 0, 0, 0, 0, ", " ", " ");

    MAKE_MENU (m_s2i1, m_s2i2, NULL_ENTRY, m_s1i1, NULL_ENTRY, ARRAYOFSTRINGSVOCAB, DAY, 7, 1, 13, 1, 1, "Weekday set, day", "Nedelas dienas uzstad. diena");
    MAKE_MENU (m_s2i2, m_s2i3, NULL_ENTRY, m_s1i1, NULL_ENTRY, UNSIGNEDNUMBER, HOUR, 23, 0, 11, 1, 2, "Time set, hours", "Laika uzstad., stundas");

    Пункт знает что отображать, мин и макс значение, расположение переменной, какой меню пункт будет потому и тому подобное. Но обработчика своего не покажу.

    Тут идею взял: http://easyelectronics.ru/organizaciya-drevovidnogo-menyu.html и допил как мне нужно.
     
  14. milaa
    Регистрация:
    28.12.11
    Сообщения:
    228
    Благодарности:
    129

    milaa

    Живу здесь

    milaa

    Живу здесь

    Регистрация:
    28.12.11
    Сообщения:
    228
    Благодарности:
    129
    Адрес:
    Украина
    Аналогично сделал и в своем варианте прошивки, одной кнопкой перелистывается по очереди каждый пункт меню и отображается на индикаторе, а кнопками +/- меняются значения, по выходу из меню значения сохраняются в епром.
    Прошивка написана на С в AVR Studio
    За основу взят дешевый АТMEGA8, температуру теплоносителя меряет DS18b20, температуру дымогазов термопара "К" типа, все показания отображаются на сегментном 4 разрядном индикаторе.
    На даный момент отлажено в Протеусе и вытравлена печатная плата, в железе еще не проверял.
     

    Вложения:

    • termoM8.GIF
  15. staska
    Регистрация:
    12.02.08
    Сообщения:
    3.324
    Благодарности:
    1.560

    staska

    Stanislav

    staska

    Stanislav

    Регистрация:
    12.02.08
    Сообщения:
    3.324
    Благодарности:
    1.560
    Адрес:
    Вильнюс
    имхо, лцд экран на порядок удобней и красивей. Цена не такая и разная. Древовидное меня тоже истребил во всех проектах. Неудобно оно при мелком экране.