Classe+DoubleStepper

Home > Robótica > Bibliotecas **Recursos** > RunTimer > Timer2 > CircularBuffer > SerialLog > ActionPlan **Dispositivos** > Ultrassom > Array de sensores > NRF24L01 > Wireless log > RF24Control **Movimento** > StepperMotor > StepperMotorTm > **DoubleStepper** > DoubleStepperTm

Esta é a classe ancestral de uma hierarquia de classes que foram feitas para controlar os movimentos do robô usando dois motores de passo. A classe assume que existem dois motores de passo de 4 fases instalados em configuração diferencial. Também é assumido que os dois motores têm a mesma quantidade de passos por volta. Não faz diferença se os motores são bipolares ou unipolares. A classe controla os dois motores mantendo a sincronia entre eles para produzir diversos tipos de movimentos. Neste nível ainda não há controle de tempo dos pulsos para os motores, isso é implementado na classe seguinte (**//DoubleStepperTm//**). Não recomendo o uso direto desta classe, a não ser que queira criar uma nova hierarquia de classes baseado nela. No entanto, é importante entender seu funcionamento para poder usar as classes seguintes.

Seu funcionamento é muito parecido com o da classe **//StepperMotor//**, a diferença é que esta controla dois motores de passo e a combinação de movimentos dos dois motores (sentido horário, anti-horário ou parado) produz uma variedade de movimentos para o robô. Os movimentos possíveis estão declarados em defines no arquivo //doubleStepper.h// e são os seguintes:
 * **mvAhead**: para frente.
 * **mvBack**: para trás.
 * **mvSpinL**: giro à esquerda. O robô continua na mesma posição, mas muda sua orientação.
 * **mvSpinR**: giro à direita.
 * **mvTurnL**: Curva fechada à esquerda. A roda direita fica travada na mesma posição e a esquerda se move para frente. Como resultado o robô começa a descrever um círculo em volta da roda direita.
 * **mvTurnR**: Curva fechada à direita.
 * **mvBkTurnL**: Curva reversa à esquerda. É o mesmo movimento de mvTurnL, só que em vez da roda esquerda andar pra frente, ela anda para trás.
 * **mvBkTurnR**: Curva reversa à direita.
 * **mvCurveL**: Curva aberta à esquerda. As duas rodas andam para frente, mas a roda direita anda na metade de velocidade que a esquerda. O resultado é uma curva à esquerda.
 * **mvCurveR**: Curva aberta à direita.
 * **mvBrake**: As duas rodas ficam travadas na mesma posição. Como as bobinas ficam ativadas, o robô mantém sua posição mesmo que esteja em um declive.

Abaixo a declaração pública da classe:

code format="java5" class DoubleStepper { public: DoubleStepper; void initLeftMotor(int mPin_1, int mPin_2, int mPin_3, int mPin_4); void initRightMotor(int mPin_1, int mPin_2, int mPin_3, int mPin_4); void turboOn;          // ativa o modo turbo (duplo torque) void turboOff;         // desliga o modo turbo void halfStepOn;       // ativa o modo meio-passo void halfStepOff;      // desliga o modo meio-passo void motorOff;         // desliga as bobinas boolean halfStep;      // informa se o modo meio-passo está ativo void nextStep(char movType); // move um passo nos motores };

code

Para usar, crie uma instância da classe e dentro do **//setup//** chame os métodos **//initLeftMotor//** e **//initRightMotor//** para informar os pinos de controle dos dois motores. A seguir selecione o modo de operação: passo completo (padrão), meio-passo ou turbo. Depois dentro da função **//loop//** chame o método // **nextStep** // para mover o motor um passo informando o movimento desejado.