Исполнительный таймер на Arduino – Практическая электроника

2 схемы

Принципиальные электросхемы, подключение устройств и распиновка разъёмов

Main loop

Главный цикл программы выглядит вот так, в нём несколько функций, мы их рассмотрим ниже:

// =================== LOOP ===================
void loop() {
  controlTick();  // опрос энкодера
  sensorTick();   // опрос датчика и работа реле
  if (state) timerTick();   // опрос таймеров (во время работы)
}

Автоматика своими руками для включения и выключения электроприборов: таймеры

Вас устраивает надежность старой бытовой техники, но приходится включать и выключать ее самостоятельно? Устройства можно обновить и усовершенствовать, установив таймер включения и выключения электроприборов своими руками. Процесс модернизации не сложный, но требует точности и внимания.

Видео работы таймера

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

Если возникли вопросы — задайте их в комментариях администрации сайта 2 Схемы.ру

Источник

Виды реле

Наиболее популярны электронные механизмы включения техники. Но не менее эффективны пневматические и часовые таймеры (то есть механические).

Основу пневматов составляет демпферное устройство. Расширением или сужением трубы, подающей воздух, регулируется время срабатывания. Коррекция диаметра трубки проводится винтом. Механизм простой и его легко собрать самостоятельно из доступных материалов.

Времязадающее устройство на транзисторах

Наиболее простая схема – на транзисторах, используется в осветительных приборах. Элементы соединяются спаиванием, без использования платы. Для включения нажимают кнопку, через установленный интервал времени свет гаснет.

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

Изготовление на диодах

Для монтажа системы на диодах необходимые элементы:

  • 3 резистора;
  • 2 диода, рассчитанные на ток 1 А;
  • тиристор ВТ 151;
  • пусковое устройство.

Выключатель и один контакт диодного моста подключают к питанию на 220 вольт. Второй провод моста подсоединяют к выключателю. Тирристор соединяют с сопротивлениями на 200 и 1 500 Ом и диодом. К конденсатору подключают вторые выводы диода и 200-го резистора. Сопротивление на 4300 Ом включают параллельно конденсатору.

Инициализация

Компонентов много, так что для удобства задефайним все пины константами, и только потом подключим все библиотеки и создадим объекты:

// пины
#define ENC_A 4
#define ENC_B 3
#define ENC_KEY 2
#define BUZZ_PIN 5
#define DISP_CLK 6
#define DISP_DIO 7
#define MOS_PIN 8
#define NTC_PIN 0

// ================ БИБЛИОТЕКИ ================
// библиотека энкодера
#include <EncButton.h>
EncButton<EB_TICK, ENC_A, ENC_B, ENC_KEY> enc;

// библиотека дисплея
#include <GyverTM1637.h>
GyverTM1637 disp(DISP_CLK, DISP_DIO);

// библиотека термистора
#include <GyverNTC.h>
GyverNTC ntc(NTC_PIN, 10000, 3950);

Нам понадобится несколько глобальных переменных (для простоты программы), обозначим флаги и переменные режимов:

// ================ ПЕРЕМЕННЫЕ ================
bool state;     // статус (0 ожидание, 1 таймер запущен)
byte mode;      // вывод: 0 часы, 1 градусы, 2 датчик
uint32_t tmr;   // общий таймер работы
int mins = 480; // минуты (по умолч 8 часов)
int temp = 40;  // целевая температура (по умолч 40 градусов)
int sens = 0;   // темепратура с датчика

В блоке setup() сделаем нужные пины выходами, запустим и обновим дисплей:

// ================== SETUP ==================
void setup() {
  // активные пины как выходы
  pinMode(BUZZ_PIN, OUTPUT);
  pinMode(MOS_PIN, OUTPUT);

  // на всякий случай очистим дисплей и установим яркость
  disp.clear();
  disp.brightness(7);

  updDisp();  // обновить дисплей
}

Как работает устройство

Увеличение/уменьшение времени происходит скачкообразно сразу на несколько секунд. Кроме того, время можно приостановить.

Последние 5 минут сигнализируются короткими двойными пиками каждую минуту. А последние 15 секунд пикает каждую секунду.

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

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

Вид сбоку на детали

Рекомендуется ещё добавить красное пластиковое стекло перед дисплеем, чтобы улучшить видимость цифр.

И вместо распознавания временных шагов на 15, 30, 60 секунд, лучше было бы определить скорость поворота ручки энкодера и на этой основе изменять время. Медленное вращение — подсчитывает отдельные секунды, быстрое — шаги в несколько минут.

Готовый самодельный LED таймер

Корпус… До него дело так и не дошло 🙁 Таймер уже долгое время так и используется в полуоткрытом виде: снизу 3 пальчиковые батарейки, спереди трёхцифровой индикатор LED, а сверху ручка регулятора выбора времени.

Многофункциональные устройства

Многофункциональные контроллеры времени выполняют:

  • отсчет времени в двух вариантах одновременно в течение одного срока;
  • параллельный отсчет временных отрезков постоянно;
  • обратный отсчет;
  • функцию секундомера;
  • 2 варианта автозапуска (первый вариант после нажатия кнопки пуск, второй – после подведения тока и истечения установленного периода).

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

Необходимость таймера включения для электроприборов

Использование контроллеров времени позволяет управлять техникой без непосредственного участия пользователя. Благодаря установке выбранного временного режима, таймер сам следит за включением и отключением бытовой техники. Это освобождает время для более продуктивных занятий либо отдыха.

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

Несколько слов о разновидностях

Реле времени классифицируют как устройства:

  • механического типа;
  • с электронным механизмом работы (в том числе тиристорные);
  • пневматические реле.

По конструкции электрические устройства бывают релейные (самые надежные и популярные), сими- и тиристорные.

Расположение подключающего элемента бывает:

  • заднее;
  • переднее;
  • боковое;
  • через отдельный разъем.

Установка временных параметров проводится кнопками, переключателем, потенциометром.

Обновление дисплея

Здесь updDisp() – функция, которую я создаю для удобства, т.к. она будет вызываться и в других местах программы. Взглянем на неё поближе:

void updDisp() {
  switch (mode) {
    case 0:
      if (!state) {
        disp.point(1);
        disp.displayClock(mins / 60, mins % 60);
      } else {
        int curMins = mins - (millis() - tmr) / 60000ul;
        disp.displayClock(curMins / 60, curMins % 60);
      }
      break;
    case 1:
      if (!state) disp.point(0);
      disp.displayInt(temp);
      disp.displayByte(0, _t);
      break;
    case 2:
      if (!state) disp.point(0);
      disp.displayInt(sens);
      disp.displayByte(0, _S);
      break;
  }
}

Вывод на дисплей зависит от текущего режима отображения mode:

  • При 0 мы выводим время при помощи displayClock(часы, минуты). Я не просто так храню время в минутах, так удобнее с ним работать: проверять таймер и менять значение энкодером. Из общих минут можно получить часы, просто разделив на 60. При целочисленном делении дробная часть отсекается, то есть округление идёт вниз и мы всегда получим целые часы. Для получения минут – берём остаток от деления на 60, и всё! Что касается строчки if (!state) disp.point(1); – я хочу чтобы двоеточие на дисплее горело постоянно, если рабочий цикл не запущен. Поэтому принудительно включаем. В ждущем режиме мы просто выводим настроенные минуты mins, а во время работы таймера – сколько времени осталось до конца. Это можно реализовать разными способами, я выбрал самый простой (это всё-таки урок, а не погоня за оптимальным кодом): считаем оставшиеся минуты, вычитая прошедшее с момента запуска таймера время из заданных минут. И заданные минуты мы всё ещё сможем менять, то есть заставить таймер сработать чуть раньше или позже – пусть это будет фишкой
  • При 1 выводим значение установленной температуры temp, а также выводим букву t в левое знакоместо дисплея. Выключаем двоеточие, если находимся в режиме ожидания
  • При 2 выводим значение с датчика sens, а также букву S

Очень удобный таймер обратного отсчёта с цифровым дисплеем led

Представляем очень практичное устройство отсчёта времени для дома и кухни. Проект был разработан по причине того, что хоть всяких таймеров много в разных устройствах (часы, смартфоны и т. д.), но все они не удобны в эксплуатации в условиях кухни или мастерской. Управление должно быть максимально упрощено — никаких лишних кнопок, которые не сразу и вспомнить какая за что отвечает.

Читайте также:  Перетяжка кухонного уголка, как перетянуть кухонный уголок своими руками, обивка, ремонт и реставрация

Полный код программы

Полный код

// ================== НАСТРОЙКИ ==================
#define REL_HSTR 2  // ширина гистерезиса, градусов

// пины
#define ENC_A 4
#define ENC_B 3
#define ENC_KEY 2
#define BUZZ_PIN 5
#define DISP_CLK 6
#define DISP_DIO 7
#define MOS_PIN 8
#define NTC_PIN 0

// ================ БИБЛИОТЕКИ ================
// библиотека энкодера
#include <EncButton.h>
EncButton<EB_TICK, ENC_A, ENC_B, ENC_KEY> enc;

// библиотека дисплея
#include <GyverTM1637.h>
GyverTM1637 disp(DISP_CLK, DISP_DIO);

// библиотека термистора
#include <GyverNTC.h>
GyverNTC ntc(NTC_PIN, 10000, 3950);

// ================ ПЕРЕМЕННЫЕ ================
bool state;     // статус (0 ожидание, 1 таймер запущен)
byte mode;      // вывод: 0 часы, 1 градусы, 2 датчик
uint32_t tmr;   // общий таймер работы
int mins = 480; // минуты (по умолч 8 часов)
int temp = 40;  // целевая температура (по умолч 40 градусов)
int sens = 0;   // темепратура с датчика

// ================== SETUP ==================
void setup() {
  // активные пины как выходы
  pinMode(BUZZ_PIN, OUTPUT);
  pinMode(MOS_PIN, OUTPUT);

  // на всякий случай очистим дисплей и установим яркость
  disp.clear();
  disp.brightness(7);

  updDisp();  // обновить дисплей
}

// =================== LOOP ===================
void loop() {
  controlTick();  // опрос энкодера
  sensorTick();   // опрос датчика и работа реле
  if (state) timerTick();   // опрос таймеров (во время работы)
}

// ================== ФУНКЦИИ ==================
// опрос управления
void controlTick() {
  enc.tick();         // опрос энкодера

  if (enc.turn()) {           // если был поворот (любой)
    // при повороте меняем значения согласно режиму вывода

    if (enc.right()) {        // вправо
      if (mode == 1) temp  ;
      else if (mode == 0) mins  = 10;
    }

    if (enc.left()) {         // влево
      if (mode == 1) temp--;
      else if (mode == 0) mins -= 10;
      if (mins < 0) mins = 0;
    }

    updDisp();      // обновляем дисплей в любом случае
  }

  if (enc.held()) {   // кнопка энкодера удержана
    if (!state) {     // если таймер не запущен
      state = 1;      // запускаем
      tmr = millis(); // и запоминаем время запуска
    }
  }

  if (enc.click()) {          // клик по кнопке
    mode  ;                   // следующий режим вывода
    if (mode >= 3) mode = 0;  // закольцуем 0,1,2
    updDisp();                // обновить дисплей
  }
}

// всякие таймеры
void timerTick() {
  // переменные таймеров
  static uint32_t tmrSec;

  // таймер 2 раза в секунду
  if (millis() - tmrSec >= 500) {
    tmrSec = millis();

    // переключаем переменную 0,1,0,1... для мигания точками
    static bool dotsFlag = 0;
    dotsFlag = !dotsFlag;
    disp.point(dotsFlag, false);     // обновляем точки
    updDisp();  // обновляем дисп
    // ждём после вывода данных, особенность дисплея
  }

  // рабочий таймер,с момента запуска до "минут"
  if (millis() - tmr >= mins * 60000ul) {
    // время вышло! Суши вёсла
    digitalWrite(MOS_PIN, 0);

    // пропищать 5 раз
    for (int i = 0; i < 5; i  ) {
      tone(BUZZ_PIN, 1000);   // на частоте 1000 Гц
      delay(400);
      noTone(BUZZ_PIN);
      delay(400);
    }
    state = 0;    // уйти в ждущий режим
  }
}

// опрос датчика, регулирование
void sensorTick() {
  static uint32_t tmrSens;
  // каждую секунду
  if (millis() - tmrSens >= 1000) {
    tmrSens = millis();

    // получаем значение с датчика и округляем
    sens = round(ntc.getTempAverage());

    // если главный таймер запущен - релейное регулирование
    // с гистерезисом (см. урок)
    if (state) {
      static bool relayState = 0;
      if (sens < temp - REL_HSTR) relayState = 1;
      else if (sens >= temp) relayState = 0;
      digitalWrite(MOS_PIN, relayState);
    }
  }
}

// обновить дисплей в зависимости от текущего режима отображения
void updDisp() {
  switch (mode) {
    case 0:
      if (!state) {
        disp.point(1);
        disp.displayClock(mins / 60, mins % 60);
      } else {
        int curMins = mins - (millis() - tmr) / 60000ul;
        disp.displayClock(curMins / 60, curMins % 60);
      }
      break;
    case 1:
      if (!state) disp.point(0);
      disp.displayInt(temp);
      disp.displayByte(0, _t);
      break;
    case 2:
      if (!state) disp.point(0);
      disp.displayInt(sens);
      disp.displayByte(0, _S);
      break;
  }
}

Практические схемы

Контроллер на 12 В

Схема контроллера споттера

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

Источник

Принцип работы и области применения

В основу работу автотаймеров положен принцип замыкания и размыкания электрической сети, исходя из установленных параметров. После нажатия кнопки включается техника либо освещение и начинается обратный отсчет времени в контроллере. По истечении установленного периода срабатывает реле времени, прекращается подача тока и техника отключается.

Механизм приведения в действие приборов различный, но в любом реле после истечения установленного периода отключается рабочий механизм.

Временные реле используют:

  • в стиральных машинах;
  • в кухонных устройствах – микроволновках, духовках, печах;
  • в системах вентиляции и полива;
  • в осветительных приборах.

Активно используется таймер для контактной сварки в быту, на производстве, в некоторых школах (звонки на уроки и перемены).

Принципиальная схема

Индикация осуществляется на стандартном двухстрочном 16-значном дисплее (1602). Управление при помощи четырех кнопок. Кнопка S4 служит для сброса. Кнопкой S3 можно выбрать что устанавливать, минуты или секунды.

Кнопка S1 собственно служит для установки времени, ею устанавливают как минуты, так и секунды (что устанавливать выбирается кнопкой S3). Кнопка S2 служит для запуска таймера и его остановки, если это потребуется.

Рис. 1. Принципиальная схема таймера обратного отсчета на микроконтроллере PIC16F628A и с дисплеем 1602.

По завершении временного интервала возникает логическая единица на порту RB6 (вывод 12). Транзистор VT1 открывается и при помощи реле К1 включает нагрузку (нагрузка подключается между клеммами 2 и 3, а напряжение сети 220V подается на клеммы 1 и 2. Источник питания — бестрансформаторный.

Состоит из гасящего конденсатора С7, выпрямительного моста VD1-VD4 и стабилитрона VD5, а так же, сглаживающего конденсатора С6. На С6 напряжение 12V, оно служит питанием обмотки реле К1, а напряжение 5V для микроконтроллера создает стабилизатор А1.

Регулирование

Здесь всё просто: взводим таймер на 1 секунду, по нему опрашиваем термистор. Мы задаём температуру в целых числах, поэтому для более корректной работы лучше математически округлить значение перед присваиванием к переменной temp.

Если рабочий цикл запущен – идёт релейное регулирование с гистерезисом, оно разбиралось в отдельном уроке. Таким образом сигнал на реле рассчитывается раз в секунду и имеет дополнительную защиту от частых переключений в виде гистерезиса

void sensorTick() {
  static uint32_t tmrSens;
  // каждую секунду
  if (millis() - tmrSens >= 1000) {
    tmrSens = millis();

    // получаем значение с датчика и округляем
    sens = round(ntc.getTempAverage());
    
    // если главный таймер запущен - релейное регулирование
    // с гистерезисом (см. урок)
    if (state) {
      static bool relayState = 0;
      if (sens < temp - REL_HSTR) relayState = 1;
      else if (sens >= temp) relayState = 0;
      digitalWrite(MOS_PIN, relayState);
    }
  }
}

Реле на микросхеме

Более точный механизм контроля времени и включения/выключения электроприборов – на микросхемах. Такие приборы используют, если таймер срабатывает через большие промежутки времени, в пределах 10 – 60 минут. При использовании микросхем ложные включения/отключения исключены, более надежный контроль токов.

Преимущества электронных приборов:

  • малые размеры;
  • большой выбор программ;
  • малый расход электроэнергии;
  • все элементы неподвижные;
  • длительный срок эксплуатации.

Недостаток таких схем – более сложный монтаж, высокая стоимость деталей, а значит и контроллера.

С использованием таймера ne555

Наиболее простая в исполнении схема с интегральным таймером NE555, поэтому такой вариант используется во многих элекросхемах. Для монтажа контроллера времени потребуются:

  • плата 35х65;
  • файл программы Sprint Layout;
  • резистор;
  • винтовые клеммники;
  • точечный паяльник;
  • транзистор;
  • диод.

Схема монтируется на плате, резистор располагается на ее поверхности либо выводится проводами. В плате есть места для винтовых клеммников. После впаивания комплектующих, излишки пайки удаляют и проверяют контакты. Для защиты транзистора параллельно реле монтируется диод. В устройстве устанавливается время срабатывания. Если к выходу подключить реле, можно корректировать нагрузку.

Принцип работы системы:

  • пользователь нажимает кнопку;
  • схема замыкается и появляется напряжение;
  • загорается лампочка и начинается отсчет времени;
  • после истечения установленного периода лампочка гаснет, напряжение становится равным 0.
Читайте также:  Ремонт смесителя на кухне своими руками

Пользователь может регулировать интервал работы часового механизма в пределах 0 – 4 минуты, с конденсатором – 10 минут. Транзисторы, используемые в схеме – биполярные устройства малой и средней мощности типа n-p-n.

Задержка зависит от сопротивлений и конденсатора.

С помощью транзисторов

Для сборки схемы на транзисторах необходимо запастись:

  • конденсатором;
  • 2 транзисторами;
  • тремя резисторами (номинал 100 кОм К1 и 2 модели R2, R3);
  • кнопкой.

После включения кнопки заряжается конденсатор через резисторы r2 и r3 и эммитер транзистора. При этом на сопротивлении падает напряжение, так как транзистор открывается. После открытия второго транзистора срабатывает реле.

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

Сборка в железе

Итак, для начала находим подходящее железо. Это, конечно же, сам модуль Arduino

клавиатура для Arduino

индикатор 1602 с кириллицей

его обратная сторона

ну а также модуль реле

Схема соединения всей конструкции будет выглядеть вот так (для полного открытия кликните на схему):

Вместо модуля реле здесь мы видим бузер для наглядности симуляции.

В сборе вся конструкция примет вот такой вид:

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

Создаем реле времени на 12 и 220 вольт

Транзисторные и микросхемные таймеры работают при напряжении 12 вольт. Для использования при нагрузках 220 вольт устанавливают диодные устройства с магнитным пускателем.

Если планируется установка реле времени на маломощной технике, магнитный пускатель не устанавливают. Диодный мост и тиристор преобразуют напряжение без него.

Для сборки контроллера с выходом на 220 вольт запасаются:

  • тремя сопротивлениями;
  • четырьмя диодами (током более 1 А и обратным напряжением 400 В);
  • конденсатором с показателем 0,47мФ;
  • тирристором;
  • кнопкой пуска.

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

Коррекция проводится выбором сопротивления R3 и мощностью конденсатора.

Создание на базе микросхем

Чтобы создать систему на основании микросхем потребуются:

  • 3 резистора;
  • диод;
  • микросхема TL431;
  • кнопка;
  • емкости.

Контакт реле подключают параллельно кнопке, к которой подключают « » источника питания. Второй контакт реле выводят на резистор 100 Ом. Резистор также соединяют с сопротивлениями.

Второй и третий вывод микросхемы соединяют с резистором на 510 Ом и диодом соответственно. Последний контакт реле также подключается к полупроводнику, с исполняющим устройством. «–» источника питания подключают к сопротивлению на 510 Ом.

Схема принципиальная таймера с энкодером

Когда-то давно были в продаже механические таймеры — они реально были просты в использовании. Вот и решено объединить эту простоту с современной базой. Так возник этот таймер с регулятором — энкодером. В нём как и в механическом прототипе, можно увеличивать и уменьшать время отсчета. Основа — микроконтроллер ATtiny 2313. Вот к нему прошивка в архиве.

Рисунок печатки таймера

Схема таймера с обратным отсчетом на микроконтроллере attiny2313

Таймер для установки продолжительности включения устройства или нагрузки в течение времени от 0до 9 минут 59 секунд. Его можно использовать при фотопечати или при контроле за какими-то химическими реакциями.

Рис. 1. Принципиальная схема таймера обратного отсчета на микроконтроллере ATtiny2313

Схема выполнена на микроконтроллере типа ATtiny2313 в 20-выводном корпусе. Управление нагрузкой осуществляется посредством оптореле А1, предназначенного на работу с нагрузкой, питающейся от электросети 220V. Кроме того, есть звуковая сигнализация посредством пьезоэлектрического пассивного звукоизлучателя.

Установка времени и работа таймера отображается на трехразрядном цифровом светодиодном индикаторе. Управление тремя кнопками, две из них служат для установки времени, и одна для запуска таймера. Копка S1 служит для увеличения времени, S2 — для уменьшения, а S3 — для запуска. При запуске включается нагрузка.

И начинается обратный отсчет времени, при достижении которым «0,00» нагрузка выключается. Таймер питается от источника постоянного тока напряжением 5V. Источник питания подключается к разъему Х4. Разъем X3 — штепсельная розетка для подключения нагрузки, Х2 — вилка для включения в сеть. Разъем Х1 служит для подключения программатора.

Тактируется микроконтроллер от генератора на кварцевом резонаторе Q1 на частоту 4 MHz. Индикация динамическая. Используется трехразрядный семисегментный цифровой индикатор с общими катодами.

Сканирование осуществляется переключением катодов ключами на транзисторах VT1-VT3. Индикатор типа LTD5122 можно заменить практически любым семисегментным светодиодным трехразряд ным с общими катодами, либо собрать на трех одноразрядных, так же, с общими катодами.

Схема таймера с обратным отсчетом от 100 минут (pic16f628a, 1602)

Принципиальная схема самодельного таймера обратного отсчета на микроконтроллере PIC16F628A и с дисплеем 1602. Таймер предназначен для задания и отсчета времени до 99 минут 59 секунд.

После завершения заданного интервала происходит подключение нагрузки к электросети при помощи электромагнитного реле. В основе схемы микроконтроллер PIC16F628A.

Счетчики с обратным отсчетом

Кроме счетчиков прямого отсчета, к которым относится схема, изобра­женная на рис. 1.22, существуют счетчики с обратным отсчетом (иногда такой счетчик называют инверсным). В таком счетчике при поступлении каждого входного импульса содержимое уменьшается на единицу.

Кроме того, бывают задачи, для которых требуются универсальные счетчики, которые могут считать как в прямом, так и в инверсном направлении. Если задаваться задачей построения таких счетчиков на отдельных триг­герах и логических элементах, то мы получим довольно сложную схему.

1.23

изображена микросхема К555ИЕ7. Это одна из микросхем 555 серии, которая широко выпускалась в свое время в СССР, и сейчас ее можно свободно найти в продаже на радиорынках.

Микросхема 555ИЕ7 — это реверсивный четырехразрядный счетчик/делитель с возможностью предустановки. Он имеет два счетных входа, обозначенных как « 1» и «-1». По спаду каждого импульса на входе « 1» содержимое счетчика увеличивается на единицу. По спаду каждого импульса на входе 4-1» содержимое счетчика уменьшается на единицу. Счетчик имеет прямые выходы всех своих разрядов: Q0—Q3. Вход сброса Исполнительный таймер на Arduino - Практическая электроника

служит для установки всех разрядов счетчика в нулевое состояние.

Еще одно полезное свойство описываемого счетчика — это наличие режима предустановки. Используя этот режим, можно в любой момент записать во все разряды счетчика любое четырехразрядное двоичное число. Для этого счет­чик имеет несколько дополнительных входов.

Во-первых, это входы данных D0—D3. А, во вторых, это вход преду становки РЕ. Предустановка счетчика осуществляется следующим обра­зом. Сначала на входы D0—D3 подается код, который требуется записать в разряды счетчика. Затем на вход РЕ подается сигнал низкого логического уровня.

Выходы «>15» и « 15» логический ноль появляется в том случае, если в процессе прямого счета содержимое счетчика достигнет своего максимального значения 11112, и на вход « 1» поступит очередной счетный импульс. Выход « 15» и «

|следующая лекция ==>
Счетчики прямого счета|Делители с переменным коэфициентом деления

Таймер на ардуино со звуком и обратным отсчетом

Сегодня будем собирать простенький таймер с обратным отсчётом времени и звуковым сигналом при наступлении времени.
У меня на канале есть уже несколько таймеров, и с модулем часов и без него, но все они сделаны с выводом на дисплей LCD1602 или на индикатор TM1637, а мне захотелось что-нибудь новенького, поэтому я собрал таймер на четырёх разрядном семи сегментном индикаторе. Он гораздо больше предыдущих и смотрится посимпатичнее.

Читайте также:  Кухонные комбайны с чашей — купить блендер зеленых коктейлей

Давайте смотреть что получилось.
Сначала, при включении питания таймер устанавливается в заданное время, которое можно установить в скетче. Я установил 30 секунд, вы можете поставить своё время, то которое чаще всего будете использовать.
Управление таймером происходит с помощью четырёх кнопок.
Больше, меньше, запуск и сброс.
При длительном удержании кнопки цифры начинают ускоряться – это тоже можно изменить в скетче. При приближении к заданному времени установки таймера можно отпустить кнопки и доустановить однократными нажатиями, так вы не проскочите нужное время.

А ещё таймер обладает режимом памяти. Если вы набрали например 10 секунд и запустили таймер, то при следующем нажатии на сброс у вас установится предыдущее время, те же самые 10 секунд. Это работает до отключения питания. После отключения время будет взято из скетча.

Установку времени нельзя производить при работающем таймере. Его надо отключить кнопкой сброс. Для этого не обязательно ждать пока таймер отключится – это можно сделать в любой момент.

Ещё в таймер я добавил пищалку для подачи сигнала при наступлении времени заданного в таймере. Частоту звука, или свою мелодию можно добавить в скетче. А ещё вместо или вместе с пищалкой можно установить реле и тогда от таймера будет больше толку, он может производить какое-нибудь действие.

Если будет много желающих я сделаю новое видео уже с реле или ещё с чем-нибудь. У нас ещё свободны 3 выхода на Ардуино, можно их использовать. 

Схем таймеров много. Я сделал ещё один, потому что не знал, что ещё сделать. Когда на канале больше 200 видео, уже начинаешь задумываться про что бы ещё снять. Например, я больше ничего не придумал, а вы особо не пишете, что бы ещё хотели увидеть, вот поэтому и приходиться выдумывать.

Сейчас ещё раз пропищит и идём дальше. Рассмотрим схему подключения.

Принцип работы.
Индикаторы бывают с общим Катодом и общим Анодом. У меня установлен с общим Катодом, поэтому и в скетче прописаны команды для этого варианта. Я встречал много схем, где подключают индикатор к микроконтроллеру без токоограничивающих резисторов. Это неправильно. Поэтому у меня к каждому сегменту подключен резистор. Номинал резисторов можно взять любой от 200 Ом и выше. Чем выше сопротивление тем слабее будут светиться цифры. Всего резисторов восемь. Семь сегментов и точки.  Точки я не подключал. Если что непонятно то посмотрите другое видео, Часы на ардуино без модуля часов, там более подробно рассказано, а я повторяться не буду.

Вот схема подключения индикатора.
У индикатора 12 выводов, по 6 с каждой стороны. Выводы 12, 8, 9, и 6 это катоды для каждого из 4 индикаторов.
12 – отвечает за первый индикатор, 
9 – за второй,
8 – за третий,
6 – за четвёртый.
За вывод точки отвечает 3 контакт.
Я их подключил к аналоговым входам, так как цифровых уже не осталось.
Сегменты цифр на индикаторе подключены к выходам Ардуино со второго цифрового выхода по восьмой.
Кнопки управления подключены к цифровым выходам 10, 11, 12 и последний к аналоговому входу А0. 
Пищалка подключена к выходу 9 Ардуино. Это выход и управлением ШИМ.
Вот и вся схема подключения.

Переходим к скетчу.

Особо долго я на скетче останавливаться не буду. Так просто пробегусь. Он большой, но это в основном из за индикатора, так как надо создать условие включения сегментов для каждой цифры от 0 до 9.
Сначала подключаем библиотеку для работы с математическими функциями. Ничего скачивать не надо, он есть в комплекте Ардуино IDE. 
Создаём массив выходов для катодов индикатора.
Пищалку подключаем к 9 выходу.
Сегменты индикатора к выходам от 2 до 8.
Кнопки подключаем к этим входам.
Пишем значения для таймера которое будет установлено после включения питания. Если не хотите, то можете поставить 0.
В SETUP устанавливаем все выводы Ардуино как выходы, и только для кнопок как входы. Так как я не ставил внешние подтягивающие резисторы, то включаем внутреннюю подтяжку.
Функция для создания частоты звука пищалки.
Это самая большая часть кода. Здесь показано, что если надо зажечь цифру 0, то включить такие сегменты индикатора, а если 1, то такие. Итак для каждой цифры.
Цифра 962 – это подобранное значение для 1 секунды. Если у вас вдруг таймер будет работать чуть быстрее или медленнее, то вы можете подобрать это значение. Например у меня при работе таймера на 15 минут, он сработал на 1 секунду быстрее, чем таймер на телефоне.

Вроде всё что хотел, рассказал. Жду вашей активности. Если снова будет тишина, то мне снова придётся придумывать тему для видео, и она может быть вам не интересна. Вот ваш шанс задать тему и если она будет интересна многим, и если у меня будет возможность снять такое видео, то я с удовольствием его покажу.

Таймеры и индикация

Два раза в секунду хотим мигать двоеточием, а также обновлять дисплей (там ведь тикает время и меняются показания датчика). “Мигать” очень просто – заводим себе переменную-флажок, и каждый вызов просто его инвертируем и передаём в функцию управления двоеточием

static uint32_t tmrSec;

// таймер 2 раза в секунду
if (millis() - tmrSec >= 500) {
  tmrSec = millis();

  // переключаем переменную 0,1,0,1... для мигания точками
  static bool dotsFlag = 0;
  dotsFlag = !dotsFlag;
  disp.point(dotsFlag, false);     // обновляем точки
  updDisp();  // обновляем дисп
  // ждём после вывода данных, особенность дисплея
}

Далее проверяем таймер рабочего цикла, не вышло ли время. Если вышло – пищим пять раз при помощи функции tone(), а затем переходим в ждущий режим, обнулив state. Всё!

// рабочий таймер,с момента запуска до "минут"
if (millis() - tmr >= mins * 60000ul) {
  // время вышло! Суши вёсла
  digitalWrite(MOS_PIN, 0);

  // пропищать 5 раз
  for (int i = 0; i < 5; i  ) {
    tone(BUZZ_PIN, 1000);   // на частоте 1000 Гц
    delay(400);
    noTone(BUZZ_PIN);
    delay(400);
  }
  state = 0;    // уйти в ждущий режим
}

Управление

Управление энкодером организуем следующим образом:

Реализация:

void controlTick() {
  enc.tick();         // опрос энкодера

  if (enc.turn()) {           // если был поворот (любой)
    // при повороте меняем значения согласно режиму вывода

    if (enc.right()) {        // вправо
      if (mode == 1) temp  ;
      else if (mode == 0) mins  = 10;
    }

    if (enc.left()) {         // влево
      if (mode == 1) temp--;
      else if (mode == 0) mins -= 10;
      if (mins < 0) mins = 0;
    }

    updDisp();      // обновляем дисплей в любом случае
  }

  if (enc.held()) {   // кнопка энкодера удержана
    if (!state) {     // если таймер не запущен
      state = 1;      // запускаем
      tmr = millis(); // и запоминаем время запуска
    }
  }

  if (enc.click()) {          // клик по кнопке
    mode  ;                   // следующий режим вывода
    if (mode >= 3) mode = 0;  // закольцуем 0,1,2
    updDisp();                // обновить дисплей
  }
}

Устройство для коммутации оборудования 220 вольт

Часовые варианты используют электрики. Основу устройства составляет пружина, которую взводит электромагнитный механический привод. На специальной шкале задаются интервалы времени. После окончания установленного периода коммутируют контактные группы часового устройства.

Такой вариант реле времени устанавливают на автоматических рубильниках электрических цепей. Преимущество часовых таймеров – полная автономность.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector