КОРОБКА ДЛЯ БОРЬБЫ С ПРОКРАСТИНАЦИЕЙ НА ARDUINO.

Ниже приведён перевод статьи: http://digitaljunky.io/the-anti-procrastination-box/ созданный и публикуемый нами с разрешения автора.
В данной статье описывается создание простого и полезного устройства, способ подключения платы Arduino к сегментному индикатору и соленоиду, а так же представлен пример ООП кода для Arduino. Читайте, разбирайтесь, творите!!
У меня был запасной дисплей, и я думал куда его применить. В итоге родилась коробка для борьбы с прокрастинацией для тех из нас, кто привык жить со смартфонами, однако это вызывает у них лишние промедления. Благодаря этой коробке, вы сможете на некоторое время гарантировано отказаться от своего девайса. Для этого всего лишь, нужно положить телефон в коробку и установить интервал, в течении которого она должна быть закрыта.
КОМПОНЕНТЫ
- 1 Arduino Nano R3
 - 1 4 цифровой, семи-сегментный дисплей
 - 1 5 вольтовый соленоид
 - 1 MOFSET-транзистор TIP122G
 - 1 диод
 - 8 резисторов на 330 Ом
 - 2 резистора на 270 Ом
 - 1 резистор на 100 Ом
 - 2 тактовые кнопки
 - Полимерная глина (или 3D-принтер)
 - Провода
 - Батарейный отсек
 
СХЕМА
На схеме снизу показано подключение между собой всех компонентов.

Компоновка компонентов может быть (и должна была) быть сделана лучше, но я признал свою ошибку, только тогда, когда половина проводов уже были припаяны.
Так же было бы неплохо добавить кнопку для включения/выключения Arduino и зуммер для обозначения конца отчётного периода.
PDF-версия схемы есть тут.
КОД
Весь код для данного проекта можно найти тут.
Код написан на C++, т.к. мне нравится использовать классы, это позволяет сделать код читаемым и чистым. В коде есть 5 классов:
- Таймер (Timer): управление механизма таймера. Использует встроенные часы Arduino для хранения прошедшего времени.
 - Замок (Lock): работает с двигателем, управляемым транзистором. Может быть либо открыт, либо закрыт.
 - Кнопка (Button): результат опроса состояния, может быть зажатой, нажатой или отпущенной.
 - Дисплей (Display): управление сегментным двигателем. Методо show() позволяет установить любое допустимое число между [0, 9999].
 - Регистр пинов (PinRegistry): класс, где сохранены все объявления номеров используемых ножек (пинов).
 
ПАЙКА КОМПОНЕНТОВ
Начнём с пайки ножек к Arduino Nano, если они ещё не припаяны.
(Если случилось так, что паяльника нет, а припаять нужно – это отличный повод купить его или целый набор для пайки в нашем магазине – прим. ред. ;-)


Тестирование на макетной плате и подготовка компонентов:

Паяем резисторы к ножкам дисплея.


Знакомьтесь с ардусьминогом!

Присоединяем дисплей.


Ура! Ничего не сгорело!
ПОДГОТОВКА КОРОБКИ
Возьмём коробку и проделаем отверстия под дисплей и 2 кнопки.




Далее, совсем не обязательно, но, кажется, коробка будет выглядеть лучше, если будет иметь чёрный цвет. Так что покрасим коробку!


СОЗДАНИЕ ЗАМКА
Поскольку у меня не было 3D принтера, я решил использовать полимерную глину, которая проста для моделирования и клейки.
Нам надо создать небольшой треугольник, который будет передвигаться соленоидом, когда коробка будет запираться. Соленоид затем будет держать этот кусочек, не давая коробке открыться.
Так же нам потребуются детали в форме буквы L для поддержи соленоида.


Теперь объединим всё в одно:


И В ИТОГЕ…

Видео работы коробки можно найти тут.
Я надеюсь, что вам понравился данный проект и это дало некоторые ответные идеи. Пишите в комментариях, если у вас есть свои идеи, критика и пожелания и темы для новых уроков!
(Автору можно написать тут).
