Как выполнить определенный код в определенное время без модуля RTC?
Я создаю проект, когда мне нужно, чтобы мой arduino выполнял некоторый код в два заданных часа дня, например, один в 19:00 и другой в 06:00. Я знаю, что с модулем RTC я могу сделать это легко, однако как я могу сделать это без модуля RTC? Я не хочу подключать свой arduino ни к компьютеру, ни к интернету. Он также не должен быть точным, пара минут разницы будет в порядке.
Моя плата — Uno R3.
@, 👍1
1 ответ
Я не уверен, почему вы против RTC или исключили ли вы все внешние схемы для решения. Так что я просто выкладываю это...
Счетчик пульсаций CMOS-4060 можно запрограммировать практически на любой период времени, а использование двух из них даст вам две отдельные постоянные времени.
источник Замените реле на сигнальный провод к ЦП.
Cmos 4060 — это 14-битный двоичный счетчик. Однако — только десять из этих бит подключены к выходным контактам. Остальные биты — Q1, Q2, Q3 и Q11 — существуют. Вы просто не можете до них добраться.
4060 также имеет два инвертора, подключенных последовательно к контактам 11, 10 и 9. Вместе с R3, R4, R5 и C3 они образуют простой генератор.
Во время работы генератора 14-битный счетчик подсчитывает количество колебаний, а состояние счетчика отображается на выходных контактах.
Регулируя R4, вы можете изменять частоту генератора. Таким образом, вы можете контролировать скорость, с которой идет счет. Другими словами, вы можете решить, сколько времени потребуется для того, чтобы любой выходной контакт стал высоким.
Когда этот вывод становится высоким, он переключает транзистор, а транзистор, в свою очередь, управляет реле.
В режиме одиночного импульса выходной контакт выполняет вторую функцию. Он использует D1 для отключения генератора, поэтому счет останавливается при высоком уровне выходного контакта. .
Если вы хотите использовать таймер в режиме повторения - просто исключите D1. Счет будет продолжаться бесконечно. А выходной вывод продолжит включать и выключать транзистор - с теми же регулярными интервалами времени.
Например, если вам нужен период в 9 часов, таблица диапазонов показывает, что вы можете использовать выход на контакте 2. Вам нужно, чтобы контакт 2 стал высоким через 9 x 60 x 60 = 32 400 секунд. Таблица настроек говорит вам разделить это на 512, что дает около 63 секунд. Отрегулируйте R4 так, чтобы желтый светодиод загорался через 63 секунды после подачи питания. Это даст выход на контакте 2 примерно через 9 часов.
Если вы увеличите значение R3 и уменьшите R4 на соответствующую величину, вы сможете установить задержку времени более точно. Выберите значение для R3, которое будет близко к нужному вам времени. И используйте потенциометр с уменьшенным значением, чтобы выполнить тонкую настройку. Обратите внимание, что даже более тонкая настройка возможна с помощью многооборотного потенциометра.
Как упоминалось в решении VE7JRO, это решение (хотя и довольно точное) в конечном итоге будет дрейфовать со временем и должно быть включено в точное время, синхронизированное с желаемым временем отключения.
- Как справиться с rollover millis()?
- Как получить текущее время и дату в Arduino без внешнего источника?
- Преобразование в Unix Timestamp и обратно
- Как запустить цикл на определенное время?
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Разница между «time_t» и «DateTime»
- Получить час с помощью ctime (библиотека времени с ESP8266)
- Точность часов времени Arduino