Оглавление:

Легкие часы перехода на летнее время: 7 шагов
Легкие часы перехода на летнее время: 7 шагов

Видео: Легкие часы перехода на летнее время: 7 шагов

Видео: Легкие часы перехода на летнее время: 7 шагов
Видео: Хочешь ВЫЙТИ ИЗ СИСТЕМЫ ? 12 простых ШАГОВ чтобы выйти из МАТРИЦЫ изменить МИР и улучшить СВОЮ ЖИЗНЬ 2024, Июль
Anonim
Легкие часы перехода на летнее время
Легкие часы перехода на летнее время
Легкие часы перехода на летнее время
Легкие часы перехода на летнее время

История

Этот проект начинался как задача для меня изучить программирование (кодирование) с помощью Arduino Uno и одного ЖК-дисплея 1602A. Сначала я хотел довести Arduino до предела точности. Это проект по созданию часов без использования модуля RTC (модуль часов реального времени) и, кроме того, без использования задержки (); команды, потому что delay (); команда останавливает код на определенный промежуток времени. Когда я работал над основным кодом времени, я подумал, что это может быть немного обыденным, поэтому я решил добавить функцию перехода на летнее время в качестве нового дополнения, чтобы оживить вещи и, возможно, вызвать немного больше интереса к этому проекту. Сначала идея была совершенно новой, но чем больше я работаю с ней и слежу за физическими часами на моем столе, тем более практичной становится идея. Если добавить модуль RTC и настроить код, эти часы будут точными на долгие годы и будут стоить очень дешево для производителей и населения, покупающих такие часы.

Летнее время или (DST) существует уже более 100 лет (погуглите, у него довольно яркая история). Я не хочу вдаваться в политику, но это грубое и болезненное упражнение, которое не облегчает жизнь простым людям (вам и мне). По большей части мы наслаждаемся дополнительным часом дневного света, но способ его применения жестокий. Пришло время серьезного обновления очень старой идеи.

С этим примером легко жить, с цифровым веком и достижениями в технологиях, которые легко применимы ко всем формам цифровых часов, но он может помочь в упадке аналоговых часов. Вместо 1-часового перехода от стандартного времени к летнему времени, а затем от времени с летнего времени к стандартному, эти часы основаны на постепенном переходе времени от зимнего солнцестояния к летнему солнцестоянию, а затем обратно к стандартному времени в следующее зимнее солнцестояние год за годом. Этот переход происходит в течение 180 дней из каждых 6 месяцев, корректировка составляет 20 секунд в день на 360 дней, а оставшиеся 5 или 6 дней добавляются к продолжительности солнцестояний. Мой пример здесь увеличивает 1 минуту каждые три дня в пределах 180-дневного цикла. Примерно 21 июня каждого года часы идут на 1 час вперед, а 21 декабря или около того каждого года часы возвращаются на стандартное время. Високосный год легко учесть, особенно если используется RTC. Южное полушарие также легко адаптируется к этим часам, шкала слайдов просто на 6 месяцев сдвинута по фазе с северным полушарием.

Есть три места в мире, где летнее время будет в значительной степени, кроме экваториальной области и полюсов. Я не думаю, что дневной свет сильно меняется на экваторе, я не знаю, используется ли в каких-либо тропических регионах летнее время, и полюса - это снова другая история, просто «КАКОЕ» время на полюсах в любом случае?

Шаг 1. О часах

О часах
О часах
О часах
О часах

Созданные мной часы основаны на стандартном времени, которое никогда не отличается от всемирно признанных мировых часов, оно отображается в первой строке ЖК-дисплея 1602. Вторая строка - это та же шкала времени, но она показывает сдвиг в минутах от одного солнцестояния до следующего. От зимнего солнцестояния до летнего солнцестояния смещение увеличивается на одну минуту каждые три дня до максимум шестидесяти минут. От летнего солнцестояния до зимнего солнцестояния смещение уменьшается на одну минуту каждые три дня, пока стандартное время и время летнего времени не станут такими же.

В этом примере я использовал военное время (24-часовые часы) и стандартное время (12-часовые часы) AM и PM, чтобы помочь тем людям, которые не знакомы с 24-часовой шкалой времени, а также это дало мне место для отображения номера дня, когда летнее время набор из. Код можно изменить, чтобы отобразить 12-часовой формат времени. Я добавил три кнопки, подключенные к цифровым контактам 2, 3 и 4, чтобы настроить время. Эти кнопки увеличивают только секунды, минуты или часы. Кнопки не являются обязательными, часы по-прежнему будут работать нормально, если вы не подключите кнопки и не нужно изменять код. Я бы порекомендовал хотя бы использовать кнопку для настройки секунд, и если полная точность не может быть достигнута, держите часы на медленной стороне, кнопка увеличивает время на 1 секунду в секунду.

Если вы запустите часы из Arduino IDE, загрузка и загрузка скетча займет от 5,5 до 6 секунд, если скетч загружен в Arduino, затем подключите его к розетке или источнику питания, это займет около 2,5 секунд. 3 секунды для загрузки и запуска.

Когда вы наконец подготовите часы к работе, потребуется некоторая ручная настройка.

Эти часы не используют модуль RTC и не используют "delay ()"; команды.

Если вам нравится использовать RTC с Arduino, эту концепцию все еще можно использовать. RTC предоставит вам всю информацию, необходимую для добавления времени EDSC. Код может быть совершенно другим с модулем RTC, я не изучал его. Если вы это сделаете, вы в значительной степени сами по себе, но это отличный способ потренировать свой мозг.

Шаг 2: что вам понадобится

Что тебе понадобится
Что тебе понадобится
Что тебе понадобится
Что тебе понадобится
Что тебе понадобится
Что тебе понадобится

СПИСОК ПОКУПОК

1 Arduino Uno или Mega2569 (контакты I2C - это A4 и A5 на UNO и 20 и 21 на 2560 Mega)

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

1 ЖК-дисплей 1602 (цвет на ваш выбор)

Я использую рюкзак I2C с ЖК-дисплеем, мне его проще и быстрее настроить.

Провода перемычки

ДОПОЛНИТЕЛЬНЫЕ ПОСТАВКИ

1 макетная доска среднего размера

1-3 кнопки с мгновенным контактом

1-3 резистора 10 кОм

Это длинное руководство, поэтому я не собираюсь входить в монтажную или шкафную конструкцию, которую я использовал для отображения часов. Если вам нравится этот проект и вы хотите сделать его постоянную версию, оформляйте его по своему вкусу. Этот дизайн идеально подходит для меня, потому что в моем ящике для мусора было все необходимое, и мне нравится его внешний вид.

ПРИМЕЧАНИЯ:

Чтобы избежать провалов электричества, мои последние часы питаются от солнечной панели, которая у меня есть снаружи. Солнечная панель поддерживает 12-вольтную батарею заряженной с помощью регулятора, чтобы предотвратить перезарядку. Эта батарея подключается к Arduino через разъем питания рядом с USB-портом. Я оставляю USB-порт подключенным к сети, чтобы уменьшить расход заряда батареи. Оба источника питания можно использовать одновременно, не повредив Arduino. Аккумулятор на 12 вольт можно заряжать до 14,5 вольт, что слишком много для Arduino, поэтому я использую понижающий преобразователь, чтобы снизить напряжение питания от аккумулятора до диапазона от 9 до 12 вольт. Аккумулятор на 12 В, который я держу заряженным, прослужит 3 или 4 дня, если будет пасмурная погода. Регулятор, который я использую, отключит питание Arduino, если напряжение батареи упадет до 11 вольт. Батарея, которая у меня есть, поступает от системы аварийного освещения коммерческих зданий, ее размер примерно в четверть меньше автомобильного аккумулятора. Если вы собираетесь использовать автомобильный аккумулятор, храните его в хорошо проветриваемом помещении (снаружи), автомобильные аккумуляторы выделяют водород и кислород во время зарядки и разрядки, это взрывоопасная комбинация.

ПРЕДУПРЕЖДЕНИЕ

ХРАНИТЕ АККУМУЛЯТОР В ХОРОШЕМ УРОВНЕ

ВЕНТИЛЯЦИОННАЯ ПЛОЩАДЬ, ВНЕ

Шаг 3: Подключение

Проводка
Проводка

Я представил схему для всех соединений в этом проекте. Если вы используете макетную плату, вам понадобится плата среднего размера, переключателям потребуется место для разнесения, чтобы схема не сбивала с толку.

ЖК-дисплей 1602 имеет задний пакет I2C для простоты. Если вы используете соединения SPI, вам нужно будет найти, как его использовать, и изменить код в начале эскиза. Я никогда не использовал соединения SPI, поэтому контакты 2, 3 и 4 могут быть недоступны для трех кнопок.

Три кнопки используются для настройки времени на часах. Они только опережают время (ВПЕРЕДИ). В заключительных настройках держите часы в коде на медленной стороне (около 1-2 секунд в день или несколько дней), таким образом вы можете изменить время при необходимости. Каждая кнопка увеличивает время на один шаг в секунду, нижняя кнопка на 2 секунды в секунду, средняя кнопка на 1 минуту в секунду и верхняя кнопка на 1 час в секунду. Достаточно высокая степень точности должна быть достижима, поэтому вам не придется слишком часто ее настраивать.

Если вы настраиваете секунды, минуты или часы (например, если минуты увеличены на 58, 59, 00), час перейдет к следующему часу.

Эти три кнопки - последнее дополнение к часам, они работают хорошо, но может быть способ получше. Просто помните, что если вы запутаетесь с этой частью кода, то "delay ();" команда не может быть использована. Я использовал этот метод, потому что мне не нужно беспокоиться о дребезге переключателя и странных скачках с течением времени.

Шаг 4. Что показывает дисплей

Что показывает дисплей
Что показывает дисплей

Я поместил много информации о ЖК-дисплее 1602, которая требует пояснений:

Строка 1 или нулевая строка '0' при разговоре в коде показывает стандартное время. Слева находится «STD», это означает «STANDARD» время.

Далее в первой строке посередине указано ваше местное стандартное время. Не начинайте с летнего времени, часы покажут это во второй строке.

Эта шкала времени представляет собой 12-часовую шкалу, поэтому с правой стороны стоит «AM» или «PM», чтобы указать утро или после полудня.

Строка 2 или первая строка «1» при вводе кода показывает переход на летнее время, которое меняется в зависимости от дня в году. «Летнее время» слева означает «летнее время».

В середине второй строки указано ваше местное военное время в 24-часовом формате. Например, вы услышите, как это называется «ох, шестьсот часов».

Справа - день года, отсчитываемый от зимнего солнцестояния, в северном полушарии 21 декабря (приблизительно) - нулевой день "0", а в южном полушарии (приблизительно) 21 июня - нулевой день "0".

При первой настройке часов я предоставил два файла.pdf для справки. Выберите файл, который относится к полушарию, в котором вы живете.

Три кнопки справа увеличивают секунды, минуты и часы снизу вверх.

Шаг 5: Настройка эскиза

Настройка эскиза
Настройка эскиза

Есть несколько строк кода, которые необходимо настроить для первоначального запуска. Некоторые из этих линий необходимо изменять каждый раз, когда вы отключаете часы и меняете значения переменных в скетче. Если вы запустите часы для IDE, загрузка и запуск займет около 6 секунд. Если вы загрузите скетч из IDE, а затем отключите часы и перезапустите их от настенной бородавки или источника питания, скетч загрузится примерно через 2,5 секунды.

Строка 11: LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7);

Эта строка обращается к ЖК-дисплею и устанавливает правильный адрес задней панели I2C. 0x27 - это адрес любого из купленных мною рюкзаков. Если вы включаете часы, но данные не отображаются, но они светятся, вероятно, адрес на вашем ЖК-дисплее отличается. Я помещу ссылку ниже, чтобы описать, как изменить адрес вашего ЖК-рюкзака или найти адрес.

Строки 24 int minuteSt = 35;

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

Строки 25 int hourSt = 18;

Установите час на стандартное время (24-часовой формат). Начало в 18:00 будет час 18.

Строка 26 int DSTdays = 339;

Загрузите файл в формате pdf «Easy DST Clock Time Scale» (Северное или Южное полушарие), в котором вы живете, найдите дату и вставьте номер дня в эту строку. (Левая колонка). Пример (24 ноября - это день №339 в Северном полушарии и день №156 в Южном полушарии)

Строка 27 int DSTyear = 2019;

Введите текущий год.

Строка 92 if ((masterTime - previousMasterTimeSt> = 1000) && (microTime - previousMicroTimeSt> = 500)) {

«PreviousMasterTimeSt» необходимо сравнить с количеством миллисекунд, поэтому эту «1000» может потребоваться изменить на 999 в зависимости от внутренних часов платы Arduino, а затем отрегулировать previousMicroTime для точной настройки часов. Внутренние часы, хотя 16MH, имеют вариации от одной платы к другой.

«PreviousMicroTimeSt» точно настраивает внутренние часы, чтобы помочь отсчитывать с точностью до 1 секунды. Если часы слишком быстрые, увеличьте микросекунды, а если часы слишком медленные, уменьшите микросекунды и, если необходимо, уменьшите миллисекунды до 999, а затем запустите микросекунды примерно с 999, 990 или увеличьте скорость часов.

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

Шаг 6: Заключительные примечания

Заключительные примечания
Заключительные примечания

Этот проект легко построить, но концепция и необходимые корректировки в коде могут оказаться задачей, не торопитесь и подумайте, часы не истекают до конца 2037 года. Я буду внимательно следить за своими электронная почта для вопросов, так как я уверен, что они будут, я не литературный гений, поэтому некоторые из моих описаний могут быть немного нечеткими.

Включены два файла.pdf. Загрузите файл для полушария, в котором вы живете, этот файл предоставит вам необходимую информацию для точного запуска часов.

С информацией, обработанной в эскизе, будет легко отображать не только стандартное время и летнее время, но также день и дату на ЖК-дисплее 2004A. Если вам нравятся проблемы, которые предлагает этот проект, попробуйте подключить ЖК-дисплей 2004A, затем добавьте код для отображения дополнительной информации или, если проявится достаточный интерес, я сделаю еще один вариант этого проекта, включая эту дополнительную информацию.

Я пытался быть всеобъемлющим в этом проекте, но обнаружил три области в мире, о которых идет речь. Северный полюс, Южный полюс и экватор.

Летнее время необходимо или даже возможно на Северном или Южном полюсах?

Который час на Северном или Южном полюсе?

В каком направлении вы бы поехали, чтобы покинуть Северный полюс или Южный полюс?

В каком направлении вы отправитесь с Южного полюса в Австралию, Северную Америку, Европу или Азию?

В каком часовом поясе живет Санта?

Ему нужно DST?

Который вообще час на Северном полюсе?

В каком направлении едет Санта, чтобы доставить все свои подарки?

На какой широте действует летнее время?

Теперь об экваторе.

Можно ли использовать эти часы на экваторе?

Будут ли они использовать шкалу Северного или Южного полушария?

Каковы даты зимнего и летнего солнцестояния?

На какой широте действует летнее время?

Пингвинам нужно летнее время?

Вы думаете, что я странно задумываюсь над этими вопросами?

Всем счастливого строительства!

филе

Шаг 7. Другие ссылки

Это ссылка для определения или изменения адреса на рюкзаке I2C:

www.instructables.com/id/1602-2004-LCD-Adapter-Addressing/

PiotrS написал отличную инструкцию для аппаратных адресов I2C.

playground.arduino.cc/Main/I2cScanner

Эта ссылка просканирует ваше устройство I2C и вернет адрес

Рекомендуемые: