====== Кухонный таймер ====== ** [[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|библиотеку для работы с «трёхногим» дисплеем]].