Всем доброго времени суток! Возникла проблема. Есть двухколесная платформа, Arduino UNO, Troyaka и Motor Shields, дальномер Sharp (10 - 80 см). Проблема в том, что робота во время езды подкашивает вправо, но непонятно почему. Могу выложить скетч или видео Заранее спасибо!
Вот код: Код (Text): //Подключаем все пины #define SPEED_LEFT 6 #define SPEED_RIGHT 5 #define DIR_LEFT 7 #define DIR_RIGHT 4 #define SENSOR_PIN A5 void go(int speed, bool reverseLeft, bool reverseRight, int duration) { analogWrite(SPEED_LEFT, speed); analogWrite(SPEED_RIGHT, speed); digitalWrite(DIR_LEFT, reverseLeft ? LOW : HIGH); digitalWrite(DIR_RIGHT, reverseRight ? LOW : HIGH); delay(duration); } void setup() { Serial.begin(9600); for(int i = 5; i <= 8; i++) pinMode(i, OUTPUT); } void loop() { int val = analogRead(SENSOR_PIN); //читаем значение с сенсора if (val > '200') { go(125, true, false, 10000); //если значение больше 200 то разворот, пока значение не станет меньше 200 } else { go(150, false, false, 10000); //иначе едем вперед } }
Отклониться от прямолинейного движения платформа может либо из-за разной скорости вращения колес или из-за различной степени механического сцепления с поверхностью, по которой она перемещается. Если дело в различной скорости вращения (т.е. в скетче она одинаковая, а в реальности - разная), то, чтобы компенсировать отклонение, нужно измерить фактическую скорость вращения колеса и скорректировать задаваемую в скетче скорость. Сделать это можно каким либо датчиком оборотов, в качестве которого может выступать датчик угла (положения вала/колеса). Поскольку готовые датчики не дешевы и стоят как сама платформа, скорее всего придется импровизировать и собирать датчик оборотов из подручных деталей.
1) Какие нужны детали? 2) Может попробуем обойтись без датчика угла и методом проб и ошибок подогнать скорость одного из колес под нужно значение?
Ну можете и так, конечно, попробовать - откалибровать платформу подгонкой балансировочных коэффициентов на скорости. Дешево и сердито. Если статическая корректировка не поможет, тогда будем думать про датчики.
Любое транспортное средство, если оно не по рельсам едет, требует подруливания. Введение поправочных коэффициентов, обязательно. Это на стадии калибровки платформы. Для калибровки нужна большая ровная поверхность с постоянным коэффициентом сцепления, например ламинат на полу, желательно горизонтальный, что в наших домах увы не всегда. Энкодеры сильно облегчают жизнь при калибровке, не отменяя её, но никак не помогают в реальной жизни, польза от них есть, но в последствии вы всё равно придёте к тому, что питать моторы нужно ещё и стабилизированным напряжением. Дело в том, что моторы, которыми мы располагаем, имеют нелинейную зависимость скорости вращения от напряжения на них поданного и у всех экземпляров моторов эта зависимость разная. Что на практике означает, что по мере посадки вашего аккумулятора, мотор-редуктор который крутится “туже” будет крутиться медленней. Научив ваше детище ходить боле или менее прямо, вы получите платформу, которая управляется легче, но не легко. В реальной жизни поверхности, не бывают ровными, а сцепление с этой поверхностью постоянным. Датчики ускорения и гироскопы наше всё! Надо всегда следить за углом поворота, независимо едем мы по прямой или поворачиваем. Я раньше про это знал, но за лето хорошо прочувствовал на практике собственным вестибулярным аппаратом