Простой таймер на Arduino (UNO или Nano)

На предыдущую страницу…


Скачать:
Этот документ в PDF-формате.
Скетч (zip-файл).
Библиотеку TM1637.


Таймер «умеет»:

1. Просчитывать и визуализировать прошедшее от момента включения время в формате ММ:СС (минуты, секунды) в пределах от 00:00 до 59:59 (один час).

2. Подавать звуковой сигнал (различной тональности) по прошествии интервалов времени: каждая минута, каждая 10-я минута, каждый час.
Через час все показания таймера обнуляются и процесс отсчета времени начинается с начала.


Компоненты таймера:
Arduino (UNO или Nano).
Блок 7-ми сегментных индикаторов 3642BH.
Зуммер (buzzer).
Провода.


В скетче (см. ниже) используется, также, дополнительная библиотека TM1637.
Ее можно найти и скачать в Инете (в том числе и здесь).


На рисунке ниже приведено назначение контактов блока 7-ми сегментных индикаторов 3642BH.


На рисунке ниже приведено назначение контактов зуммера (buzzer).


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


Скетч
Все пояснения включены в текст исходника (см. ниже).

//2022.12.12 (roamer55.ru)
//Простой таймер на Arduino (UNO, Nano)

//----------------
#include "TM1637.h"          // Подключение библиотеки TM1637.h
#define CLK 2                // Вывод CLK 3642BH)
#define DIO 3                // Вывод DIO 3642BH)
#define BRIGHT_TYPICAL  7    // Яркость 3642BH от (0 до 7)
TM1637 tm1637(CLK,DIO);      // Создание объекта tm1637 (для управления 3642BH)
int8_t NumTab[] = {0,0,0,0}; // Создание массива данных, 0-9 это 0-9, от 10 - 15 это A-F. 
int n1, n2, n3, n4;          // Счетчики (секунды, десятки секунд, минуты, десятки минут)
#define buzzer 5             // Контакт S зуммера подключен к контакту 5 Arduino
//----------------

void setup()
{
  pinMode(buzzer, OUTPUT);          // режим пина "5" (buzzer) Arduino - "Выход":
  tm1637.init();                    // Инициализация объекта tm1637
  tm1637.set(BRIGHT_TYPICAL);       // Установка яркости 3642BH
  //------------
  //Начальные значения счетчиков
  n1 = -1;
  n2 = 0;
  n3 = 0;
  n4 = 0;
  //------------
  //------------
  //на вкус и цвет товарищей нет (закомментарь след. строки в этом блоке, если не нужен звук)
  // Включение зуммера при старте скетча (т.е., при включении схемы)
  analogWrite(buzzer, 4186); //нота ДО 5-й октавы
  delay(125);                //пауза
  analogWrite(buzzer, 0);    //отключение звука зуммера 
  delay(125);                //пауза  
  //------------
}
 
void loop()
{
  n1=n1+1; //секунды (счетчик)
  if (n1>9)  
  {
     n2 = n2+1;  //десятки секунд (счетчик)
     n1=0;
  }
  if (n2>5)
  {
     n2=0;
     n3 = n3+1; //минуты (счетчик)
     //на вкус и цвет товарищей нет (закомментарь след. строку, если не нужен звук)
     analogWrite(buzzer, 1046); // каждую минуту включаем зуммер (нота ДО 3-й октавы)
  }
  if (n3>9) 
  {
     n3=0;
     n4 = n4+1; //десятки минут (счетчик)
     //на вкус и цвет товарищей нет (закомментарь след. строку, если не нужен звук)
     analogWrite(buzzer, 523); // каждые 10 минут включаем зуммер (нота ДО 2-й октавы)
  }
  if (n4>5)  //час (60 минут, счетчик)
  {
     //------------
     //Начальные значения счетчиков
     n1 = 0;
     n2 = 0;
     n3 = 0;
     n4 = 0;
     //------------
     //на вкус и цвет товарищей нет (закомментарь след. строку, если не нужен звук)
     analogWrite(buzzer, 262); // каждый час включаем зуммер (нота ДО 1-й октавы)
  }
  //-------------------
  //Присвоение значений счетчиков элементам массива
  NumTab[3]=n1;
  NumTab[2]=n2;
  NumTab[1]=n3;
  NumTab[0]=n4;
  //-------------------
  //-------------------
  tm1637.point(true);     // Визуализация "двоеточия" на 3642BH
  tm1637.display(NumTab); // Визуализация значений счетчиков на 3642BH
  delay(500);             // Пауза
  //-------------------
  //-------------------
  tm1637.point(false);    // "Погасить" "двоеточие" на 3642BH
  tm1637.display(NumTab); // Визуализация значений счетчиков на 3642BH
  //-------------------

  analogWrite(buzzer, 0); // отключение звука зуммера 
  delay(500);             // Пауза
}

Примечания:

  • Схема соединений и скетч применимы как для Arduino Nano, так и для Arduino UNO.
  • Таймер сохраняет работоспособность даже при обрыве питания (3V3) зуммера (buzzer) и/или при обрыве питания (5V) блока 7-ми сегментных индикаторов 3642BH.

Скачать:
Этот документ в PDF-формате.
Скетч (zip-файл).
Библиотеку TM1637.


См., также:


На предыдущую страницу…

Дата: 13.12.2022