
Lesley Fowler
0
1098
292
Времени на проекты Arduino не так просто, как вы думаете: как только подключение к компьютеру отсутствует, Arduino без питания просто перестает работать, включая его внутренний тикер.
Чтобы синхронизировать Arduino с окружающим миром, вам понадобится то, что называется “Модуль часов реального времени”. Вот как использовать один.
Какой смысл в часах реального времени (RTC)?
Ваш компьютер, скорее всего, синхронизирует свое время с Интернетом, но у него все еще есть внутренние часы, которые продолжают работать даже без подключения к Интернету или выключения питания. Когда вы используете Arduino, подключенный к компьютеру, у него есть доступ к точному времени, предоставляемому вашими системными часами. Это довольно полезно, но большинство проектов Arduino предназначены для использования вне компьютера - в этот момент, в любое время, когда питание отключено или Arduino перезапущен, у него не будет абсолютно никакого представления о том, который час. Внутренние часы будут сброшены и снова начнут отсчет с нуля при следующем включении.
Если ваш проект имеет какое-то отношение к необходимости времени - например, мой ночной светильник и будильник на рассвете Arduino Night Light и проект на рассвете Alarm Arduino Night Light и проект на рассвете Alarm Today, мы сделаем будильник на рассвете, который будет медленно разбудить вас, не прибегая к оскорбительной шумовой машине. - это явно будет проблемой. В этом проекте мы обошли проблему, вручную установив время каждую ночь довольно грубо - пользователь нажимал кнопку сброса непосредственно перед тем, как ложиться спать, обеспечивая синхронизацию времени вручную. Очевидно, что это не идеальное долгосрочное решение.
Модуль RTC - это дополнительный элемент схемы, требующий небольшой батарейки типа «таблетка», которая продолжает отсчитывать время, даже когда Arduino выключен. После однократной установки - он будет работать в течение всего срока службы батареи, обычно хороший год или около того.
TinyRTC
Самый популярный RTC для Arduino называется TinyRTC и его можно купить примерно за 5-10 долларов на eBay. Скорее всего, вам понадобится поставить собственную батарею (незаконно отправлять ее за границу во многие места) и несколько коллекторов (штырьки, которые вставляются в отверстия, которые вам нужно припаять в себе).
Это модуль у меня есть:
Он даже имеет встроенный датчик температуры, хотя батарея прослужит дольше, если вы ее не используете.
Количество отверстий на этой штуке выглядит довольно страшно, но вам нужно только четыре из них; GND, VCC, SCL и SDA - вы можете использовать соответствующие контакты на любой стороне модуля RTC. Вы говорите с часами, используя протокол I2C, что означает, что используются только два контакта - один для “Часы” (часы данных последовательной связи, не имеющие отношения ко времени) и один для данных. На самом деле, вы даже можете подключить до 121 устройства I2C на тех же двух выводах. Посетите эту страницу Adafruit для выбора других устройств I2C, которые вы можете добавить, потому что есть много!
Начиная
Подключите ваш модуль TinyRTC согласно схеме ниже - розовая линия DS не нужна, так как это для датчика температуры.
Затем загрузите библиотеки Time и DS1307RTC и поместите полученные папки в свой / библиотеки папка.
Выйдите и перезапустите среду Arduino для загрузки в библиотеки и примеры.
В меню DS1307RTC вы найдете два примера: загрузите и запустите Установленное время первый пример - это установит правильное время RTC. Фактический код не стоит вдаваться в подробности, просто знайте, что вам нужно запустить его один раз, чтобы выполнить начальную синхронизацию времени.
Далее посмотрите на пример использования с ReadTest.
#include #include #include 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 (tm.Hour); Serial.write ( ':'); print2digits (tm.Minute); Serial.write ( ':'); print2digits (tm.Second); Serial.print (", Date (D / M / Y) ="); Serial.print (tm.Day); Serial.write ( '/'); Serial.print (tm.Month); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm.Year)); 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 Via Flickr