Как получить текущее время и дату в Arduino без внешнего источника?

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

ПРИМЕЧАНИЕ. Arduino НЕ подключен к ПК.

, 👍9


3 ответа


6

Достаточно точный способ — использовать функцию millis(). Он вернет значение в миллисекундах с момента запуска Arduino. Если вы запустите Arduino в определенное время, вы сможете рассчитать точную дату и время.


Почему не внешний модуль?? Часы реального времени, такие как DS3231, всего за 5 долл.  и включают в себя датчик температуры!

,

Будьте осторожны, функция millis() завершится примерно через 50 дней., @Andre Courchesne

@AndreCourchesne: http://arduinoprosto.ru/q/12587/how-can-i-handle-the-millis-rollover, @Dat Ha

А что, если оно закрутится? Правильно написанная программа часов об этом не заботится., @CrossRoads


4

без внешнего источника

Вы не можете. В Arduino Uno нет часов реального времени. Часы реального времени стоят всего около 1 доллара на eBay. Например DS1307 или DS3231. Я нашел 5 x плат, предварительно собранных с микросхемой часов, включая держатель батареи, кристалл, микросхему и печатную плату за 4,20$ на eBay. Батарейки не поставляются.

Подключите его к контактам I2C (A4 и A5), установите время один раз, используя подходящий скетч, и все готово к работе.


Если вы просто хотите что-то делать каждые 24 часа (не обязательно в 9:36), вы можете просто использовать millis, чтобы узнать, когда истекло соответствующее количество миллисекунд. Результат миллис будет переноситься примерно каждые 49 дней, но вам не о чем беспокоиться об этом.

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

,

1

Один из возможных вариантов — использовать 24-часовой подключаемый таймер, который управляет питанием Uno.

То есть что-то вроде этого:

Схема будет следующей: розетка переменного тока -> таймер -> зарядное устройство USB -> Arduino

Вы можете настроить таймер на отключение питания Uno, скажем, в 23:30 и его повторное включение в полночь.

При такой настройке millis() будет временем с момента последнего запуска Uno, что обычно будет временем с предыдущей полуночи.

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

Предостережения:

  • Ваша ситуация допускает ежедневный 30-минутный (или любой другой шаг таймера) простой
  • Возможен сдвиг таймера из-за перебоев в подаче электроэнергии.
,