LCD часы, сигнализация и таймер с детектором движения на Arduino. Простые бинарные часы с будильником на 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, посылаемые на светодиоды
  • Несколько различных двуцветных эффектов, которые медленно переходят один в другой через светодиоды.

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

Во многих проектах Ардуино требуется отслеживать и фиксировать время наступления тех или иных событий. Модуль часов реального времени, оснащенный дополнительной батарей, позволяет хранить текущую дату, не завися от наличия питания на самом устройстве. В этой статье мы поговорим о наиболее часто встречающихся модулях RTC DS1307, DS1302, DS3231, которые можно использовать с платой Arduino.

Модуль часов представляет собой небольшую плату, содержащей, как правило, одну из микросхем DS1307, DS1302, DS3231.Кроме этого, на плате практически можно найти механизм установки батарейки питания. Такие платы часто применяется для учета времени, даты, дня недели и других хронометрических параметров. Модули работают от автономного питания – батареек, аккумуляторов, и продолжают проводить отсчет, даже если на Ардуино отключилось питание. Наиболее распространенными моделями часов являются DS1302, DS1307, DS3231. Они основаны на подключаемом к Arduino модуле RTC (часы реального времени).

Часы ведут отсчет в единицах, которые удобны обычному человеку – минуты, часы, дни недели и другие, в отличие от обычных счетчиков и тактовых генераторов, которые считывают «тики». В Ардуино имеется специальная функция millis(), которая также может считывать различные временные интервалы. Но основным недостатком этой функции является сбрасывание в ноль при включении таймера. С ее помощью можно считать только время, установить дату или день недели невозможно. Для решения этой проблемы и используются модули часов реального времени.

Электронная схема включает в себя микросхему, источник питания, кварцевый резонатор и резисторы. Кварцевый резонатор работает на частоте 32768 Гц, которая является удобной для обычного двоичного счетчика. В схеме DS3231 имеется встроенный кварц и термостабилизация, которые позволяют получить значения высокой точности.

Сравнение популярных модулей RTC DS1302, DS1307, DS3231

В этой таблице мы привели список наиболее популярных модулей и их основные характеристики.

Название Частота Точность Поддерживаемые протоколы
DS1307 1 Гц, 4.096 кГц, 8.192 кГц, 32.768 кГц Зависит от кварца – обычно значение достигает 2,5 секунды в сутки, добиться точности выше 1 секунды в сутки невозможно. Также точность зависит от температуры. I2C
DS1302 32.768 кГц 5 секунд в сутки I2C, SPI
DS3231 Два выхода – первый на 32.768 кГц, второй – программируемый от 1 Гц до 8.192 кГц ±2 ppm при температурах от 0С до 40С.

±3,5 ppm при температурах от -40С до 85С.

Точность измерения температуры – ±3С

I2C

Модуль DS1307

DS1307 – это модуль, который используется для отсчета времени. Он собран на основе микросхемы DS1307ZN, питание поступает от литиевой батарейки для реализации автономной работы в течение длительного промежутка времени. Батарея на плате крепится на обратной стороне. На модуле имеется микросхема AT24C32 – это энергонезависимая память EEPROM на 32 Кбайт. Обе микросхемы связаны между собой шиной I2C. DS1307 обладает низким энергопотреблением и содержит часы и календарь по 2100 год.

Модуль обладает следующими параметрами:

  • Питание – 5В;
  • Диапазон рабочих температур от -40С до 85С;
  • 56 байт памяти;
  • Литиевая батарейка LIR2032;
  • Реализует 12-ти и 24-х часовые режимы;
  • Поддержка интерфейса I2C.

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

Взаимодействие с другими устройствами и обмен с ними информацией производится с помощью интерфейса I2C с контактов SCL и SDA. В схеме установлены резисторы, которые позволяют обеспечивать необходимый уровень сигнала. Также на плате имеется специальное место для крепления датчика температуры DS18B20.Контакты распределены в 2 группы, шаг 2,54 мм. В первой группе контактов находятся следующие выводы:

  • DS – вывод для датчика DS18B20;
  • SCL – линия тактирования;
  • SDA – линия данных;
  • VCC – 5В;

Во второй группе контактов находятся:

  • SQ – 1 МГц;
  • BAT – вход для литиевой батареи.

Для подключения к плате Ардуино нужны сама плата (в данном случае рассматривается Arduino Uno), модуль часов реального времени RTC DS1307, провода и USB кабель.

Чтобы подключить контроллер к Ардуино, используются 4 пина – VCC, земля, SCL, SDA.. VCC с часов подключается к 5В на Ардуино, земля с часов – к земле с Ардуино, SDA – А4, SCL – А5.

Для начала работы с модулем часов нужно установить библиотеки DS1307RTC, TimeLib и Wire. Можно использовать для работы и RTCLib.

Проверка RTC модуля

При запуске первого кода программа будет считывать данные с модуля раз в секунду. Сначала можно посмотреть, как поведет себя программа, если достать из модуля батарейку и заменить на другую, пока плата Ардуино не присоединена к компьютеру. Нужно подождать несколько секунд и вытащить батарею, в итоге часы перезагрузятся. Затем нужно выбрать пример в меню Examples→RTClib→ds1307. Важно правильно поставить скорость передачи на 57600 bps.

При открытии окна серийного монитора должны появиться следующие строки:

Будет показывать время 0:0:0. Это связано с тем, что в часах пропадает питание, и отсчет времени прекратится. По этой причине нельзя вытаскивать батарею во время работы модуля.

Чтобы провести настройку времени на модуле, нужно в скетче найти строку

RTC.adjust(DateTime(__DATE__, __TIME__));

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

Настройка произведена корректно и дополнительно перенастраивать часы реального времени не придется.

Считывание времени. Как только модуль настроен, можно отправлять запросы на получение времени. Для этого используется функция now(), возвращающая объект DateTime, который содержит информацию о времени и дате. Существует ряд библиотек, которые используются для считывания времени. Например, RTC.year() и RTC.hour() – они отдельно получают информацию о годе и часе. При работе с ними может возникнуть проблема: например, запрос на вывод времени будет сделан в 1:19:59. Прежде чем показать время 1:20:00, часы выведут время 1:19:00, то есть, по сути, будет потеряна одна минута. Поэтому эти библиотеки целесообразно использовать в случаях, когда считывание происходит нечасто – раз в несколько дней. Существуют и другие функции для вызова времени, но если нужно уменьшить или избежать погрешностей, лучше использовать now() и из нее уже вытаскивать необходимые показания.

Пример проекта с i2C модулем часов и дисплеем

Проект представляет собой обычные часы, на индикатор будет выведено точное время, а двоеточие между цифрами будет мигать с интервалом раз в одну секунду. Для реализации проекта потребуются плата Arduino Uno, цифровой индикатор, часы реального времени (в данном случае вышеописанный модуль ds1307), шилд для подключения (в данном случае используется Troyka Shield), батарейка для часов и провода.

В проекте используется простой четырехразрядный индикатор на микросхеме TM1637. Устройство обладает двухпроводным интерфейсом и обеспечивает 8 уровней яркости монитора. Используется только для показа времени в формате часы:минуты. Индикатор прост в использовании и легко подключается. Его выгодно применять для проектов, когда не требуется поминутная или почасовая проверка данных. Для получения более полной информации о времени и дате используются жидкокристаллические мониторы.

Модуль часов подключается к контактам SCL/SDA, которые относятся к шине I2C. Также нужно подключить землю и питание. К Ардуино подключается так же, как описан выше: SDA – A4, SCL – A5, земля с модуля к земле с Ардуино, VCC -5V.

Индикатор подключается просто – выводы с него CLK и DIO подключаются к любым цифровым пинам на плате.

Скетч. Для написания кода используется функция setup, которая позволяет инициализировать часы и индикатор, записать время компиляции. Вывод времени на экран будет выполнен с помощью loop.

#include #include "TM1637.h" #include "DS1307.h" //нужно включить все необходимые библиотеки для работы с часами и дисплеем. char compileTime = __TIME__; //время компиляции. #define DISPLAY_CLK_PIN 10 #define DISPLAY_DIO_PIN 11 //номера с выходов Ардуино, к которым присоединяется экран; void setup() { display.set(); display.init(); //подключение и настройка экрана. clock.begin(); //включение часов. byte hour = getInt(compileTime, 0); byte minute = getInt(compileTime, 2); byte second = getInt(compileTime, 4); //получение времени. clock.fillByHMS(hour, minute, second); //подготовка для записывания в модуль времени. clock.setTime(); //происходит запись полученной информации во внутреннюю память, начало считывания времени. } void loop() { int8_t timeDisp; //отображение на каждом из четырех разрядов. clock.getTime();//запрос на получение времени. timeDisp = clock.hour / 10; timeDisp = clock.hour % 10; timeDisp = clock.minute / 10; timeDisp = clock.minute % 10; //различные операции для получения десятков, единиц часов, минут и так далее. display.display(timeDisp); //вывод времени на индикатор display.point(clock.second % 2 ? POINT_ON: POINT_OFF);//включение и выключение двоеточия через секунду. } char getInt(const char* string, int startIndex) { return int(string - "0") * 10 + int(string) - "0"; //действия для корректной записи времени в двухзначное целое число. В ином случае на экране будет отображена просто пара символов. }

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

Программу можно немного модернизировать. При отключении питания выше написанный скетч приведет к тому, что после включения на дисплее будет указано время, которое было установлено при компиляции. В функции setup каждый раз будет рассчитываться время, которое прошло с 00:00:00 до начала компиляции. Этот хэш будет сравниваться с тем, что хранятся в EEPROM, которые сохраняются при отключении питания.

Для записи и чтения времени в энергонезависимую память или из нее нужно добавить функции EEPROMWriteInt и EEPROMReadInt. Они нужны для проверки совпадения/несовпадения хэша с хэшем, записанным в EEPROM.

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

В результате в коде нужно будет указать новую библиотеку (для жидкокристаллических экранов это LiquidCrystal), и добавить в функцию loop() строки для получения даты.

Алгоритм работы следующий:

  • Подключение всех компонентов;
  • Проверка – на экране монитора должны меняться ежесекундно время и дата. Если на экране указано неправильное время, нужно добавить в скетч функцию RTC.write (tmElements_t tm). Проблемы с неправильно указанным временем связаны с тем, что модуль часов сбрасывает дату и время на 00:00:00 01/01/2000 при выключении.
  • Функция write позволяет получить дату и время с компьютера, после чего на экране будут указаны верные параметры.

Заключение

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

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

Материалы:
- 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.

Проект, который отлично впишется в интерьер вашего 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.

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