Ручнаяя мастерская

Программная реализация стрелочных часов на Arduino


Реализовать программно стрелочные часы — задание, которое часто дают школьникам на уроке информатики. Так преподаватель убеждается, что ученик хорошо знает не только изучаемый язык программирования, но и тригонометрию. Но тот компьютер, на котором школьник решает эту задачу, слишком мощен для неё, даже если это древний 386-й, не говоря уж о современных. Со всей задействованной там математикой справится и Arduino — так решил автор Instructables под ником thescientistformerlyknownasNaegeli. Вот он берёт Arduino Pro Mini на 3,3 В, однобитный дисплей для телефона Nokia 5110, модуль часов реального времени на микросхеме DS3231, аккумулятор и контроллер заряда, различные принадлежности:

Программная реализация стрелочных часов на ArduinoПрограммная реализация стрелочных часов на Arduino
Всё это он собирает по такой схеме:

Программная реализация стрелочных часов на Arduino
И вот что у него получается:

Программная реализация стрелочных часов на Arduino
Но в сборке здесь нет ничего сложного. Самое интересное — математика, за которую мастер и берётся. Далее он показывает направление координат на дисплее:

Программная реализация стрелочных часов на Arduino
Усложняя себе задачу, мастер реализует стрелки, более сложные, чем отрезки прямых, школьники на уроках информатики до такого усложнения доходят редко, а потом, когда вырастают — навёрстывают.

Программная реализация стрелочных часов на Arduino
Мастер останавливается на наиболее сложном варианте, где стрелка состоит из четырёх точек, и показывает формулы для расчёта координат этих точек на примере двух времён: 9:25 и 2:05.

Программная реализация стрелочных часов на Arduino
Угол наклона минутной стрелки в градусах рассчитать просто: достаточно умножить число минут на 6. Только сам угол откладывать по часовой стрелке, а не против, как это обычно делают. Для часовой стрелки угол рассчитать сложнее, если учесть, что она не перепрыгивает с деления на деление, а перемещается между ними плавно:

угол = (часы x 30°) + (минуты x 0.5°)

Ну и направление координат на дисплее тоже нужно учитывать, кстати, в школьных DOSовских Бейсиках оно тоже отличается от того, которым пользуются математики. Но поскольку стрелки будут четырёхточечными, далее математика пускается в ход несколько более сложная.

Программная реализация стрелочных часов на ArduinoПрограммная реализация стрелочных часов на ArduinoПрограммная реализация стрелочных часов на ArduinoПрограммная реализация стрелочных часов на Arduino
Профессиональная деформация программиста — штука сильная, она может даже заставить человека программировать на пляже вместо отдыха:

Программная реализация стрелочных часов на Arduino
Но вот скетч готов, мастер выкладывает его сюда. После скачивания нужно сменить расширение файла с unknown на ino.

Ну а поскольку при повторении конструкции вы вряд ли будете прорабатывать всю математику заново, хорошо бы изготовить своими руками, со своей математикой (учёт толщины стенок, и так далее), хотя бы корпус, например, из фанеры или оргстекла, а не брать готовый или 3D-печатный.

Часы, повторённые участником Instructables под ником rescueseven:

Программная реализация стрелочных часов на Arduino

Присоединяйтесь!

Не стесняйся, общайся. Мы любим встречать интересных людей и заводить новых друзей.