TheSUN, настенные часы с питанием от Arduino: 6 шагов (с изображениями)
TheSUN, настенные часы с питанием от Arduino: 6 шагов (с изображениями)
Anonim
TheSUN, настенные часы с питанием от Arduino
TheSUN, настенные часы с питанием от Arduino
TheSUN, настенные часы с питанием от Arduino
TheSUN, настенные часы с питанием от Arduino
TheSUN, настенные часы с питанием от Arduino
TheSUN, настенные часы с питанием от Arduino

Привет снова, ребята, Instructables!:-П

Из-за проблем с доставкой я не смог продолжить свой проект ABTW, поэтому решил показать вам еще одно, свое последнее творение.

Я думаю, что многим из нас, как и мне, нравятся эти красивые адресуемые светодиодные полосы (также называемые светодиодами NEOPIXEL). Вы можете получить их в АДАФРУТ. Другие поставщики также предоставят аналогичные продукты. На ADAFRUITS есть библиотека, доступная на GitHub (щелкните меня), включая несколько примеров кода. Так что кодирование должно быть простым …

Я видел эти НЕОПИКСЕЛИ и думал, что, черт возьми, я могу сделать с этими блестящими вещичками.

  • LED-матричный дисплей? -> Сложно, и я не использую его (на данный момент)
  • Рождественское освещение? -> Подходит по сезону, но дешевле было бы купить:-P
  • часы? -> Почему бы и нет! Но он должен быть стильным и нестандартным.

Итак, сделаем настенные часы.

Если мы внимательно посмотрим на наши наручные часы (если у вас есть аналог, как у меня), мы заметим, что у нас есть 12 часов 60 минут (надеюсь). Это будет означать, что нам нужно 60 адресуемых светодиодов, фу! Если мы возьмем полосу с 60 светодиодами на метр, мы получим диаметр ~ 318 мм (радиус = scope / (2 * Π)), что определенно слишком большой.

На самом деле, если вы спросите кого-нибудь о времени, никто не скажет, что это 2 минуты четвертого! В качестве ответа вы получите «5 минут третьего». Так почему бы нам не уменьшить все до пяти минут? Для этого нам понадобится всего 12 светодиодов, что означает, что мы получим диаметр 63,6 мм. Мы также можем различать часы и минуты, придавая им отдельный цвет. Мы также сможем предоставить «недостающие» отдельные минутные шаги с помощью дополнительной полосы из 4 светодиодов (или одного адресуемого светодиода.

ТАК ПЛАН! Давайте посмотрим, как я все делал. Как всегда, я предоставлю список / ведомость материалов и инструкции по его созданию.

Если вы думаете, что только швейцарцы могут делать крутые часы, давайте докажем, что вы ошибаетесь (извините, Швейцария:-P)

Шаг 1: Дизайн и выбор материалов

Дизайн и выбор материалов
Дизайн и выбор материалов
Дизайн и выбор материалов
Дизайн и выбор материалов

Дизайн:

Если мы снова внимательно посмотрим на наши аналоговые часы / часы, мы увидим, что круг разделен на 12 * 30 ° шагов, которые, как мы знаем, нам нужно 63,6 мм для светодиодной ленты. Таким образом, должна быть возможность каким-то образом выровнять полоску вокруг трубки. Я решил использовать акриловое стекло, потому что оно выглядит красиво, и в него можно поместить светодиодный свет, и на каждой трещине в стекле будет происходить рассеяние света. Итак, скажем так: больше примесей приведет к большему рассеянию света! Это именно то, что мы хотим. Так что смело берите свои инструменты для гравировки и проявляйте творческий подход:-)

Если вы обратитесь к моему списку BoM и названию, которое я дал часам, я выбрал дизайн, похожий на солнце. Я получил все акриловые детали от немецкого продавца на E-Bay (ссылка в BoM). Для своего дизайна тебе понадобится:

  • акриловая заземляющая пластина, прозрачная толщина = 6 мм, диаметр = 300 мм
  • акриловая средняя пластина, прозрачная толщина = 3 мм, диаметр = 150 мм
  • лицевая панель из акрила, сатин, толщина = 3 мм, диаметр = 90 мм
  • акриловая трубка, прозрачная, внешний диаметр = 64 мм (это означает, что нам придется немного подправить светодиодную ленту)
  • акриловый стержень, прозрачный, диаметр = 5мм (это будут наши балки); Есть также акриловые стержни с пузырьками внутри, я рекомендую их, но у меня их нет.
  • акриловый клей

Электроника (см. Fritzing-файлы):

  • Arduino mini (или аналогичный)
  • 1 адресная светодиодная лента (12 светодиодов с шагом в час и 5 минут)
  • 4 адресных светодиода (отдельные минуты)
  • 2 резистора 330 Ом
  • 1 конденсатор 1000 мкФ
  • 1 источник питания (5 В / 500 мА)
  • RTC DS-1307 (опционально!)
  • Модуль Bluetooth (опционально! Да, вы можете установить время через BT и Android-смартфон)

Если вы спросите себя, почему у меня на BoM стоит микросхема MAX485. Ответ заключается в том, что я хочу синхронизировать часы с системой домашней автоматизации, которую я собираюсь сделать (никогда больше не нужно устанавливать часы на летнее время:-P). Я опишу это в своем блоге в следующем пару недель / месяц.

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

Шаг 2: подготовьте акриловые детали

Подготовьте акриловые детали
Подготовьте акриловые детали
Подготовьте акриловые детали
Подготовьте акриловые детали
Подготовьте акриловые детали
Подготовьте акриловые детали

Инструменты:

Прежде всего, будет очень полезно, если вы распечатаете добавленный мной план DWG в масштабе 1: 1. Это поможет вам выровнять все детали и послужит вам в качестве плана сверления. Далее вам понадобятся:

  • хобби нож
  • угол наклона
  • ножовка
  • зажимы
  • ручная дрель
  • можно сверлить, диаметр 65 мм
  • набор сверл по металлу
  • небольшой металлический напильник
  • акриловый клей

Давайте начнем:

Возьмите пластину заземления и выровняйте ее по плану, чтобы получить центр круга. Теперь возьмите ручную дрель с установленной на нее дрелью и просверлите (очень медленно! С небольшим давлением!) Отверстие в центре плиты заземления, внешний круг должен быть глубиной ~ 2-3 мм. Это необходимо для того, чтобы утопить светодиодную ленту в пластине заземления (светодиодная лента шириной ~ 10 мм, лучи всего 5 мм в диаметре) и совместить их с лучами (см. Рисунок 1).

Теперь нам понадобятся ножовка, измеритель угла и акриловая трубка. Просто порезав его на части, я решил сделать корпус (трубку) длиной 40 мм (фото 2). Теперь снова возьмите ножовку и сделайте небольшой паз на одной стороне трубы, сделайте его гладким с помощью металлического напильника. Вот где выходят провода;-) (см. Рисунок 3)

Пришло время немного клея … Возьмите среднюю пластину (d = 150 мм) и переднюю пластину (сатинированную). Выровняйте их снова по плану, нанесите немного клея на центр средней пластины, выровняйте переднюю пластину и подождите, пока клей немного затвердел. Клей, который я использовал, имеет легкое затвердевание, и это может занять до 2-3 часов, поэтому, возможно, вы захотите использовать зажим … (рисунки 3 и 4)

Сделайте то же самое для приклеивания трубки к пластине заземления, убедитесь, что паз направлен к пластине и совмещен там, где вы хотите, чтобы первый светодиод (12 часов) был.

Подождите, пока он затвердеет!

Теперь мы можем выровнять 2 части (совпадающие) по плану, просверлив наши 4 одноминутных отверстия (диаметром 5 мм или диаметром выбранного вами светодиода; сверлите медленно, не слишком сильно нажимая). Просверлите примерно 8-9 мм на глубину. Будьте осторожны, сатинированная пластина очень хрупкая и может сломаться, если просверлить слишком глубоко. Теперь вы можете склеить их вместе или вы решите, как я, вырезать угрозу в пластине заземления и прикрепить ее винтом.

Снова подождите, пока клей не затвердеет, а затем выровняйте и приклейте балки на пластину заземления. (рисунок 6) Угадайте, что… подождите, пока клей застынет:-) Перейдем к электронике…

Шаг 3: Электроника

Электроника
Электроника
Электроника
Электроника
Электроника
Электроника
Электроника
Электроника

Инструменты:

  • паяльник
  • припой
  • хобби нож
  • небольшой кусок прототипа печатной платы
  • эмалированный провод или любой другой провод по вашему выбору
  • горячий клей

Я работал с одиночными светодиодами. Если вы используете эмалированный провод, не забудьте соскрести лак перед пайкой. Для этого можно использовать нож для хобби. Подключите их, как показано на картинке с распиновкой на flikto.de. Обратите внимание, что DOUT переходит в DIN на следующем светодиоде! (см. рисунок 2) После этого можно разрезать светодиодную ленту на 4 элемента по 3 светодиода в каждом. Помните, что у нас есть светодиодная лента 63,6 мм и внешний диаметр трубки 64 мм, поэтому нам нужна дополнительная длина, чтобы точно выровнять ее с лучами. Подключите ее эмалированным проводом, как на рисунке 4. Я сделал небольшую прототипную печатную плату, которая будет служить в качестве «жгута питания» и будет содержать компоненты для светодиодных лент (два резистора 330 Ом и конденсатор 1000 мкФ, рисунок 7). Для этого обратитесь к изображению Fritzing.

Теперь закрепите полосу вокруг трубки, совместите светодиоды с балками. Первый пиксель соответствует 12 часам. Если вы перевернули свое жилье, не забывайте, что все в зеркале. Продолжайте движение против часовой стрелки! Используйте немного горячего клея, чтобы прикрепить его к трубке. Небольшая капля на каждый сегмент сделает это!

Вы можете сделать то же самое с одиночными светодиодами (в конечном итоге зеркальными), просто добавьте немного горячего клея и вдавите их в предварительно просверленные отверстия.

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

Шаг 4: Код

Код
Код
Код
Код

Теперь вы можете загрузить скетч в Arduino. Теперь вы также можете подключать светодиодные ленты. Не подключайте модуль BT !!! Сначала мы хотим взглянуть на код, вы должны знать, где вы можете настроить несколько вещей …

Загрузите Arduino IDE и библиотеки. Arduino IDE, AdafruitNeoPixel, Time, DS1307RTC.

Установите IDE и поместите библиотеки в папку с библиотеками. Откройте прикрепленный INO-файл и загрузите его на свой arduino. Описанный здесь код такой же, но с дополнительными комментариями! Если вы все сделали правильно, теперь вы можете увидеть "загрузочную анимацию". Можно установить время на серийном мониторе. Просто введите @ "час" / "мин" / "сек", например. @ 33.10.00 (10:33).

Не стесняйтесь играть с кодом … Здесь я дам вам краткое описание кода (установка без RTC!)

ОПРЕДЕЛЕНИЯ:

#define PIN 6 // Hour LED Strip #define MINPIN 5 // Singelminute LED #define NUMPIXELS 12 // Количество пикселей в час #define MINNUMPIXELS 4 // Количество пикселей за одну минуту #define BAUDRATE 115200 // Скорость передачи, должна соответствовать скорость передачи BT-модуля #define utch '@' // начать БАЙТ TimeSync

int timeset = 0; // флаг для сохранения, если время было установлено после bootint delayval = 20; // задержка затухания анимации int clocktimer = 10000; // обновление времени int timebright = 250; // полоса яркости часа int mtimebright = 50; // яркость singelminint initialize = 0; // флаг для вызова функции clearpixels после загрузки int ahour; int oldahour = 0; // сохранить пред. часинт аминут; int oldamin = 0; // сохраняет предыдущую минуту для обновленияint asecond; int aday; int amonth; int ayear; int mmin; tmElements_t tm;

// Настройка для 2 светодиодных массивов NeoPixel (НАЗВАНИЕ = ТИП (КОЛИЧЕСТВО ПИКСЕЛЕЙ, ПИН, ФОРМАТ RGB ИЛИ GRB, FREQ); За дополнительной информацией обратитесь к руководству Adafruit.); Adafruit_NeoPixel minpixels = Adafruit_NeoPixel (MINNUMPIXELS, MINPIN, NEO_RGB + NEO_KHZ800);

НАСТРАИВАТЬ:

void setup () {

Serial.begin (BAUDRATE); Wire.begin (); // Инициализируем полосы, все OFFpixels.begin (); minpixels.begin (); pixel.show (); minpixels.show ();

// Сделаем небольшую анимацию Serial.println ("SUNRISE"); Восход(); задержка (1000); Serial.println ("ЗАКАТ"); закат(); pixel.show (); Serial.println («ГОТОВ»); }

ПЕТЛЯ:

void loop () {// проверяем синхронизацию времени while (Serial.available ()> 0) {char c = Serial.read (); if (c == utch) // если в строке есть @, читать приходящие байты / целые числа {readtime (); }} // инициализируем светодиоды, очищаем загрузочную анимацию

если (инициализировать == 0) {clearpixels (); инициализировать = 1; }

час = час ();

aminute = минута (); if (timeset == 1 || timeset == 0) // здесь вы можете проверить, установлено ли время, вы можете остановить программу здесь, если Timeset = FALSE, просто удалите "|| timeset == 0"!

{

if (oldamin <aminute || oldahour установить все в положение OFF, отображать новое время {clearpixels (); ClockDisplay ();}}}

Отображение часов:

void ClockDisplay () {

oldahour = час;

олдамин = аминут; int xhour, xmin;

если (час> = 12) {xhour = час-12; // у нас есть только 12 светодиодов для 24-часового отображения} else {xhour = ahour; } // масштабируем его с шагом 5 минут xmin = (aminute / 5); если (олдамин <амин) {олдамин = амин; clearpixels (); } // берем остаток деления для одиночного светодиода mmin = (aminute% 5); // оператор по модулю, например. 24% 5 = 4! очень полезно: -Ppixels.setBrightness (яркость); пикселей.setPixelColor (xmin, пикселей. Color (5, 125, 255)); // вы можете изменить цвета здесь! поиграйте! пикселей.setPixelColor (xhour, pixels. Color (255, 50, 0)); pixel.show ();

// отображаем одиночные minsfor (int m = 0; m

minpixels.setBrightness (mtimebright); minpixels.setPixelColor (m, пикселей. Color (255, 255, 0)); minpixels.show (); }} Чтение и обработка информации TIME из последовательного порта

void readtime () // если у нас уже есть ведущий символ "@", обрабатываем поступающие данные и сохраняем время для TIME Lib {

ahour = Serial.parseInt (); aminute = Serial.parseInt (); asecond = Serial.parseInt (); aday = Serial.parseInt (); amonth = Serial.parseInt (); год = Serial.parseInt (); Serial.println ("ТАЙМЕСЕТ"); Serial.print (час); Serial.print (":"); Serial.println (aminute); setTime (час, минута, секунда, день, месяц, год); }

Очистить все

void clearpixels () // отключаем каждый ПИКСЕЛЬ, чтобы обновить дисплей {

pixel.begin (); minpixels.begin (); for (int i = 0; ipixels.setPixelColor (i, pixels. Color (0, 0, 0)); minpixels.setPixelColor (i, pixels. Color (0, 0, 0)); pixels.show (); minpixels. Показать(); } }

Шаг 5. Приложение для Android и соединение BT

Приложение для Android и соединение BT
Приложение для Android и соединение BT
Приложение для Android и соединение BT
Приложение для Android и соединение BT
Приложение для Android и соединение BT
Приложение для Android и соединение BT

Если вы успешно выполнили предыдущие шаги, теперь вы можете подключить свой модуль BT. (надеюсь, вы убедились, что скорости совпадают). не забудьте пересечь линии TX и RX:-)

Загрузите и установите приложение, выполните сопряжение со своим BT-ключом, запустите приложение, подключитесь к ключу и синхронизируйте время со своим мобильным телефоном. Приложение в основном делает то же самое, что и мы. Он просто отправляет @ hh / mm / ss / dd / mm / YYYY, сгенерированный из его системного времени. Я также предоставил файл AIA APPInventor и объяснение следующего шага (для тех, кто заинтересован).

Шаг 6: APPInventor

APPInventor
APPInventor
APPInventor
APPInventor

APP Inventor довольно прост в использовании и стоит усилий для такой простой программы.

Если вы создадите новый проект, вы окажетесь на экране ДИЗАЙНЕР. (рисунок 1) Здесь мы добавляем таблицы, кнопки, датчики и другие элементы для дальнейшего использования. В нашем случае нам понадобятся:

  • таблица (чтобы выровнять все элементы)
  • listpicker (для выбора устройства BT, к которому мы подключаемся)
  • кнопка (чтобы запустить TIME по BT)
  • некоторые метки (отображают фактическое время и дату)
  • датчик часов (обновить время)
  • датчик клиента bluetooth (возможность подключения)

Добавить их так же просто, как перетащить! На Рисунке 2 вы можете увидеть обзор «ПРИЛОЖЕНИЯ» на экране БЛОКИРОВКИ. Что ж, именно здесь и происходит вся «магия». Вверху я создал несколько переменных для хранения времени и даты. Первый блок в верхнем левом углу инициализирует элемент listpicker со списком сопряженных устройств BT. Во втором блоке мы решаем, что делать с ранее выбранным элементом. Что ж, мы хотим к нему подключиться.

Если вы внимательно посмотрите на следующий блок, вы увидите, что мы генерируем, если статус BT «подключен», сообщение BT. Это то же самое, что мы вводили в SerialMonitor раньше. Последний блок слева предоставит нам ведущие нули для отображения времени (например, 01:08). Справа вы можете найти наш последний блок, в котором мы используем элемент часов. Здесь мы обновляем переменные и объединяем их с помощью процедуры цифр, это будет происходить каждые 1000 мс (настройка по умолчанию, измените ее в режиме конструктора) и отображать обновленные значения с помощью метки. Это всего лишь краткое описание, но APPInventor действительно настолько прост:-) Может быть, есть кто-то в сообществе, кто хочет написать программное обеспечение для iOS или WindowsPhone. (было бы замечательно)

Надеюсь, вам понравились мои инструкции! Развлекайтесь с новыми настенными часами! Может быть, вы хотите подарить его кому-то, кого любите (это Рождество):-)

А если будут вопросы, смело задавайте мне!

С уважением и веселого Рождества.