Реклама

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

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

Какой смысл в часах реального времени (RTC)?

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

instagram viewer

Если ваш проект имеет какое-либо отношение к необходимости времени - например, мой ночной и восходящий будильник Проект Arduino Night Light и Sunrise AlarmСегодня мы будем делать будильник на рассвете, который будет осторожно и медленно будить вас, не прибегая к оскорбительной шумовой машине. Читать далее - это явно будет проблемой. В этом проекте мы обошли проблему, вручную установив время каждую ночь в довольно сырой способ - пользователь нажимает кнопку сброса непосредственно перед тем, как лечь спать, предоставляя ручное время синхронизации. Очевидно, что это не идеальное долгосрочное решение.

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

TinyRTC

Самый популярный RTC для Arduino называется TinyRTC и его можно купить примерно за 5-10 долларов на eBay. Скорее всего, вам понадобится поставить собственную батарею (незаконно отправлять ее за границу во многие места) и несколько коллекторов (штырьки, которые вставляются в отверстия, которые вам нужно припаять в себе).

Это модуль у меня есть:

РТК-модуль

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

Количество отверстий на этой штуке выглядит довольно страшно, но вам нужно только четыре из них; GND, VCC, SCL и SDA - вы можете использовать соответствующие контакты на любой стороне модуля RTC. Вы говорите с часами, используя Протокол I2CЭто означает, что используются только два контакта - один для «часов» (часы данных последовательной связи, никак не связанных со временем) и один для данных. На самом деле, вы даже подключаете до 121 устройства I2C на тех же двух контактах. эта страница Adafruit для выбора других устройств I2C вы можете добавить, потому что есть много!

Начиная

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

проводка

Затем загрузите Время а также DS1307RTC библиотеки и поместите полученные папки в /libraries папки.

Выйдите и перезапустите среду Arduino для загрузки в библиотеки и примеры.
ds1307rtc-пример меню

В меню DS1307RTC вы найдете два примера: загрузите и запустите Установить время первый пример - это установит правильное время RTC. Фактический код не стоит вдаваться в подробности, просто знайте, что вам нужно запустить его один раз, чтобы выполнить начальную синхронизацию времени.

Далее посмотрите на пример использования с ReadTest.


#включают 
#включают 
#включают  void setup () {Serial.begin (9600); while (! Serial); // ожидание последовательной задержки (200); Serial.println («Тест чтения DS1307RTC»); Serial.println ( ""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (тм. Час); Serial.write ( ':'); print2digits (тм. Минута); Serial.write ( ':'); print2digits (тм. Во-вторых); Serial.print (", Date (D / M / Y) ="); Serial.print (тм. День); Serial.write ( '/'); Serial.print (тм. Месяц); Serial.write ( '/'); Serial.print (tmYearToCalendar (тм. Год)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 остановлен. Пожалуйста, запустите SetTime "); Serial.println («пример для инициализации времени и начала работы.»); Serial.println (); } else {Serial.println ("Ошибка чтения DS1307! Пожалуйста, проверьте схему. "); Serial.println (); } задержка (9000); } задержка (1000); } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (number); }

Обратите внимание, что мы также включили ядро Wire.h библиотека - поставляется с Arduino и используется для связи через I2C. Загрузите код, откройте последовательную консоль со скоростью 9600 бод и наблюдайте, и ваш Arduino выводит текущее время каждую секунду. Замечательное!

Самый важный код в примере создает tmElements_t tm - это структура что мы будем заполняться текущим временем; и RTC.read (тм) функция, которая получает текущее время от модуля RTC, помещает его в наш тм структура и возвращает истину, если все прошло хорошо. Добавьте свой отладочный или логический код внутри этого оператора «если», например, распечатывая время или реагируя на него.

Теперь, когда вы знаете, как получить правильное время с Arduino, вы можете попробовать переписать проект сигнализации о восходе солнца или создать светодиодные часы со словами - возможности безграничны! Что ты будешь делать?

Кредиты изображений: Snootlab Через Flickr

Джеймс имеет степень бакалавра в области искусственного интеллекта и сертифицирован CompTIA A + и Network +. Он является ведущим разработчиком MakeUseOf и проводит свое свободное время за игрой в VR-пейнтбол и настольные игры. Он строил компьютеры с детства.