Часы реального времени на жидкокристаллическом дисплее

Довольно часто для создания аппаратного проекта необходимо задействовать какой-нибудь дисплей. Размеры экрана и его функциональные возможности напрямую зависят от характера создаваемого приложения. В данном случае мы будем применять жидкокристаллический дисплей типа I2C 20х4.

Используемые детали для часов реального времени

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

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

Теперь давайте разберемся с типом дисплея. Он имеет обозначение 20х4. Обычно, такие цифры означают физический размер устройства, однако здесь все немного по-другому. Символ «4» говорит о том, что на экране может поместиться 4 строчки текста или цифровых обозначений. Символ «20» — это показатель того, что на каждой строке может уместиться 20 букв и цифр. Характерной особенностью рассматриваемого дисплея является то, что на нём используется интерфейс типа I2C. Это значит, что для подсоединения экрана к плате Arduino понадобится лишь пара проводов. Задняя поверхность дисплея оснащена небольшой печатной платой, припаянной к нему. Именно эта плата обеспечивает функционирование жидкокристаллического модуля. Кроме того, она позволяет регулировать контрастность экрана.

Описываемый дисплей, в рабочем состоянии, имеет синюю подсветку, в то время как символы отображаются белым цветом. Он имеет полную совместимость с платой Arduino. Номинальное входное напряжение экрана составляет 5 В. Работу интерфейса I2C обеспечивают программные константы 0x27 либо 0x3F.

Важным преимуществом готовых часов на основе ЖК-дисплея 20х4 и платы Arduino является то, что они также оснащаются кварцевым генератором, имеющим температурную компенсацию. Кроме того, в них будут вмонтированы специальные кристаллы. Отдельно стоит упомянуть тот факт, что часы будут иметь вход для батареи. Таким образом, даже при отключении внешнего питания устройство будет поддерживать реальное время.

Даже в отключенном состоянии аппарат будет сохранять информацию о секундах, минутах, часах. Устройство сможет правильно отображать день, месяц и год. Если конкретный месяц имеет меньше 31-го дня, дата автоматически корректируется. Более того, устройство сможет учитывать корректировки для високосных и невисокосных годов. Формат времени может быть привычным для отечественного пользователя (то есть сутки будут разделены на 24 часа). Также, можно выставлять формат AM/PM, когда день делится на два 12-часовых отрезка. Часы оснащаются двумя видами будильника, а также календарём. Все сведения передаются последовательно через двунаправленную шину I2C.

Читайте также  Как сделать реле времени своими руками: схема, фото, видео

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

Соединение жидкокристаллического дисплея и платы Arduino

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

Создание общей цепи

Нужно выполнить такие действия:

  • соединить выход GND с аналогичным входом на плате Arduino;
  • вход дисплея VCC нужно подключить к 5-контактному выводу платы;
  • вход SDA соединить со штырьком A4;
  • соединить вход SCL и вывод A5.

Прописывание кода

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

После этого нужно разархивировать библиотеку и добавить её в реестр библиотек платы Arduino. Затем необходимо запустить Arduino IDE, после чего скопировать следующий код. Первые две строки содержат библиотеки I2C и LCD.

Программная команда Lcd.setCursor (3,0) установит курсор на жидкокристаллическом дисплее в указанной точке. Первое значение указывает на столбец, а второе — на стартовую форму строки 0.

Команда Lcd.print («») позволит напечатать текст в текущей позиции курсора. При наборе текста следует учитывать максимально допустимое количество символов для одной строки.

Прописывание даты и времени на ЖК-дисплее

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

Создание цепи

Здесь работа будет выглядеть немного сложнее, поэтому нужно быть внимательным. Штырьки SCL надо соединить с аналоговым 5-штырьковым разъёмом; выводы SDA подключаются к аналоговым 6-контактным гнездам. Верхняя направляющая получившейся сборки будет играть роль шины для I2C, а нижняя будет шиной питания.

ЖК-дисплей и модуль RTC подключаются к 5-вольтовым контактам. После выполнения последнего действия техническая конструкция будет готова.

Прописывание кода

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

  • в левом верхнем углу нужно нажать на значок File;
  • после нажатия откроется контекстное меню, где нужно подвести курсор к строчке Examples;
  • после этого высветится еще одно контекстное меню справа (здесь нужно навести курсор на строчку DS1307RTC);
  • высветится ещё одно маленькое контекстное меню, в котором необходимо нажать на строчку SetTime.
Читайте также  Плата для аниматроники

Результатом этих манипуляций станет установка текущего времени.

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

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

Теперь мы уделим внимание каждой части кода.

Для начала нужно включить сразу 3 библиотеки (I2C, LCD, а также RTC), после чего установить адрес ЖК-дисплея. Экран инициализируется внутри функции настройки, после чего надо вызвать команду createCustomCharacters (). Вот как должен выглядеть этот код.

Каждый символ, который будет отображаться, может иметь 5-пиксельную ширину и 8-пиксельную высоту. Чтобы прописать пользовательский символ, необходимо создать дополнительный байт. Нам потребуется 5 символов, вертикальная линия, а также 4 угла. Жёлтый шаблон представленного чуть ниже кода показывает то, как символ будет отображаться на жидкокристаллическом дисплее.

Внутри функции createCustomCharacters () мы вызвали команду lcd.createChar (#, byte array). Применяемый дисплей поддерживает до 8-ми пользовательских символов, имеющих номерное значение от 0 до 7. В первом командном параметре дисплей присваивает индекс символу, который задан конкретным массивом байтов. Чтобы пропечатать такое обозначение, мы можем задействовать функцию lcd.write (byte (#)).

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

Данная операция довольно проста. При её выполнении применяется команда lcd.setCursor (#, #), отвечающая за перемещение курсора, и команда lcd.print («»), необходимая для печати строки. Набранная команда позволит напечатать верхнюю и нижнюю горизонтальную линию, после чего можно будет создать другие пользовательские символы.

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

Можно прописать дополнительные полезные функции. В частности, хорошим дополнением станет загорание светодиода в случае появления сбоев в работе системы.

Функция PrintTime использует 3 командных параметра, столбец и строку, в которой будет прописано время целиком и его конкретный элемент. Код Lcd.print (tm.Hour) позволит напечатать час. Если значение минут и секунд меньше 10-ти, в следующей строчке кода после слова minutes или seconds пишется цифра «0». Вот как это выглядит на примере.

Читайте также  Автономное освещение на солнечных батареях своими руками

После выполнения данной операции все будет готово. Осталось лишь загрузить полученный код в Arduino и наслаждаться работой новеньких самодельных часов. Есть множество эскизов, которые помогут сделать описанное устройство (что особенно полезно для новичков). Их можно легко найти в свободном доступе.

Файлы для скачивания: chasy-realnogo-vremeni-na-zhidkokristallicheskom-displee.rar
Источник: tehnoobzor.com

programm-tv