Sheloil.ru

Шелл Оил
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Arduino часы реального времени синхронизация

data-ru.ru

RTC часы реального времени DS1302, DS1307, DS3231 к Arduino

RTC часы реального времени DS1302, DS1307, DS3231 к Arduino

admin » 28 ноя 2016, 20:40

Для подключения RTC часов реального времени DS1302, DS1307, DS3231, была разработана универсальная библиотека.

Изображение

Универсальная библиотека для RTC DS1302, DS1307, DS3231 к Arduino прикреплена в архиве.

Подключение DS1307 к Arduino:
RTC DS1307 . Arduino UNO
GND . GND
VCC . +5V
SDA . A4
SCL . A5

Подключение DS1302 к Arduino:

RTC DS1302 . Arduino UNO
GND . GND
VCC. +5V
RST . 10 (Можно изменить на другие в скетче)
CLK . 13 (Можно изменить на другие в скетче)
DAT . 12 (Можно изменить на другие в скетче)

Подключение DS3231 к Arduino:

RTC DS3231 . Arduino UNO
GND . GND
VCC . +5V
SDA. A4
SCL. A5

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

Для DS1307:
Код: выделить все time.begin(RTC_DS1307);

Для DS1302:
Код: выделить все time.begin(RTC_DS1302,10,13,12);

Для DS3231:
Код: выделить все time.begin(RTC_DS3231);

Пример установки текущего времени в RTC модуль (DS1307):

Код: выделить все #include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);
void setup() <
delay(300);
Serial.begin(9600);
time.begin();
time.settime(0,51,21,27,10,15,2); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
>
void loop() <
if(millis()%1000==0) < // если прошла 1 секунда
Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
>
>

Пример считывания текущего времени с RTC модуля (DS1307) и вывод в "Последовательный порт" :

Код: выделить все #include <iarduino_RTC.h>
iarduino_RTC time(RTC_DS1307);
void setup() <
delay(300);
Serial.begin(9600);
time.begin();
>
void loop() <
if(millis()%1000==0) < // если прошла 1 секунда
Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
>
>

— библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных I2C и SPI, а следовательно не требует подключения дополнительных библиотек, но и не конфликтует с ними, если таковые всё же подключены.

— библиотека имеет внутренние функции программой обработки протокола передачи данных 3-Wire

— для инициализации модуля необходимо вызвать функцию begin с названием модуля.

— подключение модулей осуществляется к аппаратным выводам arduino используемой шины (за исключением 3-Wire)

— простота установки и чтения времени функциями settime и gettime

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

функция gettime работает как функция date в php, возвращая строку со временем, но если её вызвать без параметра, то функция ничего не вернёт, а время можно прочитать из переменных в виде чисел.

— библиотека расширяемая, то есть для того, чтоб она работала с новым модулем, нужно указать параметры этого модуля в уже существующих массивах файла RTC.h (тип шины, частота шины в кГц, режимы работы, адреса регистров и т.д.), как всё это сделать, описано в файле extension.txt

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

36 байт, при этом не затронув область памяти программ.

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

— при работе с модулем DS1302 не нужны никакие резисторы на выводе GND (которые нужны для его работы с другими библиотеками этого модуля), это достигнуто тем, что для шины 3-Wire указана конкретная частота 10кГц, не зависимо от частоты CPU arduino.

— в библиотеке реализована еще одна не обязательная функция period, принимающая в качестве единственного аргумента — количество минут (от 1 до 255)

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

Функцию period достаточно вызвать один раз.
Подробное описание:

Код: выделить все >// ОПИСАНИЯ ПАРАМЕТРОВ ФУНКЦИЙ:
//
// Подключение библиотеки:
// #include <iarduino_RTC.h>
// iarduino_RTC time(название модуля [, вывод SS/RST [, вывод CLK [, вывод DAT]]]);
// если модуль работает на шине I2C или SPI, то достаточно указать 1 параметр, например: iarduino_RTC time(RTC_DS3231);
// если модуль работает на шине SPI, а аппаратный вывод SS занят, то номер назначенного вывода SS для модуля указывается вторым параметром, например: iarduino_RTC time(RTC_DS1305,22);
// если модуль работает на трехпроводной шине, то указываются номера всех выводов, например: iarduino_RTC time(RTC_DS1302, 1, 2, 3); // RST, CLK, DAT
//
// Для работы с модулями, в библиотеке реализованы 5 функции:
// инициировать модуль begin();
// указать время settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]);
// получить время gettime("строка с параметрами");
// мигать времем blinktime(0-не_мигать / 1-мигают_сек / 2-мигают_мин / 3-мигают_час / 4-мигают_дни / 5-мигают_мес / 6-мигает_год / 7-мигают_дни_недели / 8-мигает_полдень)
// разгрузить шину period (минуты);
//
// Функция begin():
// функция инициирует модуль: проверяет регистры модуля, запускает генератор модуля и т.д.
//
// Функция settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]):
// записывает время в модуль
// год указывается без учёта века, в формате 0-99
// часы указываются в 24-часовом формате, от 0 до 23
// день недели указывается в виде числа от 0-воскресенье до 6-суббота
// если предыдущий параметр надо оставить без изменений, то можно указать отрицательное или заведомо большее значение
// пример: settime(-1, 10); установит 10 минут, а секунды, часы и дату, оставит без изменений
// пример: settime(0, 5, 13); установит 13 часов, 5 минут, 0 секунд, а дату оставит без изменений
// пример: settime(-1, -1, -1, 1, 10, 15); установит дату 01.10.2015 , а время и день недели оставит без изменений
//
// Функция gettime("строка с параметрами"):
// функция получает и выводит строку заменяя описанные ниже символы на текущее время
// пример: gettime("d-m-Y, H:i:s, D"); ответит строкой "01-10-2015, 14:00:05, Thu"
// пример: gettime("s"); ответит строкой "05"
// указанные символы идентичны символам для функции date() в PHP
// s секунды от 00 до 59 (два знака)
// i минуты от 00 до 59 (два знака)
// h часы в 12-часовом формате от 01 до 12 (два знака)
// H часы в 24-часовом формате от 00 до 23 (два знака)
// d день месяца от 01 до 31 (два знака)
// w день недели от 0 до 6 (один знак: 0-воскресенье, 6-суббота)
// D день недели наименование от Mon до Sun (три знака: Mon Tue Wed Thu Fri Sat Sun)
// m месяц от 01 до 12 (два знака)
// M месяц наименование от Jan до Dec (три знака: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
// Y год от 2000 до 2099 (четыре знака)
// y год от 00 до 99 (два знака)
// a полдень am или pm (два знака, в нижнем регистре)
// A полдень AM или PM (два знака, в верхнем регистре)
// строка не должна превышать 50 символов
//
// если требуется получить время в виде цифр, то можно вызвать функцию gettime() без параметра, после чего получить время из переменных
// seconds секунды 0-59
// minutes минуты 0-59
// hours часы 1-12
// Hours часы 0-23
// midday полдень 0-1 (0-am, 1-pm)
// day день месяца 1-31
// weekday день недели 0-6 (0-воскресенье, 6-суббота)
// month месяц 1-12
// year год 0-99
//
// Функция blinktime(параметр):
// указывает функции gettime мигать одним из параметров времени (заменять параметр пробелами)
// функция может быть полезна, для отображения на дисплее, устанавливаемого параметра времени
// функция получает один параметр в виде числа от 0 до 8
// 0 не мигать
// 1 мигают сек
// 2 мигают мин
// 3 мигают час
// 4 мигают дни
// 5 мигают мес
// 6 мигает год
// 7 мигают дни недели
// 8 мигает полдень
//
// Функция period(минуты):
// устанавливает минимальный период обращения к модулю в минутах (от 0 до 255)
// функция может быть полезна, если шина сильно нагружена, на ней имеются несколько устройств
// period(10); период 10 минут, означает что каждые 10 минут к модулю может быть отправлен только 1 запрос на получение времени
// ответом на все остальные запросы будет результат последнего полученного от модуля времени + время прошедшее с этого запроса

Читайте так же:
Регулировка редуктора томасетто на ланосе

ТегиRTC, часы, DS1302, DS1307, DS3231, Arduino

Новичкам от новичка — Arduino LCD 16×2 I2C RTC 1307 — Делаем часы на с LCD + модуль часов реального времени и все это по 2-м проводам

С ардуиной познакомился с месяц назад, заказал деталек — стали приходить — начал потихоньку вникать. Вообще — глобально я хочу собрать бортовой компьютер в авто — для вывода оперативной информации и сброса ошибок. Ну а пока тернеруюь на кошках__)

Решил собрать часы.

Сначала пришел LCD экран 1602 символов, стандартный экран, инстсрукций по подключению в интернете масса. www.dreamdealer.nl/tutorials/connecting_a_1602a_lcd_display_and_a_light_sensor_to_arduino_uno.html
Подключил-посмотрел, мдя, проводов много(( Запустил на нем простейшие софтовые часы, все ничего, но как только отключаешь питание — продавает и время( А так как кнопок еще нету — то установка происходит через комп по ком порту через Процессинг, вообщем тот еще геморой.

Потом пришел заранее заказанный модуль I2C — символьный LCD. Модуль этот основан на микрухе которая расширяет порты ввода вывода. тоесть по 2м проводам данные входят — а по 8 выводам расходятся на экран. Вещь дюже полезная, на ибээ их полно.

Стало совсем красиво.

Есть некоторая загвоздка. дело в том что в библиотеке с которой работает экран по i2c протоколу — нерабочие примеры((( Это у меня отняло какое-то время для понимания сути процессов))

Кратенько для тех кто купит переходник — в каждом переходнике зашит его адрес, адрес можно узнать с помощью сканера адресов или аналитическим методом. На платке есть перемычки — если ихзапаять, адрес будет 0x20, а если перемычки сводобные — адрес будет 0x27. Адресация нужна для правильной инициализации переходника и работы с LCD экраном.

Сразу понятно будет не все, но после суток-двух копания в инете, прийдет понимание.

Вообщем суть такая, по двум проводам можно подключить любое количество экранов! Главное чтобы у каждого был свой адрес, а менять адрес можно если менть перемычки на переходничке i2c lcd. Если экранчик один, то можно выяснить аэрес перебором или найти сканер и посмотреть все доступные адреса по протоколу i2c. Адрес зависит от типа переходника, про типы подробно вот тут arduino-info.wikispaces.com/LCD-Blue-I2C

Читайте так же:
Регулировка карбюратора на гидроцикле бомбардир

У меня оказался Третий вариант как по ссылке. Разобравшись что куда, выяснил что адрес у него 0x27, эта цифра нужна для обращения к экрану.

А теперь важное.

Есть 2 рабочих варианта (может даже больше)

Перая библиотека с примерами качается по ссылке arduino-info.wikispaces.com/LCD-Blue-I2C
Сама библиотка https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
Примеры брать не из библиотки а из блога выше.

Второй вариант, arduino-info.wikispaces.com/file/detail/LiquidCrystal_I2C1602V1.zip/341635514
Мой пример работает на этой библиотеке. Она старее, но мне показалось достаточной использовать ее.

Обе эти библиотеки НЕ СОВМЕСТИМЫ!

Так что ставим второй вариант, если не заработает — ставим первый и переписываем пример под свою библиотеку, благо там не много.

Я честно уже не помню почему выбрал второй вариант и где взял примеры, главное, что все работает))

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

Рабочую библиотеку нашел не сразу, заработала вот эта https://github.com/adafruit/RTClib

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

Теперь при отключении питания, часы не сбрасываются)))

Итак, особенностью часов является отображение 3х чисел в виде столбиков, секундыи минуты слева -направо, часы — наоборот справа-налево.

Используется 8 собственных символов, которые создают индикацию. Сначала сдеал 9 — начали скакать символы, смотрел — думал — оказалось что максимальное количество собственных символов — 8. Поэтому в качестве полного закрашенного квадрата используется системный знак по коду, а процентное заполнение — нарисовано в массиве битами.

Я думаю что в коде все понятно.

Функция Map — «растягивает» отображаемый промежуток в 24 часа на то количество клеток, которое нужно. так же и с минутами и секундами, но там растягивается другой диапазон.

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

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

Микросхемы часов реального времени RTC — назначение, виды и примеры использования

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

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

Что это такое

RTC (real time clock, рус. часы реального времени) — это вид микросхем, предназначенных для отсчета времени в «реальных» единицах (секунды, минуты, часы и т.д.).

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

Точность отсчета как раз и зависит от качества и точности настройки внутреннего генератора или внешнего кварцевого резонатора. При этом точность кварца и RTC соответственно, указывается не в герцах и не в процентах, а в «ppm», например ±12 ppm, ±50 ppm. Это расшифровывается, как Parts Per Million, т. е. количество миллионных частей от какой-то средней величины.

Микросхема часов реального времени RTC

Часы реального времени могут быть реализованы на базе микроконтроллеров, однако, использование специальных чипов позволяет снизить энергопотребление, поскольку большинство микроконтроллеров даже в спящем режиме (или режиме пониженного энергопотребления) потребляют больше энергии чем специальные интегральные микросхемы (ИМС). RTC могут быть и встроенными в сам микроконтроллер (как в STM32).

Именно благодаря часам реального времени на вашем компьютере не сбивается время и дата после его отключения от сети, в этом случае они работают от батарейки CR2032, установленной в разъёме на материнской плате, она же и питает микросхему BIOS, чтобы не сбивались выставленные в нем настройки.

Микросхема RTC со встроенным аккумулятором

Классификация

Классификация микросхем RTC может отличаться от производителя к производителю. Наиболее распространены часы реального времени таких производителей, как: Maxim Integrated и STMicroelectronics. На рынке есть микросхемы и других компаний:

Intersil Corporation (д.к. Renesas Electronics);

Cymbet (линейка EnerChip™ RTC, отличительная особенность — встроенная твердотельная батарея);

NXP (RTC с календарем, с поддержкой протоколов I2C или SPI)

Модуль часов реального времени с микросхемой DS1307

Компания Maxim Integrated в качестве основного критерия для классификации микросхем RTC использует тип интерфейса управления, а именно:

1. Микросхемы RTC с последовательным интерфейсом управления: I2C, 3-wire, SPI.

2. С параллельным интерфейсом управления:

с мультиплексированной шиной «адрес/данные»;

с разделенными шинами адреса и данных;

с однопроводным интерфейсом 1-wire.

Модуль часов реального времени

Можно классифицировать и по формату представления данных:

Календарный. В виде шаблона YY-MM-DD для даты и HH-MM-SS для времени время и другие их форматы;

Бинарный. В виде непрерывного двоичного счетчика единиц времени (секунд или их долей).

В зависимости от назначения микросхемы в схеме устройства и выбирается её тип, если ИМС с календарным представлением — она будет выполнять функцию обычных часов, а в случае с бинарным — для таких применений, как отчеты периодов времени, например срока действии лицензии, гарантийного срока или в устройства для учета чего-либо (например, электросчетчиках), например в каталоге Maxim Integrated они называются «Elapsed Time Counter» — счетчик прошедшего времени, пример такой ИМС — DS1683.

В других случаях микросхемы часов реального времени могут классифицироваться по функционалу или другим характеристикам:

Наличие встроенного генератора или необходимо использовать внешний генератор (кварцевый).

По наличию встроенного источника питания или возможности использования внешней батареи.

По типу и объёму внутренней памяти и протоколам связи с «внешним» миром (описывались выше).

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

Другие функции: сторожевой таймер (watchdog), будильника (alarm), секундный выход, контроль питания, возможность зарядки внешней батареи и пр.

И, наконец, многие производители классифицируют свои устройства по уровню энергопотребления, в среднем потребляемый ток лежит в пределах от 200 до 1500 нА, но может и выходить из этого диапазона в зависимости от конкретной ИМС и производителя.

Применение в радиолюбительской практике

Часы реального времени нередко используются в паре с такими популярными платформами для разработки и прототипирования, как семейство Arduino, и при разработке устройств на любых других микроконтроллерах, а также микрокомпьютерах семейства Raspberry Pi и подобные.

Применение микросхем RTC в радиолюбительской практике

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

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

Модули с RTC

В среде ардуинщиков и современных самодельщиков наибольшее распространение получили микросхемы часов реального времени компании Maxim Integrated и модули на их базу, а именно:

Их отличия приведены в таблице ниже.

Характеристики микросхем DS1302, DS1307 и DS3231

Как видите, все из них поддерживают связь с микроконтроллером по шине I2C, а DS1302 и по SPI, хотя в даташите сказано «простой 3-проводной последовательный интерфейс, подходящий для большинства микроконтроллеров». И может подключаться не только к 10-13 пинам Ардуино, на которых назначены выводы шишны SPI, но и к други, установленным в скетче, схемы будут ниже. Даташиты на эти ИМС со всеми техническими данными прилагаем к статье.

Даташиты на микросхемы реального времени:

Arduino UNO поддерживает оба этих протокола, что вы можете увидеть на схеме ниже (помечено фиолетовым и серым цветом для SPI и I2C соответственно).

Arduino UNO

Как и Raspberry pi.

Raspberry pi

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

Для того чтобы Arduino работала с RTC нужна библиотека, но так как её нет в стандартном пакете Arduino IDE, её нужно скачать. В сети есть библиотеки для каждой из рассмотренных ИМС, а есть и универсальные, что выбрать, и какая будет удобнее решать уже вам.

Универсальную библиотеку прилагаем — iarduino_rtc.zip. Отметим, что в ней задаётся вручную тип ИМС, а для DS1302 и выводы, к которым она подключена:

include // Подключаем библиотеку
iarduino_RTC time(RTC_DS3231); // Создаём объект time, для ИМС DS3231
iarduino_RTC time(RTC_DS1307); // ДЛЯ DS1307
iarduino_RTC time(RTC_DS1302, RST, CLK, DAT); // для DS1302.
// Вместо RST, CLK и DAT номера пинов ардуино,
// к которым подключены соответствующие пины модуля часов

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

Схема подключения DS1302 к Ардуино

А вот линия данных DS1307 и DS3231 подключается только к пинам A5 и A4 Arduino UNO (для других ревизий и версий платы смотрите распиновку).

Схема подключения RTC к ардуино

Схема подключения RTC к ардуино

Заключение

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

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

Любите умные гаджеты и DIY? Станьте специалистом в сфере Internet of Things и создайте сеть умных гаджетов!

Записывайтесь в онлайн-университет от GeekBrains:

Обучение Интернет вещей и современные встраиваемые системы

Изучить C, механизмы отладки и программирования микроконтроллеров;

Получить опыт работы с реальными проектами, в команде и самостоятельно;

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

Starter box для первых экспериментов в подарок!

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

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

Arduino часы с будильником

Узнаем как реализовать на основе Arduino будильник с помощью модуля RTC DS3231.

В этой статье мы собираемся сделать Ардуино будильник, в котором мы будем использовать модуль RTC DS3231, чтобы получить текущее время и дату, а OLED покажет это время и дату.

Мы будем использовать библиотеку EEPROM для хранения времени будильника, которое мы будем вводить, используя модуль клавиатуры 4X4.

Когда новое введенное время будильника будет соответствовать текущему времени будильника, тогда зуммер начнет подавать звуковой сигнал, пока мы не удержим клавишу "C" на клавиатуре. Клавиша "#" будет использоваться для изменения пароля.

Шаг 1. Требуемые компоненты

Необходимыми компонентами для устройства будильника Arduino являются:

  • Arduino Uno
  • 128X32 Монохромный OLED дисплей
  • Модуль RTC DS3231
  • 4X4 клавиатура
  • 9В аккумулятор или батарея
  • Зуммер
  • Переключатель
  • Соединительные провода

Шаг 2. Схема соединения

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

  • CS-выход OLED на пин 10 Arduino
  • DC-вывод OLED на пин 9 Arduino
  • RST вывод OLED на вывод 8 Arduino
  • D1 или CLK вывод OLED на вывод 11 Arduino
  • D0 или DIN-штырь OLED на вывод 13 Arduino

Затем подключите модуль DS3231 к Arduino. Соединения следующие:

  • Подключите GND DS3231 к GND Arduino.
  • Подключите VCC DS3231 к 5V Arduino.
  • Подключите SDA DS3231 к A4 Arduino.
  • Подключите SCL DS3231 к A5 Arduino.

После этого подключите клавиатуру 4X4 к Arduino. Подключите первые 4 контакта клавиатуры, строка A0, A1, A2, A3 и последние четыре, которые относятся к контактам столбца к 6, 5, 4 и 3.

Подключите положительный контакт зуммера к контакту 7 Arduino и отрицательный сигнал зуммера к GND Arduino.

В конце, подключите положительный провод батареи к одному концу переключателя, а другой конец переключателя — к Vin Arduino.

Затем подключите отрицательный провод батареи к заземлению Arduino.

Шаг 3. Код для Ардуино бдильника

Сам код можно скачать или скопировать ниже. Дальше будет объяснение кода и ссылки на скачивание нужных библиотек.

Первым делом мы включили библиотеки для клавиатуры, DS3231 RTC и OLED. Библиотека EEPROM, которую мы включили, поможет нам сохранить время будильника. OLED работает с Arduino через связь SPI, поэтому мы включили библиотеку SPI. Аналогично, мы включили библиотеку «Wire» для DS3231, потому что DS3231 работает с Arduino через связь I2C, а библиотека «Wire» предназначена для связи I2C.

В приведенной ниже части кода мы определили контакты для DS3231, зуммера и OLED. Затем мы инициализировали некоторые переменные, которые помогут нам хранить некоторые данные. После этого мы определили контакты для клавиатуры 4X4.

В функции настройки (setup) мы запустили связь «wire» и «rtc». Затем мы объявили пин зуммера в качестве выхода и назвали функцию «welcome», которая напечатает «Добро пожаловать» на OLED.

В функции цикла (loop) мы получаем время и дату из модуля RTC DS3231 и сохраняем их в переменных. Затем мы ищем, нажата ли какая-либо клавиша или нет.

Если нажата клавиша «C», она выключит зуммер и изменит минуты на 60, что остановит будильник от включения на следующий день. Если нажата кнопка «#», она запросит новое время будильника.

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

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

Функция ниже отображает текущее время, текущую дату и время сигнала на OLED.

Перед загрузкой кода загрузите библиотеки из приведенных ниже ссылок.

Итоговый результат

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

На этом пока всё. Желаем вам новых классных идей и устройств.

В статье рассказано о том, как из ардуины и дисплея TM1637 сделать часы-будильник, управляемый при помощи любого ИК-пульта.

С помощью пульта можно будет программировать время и будильник, включать/отключать будильник и устанавливать отсрочку сигнала. То есть делать всё не вставая с дивана.

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

Что понадобится

Ардуина

Дисплей TM1637

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

Пищалка (buzzer)


Можно не покупать, а выдрать откуда-либо.

ИК-приёмникнаиболее предпочтительный вариант — TSOPxx38 (38kHz).


Во втором варианте потребуется модуль часов DS 3231.

В начале вариант для тех, кто хочет просто подключить/проверить дисплей.

Подключаем всё по следующей схеме:

Скачиваем и устанавливаем библиотеку для дисплея TM1637.

Если всё работает, то переходим к следующему этапу. Добавим к схеме светики, пищалку и ик-приёмник…

У Вас может быть другая распиновка ик-приёмника. Резисторы 300-1000 ом.

Сначала залейте скетч для обнуления EEPROM…

Теперь я (немного забегая вперёд) опишу алгоритм, а после перейдём к программированию пульта.

Инструкция и как работает

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

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

После нажатия кнопки отключения будильника установленное время вернётся к изначальному значению. То есть, вы встаёте в 7:00 утра, будильник зазвенел, вы нажали отсрочку, будильник перевёлся на 7:10, зазвенел, вы таки встали, отключили будильник — будильник вернулся на 7:00.

В момент нажатия отсрочки появляется индикация будильника.

Время будильника, его состояние (включён/отключён) и уровень яркости дисплея сохраняются в энергонезависимой памяти.

Нажатия на кнопки сопровождаются звуковым сигналом.

Программирование пульта

Возьмите какой-нибудь пульт, например от телевизора, выберите на нём несколько кнопок (у большинства пультов есть незадействованные кнопки), которыми будете управлять часами/будильником.

Нужно выбрать кнопки, которыми вы будете устанавливать время на часах (прибавлять/убавлять часы и минуты, четыре кнопки). Кнопки для установки будильника — прибавлять/убавлять часы и минуты будильника (четыре кнопки). Кнопка включения/отключения будильника (одна кнопка). Кнопка отсрочки будильника на 10 минут (одна кнопка) и кнопка перехода в режим установки будильника (одна кнопка). Кнопки для регулировки яркости (две штуки).

Заполучим коды кнопок. Откройте «Монитор последовательного порта», и нажмите на пульте кнопку, которой планируете устанавливать время — прибавлять часы:


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

Скопируйте это число и вставьте в скетч:

Повторяем процедуру для кнопки убавления часов:

Вставляем в скетч:

Проделываем всё то же самое для остальных кнопок. В скетче есть комментарии.

И в конце комментируем или удаляем строку…

Заливаем скетч, и в принципе можно пользоваться. Однако такой способ подсчёта времени не выдерживает никакой критики, поэтому предложу пару вариантов. Первый — это использование модуля DS3231 (очень точный и стабильный), а второй — это ежесуточная коррекция времени от большого компьютера. Начну с последнего.

Сразу же скажу, что второй вариант подходит тем, у кого есть компьютер с линуксом или роутер с альтернативной прошивкой.

Синхронизация от компьютера

Идея заключается в следующем, часы подключены (USB, UART) к компьютеру с запущенной на нём программой, которая «слушает» USB-порт в ожидании запроса от часов. Ровно в 00:00:10 часы отправляют запрос компьютеру, а тот в ответ отсылает часам своё системное время.

Добавим в скетч необходимый функционал. Там где счётчик времени добавим блок отвечающий за запрос…

И в конец основного цикла добавим блок отвечающий за приём:

Не забудьте про коды кнопок пульта.

Далее скачиваем программу chasikom, кладём её в домашнюю папку, подключаем часы к компу и запускаем:

У вас будет свой юзер и возможно другое устройство (/dev/ttyUSB0). Проверить можно так:

Через десять секунд установится точное время.

Если нужна прога для какого-либо роутера, тогда напишите в комментах.

Вариант с DS3231

Добавляем в схему модуль:

Скачиваем и устанавливаем библиотеку DS3231, заливаем новый скетч:

Не забывайте про коды кнопок пульта.

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

Теперь возьмите пульт, выставите время (в этом скетче нет коррекции от большого компьютера) и передёрните ардуине питание. Если всё работает правильно, то на часах будет текущее время.

Ну и наконец скетч для работы с модулем часов и коррекцией времени:

На этом пожалуй всё.

Вступайте в Telegram-группу Arduino

Часы будильник на Arduino.

Ссылки на используемые компоненты:

ЖК-дисплей LCD1602 (синий экран) — http://ali.pub/alnru

Модуль расширителя интерфейса (I2C) — http://ali.pub/dwj5n

Часы реального времени Ds3231 — http://ali.pub/1e3pfr

Часы будильник с MP3 плеером на Arduino.

Ссылки на используемые компоненты:

ЖК-дисплей LCD1602 (синий экран) — http://ali.pub/alnru

Модуль расширителя интерфейса (I2C) — http://ali.pub/dwj5n

Часы реального времени Ds3231 — http://ali.pub/1e3pfr

Часы будильник с MP3 плеером на Arduino

Оставьте комментарий:

Навигация по сайту:

Юный Технарь:

Помощь проекту:

Деньги можно перечислить на карту Сбербанка России:

4276 5400 2194 5088

Поиск

Последние статьи

FLProg — Как создать сеть из двух ESP826…

FLProg — Как создать сеть из двух ESP8266.

ESP8266 +FLProg +KAскада — Как создать т…

КаСкада — как одновременно управлять несколькими ESP8266.

Мой канал на YouTube

Подпишитесь!

2015, Arduinoprom.ru — блог Чилингаряна Грачика. Все авторские права на тексты принадлежат ему.

При размещении текстов и видеоматериалов на сторонних ресурсах активная гиперссылка ОБЯЗАТЕЛЬНА.

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector