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

08.04.2019

Готовый проект в одном модуле включает в себя множество функций: часы с отображением даты и времени, секундомер, будильник, отслеживание движения (для автоматического отключения когда вас нет на месте).

Материалы:
- Arduino Uno
- LCD шилд (с кнопками, в проекте используется шилд от DFRobot)
- Коробка для корпуса
- Зуммер
- Инфракрасный датчик движения (PIR)
- Соединительные провода (мама/мама)
- Джек 2.1 мм
- Переходник для кроны 9В 2.1 мм / 5.5 мм
- Крона 9 В
- Часы реального времени

Шаг первый. Модуль часов реального времени.
Часто модуль часов поставляют в виде конструктора, который приходится собирать самому. Обычно сборка не вызывает проблем, плюс производители выпускают инструкции по сборке их модуля. Также батарейка идёт в комплекте с часами, её хватит более чем на три года.

Шаг второй. Коннектор питания.
Для упрощения подключения конструкции к Arduino автор использует джек на 2.1 мм с припаянными контактами. В коробке проделывают отверстие, и джек закрепляют клеем. Таким образом, подключение к Arduino не составит проблем. Крону просто установят на заднюю часть бокса. Если рассмотреть фото поближе можно заметить ещё одно отверстие в коробке. Его делать не нужно, это просто неудачная попытка сделать отверстие, в него джек просто не влез.

Шаг третий. Подсоединение проводов.
Автором были приобретены разноцветные провода мама/мама. Обошлись они недорого, но сильно облегчили процесс сборки. Проводники подключили к зуммеру, ПИР датчику движения, модулю часов, чтобы потом все это подсоединить к LCD шилду.

Шаг четвёртый. Подключение к LCD шилду.
На шилде имеется 5 рядов контактов, их пины на Arduino 1-5 соответственно. Имеется контакт для 5 В и GND, это всё и использовалось для подключения. Для передачи данных с зуммером, датчиком и часами реального времени используются аналоговые пины Arduino. Датчик с часами, конечно же, подключали к земле и питанию.

Шаг пятый. Установка в коробку.
В этом шаге конструкцию помещают в отдельный бокс. В первую очередь в коробку укладывают кабели от LCD шилда. Arduino закрепляют винтом нижней правой части корпуса. Для удержания микроконтроллера достаточно одного винта, тем более что автор использует такой бокс, в котором рёбра жёсткости располагаются на месте отверстий для двух других винтов. Далее, на Arduino устанавливают LCD шилд, кабели которого огибают плату с правой стороны (видно на фото ниже). Модуль часов отлично подходит для установки в левом нижнем углу, для его крепления используется один винт. Такая установка компонентов разрешает без проблем подключить джек 2.1 мм к Arduino. Датчик движения ставят так чтобы была возможность его снять, потому что он мешает подключить кабель USB к плате.

Шаг шестой. Программирование.
Как указано в начале статьи часы должны не только отображать время и дату, но и таймер с будильников. На шилде имеется 5 кнопок, которые можно запрограммировать. Использоваться они будут для различных режимов работы часов. Зуммер будет отрабатывать при нажатии каждой кнопки, а при работе будильника он подаст несколько сигналов.

Скетч для Arduino.
За основу автором взят скетч от Adafruit, его разработали для часов реального времени. В нём используют библиотеку RTClib. Далее, автор добавил кусок кода для LCD шилда от DFRobot (опция управления кнопками). И кусок кода добавил от себя исключительно под этот проект. Финальную версию кода можно скачать под статьёй. Ниже представлены фото с разными режимами работы часов.

Шаг седьмой. Функции кнопок.
Как видно на фото ниже каждая кнопка на шилде подписана, пять из них были запрограммированы так:
- Первая кнопка (SELECT) - это меню. Кнопка отображает листание имеющихся функций (таймер, будильник).
- Вторая кнопка (LEFT) - эта кнопка отвечает за выбор функции. Дополнительная функция кнопки увеличение значения на 10 когда вводятся часы и минуты.
- Третья и четвёртая кнопки (UP, DOWN) - используются для увеличения и уменьшения значений часов и минут при настройке будильника и таймера. Дополнительная функция кнопок для переключения времени суток AM и PM.
- Пятая кнопка (RIGHT) - это кнопка ввода. Используется для принятия значения (настроенное время таймера, часов).
- Шестая кнопка (RST) - кнопка используется для перезагрузки Arduino.

12 октября 2011 в 12:10

Простые бинарные часы с будильником на Arduino

  • Разработка под Arduino

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

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

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

Первые шаги

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

Еще понадобится breadboard и провода для соединения, вот их, пришлось заказать. Доставка много времени не заняла.

Также мелочевка, в виде резисторов, светодиодов, кнопочек, пьезопищалок и то, что можно найти, разобрав старый модем или привод CD-ROM. У меня еще были запасы старых советских радиодеталей.

Для начала этого более чем достаточно. Теперь можно начать тренироваться, для начала поморгать светодиодами, разобраться как работать с аналоговыми разъемами и с ШИМ.

Возврат к первоначальной идее. Подготовка

Разобравшись с основными принципами работы arduino и средой разработки, возвращаемся к идее сделать бинарные часы. Только мне уже захотелось немножко большего, не просто сделать отображение часов и минут, а еще хоть простенький будильник добавить.
Таким образом, для всего этого нам понадобится:
  • arduino;
  • breadboard (не обязательно, можно сразу припаивать все на макетную плату);
  • провода. Для перемычек я вообще использовал из витой пары, они там медные, замечательно паяются, а для подключения к arduino из корпусов старых системников, т.к. на самодельной arduino у меня штырьки, а не разъемы, в отличие от заводской;
  • 13 светодиодов;
  • 4 кнопочки (одна с фиксацией);
  • 14 резисторов 220 Ом, можно и 360 Ом (для светодиодов и пищалки);
  • 4 резистора примерно по 2.2 кОм (для кнопок);
  • пьезопишалка.

Как они будут работать


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

Схемы

Светодиоды подключаются очень просто, только их обязательно через резисторы надо втыкать, одну ногу на землю, другую в arduino, к пинам от 0 до 8 и от 10 до 13. Резистор можно подключать хоть со стороны земли, хоть со стороны платы.

Все как на следующей схеме, все выводы расписаны.

Для подключения пищалки как раз и оставил свободный 9 пин, так как нам нужен пин поддерживающий ШИМ. Резистор к пищалке я прицепил на 220 Ом, но можно и поменьше, громче будет пищать. Что такое ШИМ можно прочитать .

Так как на arduino моего типа больше нет свободных цифровых пинов(если приобрести Arduino Mega, то там их еще много), под кнопки придется использовать аналоговые. Один выход выводим на землю, другой через резистор к arduino. Разница подключения к аналоговым пинам в том, что мы уже будем считывать не цифровой сигнал HIGH или LOW, а уровень входного напряжения, преобразованный в целочисленное значение. Поэтому определять нажата кнопка или нет, придется путем проверки значения с АЦП. Займут они аналоговые пины с 0 по 3.

Две кнопки для задания минут и часов. Одна для переключения режимов. И еще одна, которая с фиксацией, для включения/выключения подсветки светодиодов.

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

Общий вид:

Ее можно легко собрать на breadboard. Но хочется же законченное устройство, хоть и подключенное к arduino.

Прикинем, как будет работать и выглядеть

Поэтому, сначала все – таки набросаем наш скетч, в которой пока сделаем переключение минут, и соберем все это на breadboard, для проверки.

Собрали, подключили:

Работает. Отлично.

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

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

Будем паять

Прежде всего, надо проверить то, что у нас работало на breadboard.

И убедившись, что я еще на что-то способен, в плане припаять и не спалить, можно продолжать.

В итоге получается следующая конструкция, которая хоть и выглядит достаточно топорно, но работает вполне стабильно.

Код

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

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

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

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

На выходе проекта вы получите в пределах одного модуля следующие фичи:

  • Часы!;
  • Отображение даты и времени на LCD экране;
  • Встроенный счетчик времени (для того, чтобы засекать время, затраченное на один проект);
  • Будильник (чтобы напоминать о том, что вы засиделись и пора устроить себе разминку);
  • Отслеживание движения (сберегает заряд аккумулятора, отключая LCD экран, когда вас нет рядом);
  • Отлично впишется в ваш интерьер Arduino-разработчика!

Необходимые материалы для проекта

  • LCD Keypad Shield (LCD шилд с кнопками) для Arduino (в данном случае - от производителя DFRobot)
  • Часы реального времени (RTC) DS1307 (от Adafruit);
  • Закрывающийся бокс (можно найти в радиомагазине или заказать у китайцев);
  • Зуммер (Piezo Buzzer);
  • PIR (Пассивный инфракрасный датчик движения);
  • Проводники мама/мама;
  • Джек 2.1 мм;
  • Переходник для батарейки 9 В 5.5 мм / 2.1 мм;
  • Крона 9 В.
Фото деталей и узлов для проекта




Сборка модуля часов реального времени

Порой модуль часов реального времени (например, от компании Adafruit DS1307), поставляется в виде отдельных компонентов. Сборка не должна вызвать проблем. Тем более, есть отличная инструкция по использованию и сборке модуля часов реального времени . Как правило, батарейка идет в комплектации модуля. Работать от одной батарейки он будет не меньше трех лет.

Коннектор для питания

Для того, чтобы не возникало проблем с подключением Arduino, используется джек на 2.1 мм, к которому припаены контакты. В боксе сделано отверстие, джек посажен на клей. Теперь подключение Arduino не составляет проблем.

Батарейка (крона) на 9 В просто устанавливается на заднюю часть бокса.



Если вы обратили внимание, в боксе есть еще одно отверстие. Это была первая неудачная попытка. Джек в это отверстие не поместился.

Подсоединяем провода ко всем элементам

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

Подключаем все к LCD шилду

После этого добавлен кусок кода из скетча от DFRobot для LCD шилда (включая опцию управления кнопками). Этот скетч можно скачать .

Функции кнопок

На LCD шилде кнопки подписаны (смотрите на фото). Первые пять из шести доступных кнопок (button) были запрограммированы следующим образом:


Кнопка #1 (подписана SELECT) - это кнопка Menu. Эта кнопка отвечает за отображение листаемого списка доступных функций (таймер, установка будильника).

Кнопка #2 (подписана LEFT) - кнопка Select. Служит для выбора функции. Примечание: также используется для инкремента на 10 , когда выбраны часы, минуты и т.п.

Кнопки #3 и 4 (подписаны UP и DOWN) - кнопки Increment и Decrement (инкремент и декремент). Используются для уменьшения и увеличения часов и минут при настройке таймера или будильника. Используются также для переключения между временами суток AM и PM.

Кнопка #5 (подписана RIGHT) - GO! Используется для принятия выбранного значения (например, настроенных минут или часов).

Кнопка #6 (отмечена RST) - Reset, которая перезагружает наш Arduino.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

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

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

Многие будильники на Ардуино стараются воспроизвести спектр солнечного света при помощи специальных лампочек, повторяющих оттенок и температуру цвета утреннего солнца. Тем не менее, в нашем варианте будут использоваться обычные RGB диоды, которые могут примерно воссоздать ощущение естественного освещения и, кроме того, могут создать различные уникальные цветовые комбинации и эффекты. Сборка будет базироваться на Ардуино Уно с модулем Real Time Clock (RTC) и 7 сегментным экраном часов.

Шаг 1: Список материалов

  • Деревянная шкатулка (корпус) (Amazon)
  • Ардуино Уно или его эквивалент
  • Регулятор вольтажа LM7805 5V
  • Модуль Real Time Clock (RTC) (Amazon)
  • 7-сегментный светодиодный дисплей для часов (Amazon)
  • Потенциометр (Amazon)
  • Датчик угла поворота (крутилка) (Amazon)
  • Кнопки для крутилок. Можно использовать кнопки для электрогитары
  • Кнопочный выключатель со светодиодом (Amazon)
  • Акриловые стержни (Amazon)
  • RGB светодиоды WS2812B – 8 штук (Amazon)
  • Винты и гайки
  • Небольшие магниты
  • Печатная или макетная плата + провода
  • Морилка для дерева

Шаг 2: Дизайн

Схему сборки вы найдёте по ссылке. Ключевым элементом часов будет модуль RTC. Он обеспечивает надежную сохранность заданного времени и у него есть небольшая батарейка, на случай, если весь будильник будет выключен. Модуль RTC и 7сегментный дисплей взаимодействуют с Ардуино через протокол I2C.

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

Я использовал адаптер питания на 9V со встроенным джеком 5,5*2,5 мм. Регулятор LM7805 нужен для понижения вольтажа до 5V. Мой показывал 0,75A на 9V и меня всё устраивало, потому что диодам WS2812B вполне хватало этого питания на максимуме их яркости. На полной яркости весь прибор потреблял около 450mA.

Всё железо вместилось в деревянную шкатулку (вы можете покрасить её для более приятного вида). Используемые восемь светодиодов WS2812B можно программировать, чтобы получать разные световые эффекты. Их свет рассеивается через акриловые стержни, установленные в верхней части шкатулки. Для установки стержней, на 3D принтере была напечатана пластина, о которой будет написано позже.

Файлы

Шаг 3: Проводка и изоляция





Для своего проекта я создал печатную плату, основанную на схеме «голого» Ардуино Уно с регулятором LM7805, заглушками и зонами для соединения с RTC и 7сегментным дисплеем. Всё лишнее было просто срезано с платы, чтобы она могла поместиться в шкатулку. Если у вас нет подходящей платы, то просто припаяйте модули, переключатели и светодиоды к Ардуино Уно.

У потенциометра один конец идет на землю (GND), другой на 5V, а средний на аналоговый вход. Крутилки нужно припаять к земле и к двум пинам прерывания (2 и 3) на Ардуино. Кнопка на крутилке и верхняя кнопка припаиваются к земле и к соответствующим пинам цифрового ввода. Также не забудьте соединить питание со светодиодом на верхней кнопке (если у вас такая же кнопка, как у меня). Дисплей и модуль RTC соединяем проводами с 5V, GND и соответствующими пинами SDA и SCL на Ардуино. Я использовал конденсаторы 1uF на входе и выходе LM7805 и еще один на 5V дорожке для поддержки светодиодов.

Можно соединить большинство коннекторов напрямую с платой, но для своих соединений я использовал стандартные 2,54мм коннекторы и провода с термоусадкой. Это упростит любые улучшения или доработки в будущем.

Затем нужно установить всё в шкатулку, вырезать отверстия для акриловых стержней, кнопок, крутилок, дисплея, джека питания и верхней кнопки. Если после установки какие-то элементы будут болтаться, закрепите их горячим клеем.

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

Файлы

Шаг 4: Светодиоды и окрашивание





Показать еще 5 изображений






Соедините провода 5V, GND и линию данных с полоской из восьми диодов WS2812B. Я подстраховался, смазав соединения эпоксидкой, поскольку они часто разрываются при нагрузке и их потом очень сложно восстановить. Далее я просто приклеил их к внутренней части шкатулки.

Акриловые стержни были нарезаны по две штуки на каждую длину: 6, 8, 10, 12см. Затем я прошелся по срезам наждачкой и отполировал. Самым простым способом установки акриловых стержней будет аккуратно просверлить дырки в дереве. Я не справился с задачей, повредив древесину, поэтому я напечатал на 3D принтере простую основу, которая позволяла бы также поместить внутрь себя светодиоды. В целом эта деталь получилась аккуратной. Она надёжно держала стрежни на одном уровне со светодиодами, так что даже не пришлось ничего клеить, а еще эта основа добавляет немного контраста эстетике часов. Чтобы шкатулка не открывалась, я приклеил к корпусу и крышке небольшие магниты.

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

Файлы

Шаг 5: Код и итоговый вид


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

  • RTClib.h — библиотека Real Time Clock
  • Adafruit_Neopixel.h — использовалась для диодов WS2812B
  • Adafruit_GFX.h и Adafruit_LEDBackpack.h — для 7сегментного дисплея часов
  • Wire.h — для I2C-связи с дисплеем и RTC
  • TimerOne.h и EEPROM.h

Однократное нажатие кнопки на крутилке позволяет включить\выключить и настроить будильник, используя крутилку. Долгое нажатие на кнопку крутилки позволяет задать настройки времени, используя крутилку. Нажатие на верхнюю кнопку включает светодиоды. Когда они включены, кнопка крутилки меняет режимы свечения, а поворачивая крутилку можно менять яркость свечения. Режимы и яркость сохранены в EEPROM. Настройки таковы, что при установке будильника на определённое время, диоды загорятся на минимальной яркости в последнем установленном режиме свечения. Через 20 минут, яркость постепенно увеличится до максимально возможной. Еще через 20 минут свет погаснет (нажав на верхнюю кнопку можно выключить его раньше).

Данная сборка будильника не включает в себя звуковые сигналы. Я просто использую будильник на телефоне в дополнение к будильнику-восходу, чтобы подстраховать себя от того, что просплю. Например, я установил будильник на 5 утра, максимально ярко он будет гореть в 5:20. На случай, если я не проснусь, также на 5:20 установлен звуковой будильник на телефоне. Затем я точно просыпаюсь, занимаюсь утренними делами и в 5:40 будильник сам выключается.

Режимы свечения включают:

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

Теперь и у вас будет стильный будильник-восход на светодиодах, который поможет вам приятно вставать по утрам!

Похожие статьи