Оглавление:

Ultimate Binary Watch: 12 шагов (с изображениями)
Ultimate Binary Watch: 12 шагов (с изображениями)

Видео: Ultimate Binary Watch: 12 шагов (с изображениями)

Видео: Ultimate Binary Watch: 12 шагов (с изображениями)
Видео: Приказ комиссара. Warhammer 40k 2024, Ноябрь
Anonim
Совершенные двоичные часы
Совершенные двоичные часы
Совершенные двоичные часы
Совершенные двоичные часы
Совершенные двоичные часы
Совершенные двоичные часы

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

Запасы

Все файлы для этого проекта:

Библиотеки для кода Arduino можно скачать с GitHub здесь:

Библиотека M41T62 RTC

Библиотека FastLED

Библиотека LowPower

Шаг 1. Идея

Недавно я наткнулся на следующее видео:

Бинарные наручные часы своими руками

На видео выше показаны простые самодельные двоичные часы. Я понятия не имел, что такая вещь существует, но после дальнейших исследований в области бинарных часов я быстро понял, что существует масса различных дизайнов! Я хотел построить такую для себя, но не смог найти дизайн, который мне понравился. Бинарные часы, которые я обнаружил, лишены многих функций и выглядят не очень хорошо. Итак, я решил спроектировать свою полностью с нуля!

Первым шагом было определение критериев моего дизайна. Вот что я придумал:

  • Двоичный интерфейс RGB
  • Отображение времени (с очень точным отсчетом времени)
  • Отображение даты
  • Функциональность секундомера
  • Функциональность будильника
  • Срок службы батареи не менее 2 недель
  • Зарядка через USB
  • Программное обеспечение легко настраивается пользователем
  • Чистый и простой дизайн

Эти критерии легли в основу всего проекта. Следующим шагом было выяснить, как я хочу, чтобы часы работали!

Шаг 2: немного теории двоичных часов

Некоторая теория двоичных часов
Некоторая теория двоичных часов

План был прост. Двоичные часы будут работать так же, как обычные часы, за исключением того, что интерфейс будет двоичным, в частности, BCD (Binary Coded Decimal). BCD - это тип двоичного кодирования, в котором каждая десятичная цифра представлена фиксированным числом бит. Мне нужно 4 бита, чтобы можно было представить цифру от 0 до 9. А для стандартного

чч: мм

формат времени, мне нужно 4 из этих цифр. Это означает, что мне нужно всего 16 бит, которые будут представлены 16 светодиодами.

Считать время в формате BCD довольно легко, если вы к нему привыкнете. Строка внизу часов представляет младший значащий бит (1), а верхняя строка - самый старший значащий бит (8). Каждый столбец представляет собой цифру в

чч: мм

формат времени. Если светодиод горит, вы подсчитываете это значение. Если светодиод не горит, вы его игнорируете.

Чтобы прочитать первую цифру, просто просуммируйте все активированные светодиоды, соответствующие значения в первом (крайнем левом) столбце. Проделайте то же самое с другими цифрами слева направо. Теперь вы прочитали время в формате BCD!

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

Следующим шагом было создание блок-схемы!

Шаг 3. Приступаем к работе

Приступаем к работе
Приступаем к работе

Как и в любом типичном электронном проекте, блок-схема является важной частью на ранней стадии проектирования. Используя критерии, мне удалось составить приведенную выше блок-схему. Каждый блок на схеме представляет функцию в схеме, а стрелки показывают взаимосвязь функций. Блок-схема в целом дает хорошее представление о том, как схема будет работать.

Следующим шагом было начать принимать решения по отдельным компонентам для каждого блока на блок-схеме!

Шаг 4: выбор компонентов

Компонентов в этой схеме оказалось довольно много. Ниже я выбрал некоторые из наиболее важных и объяснил, почему я их выбрал.

Светодиоды

Для двоичного интерфейса выбор был довольно простым. Я знал, что хочу использовать светодиоды для дисплея, и понял, что мне нужно 16 из них (в сетке 4 × 4), чтобы отображать как можно больше информации. Во время моих поисков идеального светодиода, APA102 продолжал появляться. Это очень маленький (2 мм x 2 мм) адресный светодиод с широким спектром цветов и довольно недорогой. Хотя я никогда раньше с ними не работал, они казались идеально подходящими для этого проекта, поэтому я решил использовать их.

Микроконтроллер

Выбор микроконтроллера тоже был довольно простым. У меня был большой опыт использования Atmega328P-AU в автономных приложениях, и я был хорошо знаком с его функциями. Это тот же микроконтроллер, который используется в платах Arduino Nano. Я знаю, что, вероятно, есть более дешевый микроконтроллер, который я мог бы использовать, но знание того, что Atmega328 будет иметь полную поддержку всех библиотек Arduino, было большим фактором при выборе его для этого проекта.

RTC (часы реального времени)

Основным требованием к RTC была точность. Я знал, что у часов не будет подключения к Интернету и, следовательно, они не смогут откалибровать себя через подключение к Интернету, пользователю придется откалибровать их вручную. Поэтому я хотел сделать хронометраж максимально точным. M41T62 RTC имеет одну из самых высоких показателей точности, которые я мог найти (± 2 ppm, что эквивалентно ± 5 секундам в месяц). Сочетание высокой точности с совместимостью с I2C и сверхнизким потреблением тока сделало этот RTC хорошим выбором для этого проекта.

Повышающий преобразователь постоянного тока в постоянный

Выбор микросхемы повышающего преобразователя постоянного тока в постоянный был сделан просто путем просмотра схемы и определения требуемых напряжений и токов. Запуск схемы на низком напряжении уменьшит потребление тока, но я не мог опускаться ниже 4,5 В (минимальное напряжение микроконтроллера при тактовой частоте 16 МГц) и не мог превышать 4,5 В (максимальное напряжение RTC). Это означало, что мне пришлось запустить схему точно при 4,5 В, чтобы компоненты работали в соответствии с их рекомендованными спецификациями. Я подсчитал, что максимальный ток схемы не будет превышать 250 мА. Итак, я начал искать повышающий преобразователь, который отвечал бы требованиям, и быстро наткнулся на TPS61220. TPS61220 требовал минимального количества внешних компонентов, был довольно недорогим и удовлетворял требованиям по току и напряжению.

Батарея

Основным требованием к батарее был размер. Батарея должна быть достаточно маленькой, чтобы она могла поместиться внутри корпуса часов, не делая его громоздким. Я решил, что размер батареи не может превышать 20 мм × 35 мм × 10 мм. Из-за этих ограничений по размеру и текущего требования в 250 мА мой выбор батарей был ограничен литий-полимерными батареями. На Hobbyking я нашел аккумулятор Turnigy nano-tech 300mAh 1S, который решил использовать.

Зарядная ИС

К контроллеру заряда не было никаких особых требований, за исключением того, что он должен был быть совместим с батареей 1S LiPo. Я нашел MCP73831T, полностью интегрированный контроллер заряда, предназначенный для одноячеечной зарядки. Одна из его особенностей - возможность регулировать зарядный ток через внешний резистор, который я нашел весьма полезным в этом приложении.

LiPo защита

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

Теперь, когда компоненты были выбраны, пришло время создать схему!

Шаг 5: Схема

Схема
Схема

Используя Altium Designer, я смог собрать приведенную выше схему, используя рекомендации из таблиц данных каждого компонента. Схема разделена на разные блоки для удобства чтения. Я также добавил несколько заметок с важной информацией на случай, если кто-то еще захочет воссоздать этот дизайн.

Следующим шагом было размещение схемы на печатной плате!

Шаг 6: компоновка печатной платы

Макет печатной платы
Макет печатной платы
Макет печатной платы
Макет печатной платы
Макет печатной платы
Макет печатной платы
Макет печатной платы
Макет печатной платы

Компоновка печатной платы оказалась самой сложной частью этого проекта. Я решил использовать двухслойную печатную плату, чтобы свести к минимуму затраты на изготовление печатной платы. Я решил использовать часы стандартного размера 36 мм, потому что они, кажется, очень хорошо подходят для светодиодов. Я добавил несколько отверстий для винтов диаметром 1 мм, чтобы закрепить печатную плату в корпусе часов. Цель заключалась в том, чтобы сохранить чистый и красивый дизайн, разместив все компоненты (кроме светодиодов, конечно) на нижнем слое. Я также хотел использовать абсолютно минимальное количество переходных отверстий, чтобы избежать видимых переходных отверстий на верхнем слое. Это означало, что мне пришлось развести все дорожки на одном слое, стараясь держать «зашумленные» части схемы подальше от чувствительных сигнальных дорожек. Я также старался, чтобы все дорожки были как можно короче, разместив байпасные конденсаторы ближе к нагрузке, используя более толстые дорожки для высокомощных компонентов и следуя всем общепринятым передовым методам проектирования печатных плат. Маршрутизация заняла довольно много времени, но я думаю, что все получилось очень хорошо.

Следующим шагом было создание 3D-модели корпуса часов!

Шаг 7: 3D-дизайн

3D дизайн
3D дизайн
3D дизайн
3D дизайн
3D дизайн
3D дизайн

Корпус часов был разработан в соответствии с очень традиционным классическим дизайном часов с использованием Fusion 360. Я использовал стандартный интервал 18 мм для ремешка часов, чтобы часы были совместимы с большим количеством других ремешков. Вырез для печатной платы был спроектирован на 0,4 мм больше, чем сама печатная плата, чтобы учесть любые производственные неточности. Я включил несколько винтов для крепления печатной платы и небольшой край для крепления печатной платы. Я сделал углубление в печатной плате на расстоянии фемт миллиметра от верха, чтобы острые края светодиодов не застревали на одежде. Высота корпуса определялась исключительно толщиной батареи. Остальная часть корпуса была спроектирована так, чтобы просто хорошо выглядеть, с закругленными краями и полированными углами. Мне нужно было сохранить дизайн для 3D-печати, чтобы я мог распечатать его дома без каких-либо вспомогательных материалов.

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

Шаг 8: Код

Код
Код

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

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

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

  • Нажатие верхней кнопки: пробуждение / переключение между режимами «Отображение времени», «Отображение даты», «Секундомер» и «Будильник».
  • Удержание верхней кнопки: войдите в режим «Установить время», «Установить дату», «Запустить секундомер» или «Установить будильник».
  • Нажатие нижней кнопки: увеличение яркости.
  • Удержание нижней кнопки: войдите в режим «Выбрать цвет».

Нижняя кнопка всегда отвечает за регулировку яркости и цвета, независимо от того, в каком режиме вы находитесь. Когда пользователь входит в режим «Выбрать цвет», светодиоды начинают циклически переключаться между всеми возможными цветами RGB. Пользователь может приостановить анимацию и выбрать цвет, который он предпочитает для этого конкретного режима (время отображения красным, дата отображения синим и т. Д.). Цвета должны быть легко настроены пользователем, чтобы помочь им различать разные режимы.

Теперь, когда код был готов, пришло время загрузить его в микроконтроллер!

Шаг 9: Программирование

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

Пришло время пайки и сборки, но до этого мне нужно было запрограммировать микроконтроллер. Я следил за этим руководством

Запишите загрузчик на SMD ATmega328P-AU

о том, как записать загрузчик и запрограммировать микроконтроллер, используя в качестве программатора обычный Arduino Uno.

Первым шагом было превратить Arduino Uno в интернет-провайдера, загрузив пример кода «ArduinoISP». Я использовал макетную плату вместе с программным сокетом и подключил схему из учебника. После этого я смог записать загрузчик на микроконтроллер, просто нажав «Записать загрузчик» в Arduino IDE.

После того, как у микроконтроллера появился загрузчик, я просто удалил существующий микроконтроллер из Arduino Uno и использовал плату Arduino Uno в качестве адаптера USB для последовательного порта для загрузки кода в микроконтроллер в гнезде программирования. После того, как загрузка была завершена, я мог начать процесс пайки.

Следующим шагом было собрать все компоненты и спаять их вместе!

Шаг 10: пайка

Пайка
Пайка
Пайка
Пайка
Пайка
Пайка
Пайка
Пайка

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

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

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

Пришло время окончательной сборки!

Шаг 11: Сборка

сборка
сборка

Сборка была очень простой. Я подключил батарею к печатной плате и поместил батарею и печатную плату в корпус, напечатанный на 3D-принтере. Я закрутил четыре винта в монтажные отверстия в каждом углу печатной платы. После этого я прикрепил ремешки для часов с помощью 18-миллиметровых пружинных стержней, и часы были готовы!

Шаг 12: Заключение и улучшения

Заключение и улучшения
Заключение и улучшения
Заключение и улучшения
Заключение и улучшения

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

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

Если у вас есть мысли, комментарии или вопросы по поводу этого проекта, оставьте их ниже. Вы также можете отправить их на [email protected].

Конкурс часов
Конкурс часов
Конкурс часов
Конкурс часов

Первый приз в конкурсе часов

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