Помодуйно: сделай таймер Pomodoro на Arduino

Техника Помодоро

это популярная система управления временем, которая включает в себя разбиение работы на 25-минутные порции с 5-минутным отдыхом. Для этого существует различное программное обеспечение, но что, если вы хотите использовать систему pomodoro, когда вы работаете вдали от компьютера или на рабочем месте? Создание таймера Pomodoro на Arduino — отличный вводный проект

чтобы помочь вам научиться обходить Arduino, и на самом деле приведет к чему-то полезному.

Цель

Если вы хотите попытаться выяснить, как это настроить, прежде чем смотреть в будущее, вот что мы пытаемся сделать. У нас будет три огня; один для «работы», один для «перерыва» и сигнальная лампа. Рабочая лампа будет гореть 25 минут, а сигнальная лампа также будет гореть в течение последних двух минут этого интервала. Через 25 минут рабочие и предупреждающие огни погаснут, а выключатель включится на 5 минут (предупреждающая лампа снова будет гореть в течение последних двух минут).

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

Что вам нужно

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

  • Микроконтроллер Arduino (мы использовали Mega, но Uno тоже работал бы отлично)
  • макетировать
  • USB-кабель
  • 6 проводов
  • Резисторы 3 х 330 Ом
  • 3 светодиода (мы использовали зеленый, желтый и синий)
  • 1 кнопка

Шаг 1: Настройка всего

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

pomoduino-Setup1

Проведите провода от контактов 5, 7 и 13 к столбцу, который содержит отрицательную ветвь синего, желтого и зеленого светодиодов (отрицательная ветвь короче из двух). Затем поместите резистор в тот же столбец, что и у каждого положительного плеча, и подключите их к отрицательной шине на боковой стороне макета (синяя, хотя цвет не имеет значения, для ясности принято использовать синий). ,

pomoduino-Setup2

Также проложите провод от синей направляющей на макете к одной из ножек на кнопке, а другой провод от другой ножки (на той же стороне), чтобы прикрепить 2 на Arduino. Затем заземлите синий рельс в контакт GND на Arduino.

pomoduino-setup3

Вот диаграмма, которая должна устранить любую путаницу:

pomoduino

Это оно! Теперь о программировании.

Программирование вашего Arduino

Ниже приведен код таймера Pomoduino — прочитайте встроенные комментарии, поскольку они объясняют, что делает каждый шаг кода.


int green = 13;
int yellow = 7;
int blue = 5;
int ledStateGreen = LOW;
int ledStateBlue = LOW;
long previousMillis = 0;
long interval;
int buttonPin = 2;
int buttonState = 1;
bool pressed = 0;
long pressTime = 0;
int phase = 0;
void setup() {
pinMode(green, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
digitalWrite(buttonPin, HIGH);
}
void loop() {
// update current time and state of button
unsigned long currentMillis = millis();
int buttonState = digitalRead(buttonPin);
// measure time since last button press
long progress = currentMillis - previousMillis;
// check to see if button has been pressed
// over 2 seconds since last press
// (to prevent multiple presses registering)
if ((pressTime - currentMillis) > 2000){
if(buttonState == 0){
pressed = 1;
pressTime = currentMillis;}
else{
pressed = 0;}
}
// phase 0 is "work" phase
// if button has been pressed, add 2 minutes to work timer
if (phase == 0){
if (pressed == 1){
interval = 1620000;}
// if interval is over, record current
// time for measuring next interval
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
// set green and blue LED states
if (ledStateGreen == LOW){
ledStateGreen = HIGH;
ledStateBlue = LOW;}
else {
ledStateGreen = LOW;}
// apply LED states to LEDs
// reset interval and switch to "break" phase
digitalWrite(green, ledStateGreen);
digitalWrite(blue, ledStateBlue);
interval = 1500000;
buttonState = 1;
phase = 1;
}
}
else {
// if button has been pressed, add 2 minutes to break timer
if (pressed == 1){
interval = 420000;}
// if interval is over, record current
// time for measuring next interval
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
// set blue and green LED states
if (ledStateBlue == HIGH){;
ledStateBlue = LOW; }
else {
ledStateBlue = HIGH;
ledStateGreen = LOW;}
// apply LED states to LEDs
// reset interval and set to "work" phase
digitalWrite(green, ledStateGreen);
digitalWrite(blue, ledStateBlue);
interval = 300000;
buttonState = 1;
phase = 0;
}
}
// calculate time left in interval
unsigned long timeLeft = (interval - progress);
// if there are less than two minutes left, light up yellow LED
if (timeLeft < 120000) {
digitalWrite(yellow, HIGH); }
else {
digitalWrite(yellow, LOW); }
// reset pressed variable
pressed = 0;
}

Примечание: когда вы тестируете это, вы, вероятно, не хотите ждать 25 минут, чтобы увидеть, работает ли оно. В видео ниже у меня установлены интервалы 5 секунд для зеленого, 2 секунды для синего и 1 секунда для желтого. Используйте более короткий интервал, чтобы убедиться, что все работает правильно, прежде чем использовать его для отслеживания времени!

Как только у вас все будет готово и код введен в IDE, вы готовы к работе! Загрузите эскиз, и у вас будет рабочий таймер pomodoro с 2-минутной кнопкой задержки. Если сигнальная лампа загорается и вам нужно больше времени, просто нажмите кнопку.

Вы можете заметить, что кнопка подключена непосредственно к входному контакту Arduino. Используя один из подтягивающих резисторов, встроенных в Arduino, вам не нужно прокладывать провод от порта 5 В до кнопки или использовать резистор в соответствии с ним. Вы можете получить более подробную информацию о справочнике Arduino для цифровых выводов.

Более сложные задачи

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

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

Другие проекты для начинающих

Если вы новичок в Arduino, у нас есть много интересных учебников для вас. Попробуйте контроллер светофора

футуристический светодиодный куб

, тревога восхода солнца

или сигнализация

, Если вы решили решить одну из более сложных задач, перечисленных выше, сообщите нам, как это происходит!

Ссылка на основную публикацию
Adblock
detector