Александр! Насколько я понял, надо просто вращать двигатель со скоростью 1 оборот в минуту. Вы к нему прицепите секундную стрелку, и будет иллюзия механического секундомера.
Об электронике.Вы хотите использовать двигатель FL42STH-0406A. Думаю для такой задачи удачный выбор, требующий минимум дополнительных компонентов.
Двигатель FL42STH-0406A это:
униполярный двигатель;
рабочий ток фазы 0,4 А;
сопротивление обмоток 30 Ом;
индуктивность обмоток 25 мГн;
крутящий момент 3,17 кг см.
Подключить его к плате Ардуино можно с помощью 4 транзисторных ключей по схеме из
урока 28.
Если вы будете использовать транзисторы КТ829, то в схеме ничего не поменяется. Резисторы R1-R4 можно даже увеличить до 2 кОм.
Эти резисторы задают ток базы. Считаются так:
Определяется ток базы, как Iбазы = Iколлектора / H
21Э.
У вас ток коллектора 0,4 А. Получается, что Iбазы = 0,4 / 750 = 0,53 мА.
Ток базы определяется, как Iбазы = ( Uлог.1 – U
БЭ ) / Rбазы
Rбазы = ( Uлог.1 – U
БЭ ) / Iбазы = ( 5 – 1,2 ) / 0,53 = 7 кОм
Т.е. с вашим маломощным двигателем и с транзисторами, имеющими высокий коэффициент усиления 750, резисторы R1-R4 должны быть не больше 7 кОм. Я бы выбрал 1 кОм.
В вашем случае можно применить гораздо менее мощные транзисторы или использовать MOSFET транзисторв.
Программа часов для секундомера.Самый простой вариант – использовать библиотеку StepMotor из
урока 29.
Вот скетч.
Код: Выделить всё
// вращение двигателя со скоростью 1 оборот в минуту
#include <TimerOne.h>
#include <StepMotor.h>
StepMotor clockMotor(10, 11, 12, 13); // создаем объект типа StepMotor, задаем выводы для фаз
void setup() {
Timer1.initialize(150000); // инициализация таймера 1, период 150 мс
Timer1.attachInterrupt(timerInterrupt, 150000); // задаем обработчик прерываний
clockMotor.setMode(1, false); // полушаговый режим, без фиксации при остановке
clockMotor.setDivider(1); // делитель частоты 1
}
void loop() {
clockMotor.step(-200); // вращать по часовой стрелке
}
//-------------------------------------- обработчик прерывания 150 мс
void timerInterrupt() {
clockMotor.control(); // управление двигателем
}
У вас двигатель имеет 200 шагов на оборот. Для того, чтобы стрелка двигалась более плавно я включил полу шаговый режим. Получилось 400 шагов на оборот.
Время одного шага 60 сек / 400 шагов = 0,15 мс.
Я задал делитель равным 1.
Время переключения шагов определяется временем таймера 1 и задается в этих строчках
Код: Выделить всё
Timer1.initialize(150000); // инициализация таймера 1, период 150 мс
Timer1.attachInterrupt(timerInterrupt, 150000); // задаем обработчик прерываний
Вы можете изменить его в небольших пределах и добиться высокой точности часов.
Библиотеки есть в уроке 29 Ардуино.
Я не проверял работу программы с реальным двигателем. Я загрузил программу в Arduino Nano и убедился, что светодиод 13 мигает примерно с нужной частотой (светится примерно 0,3 сек). Я специально задал один вывод фазы на светодиод 13.
Можете изменить выводы. В будущем добавить светодиодный семи сегментный индикатор. Свободных выводов на плате осталось много.
Что-то будет не получаться напишите. Если получиться выложите фотографию.