Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Проекты Fusion 360 »
Это часы на базе Arduino с OLED-дисплеем, которые работают как часы с датой, как таймер дневного сна и как ночник. Различные «функции» управляются акселерометром и выбираются вращением кубических часов.
Мне нужны были новые часы на прикроватной тумбочке, но я не хотел тратить деньги на модные часы с множеством функций, которые я бы не использовал. Кроме того, я собирал компоненты и датчики, которые просто лежали вокруг, поэтому я решил использовать их, чтобы сделать свои собственные часы!
У меня было несколько целей для этого проекта:
- Отображение этого времени с возможностью отключения
- Включите функцию ночника
- Включите таймер сна на 15 минут с будильником
- Уметь отображать дату
Запасы
- Arduino Pro Mini 5 В
- Трехосевой акселерометр ADXL335
- DS3231 AT24C32 IIC Precision Часы реального времени
- Мини-динамик
- OLED-дисплей SSD1306 IIC 0,96 дюйма
- Источник питания 5 В постоянного тока
- LED x 2
- Резисторы 220 Ом x 2
- Штекерное гнездо постоянного тока
- Проволока
-
Инструменты
- Кусачки / стрипперы
- Паяльник / припой
- 3D-принтер (опционально)
- Программатор FTDI для взаимодействия между Pro mini и Arduino IDE
Шаг 1: прототип и проверка схемы
Подключите компоненты к Arduino. Макет или схема макета показаны выше. RTC и OLED используют протокол I2C для взаимодействия с Arduino и используют контакты A4 и A5. Акселерометр использует 3 аналоговых контакта. Я использовал A0, A1, A2. Светодиоды и Piezo могут использовать любой из цифровых контактов, я использовал 4 и 8 соответственно.
Интерфейс с каждым компонентом. Мне пришлось установить несколько библиотек Arduino для взаимодействия с каждым компонентом. Они показаны на изображении выше.
Код с использованием IDE Arduino. Я просмотрел несколько примеров набросков, предоставленных каждой библиотекой, чтобы выяснить правильный синтаксис для каждого компонента в зависимости от того, что я хотел, чтобы они делали. Я придумал эскиз для каждого компонента, чтобы протестировать их индивидуально. Они представлены ниже. Я начал с пьезо-динамика, потому что он был самым простым. На самом деле ему не нужна была специальная библиотека, а просто специальная функция, которая устанавливает частоту и звук. Для того, чтобы светодиоды заработали, требовалось всего лишь подтянуть один из цифровых выводов вверх и вниз. Затем я перешел на OLED, и это тоже было довольно просто настроить. Приведенный ниже эскиз представляет собой демонстрацию Adafruit, в которой просматриваются все анимации / тексты, которые могут отображаться. Затем я попытался заставить работать RTC. Приведенный мной эскиз был частью примера в библиотеке, которая получает текущее время и выводит его на монитор последовательного порта. Наконец, я использовал предоставленный пример для проверки акселерометра. Выходы каждой оси печатаются на серийном мониторе.
Пришло время собрать все воедино!
Шаг 2: Основная программа
Теперь, когда я знаю, что все работает индивидуально, я могу начать придумывать программу, которая объединяет все воедино. Я расскажу о своем процессе написания программы ниже, но не стесняйтесь просто загрузить полный код ниже, чтобы использовать его в своем собственном проекте. Я старался оставлять конкретные комментарии, чтобы вы могли самостоятельно пройтись по коду.
Мне нужно было отображать время и дату на OLED-экране, что было довольно просто. Мне просто нужно было вывести текущее время на дисплей вместо последовательного монитора. Мне пришлось учесть несколько моментов форматирования, чтобы он отображал 12-часовой формат вместо 24 и добавлял / удалял нули там, где они были уместны. Дата была аналогичной с добавлением отображения месяца и дня в прямоугольниках, нарисованных на экране. Я использовал вложенный цикл FOR для создания таймера и отключения пьезо после окончания цикла. Я решил сделать так, чтобы экран мигал при срабатывании зуммера, что было базовой анимацией, взятой из демонстрации Adafruit. Я сделал поворот куба обратно в положение часов - единственный способ отключить зуммер. Наконец, мне нужен способ выключить экран, для чего достаточно просто очистить дисплей. Теперь мне нужно, чтобы все эти функции работали на основе выходных данных акселерометра. Я использовал скрипт Accel_Test, чтобы определить координаты оси каждой позиции, которую я хотел, чтобы каждая функция выполнялась. Я вручную переставил микросхему акселерометра и записал показания на последовательном мониторе. На диаграмме выше показаны выходные координаты каждой позиции СЕРЫМ цветом. Координаты, выделенные КРАСНЫМ цветом, - это границы между каждой позицией, и я использовал эти числа для своей программы. В 4 положениях дисплея необходимы только координаты осей X и Y. Пятая позиция для ночника использует ось Z. Я использовал простые операторы IF для позиций акселерометра перед каждым функциональным блоком. Если вы используете другой акселерометр, эти координаты могут отличаться, и их необходимо будет скорректировать в программе.
Шаг 3: 3D-печать куба
Я решил, что куб будет лучшим дизайном, чтобы приспособить то, как я хотел, чтобы часы работали. Для изготовления модели я использовал fusion360. Мне понадобился вырез для OLED и цилиндрического домкрата. Мне также нужен был легкий доступ для замены аккумуляторной батареи в RTC после того, как все было подключено. Мне нужен был слот, чтобы держать Arduino в ориентации, которую можно было бы легко перепрограммировать в случае необходимости. Кроме того, корпус должен был легко сниматься, чтобы я мог получить доступ к Arduino. Вы можете увидеть модель САПР выше и файлы STL ниже.
Я напечатал корпус из черного PLA с заполнением 20% и разрешением 0,2 мм.
Корпус или рукава были напечатаны на гибкой нити Solutech со 100% заполнением, разрешение 0,3 мм. Я использовал этот материал, потому что он обладает некоторой гибкостью, благодаря чему его легко растягивать по телу. Он также более мягкий на ощупь при вращении часов. Наконец, я выбрал прозрачную нить, чтобы светодиоды ночников светили сквозь нее.
Шаг 4: Сборка
Я соединил все вместе, используя схему из шага 1. Я использовал небольшой кусок перфорированной платы, чтобы соединить все общие провода, так что мне не пришлось припаять несколько проводов к одному контакту на Arduino. Горячий клей использовался, чтобы закрепить все на своих местах, кроме Arduino. Его просто вставили в предназначенный для этого слот. Я убедился, что плата акселерометра расположена перпендикулярно и ровно на нижней части корпуса, чтобы координаты в коде не нужно было менять.
Шаг 5: Загрузите и готово
Теперь окончательную программу можно загрузить на часы, чтобы установить правильное время. Ячейка батареи должна сохранять время даже при отключенном питании. Наденьте напечатанный на 3D-принтере рукав на корпус, чтобы скрыть все компоненты, и вы получите готовые кубические часы!
Надеюсь, вам понравится делать этот проект и вы найдете его таким же полезным, как и я. Самое приятное в этом проекте - то, что он очень настраиваемый. Не стесняйтесь добавлять свои собственные различные функции, такие как функция будильника, использовать различные компоненты, такие как более крупный OLED-экран, FM-радиоприемник и т. Д. Удачи!