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

04 июля 2017 / 22:03
Дизайн часов на ЖК-дисплееДанный обзор будет посвящен электронным часам, отображающим реальное время на ЖК-дисплее. Мы узнаем, как собирать и как прописывать программный код для часов.
Довольно часто для создания аппаратного проекта необходимо задействовать какой-нибудь дисплей. Размеры экрана и его функциональные возможности напрямую зависят от характера создаваемого приложения. В данном случае мы будем применять жидкокристаллический дисплей типа I2C 20х4.

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



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

Основные элементы для создания часов реального времени

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

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

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

Дизайн модуля RTC

Важным преимуществом готовых часов на основе ЖК-дисплея 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. Затем необходимо запустить Arduino IDE, после чего скопировать следующий код. Первые две строки содержат библиотеки I2C и LCD.

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

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

Первый пример кода


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



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

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

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



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

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

Соединение дисплея и модуля RTC

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



Перед началом прописывания кода необходимо скачать готовую библиотеку 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
0

Другие новости по теме:

Добавление комментария
Имя:*
E-Mail:
Комментарий:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Если Вы не робот, то подтвердите это: *