Оглавление:

Шаговый таймер Pomodoro: 3 шага (с изображениями)
Шаговый таймер Pomodoro: 3 шага (с изображениями)

Видео: Шаговый таймер Pomodoro: 3 шага (с изображениями)

Видео: Шаговый таймер Pomodoro: 3 шага (с изображениями)
Видео: Тайм менеджмент и программирование: метод помидора 2024, Июль
Anonim
Image
Image
Шаг 1: пайка и подключение цепи вне контейнера
Шаг 1: пайка и подключение цепи вне контейнера

Stepper Pomodoro - это настольный таймер, который помогает управлять своим ежедневным списком задач, разбивая каждый период работы на 30-минутные сегменты. Однако, в отличие от обычного таймера Pomodoro, он не заставляет вас беспокоиться, показывая количество оставшегося времени. Вместо этого он отображает приблизительное время, с помощью которого тикает из трех циферблатов. Не показывая точное время, он позволяет вам фактически сосредоточиться на текущей задаче, а не постоянно проверять оставшееся время. Этот Pomodoro идеально подходит для тех, кому нужна легкая и ненавязчивая структура для управления задачами.

Инструменты

• Паяльник

• Устройства для зачистки проводов

• Лазерный резак (или шлифовальный станок в зависимости от того, как вы хотите создать циферблаты таймера)

• Сверло (я использовал сверлильный станок, чтобы пробить отверстия, достаточно большие для циферблатов)

Материалы

• 1 Arduino Uno

• 1 макет половинного размера

• 3 H-образных моста (я использовал DRV8833, моторный щит, который сэкономил мне время и избавил меня от головной боли)

• 3 шаговых двигателя (я использовал шаговые двигатели NEMA 17)

• 1 кнопка

• 1 резистор 220–1 кОм (любой в пределах допустимого диапазона)

• Адаптер переменного / постоянного тока (я использовал 12 В, вероятно, слишком большой для такого количества шаговых двигателей)

• Разветвитель мощности

• Провод USB A-B

• Макетные провода

• Припой

• Материалы для контейнера таймера.

• Акрил для циферблатов.

• Гвозди или металлические штифты в качестве неподвижного рычага таймера.

Шаг 1: Шаг 1: Пайка и подключение цепи вне контейнера

Для этого шага я начал с пайки вместе всех моих H-образных мостов (если вы покупаете моторный щит, вам не нужно их паять. Когда у вас есть H-мост для каждого шагового двигателя, вы можете проверить, как подключены ваши шаговые двигатели.

NEMA 17 - это так называемые биполярные шаговые двигатели, что означает, что они имеют две (а не одну) группу катушек внутри двигателя, которые меняют полярность, чтобы обеспечить точное движение двигателя. Биполярные шаговые двигатели обычно имеют четыре провода, а полярные степперы - шесть, что немного усложняет онлайн-инструкции. Однако вы можете прикрепить мультиметр к двум проводам и посмотреть, подключены ли они или нет. Шаговые двигатели NEMA 17 имеют порядок проводов в порядке цветов КРАСНЫЙ, ЖЕЛТЫЙ, СЕРЫЙ, ЗЕЛЕНЫЙ, причем красный и серый являются первой полярной парой, а желтый и зеленый - второй полярной парой. Если в какой-то момент шаговый двигатель начинает дергаться, а не завершает ожидаемое движение, скорее всего, ваши провода каким-то образом неправильно поляризованы по отношению к своему двойнику или один из них отключен. Каждый шаговый двигатель управляется четырьмя выходными контактами, которые подключаются к мостам DRV8833 H. Порядок подключения входа к DRV8833: IN1, IN2, Power, Ground, IN3, IN4. Для вывода данных NEMA просто подключается к четырем средним из шести контактов в следующем порядке: КРАСНЫЙ, СЕРЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ. Теперь давайте подключим питание. У меня есть NEMA на цифровых портах 2–13.

Для питания я купил адаптер переменного / постоянного тока 12 В со сплиттером, чтобы иметь возможность питать как Arduino, так и все степперы. ВНИМАНИЕ: не подключайте провода питания и заземления от Arduino, уже получающего питание от порта, к макетной плате, получающей прямое питание от переменного / постоянного тока. Это поджарит вашу доску. От адаптера 12 В, подключенного к стене, одна часть разветвителя шла прямо к порту Arduino, а другая - к плюсу и минусу макетной платы.

Наконец, пора подключить кнопку. На одной стороне кнопки потребуется как питание (со вставленным резистором), так и припаянный выходной контакт (это также можно сделать с макетной платы). Другой штифт будет нашей землей. Эти три провода должны быть подключены: питание с резистором на 5 В, выход на A0 и заземление на землю - все на самой плате Arduino Uno.

Отсюда мы сможем попытаться управлять шаговыми двигателями, используя этот базовый тестовый код шагового двигателя, найденный здесь. Это объяснение на Arduino.cc также дает более подробное объяснение би / униполярных шаговых двигателей, если вам это нужно. Теперь давайте перейдем к коду Pomodoro!

Шаг 2: Шаг 2: загрузка кода и настройка его в соответствии с вашими потребностями

Шаг 2. Загрузка кода и настройка его под свои нужды
Шаг 2. Загрузка кода и настройка его под свои нужды

Ниже приведен код моего Pomodoro с кнопкой, чтобы настроить его в соответствии с вашими настройками, выполните следующие действия:

1. Установите, сколько шагов на оборот имеет ваш персональный тип шагового двигателя (NEMA 17 имеет 200, и это указано в виде постоянного целого числа, называемого stepsPerRevolution).

2. Установите, где ваша кнопка вводит данные, в постоянном целочисленном значении buttonPin вызывающего объекта.

3. Установите, откуда ваш arduino должен выводить данные, чтобы управлять шаговыми двигателями (эти части могут больше всего различаться между типами H-мостов, так как многие из них имеют разные библиотеки, которые они используют).

4. Установите скорость шагового двигателя в об / мин в.setSpeed (я установил 1 об / мин при повороте по часовой стрелке и 30 об / мин при повороте против часовой стрелки).

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

6 Установите, как долго вы хотите, чтобы он вращался в обратном направлении.

#включают

const int stepsPerRevolution = 200; // установка константы количества шагов на каждый полный оборот моих шаговых двигателей

const int buttonPin = A0; // установка константы моего ввода кнопки

Stepper firstStepper (stepsPerRevolution, 2, 3, 4, 5); // инициализируем библиотеку шагового двигателя на определенных выводах

Шаговый секундомер secondStepper (stepsPerRevolution, 6, 7, 8, 9); Шаговый третийStepper (stepsPerRevolution, 10, 11, 12, 13); Stepper firstStepperBack (stepsPerRevolution, 2, 3, 4, 5); // повторно инициализируем библиотеку шагового двигателя на этих выводах, чтобы иметь возможность сбросить обороты при предупреждении об истечении времени Stepper secondStepperBack (stepsPerRevolution, 6, 7, 8, 9); Шаговый третийStepperBack (stepsPerRevolution, 10, 11, 12, 13);

int minutesCounter = 0; // int подсчет полных оборотов шаговых двигателей

int timerState = LOW; // текущее состояние таймера pomodoro (HIGH = on, LOW = off / reset) int buttonState; // текущее чтение с входного вывода int lastButtonState = HIGH; // предыдущее чтение с входного пина

// следующие переменные являются беззнаковыми длинными, потому что время, измеряемое в миллисекундах, // быстро станет большим числом, чем может быть сохранено в int. беззнаковый длинный lastDebounceTime = 0; // последний раз, когда выходной контакт был переключен unsigned long debounceDelay = 50; // время дребезга; увеличивать, если вывод мерцает

void setup () {

pinMode (buttonPin, INPUT_PULLUP); // устанавливаем константу кнопки в качестве входа

firstStepper.setSpeed (1); // устанавливаем скорость 1 об / мин для отсчета 10 минут на шаговый секундомер secondStepper.setSpeed (1); thirdStepper.setSpeed (1); firstStepperBack.setSpeed (30); // устанавливаем скорость 30 об / мин для предупреждения об истечении времени после завершения Pomodoro secondStepperBack.setSpeed (30); thirdStepperBack.setSpeed (30);

Serial.begin (9600); // запускаем последовательный монитор со скоростью 9600 бод

}

void loop () {

// считываем состояние переключателя в локальную переменную: int read = digitalRead (buttonPin);

// проверяем, только что нажали ли вы кнопку

// (т.е. вход перешел с НИЗКОГО на ВЫСОКИЙ), и вы ждали // достаточно долго с момента последнего нажатия, чтобы игнорировать любой шум:

// Если переключатель изменился из-за шума или нажатия:

if (reading! = lastButtonState) {// сбрасываем таймер устранения дребезга lastDebounceTime = millis (); } if ((millis () - lastDebounceTime)> debounceDelay) {// независимо от того, на каком уровне чтения, оно существует дольше, // чем задержка противодействия, поэтому примите это как фактическое текущее состояние:

// если состояние кнопки изменилось:

если (чтение! = buttonState) {buttonState = чтение;

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

// нажмите один раз, чтобы включить, нажмите еще раз, чтобы выключить if (buttonState == LOW) {timerState =! timerState; Serial.print («Состояние таймера есть»); Serial.println (timerState); }}}

if (timerState == HIGH) {

Serial.println («Таймер Pomodoro запущен»); if (minutesCounter <11) {// если текущее второе значение отличается от предыдущего, то firstStepper.step (stepsPerRevolution); // повернуть шаговый двигатель на 200 шагов / 1 оборот в минутуCounter ++; Serial.print ("minutesCounter is"); Serial.println (minutesCounter); }

if (11 <= minutesCounter && minutesCounter <21) {// если текущее второе значение отличается от предыдущего, то secondStepper.step (stepsPerRevolution); // повернуть шаговый двигатель на 200 шагов / 1 оборот в минутуCounter ++; Serial.print ("minutesCounter is"); Serial.println (minutesCounter); }

if (21 <= minutesCounter && minutesCounter <31) {// если текущее второе значение отличается от предыдущего, то thirdStepper.step (stepsPerRevolution); // повернуть шаговый двигатель на 200 шагов / 1 оборот в минутуCounter ++; Serial.print ("minutesCounter is"); Serial.println (minutesCounter); }

if (31 <= minutesCounter && minutesCounter <1031) {// если текущее второе значение отличается от предыдущего, то firstStepperBack.step (-1); // поворачиваем шаговый двигатель назад на 1 шаг по порядку, как будто все работают одновременно secondStepperBack.step (-1); thirdStepperBack.step (-1); minutesCounter ++; Serial.print ("minutesCounter is"); Serial.println (minutesCounter); }} else {Serial.println («Таймер Pomodoro выключен»); } // сохраняем чтение. // В следующий раз в цикле это будет lastButtonState: lastButtonState = reading; }

Шаг 3: Шаг 3: Добавьте степперы и Arduino, если хотите

Шаг 3. Если хотите, добавьте степперы и Arduino
Шаг 3. Если хотите, добавьте степперы и Arduino
Шаг 3. Если хотите, добавьте степперы и Arduino
Шаг 3. Если хотите, добавьте степперы и Arduino
Шаг 3. Если хотите, добавьте степперы и Arduino
Шаг 3. Если хотите, добавьте степперы и Arduino

Я решил создать для своих часов параллелограммную форму. Эта форма и выбор материала красного дуба были вдохновлены современной мебелью середины века. Одна часть, с которой у меня возникли наибольшие трудности, заключалась в установке степперов с циферблатами через их иллюминаторы, чтобы их было видно.

Рекомендуемые: