Índice:

Controle posicional angular do motor de passo 28BYJ-48 com Arduino e joystick analógico: 3 etapas
Controle posicional angular do motor de passo 28BYJ-48 com Arduino e joystick analógico: 3 etapas

Vídeo: Controle posicional angular do motor de passo 28BYJ-48 com Arduino e joystick analógico: 3 etapas

Vídeo: Controle posicional angular do motor de passo 28BYJ-48 com Arduino e joystick analógico: 3 etapas
Vídeo: Motor de Passo Video aula 2024, Novembro
Anonim
Controle posicional angular do motor de passo 28BYJ-48 com Arduino e joystick analógico
Controle posicional angular do motor de passo 28BYJ-48 com Arduino e joystick analógico

Este é um esquema de controle para o motor de passo 28BYJ-48 que desenvolvi para usar como parte do meu projeto de dissertação do último ano. Nunca vi isso ser feito antes, então pensei em fazer o upload do que descobri. Espero que isso ajude alguém por aí!

O código basicamente permite que um motor de passo "copie" a posição angular de um joystick analógico, ou seja, se você empurrar o joystick para frente, o motor aponta para o "norte". empurre o joystick para o oeste, o motor gira para apontar na mesma direção.

Para minha implementação, exigi que se o joystick fosse solto, ou seja, não tivesse uma posição angular, o motor retornasse à direção "inicial". A direção inicial está voltada para o leste, e o motor (ou pelo menos qualquer ponteiro / dispositivo que você conectou ao eixo de saída!) Também deve estar voltado para esta direção quando ligado.

Suprimentos

Arduino Uno ou similar

placa de ensaio e seleção de fios de ligação (macho para macho, macho para fêmea)

Fonte de alimentação 5V

Módulo de joystick analógico (de preferência com um recurso de botão momentâneo, isso facilita o descanso da posição "inicial"

Motor de passo 28BYJ-48 e driver de passo ULN2003

Caneta, papel e blu-tac (ou qualquer outro dispositivo apontador para anexar ao motor!)

Etapa 1: Etapa 1: configuração

Conecte o motor de passo ao driver de passo e conecte os pinos da seguinte forma:

IN1 - Arduino pino 8

IN2 - Arduino pino 9

IN3 - Arduino pino 10

IN4 - Arduino pino 11

Conecte sua fonte de alimentação de 5 V aos trilhos de alimentação em sua placa de ensaio e conecte as entradas de 5 V ULN2003 aos trilhos de alimentação. conecte o trilho de aterramento ao solo em seu Arduino.

para o joystick, conecte da seguinte maneira:

Pino do interruptor - pino 2 do Arduino

Eixo X - Arduino A0 (analógico em 0)

Eixo Y - Arduino A1

+ 5V - saída Arduino 5V

GND - Arduino GND

Por fim, conecte o aterramento de sua placa de ensaio ao outro pino GND do Arduino

Etapa 2: Etapa 2: Explicar o Código

Incluí o código Arduino completo para você baixar e usar. Mas farei o meu melhor para explicar as partes pertinentes aqui.

A teoria por trás desse código é que o espaço ocupado pelo joystick é dividido em um gráfico, com 0, 0 no centro. no entanto, as entradas do joystick ficam em (aproximadamente) 512 no centro, então para superar essas duas funções são usadas para "zerar" o valor lido nos eixos X e Y. dependendo da fonte de alimentação que você usa, pode ser necessário alterar os valores nas funções ZeroX e ZeroY para que seu joystick forneça uma leitura confiável de 0 quando em repouso.

Quando os valores X, Y são lidos, eles são primeiro convertidos em radianos usando a função atan2 () na biblioteca math.h. Explicar esta função está fora do escopo deste instrutível, mas por favor, vá procurar - é um truque de geometria bastante simples!

Finalmente, para tornar a vida mais fácil para aqueles de nós que costumavam trabalhar em graus em vez de rads, o valor de rad calculado por atan2 () é convertido em graus.

No topo do loop está um pequeno trecho de código que permite clicar no botão momentâneo do joystick para mover a localização "inicial". Isso foi extremamente útil durante o teste do código, mas deixei-o como posso ver como pode ser útil em alguns casos.

Agora, para a parte principal do código! começamos lendo as coordenadas X, Y do joystick separadas por um atraso de 10 ms e, em seguida, verificando se elas são as mesmas - descobri que o joystick ocasionalmente produzia leituras esporádicas e este ligeiro atraso foi suficiente para parar o motor girando com base nelas. Também é um atraso curto o suficiente para não interferir nas entradas intencionais.

O resto do código é bastante autoexplicativo e fiz o meu melhor para documentá-lo; Uma série de declarações IF compara o ângulo atual do joystick com o ângulo do motor e move o motor para esse ângulo. O 28BYJ-48 tem 5,689 passos por grau, então é por isso que multiplicamos o movimento necessário por este número aparentemente ímpar!

A única parte do código que requer mais explicações é o que chamei de "caso envolvente". No caso em que o joystick e o motor estavam, por exemplo, + 175 °, e o joystick subseqüentemente movido para -175 ° (um movimento de apenas 10 ° no joystick, do norte do oeste para o sul do oeste), o motor se moveria NA DIREÇÃO ERRADA em 350 °! para dar conta disso, o caso especial foi escrito.

A caixa envolvente começa verificando se o motor e o joystick têm sinais opostos, ou seja, o motor é positivo e o joystick negativo, ou vice-versa. Ele também verifica se a soma dos absolutos (ou seja, valores positivos) do joystick e do motor estão acima de 180 °.

Se ambas as afirmações forem verdadeiras, a função verifica se o motor precisa se mover no sentido horário (o valor do motor é negativo) ou no sentido anti-horário (se o valor do motor for positivo).

Os valores absolutos do ângulo do motor e do ângulo do joystick são somados e subtraídos de 360 ° para determinar a distância a ser movida. Finalmente, o ângulo do motor (que agora reflete o ângulo do joystick) é atualizado como tal.

Etapa 3: CONCLUÍDO

Então, tudo o que resta a fazer é fazer o upload do código para o seu Arduino e executá-lo! Veja o vídeo acima para uma boa ideia de como o projeto funciona. Isso seria útil para gimbais de câmera, braços robóticos e muitos outros aplicativos!

Se você usar o código, por favor me avise, e se você vir algum onde o código pode ser melhorado, eu adoraria ouvir seus comentários.

Recomendado: