Помодоро таймер: учимся работать эффективно

Помодоро таймер: учимся работать эффективно

Организовать свою работу в условиях самоизоляции крайне сложно. То семья отвлекает, то приходят очень важные новости от друзей, обновляются ленты в соцсетях, появляются новые видео на YouTube и вызовы в TicToc. Как сконцентрироваться на работе?!

В борьбе с прокрастинацией помогает дюжина способов, но мне больше всего нравится метод «Помидора». Это простая техника, которую тридцать лет назад придумал итальянский студент Франческо Чирилло.

Суть метода — разбиение сложной работы на короткие и чётко фиксированные интервалы. 25 минут мы работаем над задачей — не отвлекаясь даже на Конец света, а пять минут после этого отдыхаем.

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

Я же покажу как собрать электронный таймер на базе Arduino.

Что понадобится

    — микроконтроллер Arduino Uno
    — пять красных светодиодов
    — зелёный светодиод
    — шесть сопротивлений на 220 Ом
    — тактовая кнопка
    — макетная плата
    — соединительные провода «папа-папа»

Помодоро таймер: учимся работать эффективно

В моём устройстве шесть светодиодов: пять красных и один зелёный. Пока таймер отсчитывает интервал работы, каждые пять минут будут загораться красные светодиоды — от первого до пятого. Когда настанет время отдыха, красные светодиоды погаснут и загорится зелёный. После пяти минут отдыха таймер переключится в режим ожидания, будет ждать нажатие кнопки, чтобы запустить новый цикл.

Устройство простое и тратить время на пайку откровенно лень. Поэтому соберу таймер намакетной плате. Получится быстро и аккуратно.

Шаг первый. Подключаем кнопку и первый светодиод

Начнём с основ светодиодной робототехники — управлению светодиодом кнопкой. Соберу простую схему: подключу красный светодиод к Arduino.

Помодоро таймер: учимся работать эффективно

Соединю длинную ножку светодиода (это «плюс») проводом с 8 контактом на плате. Короткую к общему «минусу» на макетной плате. Напрямую светодиоды подключать нельзя, они рассчитаны на маленький ток, поэтому добавлю сопротивление. Одного сопротивления на 220 Ом будет достаточно.

Подключу тактовую кнопку. Одну ножку подключу к контакту 2 на плате, противоположную соединю с общим «минусом». Для кнопки не нужно подключать дополнительное сопротивление, подтягивающий резистор уже есть на самой плате Arduino.

Помодоро таймер: учимся работать эффективно

Загружу в Ардуино простую программу. Она будет следить за контактом, которому подключена кнопка. Если кнопка не нажата, загорится красный светодиод на макетной плате. Если кнопка отпущена, будет гореть светодиод на самой Ардуинке — он показывает ток на контакте номер 13.

В коде я воспользовался небольшой хитростью. Состояние кнопки я храню в переменной buttonIsUp. Это логическая переменная, она может принимать одно из двух значений «истина» или «ложь». Эти значения хранятся в виде цифр — 1 и 0 соответственно. Я использую это свойство, чтобы включать нужные светодиоды. Функция digitalWrite проверяет значение этой переменной: если оно равно 1, то функция включает светодиод, если 0 — гасит. Знак «!» перед переменной означает, что её значение нужно изменить на противоположное: 0 становится 1, а 1 — 0. Именно поэтому один светодиод загорается, а второй — гаснет.

Помодоро таймер: учимся работать эффективно
Помодоро таймер: учимся работать эффективно

Устройство работает, но толку от него мало. Пока у меня получился простой выключатель. Чтобы светодиод загорался при нажатии на кнопку микроконтроллер не нужен. Всё идёт по плану, это только первый шаг. На втором — я усложню задачу. Сделаю индикатор занятости.

Шаг второй. Соберём индикатор занятости

Добавлю к своему устройству ещё один светодиод, на этот раз зелёный. Подключу его длинную ножку к 13 контакту на плате, а короткую (через резистор, разумеется) к общему «минусу».

Помодоро таймер: учимся работать эффективно

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

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

У меня получился простой светофор. Теперь я могу подавать сигналы членам семьи: если на странной штуковине горит красная лампочка — ко мне лучше не приставать.

Помодоро таймер: учимся работать эффективно
Помодоро таймер: учимся работать эффективно

Шаг три. Обрабатываем залипание кнопки и убираем дребезг

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

А ещё, избавлюсь от ложных срабатываний. В любой механическом выключателе — кнопке, рубильнике или реле — есть подвижные контакты. Они могут пружинить или перемещаться слегка неравномерно, поэтому возможны ложные и повторные срабатывания — они называются «дребезг». Избавлюсь от них — добавлю повторную проверку кнопки: если она осталась нажата и через одну десятую секунды, программа зафиксирует щелчок по кнопке.

Вот теперь кнопка работает чётко, без залипаний и ложных срабатываний.

Шаг четыре. Собираем «помодоро таймер»

Мы разобрались с основными элементами устройства. Теперь добавим светодиодов — проект ими не испортишь.

Подключу ещё четыре красных светодиода к контактам 9, 10, 11 и 12.

Помодоро таймер: учимся работать эффективно

Когда таймер заработает, каждые пять минут будет загораться ещё один красный светодиод. Через 25 минут все красные светодиоды погаснут и загорится зелёный. Всё просто: красные говорят, что нужно работать, а зелёный — что можно отдохнуть.

Помодоро таймер: учимся работать эффективно
Помодоро таймер: учимся работать эффективно

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

.

За десять минут у меня получилось простое, но очень полезное устройство. Интервальный таймер серьёзно повысит эффективность надомной работы и научит не отвлекаться по пустякам. Внимание, метод «помидорки» вызывает привыкание.

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

Помодоро таймер: учимся работать эффективно
Постоянный автор компании «220 вольт». Умеет собирать шкафы, пилить заборы и выпиливать двери. Пишет буквы и снимает видео.