====== Кухонный таймер ======
** [[slot-box:start#хочу_собрать|Проекты на Arduino и Slot Shield]] **
Простой электронный таймер запустит обратный отсчёт и громко пропищит о его окончании. Временной интервал задаётся ручкой потенциометра, а отсчёт запускается и останавливается кнопкой.
{{ :slot-box:timer:timer.jpg |}}
* Платформы: [[amp>product/arduino-uno?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|Arduino Uno]], [[amp>product/arduino-leonardo?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|Arduino Leonardo]], [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|Iskra Neo]]
* Язык программирования: Arduino (C++)
===== Видеоинструкция =====
{{youtube>tWQRUhX7NyY?large}}
===== Что потребуется =====
[[amp>collection/kitchen-timer?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki | Полный сет]] компонентов проекта. В сет входят:
* [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|Iskra Neo]]
* [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|Troyka Slot Shield]]
* [[amp>product/structor-slot-box?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|#Slot Box]]
* [[amp>product/troyka-quad-display?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|четырёхразрядный индикатор]],
* [[amp>product/troyka-button?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|кнопка]]
* [[amp>product/troyka-potentiometer?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|потенциометр]]
* [[amp>product/troyka-buzzer?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|пьезопищалка]]
===== Как собрать =====
Установите [[amp>product/arduino-troyka-slot-shield?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|Troyka Slot Shield]] на [[amp>product/iskra-neo?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|Iskra Neo]]
{{ :slot-box:timer:step1.png?600 |}}
Вставьте [[amp>product/troyka-quad-display?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|четырёхразрядный индикатор]] в левый нижний слот
{{ :slot-box:timer:step2-q2.png |}}
Поверните модуль [[amp>product/troyka-potentiometer?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|потенциометра]] на 180 градусов и вставьте в правый нижний слот.
{{ :slot-box:timer:step3-q2.png |}}
Вставьте [[amp>product/troyka-buzzer?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|пьезопищалку]] в верхний левый слот.
{{ :slot-box:timer:step4-q2.png |}}
Вставьте [[amp>product/troyka-button?utm_source=proj&utm_campaign=slot-proj-3&utm_medium=wiki|кнопку]] в правый верхний слот.
{{ :slot-box:timer:step5-q2.png |}}
===== Скетч =====
Прошейте контроллер скетчем через [[articles:arduino-ide-install|Arduino IDE]].
// Подключаем библиотеку для работы с дисплеем
#include
// номер аналогового пина пищалки
#define POT_PIN A0
// номер цифрового пина пищалки
#define BUZZER_PIN 2
// номер цифрового пина кнопки
#define BUTTON_PIN 4
// создаём объект класса QuadDisplay и передаём номер пина CS
QuadDisplay qd(9);
// переменная для подсчёта времени
unsigned long prevMillis = 0;
// переменная для хранения таймера
int reverseTimer;
void setup()
{
// инициализация дисплея
qd.begin();
// функция установки таймера
settingTimer();
}
void loop()
{
// если время таймера не дошло до нуля и прошла 1 секунда
if ((reverseTimer > 0) && ((millis() - prevMillis) > 1000)) {
// выводим значение на дисплей
qd.displayInt(--reverseTimer);
// запоминаем текущее время
prevMillis = millis();
// если таймер дошёл до нуля
if (reverseTimer == 0) {
// подаём звуковой сигнал и выводим «Off» на дисплей
qd.displayDigits(QD_NONE, QD_O, QD_f, QD_f);
tone(BUZZER_PIN, 4000, 200);
}
}
// если нажата кнопка
if (!digitalRead(BUTTON_PIN)) {
// подаём звуковой сигнал
tone(BUZZER_PIN, 500, 500);
delay(1000);
// выполняем настройку таймера
settingTimer();
}
}
// функция настройки таймера
void settingTimer()
{
// пока кнопка не нажата
while (digitalRead(BUTTON_PIN)) {
// считываем значения с потенциометра
reverseTimer = analogRead(A0);
// и выводим его на дисплей
qd.displayInt(reverseTimer);
delay(30);
}
// после нажатия кнопки, подаём звуковой сигнал
tone(BUZZER_PIN, 2000, 200);
delay(300);
tone(BUZZER_PIN, 3000, 200);
delay(300);
tone(BUZZER_PIN, 4000, 200);
}
===== Что дальше? =====
Хотите собрать другой девайс?
Выберите своё будущее устройство из [[slot-box:start#хочу_собрать|списка проектов на Slot Shield]].
===== FAQ =====
> Где скачать и как установить необходимые библиотеки?
* [[https://github.com/amperka/QuadDisplay2|Скачать библиотеку для для работы с дисплеем]]
* [[программирование:библиотеки|Установить библиотеку]]
> У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?
Да, модуль можно использовать, но скетч, библиотеки и схема сборки отличаются.
Вставьте QuadDisplay в правый нижний слот {{ :slot-box:timer:step2.png?500 |}}
Прошейте контроллер скетчем через [[articles:arduino-ide-install|Arduino IDE]].
// Подключаем библиотеку для работы с дисплеем
#include
// номер аналогового пина потенциометра
#define POT_PIN A0
// номер цифрового пина пищалки
#define BUZZER_PIN 2
// номер цифрового пина кнопки
#define BUTTON_PIN 4
// номер цифрового пина дисплея
#define DISPLAY_PIN 11
// переменная для подсчёта времени
unsigned long prevMillis = 0;
// переменная для хранения таймера
int reverseTimer;
void setup()
{
// функция установки таймера
settingTimer();
}
void loop()
{
// если время таймера не дошло до нуля и прошла 1 секунда
if ((reverseTimer > 0) && ((millis() - prevMillis) > 1000)) {
// выводим значение на дисплей
displayInt(DISPLAY_PIN, --reverseTimer);
// запоминаем текущее время
prevMillis = millis();
// если таймер дошёл до нуля
if (reverseTimer == 0) {
// подаём звуковой сигнал и выводим «Off» на дисплей
displayDigits(DISPLAY_PIN, QD_NONE, QD_O, QD_f, QD_f);
tone(BUZZER_PIN, 4000, 200);
}
}
// если нажата кнопка
if (!digitalRead(BUTTON_PIN)) {
// подаём звуковой сигнал
tone(BUZZER_PIN, 500, 500);
delay(1000);
// выполняем настройку таймера
settingTimer();
}
}
// функция настройки таймера
void settingTimer()
{
// пока кнопка не нажата
while (digitalRead(BUTTON_PIN)) {
// считываем значения с потенциометра
reverseTimer = analogRead(A0);
// и выводим его на дисплей
displayInt(DISPLAY_PIN, reverseTimer);
delay(30);
}
// после нажатия кнопки, подаём звуковой сигнал
tone(BUZZER_PIN, 2000, 200);
delay(300);
tone(BUZZER_PIN, 3000, 200);
delay(300);
tone(BUZZER_PIN, 4000, 200);
}
Скачайте и установите [[https://github.com/amperka/QuadDisplay|библиотеку для работы с «трёхногим» дисплеем]].