Гироскоп IXZ500
- Войдите на сайт для отправки комментариев
Всем доброго времени суток. Сейчас тестирую недавно приобретённый гироскоп IXZ500 и столкнлся с проблемой.
После запуска, градус автоматически увеличивается пока не достигнет 360 (т.к. задал ограничение с -360 до 360). После того как достигнет 360, опять вовращается к 0 и возрастает опять. В тоже время, когда позиция гироскопа меняется он отображает это, но после остановки опять начинает автоматически возрастать.
Думал, что ошибка в коде, переписал заного, получил тот же результат, по правде сказать уже не знаю, что делать. Код который использую на данный момент:
float gyroVoltage = 5; float gyroZeroVoltage = 1.35; // взято из datasheet float gyroSensitivity = 0.002; // datasheet float rotationThreshold = 1; float readError = (gyroVoltage/1023)*2; float currentAngle = 0; unsigned long time; void setup() { Serial.begin(9600); time = micros(); } unsigned long time2; long loopNumber = 0; void loop() { time2 = micros(); loopNumber++; int gyroValue = analogRead(0); float gyroActualVoltage = (gyroValue * gyroVoltage) / 1023; float gyroActualZero = gyroActualVoltage - gyroZeroVoltage; if (gyroActualZero <= readError && gyroActualZero >= -readError) { gyroActualZero = 0; } float gyroRate = gyroActualZero / gyroSensitivity; float gyroRateTime = 0; if (gyroRate >= rotationThreshold || gyroRate <= -rotationThreshold) { gyroRateTime = gyroRate/( 1000000.0/(time2-time) ); currentAngle += gyroRateTime; } if (currentAngle < 0) currentAngle += 360; else if (currentAngle > 359) currentAngle -= 360; if (time2-time> 1000000L) { Serial.println(currentAngle, 10); loopNumber = 0; time = micros(); } delay (100); }
Соединён он - 5V - VCC; x-out - analog Pin 0; GND - GND. стараюсь пока с одной осью работать.
Господа, прошу помощи, и советов от чего такое может быть. Это мой первый опыт с гироскопом. Так же на данный момент не могу сделать скрин, но добавлю уже завтра.
Попробуйте снизить чувствительность
и(или) увеличить ошибку
Это то, о чем писалось выше (едиственное идет уменьшение, а не увеличение). Пробовал поменять значения, как Вы и сказали, но результат тот же. Единственное, теперь разница в уменьшении меньше между числами.
Так же заметил, если убрать ограничение
то счет будет идти с минуса -
-11.2332
-15.2344
...
-350.4422
-infinity
П.С. стараюсь понять, почему всё время возрастает в ту или иную сторону, а не стоит на месте.
Так а readError вы пробовали менять?
пробовал. резултат тотже
в ходе теста, нашел что
в этой части кода, после подсчета gyroRate результат в принципе приемлеммый - реакция на гироскоп в ту или иною сторону очень хорошая, т.е. почему-то действует так, как нужно для градуса.
однако, тестируя строки дальше, обнаружил что
-как раз так и вызывает какой-то "сбой" и подсчет идет с 0 до 360 или с 360 до 0.
У вас по какойто причине не устанавливается 0, попробуйте еще поиграться переменной gyroZeroVoltage.
maksim
Спасибо за советы, нашел и исправил пару недочетов и ошибок в коде. Так же сменил значение zeroVoltage, для более точного ответа. Всё работает как часы.
Не раз видел, как при помощи софта смотрели изменения в поведении гироскопа/акселерометра. Интересует вопрос какое ПО использовалось, или может еще какие внешние приборы подключались?