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

Контроллер для теплицы на Arduino

Тема в разделе "Теплицы и парники", создана пользователем Cofessor, 20.10.15.

Статус темы:
Закрыта.
  1. timon2006
    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356

    timon2006

    Живу здесь

    timon2006

    Живу здесь

    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356
    5В все-таки лучше подавать через резистор:).
    Далеко не все, например, S202S01.
     
  2. Cofessor
    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467

    Cofessor

    Виталий

    Cofessor

    Виталий

    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467
    Адрес:
    Брянск
    Нашёл пример типового включения:
    jgc-5f.jpg
     
    Последнее редактирование: 08.12.16
  3. timon2006
    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356

    timon2006

    Живу здесь

    timon2006

    Живу здесь

    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356
    Если Vcc не превышает напряжения питания Ардуино и МК сильно не нагружен по выходам, то транзистор Q можно исключить
     
  4. Cofessor
    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467

    Cofessor

    Виталий

    Cofessor

    Виталий

    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467
    Адрес:
    Брянск
    Да я, честно говоря, и не думал их ставить - чего зря удорожать конструкцию?
    Максимальный ток у каждого реле - 15mA, а у выводов Ардуино - по 40 mA - то есть, более чем достаточно. Суммарный ток у двух нагрузок - не более 30mA, а допускается, кажется, до ста. Спокойно можно подключать до 6 опто-реле, а у меня поначалу будут использоваться только два вывода: один на включение подсветки, другой - на включение ТЭНа. Потом может капельницу добавлю, тем паче что вряд ли будет совпадение, чтобы одновременно работали все нагрузки, тем более чтобы одновременно включались (а ток удержания вообще чуть больше одного вольта).
     
  5. Cofessor
    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467

    Cofessor

    Виталий

    Cofessor

    Виталий

    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467
    Адрес:
    Брянск
    Застрял в меню. От одной кнопки меню почему-то сразу получилось, а с двумя - безнадёжно запутался. Уже пробовал и просто описания составлять и блок-схемы рисовать и просто тупо пробиваться через код, но нет, не складывается никак. Видимо в чём-то не догоняю как вообще это надо делать, а "примеры пугают километрами кода".
    Ну что же, "буду запасаться поп корном".
     
  6. timon2006
    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356

    timon2006

    Живу здесь

    timon2006

    Живу здесь

    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356
    Если делать не через задержки, а отслеживать отпускание кнопки, то нет там километров.
    Сделайте счетчик для состояния "кнопка отпущена".
    Каждый опрос кнопки:
    -Кнопка нажата. Проверяем счетчик, если он меньше числа А, значит обработка этого нажатия уже была, только обнуляем счетчик и выходим (Здесь буквально в две-три команды можно обрабатывать длинные нажатия. Нужно только ввести счетчик для состояния "кнопка нажата" и число В - длительность длинного нажатия). Если он больше или равен А - обнуляем счетчик, производим обработку нажатия кнопки и выходим.
    -Кнопка не нажата. Инкрементируем счетчик. Если он больше числа А, значит кнопка отпущена. Декрементируем счетчик и выходим. Если же он меньше или равен А, значит это дребезг. Ничего не делаем, просто выходим.
    Изменяя число А, изменяем время антидребезга.
     
  7. Cofessor
    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467

    Cofessor

    Виталий

    Cofessor

    Виталий

    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467
    Адрес:
    Брянск
    Нет, я не на этом застрял. Процедуру опроса кнопок я сделал. То есть уже известно какая кнопка нажата и хранится в переменной, теперь нужно передвигаться от пункта к пункту и и устанавливать параметры. Вроде всё элементарно должно быть, но последовательность действий плохо представляю. Без примеров у меня пока как-то очень туго.
     
  8. timon2006
    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356

    timon2006

    Живу здесь

    timon2006

    Живу здесь

    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356
    У меня все сделано через флаги уровней меню.
    Например, флаг верхнего уровня меню. Если равен 0, то мы не в меню. Если равен 1 - то в установках времени. Смотрим флаг следующего уровня. Если 0, то находимся в меню выбора: выбираем минуты или часы, или дни, или месяцы, или годы. Если не 0, то если 1 - то в установке минут, если 2- то в установке часов, если 4 - то в установке дней, если 8 - то в месяцах, если 16 - то в годах.
    Сама установка параметров: зная флаги уровней меню, по таблице находим пределы значений данного параметра, из переменной, где он хранится, считываем значение во временную переменную и ее изменяем. Запоминаем при выходе. Получается единая для всех параметров процедура.
     
  9. Лифтанутый
    Регистрация:
    11.04.08
    Сообщения:
    4.642
    Благодарности:
    13.643

    Лифтанутый

    УВЕРЕННЫЙ

    Лифтанутый

    УВЕРЕННЫЙ

    Регистрация:
    11.04.08
    Сообщения:
    4.642
    Благодарности:
    13.643
    Адрес:
    Москва
    Фото1338.jpg
    Пускатели это для трехфазных цепей, куда твердотельным пока нельзя. ... Естественно, для МОЩНОЙ нагрузки переменного тока нужны мощные и очень дорогие твердотельные реле, и их мощность (ток нагрузки) должна соответствовать назначению. Я их очень давно использую для включения насосов наполнения, полива и пр. Управление простейшее и никаких токоограничивающих резисторов в цепи светодиода не требуется. Но есть и недостаток у мощных- они не выключаются, если нагрузка на уровне минимальной мощности. Поэтому есть смысл иногда применять старые и надежные реле (их почти не слышно).
     
    Последнее редактирование: 09.12.16
  10. timon2006
    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356

    timon2006

    Живу здесь

    timon2006

    Живу здесь

    Регистрация:
    09.03.15
    Сообщения:
    979
    Благодарности:
    1.356
    Пмсм, для управления насосами и пр. этих самых S202S02 (к очень дорогим их сложно отнести:)) - выше крыши.
    Их не требоваться может только в двух случаях:
    - Уже есть (или другой ограничитель тока).
    - Светодиода нет.
     
  11. Лифтанутый
    Регистрация:
    11.04.08
    Сообщения:
    4.642
    Благодарности:
    13.643

    Лифтанутый

    УВЕРЕННЫЙ

    Лифтанутый

    УВЕРЕННЫЙ

    Регистрация:
    11.04.08
    Сообщения:
    4.642
    Благодарности:
    13.643
    Адрес:
    Москва
    1. Частично согласен. Когда я познакомился с мощными твердотельными реле (20-40А), о менее мощных еще не ведал (1995г.) И мне не жалко было их использовать и без теплоотвода на небольшую нагрузку (до 5А). Денег не платил.
    В этих реле на входе генератор тока, светодиод опторазвязки напрямую со входом не связан, поэтому широкий предел входного питания.
    2. Кроме того у твердотельных реле достаточно много разновидностей по устройству, но у маломощных стандартный оптронный вход с нормированным током, который указан в даташите.
    3. Без светодиода это просто ключ на полевике в коробке;)
    ПыСы... Однако в лифтах запрещено использование мощных твердотельных... связано с надежностью. А мелких очень много.
     
  12. Cofessor
    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467

    Cofessor

    Виталий

    Cofessor

    Виталий

    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467
    Адрес:
    Брянск
    Флаги, признаки, байты состояния - да, что-то такое должно быть, но от идеи до конкретной реализации далеко. В общем, с тонкостями встречаешься. Хотел сделать работу меню без задержек, чтобы программа постоянно отображала его и показывала параметр, который сейчас можно корректировать, но в реальности же чтобы продолжала выполнять также цикл loop. Это одна из загвоздок.
     
  13. itskikm
    Регистрация:
    12.12.15
    Сообщения:
    52
    Благодарности:
    35

    itskikm

    Участник

    itskikm

    Участник

    Регистрация:
    12.12.15
    Сообщения:
    52
    Благодарности:
    35
    Адрес:
    Сургут
    Ранее я приводил рабочий проверенный код с обработкой пяти кнопок. Сохранение параметров в eeprom, вывод значений на экран 16x2. Присмотритесь, если что-то не понятно, прокомментирую. Там три процедуры, связанные с кнопками. Сначала в loop проверяем, есть ли хоть какое- то нажатие и, если есть, переходим к процедуре проверки нажатия клавиши select (можно и другие клавиши тут обработать, но тогда лучше вызывать процедуру определения кнопки). Если это select, входим во вторую процедуру (непосредственно меню), где и изменяем параметры, вызывая третью процедуру вычисления кода кнопки.
     
  14. Cofessor
    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467

    Cofessor

    Виталий

    Cofessor

    Виталий

    Регистрация:
    23.06.13
    Сообщения:
    9.290
    Благодарности:
    8.467
    Адрес:
    Брянск
    Какой код имеете в виду? Вот здесь только обработка нажатия 5 кнопок:

    int ReadKey() {
    int KeyVal1 = 0;
    int KeyVal2 = 0;
    do {
    KeyVal1 = analogRead (kbpin);
    delay (10);
    KeyVal2 = analogRead (kbpin);
    }
    while (KeyVal1 = KeyVal2 && KeyVal2 < 1020);
    adc_key_in = KeyVal2;
    if (adc_key_in <= 10) return 4; / right
    if (adc_key_in < 150) return 1; / up
    if (adc_key_in < 300) return 2; / down
    if (adc_key_in < 450) return 3; / left
    if (adc_key_in < 650) return 5; / select

    Это я сделал. У меня код обработки нажатия кнопок выглядит так:

    int key
    ...
    loop()
    ...
    if (analogRead (A0)<1000){ /Если уровень снизился - вызываем функцию
    int knopka();
    key=knopka();
    /Опрос кнопок
    int knopka(){
    uint16_t pitch, key_values[4]={100,200,400,600};
    uint32_t presstime;
    if (millis()-presstime>100){ /Дождаться окончания дребезга
    pitch=analogRead (A0); /и считать снова
    presstime=millis();
    for (int j=0;j<4;j+){
    if (pitch<key_values[j]) return j+1;/Возвращаем № нажатой кнопки
    }
    }
    }

    Фактически, то же самое, только без delay и while - фрагмент возвращает номер нажатой кнопки. При увеличении к-ва кнопок меняется только к-во элементов в key_values[ ] и j.
    Сейчас кумекаю над продолжением (сегодня и завтра, правда, вряд ли будет время). Если выложишь как обработку номера клавиши делаешь, буду очень признателен.
    Обычно я не копирую один в один, а беру пример за основу. как прототип. Собственно, меню от одной кнопки то сделано, но меня не устраивает из-за громоздкости процедуры записи времени, ведь я раздельно устанавливаю единицы и десятки минут и часов. Чтобы сократить код, хочу упаковать часы и минуты в строковый массив.
    Ну и ещё процедуру обработки хочу сделать без delay и без while.
     
  15. itskikm
    Регистрация:
    12.12.15
    Сообщения:
    52
    Благодарности:
    35

    itskikm

    Участник

    itskikm

    Участник

    Регистрация:
    12.12.15
    Сообщения:
    52
    Благодарности:
    35
    Адрес:
    Сургут
    Смотрите процедуру void setTemperature(). Это как раз процедура меню установок со всякими плюшками, типа нельзя выставить температуру ниже + 1 градуса и выше 90. Завершаются установки нажатием клавиши select либо при бездействии 15 секунд, с обновлением в еепром.
     
Статус темы:
Закрыта.