Как получить текущее время и дату в Arduino без внешнего источника?
Я работаю над проектом, используя Arduino Uno и SD-карту. Я хотел бы сохранять переменную в определенное время каждый день на SD-карте. Как я могу получить текущее время в Arduino?
ПРИМЕЧАНИЕ. Arduino НЕ подключен к ПК.
@Mohamed Mbarki, 👍10
3 ответа
Достаточно точный способ — использовать функцию millis()
. Он вернет значение в миллисекундах с момента запуска Arduino. Если вы запустите Arduino в определенное время, вы сможете рассчитать точную дату и время.
Почему не внешний модуль?? Часы реального времени, такие как DS3231, всего за 5 долл. и включают в себя датчик температуры!
без внешнего источника
Вы не можете. В Arduino Uno нет часов реального времени. Часы реального времени стоят всего около 1 доллара на eBay. Например DS1307 или DS3231. Я нашел 5 x плат, предварительно собранных с микросхемой часов, включая держатель батареи, кристалл, микросхему и печатную плату за 4,20$ на eBay. Батарейки не поставляются.
Подключите его к контактам I2C (A4 и A5), установите время один раз, используя подходящий скетч, и все готово к работе.
Если вы просто хотите что-то делать каждые 24 часа (не обязательно в 9:36), вы можете просто использовать millis
, чтобы узнать, когда истекло соответствующее количество миллисекунд. Результат миллис
будет переноситься примерно каждые 49 дней, но вам не о чем беспокоиться об этом.
Обратите внимание, что это не позволит вам записывать дату и время, но вы можете записывать что-то (например, температуру) каждый день, вам просто нужно знать, когда вы начали записывать.
Один из возможных вариантов — использовать 24-часовой подключаемый таймер, который управляет питанием Uno.
То есть что-то вроде этого:
Схема будет следующей: розетка переменного тока -> таймер -> зарядное устройство USB -> Arduino
Вы можете настроить таймер на отключение питания Uno, скажем, в 23:30 и его повторное включение в полночь.
При такой настройке millis()
будет временем с момента последнего запуска Uno, что обычно будет временем с предыдущей полуночи.
Во время отладки вы можете установить время запуска Uno не на полночь.
Предостережения:
- Ваша ситуация допускает ежедневный 30-минутный (или любой другой шаг таймера) простой
- Возможен сдвиг таймера из-за перебоев в подаче электроэнергии.
- Как запустить цикл на определенное время?
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Разница между «time_t» и «DateTime»
- Оси X и Y на последовательном плоттере Arduino?
- Несколько неблокирующих таймеров обратного отсчета?
- Библиотека времени Arduino и библиотеки RTC
- Запуск двигателя постоянного тока в течение заданного промежутка времени
- Почему светодиоды заметно мерцают?
Будьте осторожны, функция millis() завершится примерно через 50 дней., @Andre Courchesne
@AndreCourchesne: http://arduinoprosto.ru/q/12587/how-can-i-handle-the-millis-rollover, @Dat Ha
А что, если оно закрутится? Правильно написанная программа часов об этом не заботится., @CrossRoads