заморочился изготовлением спидометра и одометром для автомобиля....в програмировании не особо разбираюсь, поэтому начал разбираться с ардуино...
с одометром проблем не выявил пока( немного исправил исходный код от Алекса, чтобы была индикация одометра и суточного пробега), а вот со стрелкой спидометра пока вопрос открыт: в качестве привода использую шаговый привод с двумя обмотками из донорского щитка приборов.
пока суть проблемы в том, чтобы задать крайние положения приводу и инвертировать скорость в нужное положение стрелки...
что посоветуете? может проще заказать сервопривод аналогичный использованному в примере( но с большим диапазоном работы...180 градусов для моей шкалы мало)?
приводом управляю через библиотеку Stepper
в приводе есть внутренние упоры, поэтому нижнее положение решил брать от упора и при запуске скетча делать 2 шага в сторону упора( на случай, если стрелка сбита), а далее посчитал сколько шагов умещается в моей шкале( вышло около 400)...так как шкала у меня отображает 180 км/ч, то один км = 2,22шага привода. был написан следующий код:
void loop() {
int ST=ceil(SPEED*2.22-pos); //дэльта расчетного и факт положения
int pos=ceil(SPEED*2.22); //факт позиция стрелки
servo.step(-ST); //повернуть серву с учетом дэльты
if ((millis()-lastturn)>1000){ //если сигнала нет больше 2 секунды
SPEED=0; //считаем что SPEED 0
servo.step(pos);
только работает не стабильно ( пока на столе все тестирую): не всегда в исходную точку возвращается( при удержании скорости стрелка уходит из рассчетного положения вперед и, естественно, смещается относительно исходного положения)
с одометром проблем не выявил пока( немного исправил исходный код от Алекса, чтобы была индикация одометра и суточного пробега), а вот со стрелкой спидометра пока вопрос открыт: в качестве привода использую шаговый привод с двумя обмотками из донорского щитка приборов.
пока суть проблемы в том, чтобы задать крайние положения приводу и инвертировать скорость в нужное положение стрелки...
что посоветуете? может проще заказать сервопривод аналогичный использованному в примере( но с большим диапазоном работы...180 градусов для моей шкалы мало)?
приводом управляю через библиотеку Stepper
в приводе есть внутренние упоры, поэтому нижнее положение решил брать от упора и при запуске скетча делать 2 шага в сторону упора( на случай, если стрелка сбита), а далее посчитал сколько шагов умещается в моей шкале( вышло около 400)...так как шкала у меня отображает 180 км/ч, то один км = 2,22шага привода. был написан следующий код:
void loop() {
int ST=ceil(SPEED*2.22-pos); //дэльта расчетного и факт положения
int pos=ceil(SPEED*2.22); //факт позиция стрелки
servo.step(-ST); //повернуть серву с учетом дэльты
if ((millis()-lastturn)>1000){ //если сигнала нет больше 2 секунды
SPEED=0; //считаем что SPEED 0
servo.step(pos);
только работает не стабильно ( пока на столе все тестирую): не всегда в исходную точку возвращается( при удержании скорости стрелка уходит из рассчетного положения вперед и, естественно, смещается относительно исходного положения)
Изменено: