Вращение шагового двигателя через потенциометр.
- Войдите на сайт для отправки комментариев
Всем привет! Данный вопрос много где поднимался, а решения так и не нашёл. В ардуино новичок.
Имеется шаговый двигатель 28byj-48, нужно чтобы при вращении потенциометра поворачивался шаговый двигатель в определенную сторону.
Методом проб и ошибок, и в поисках на этом форуме, сделал скетч. Программа опрашивала значение потенциометра, усредняло значение, и вращала шаговик на заданное кол-во шагов. Но проблема в том, что работало не стабильно, не было плавности хода, а было скачками.
Сразу говорю, это делает для камеры, управление фокусировкой объектива. серво привод хорошая вещь, и уже это опробовал, но от нее очень сильный шум, который не уместен в записи звука.
Может кто сталкивался, и может ли подсказать как это огранизовать...
И где ваш скетч?
Он работал не так как хотелось, я его и не сохранял. Сейчас напишу по новой, и прикреплю
И где ваш скетч?
Примерно так было
#include <TinyStepper_28BYJ_48.h> const int MOTOR_IN1_PIN = 8; const int MOTOR_IN2_PIN = 9; const int MOTOR_IN3_PIN = 10; const int MOTOR_IN4_PIN = 11; #define analogInPin A0 // потенциометр const byte averageFactor = 10; // коэффициент сглаживания показаний (0 = не сглаживать) // чем выше, тем больше "инерционность" int sensorValue = 0; // считанное значение const int STEPS_PER_REVOLUTION = 2048; TinyStepper_28BYJ_48 stepper; void setup() { stepper.connectToPins(MOTOR_IN1_PIN, MOTOR_IN2_PIN, MOTOR_IN3_PIN, MOTOR_IN4_PIN); } void loop() { int newSensorValue = analogRead(A5); if (averageFactor > 0) // усреднение показаний для устранения "скачков" { sensorValue = (sensorValue * (averageFactor - 1) + newSensorValue) / averageFactor; // <новое среднее> = (<старое среднее>*4 + <текущее значение>) / 5 я тут немного поправил } else { sensorValue=newSensorValue; // не делаем усреднений, что прочитали то и считаем выводом } stepper.setSpeedInStepsPerSecond(500); stepper.setAccelerationInStepsPerSecondPerSecond(500); stepper.moveToPositionInSteps(sensorValue); }Вроде всё ОК, грубых ошибок нет. В Serial Plotter повыводите sensorValue, увидите как он себя ведёт.
Вроде всё ОК, грубых ошибок нет. В Serial Plotter повыводите sensorValue, увидите как он себя ведёт.
Выводил, значения сильно лагают (если обычно они моментально обновляются, то сейчас половина пропусков, половина с задержкой с разной), скорость шаговика падает на много.
В лупе функции мотора уберите временно.
moveToPositionInSteps(), поди, блокирующая и, пока мотор шагает на позицию, вы накручиваете потенциометр. Так и получается, что скачок происходит.