por fernando koyanagi 1 - animoby games...leitura_comando – armazena o valor da posição alvo...

38
Por Fernando Koyanagi 1

Upload: dinhnhan

Post on 20-Jan-2019

212 views

Category:

Documents


0 download

TRANSCRIPT

Por Fernando Koyanagi 1

Motor de passo como servo com comunicação serial

2

Características principais

Permite comandos através da comunicação serial.

Flexibilidade nas configurações do software, permitindo

formas de controle variadas.

Flexibilidade na montagem de hardware, permitindo

variações de motores, drivers e sensores.

Retorno da informação de posição real através da leitura do

sensor.

3

Montagem . . .

Continuaremos utilizando a mesma montagem anterior. Mas

deixaremos somente o potenciômetro de leitura do eixo.

4

Montagem . . . O potenciômetro continuará funcionando como um sensor da posição atual do eixo. Para isso vamos prender o eixo do motor ao manípulo do potenciômetro.

5

Montagem . . .

Conectaremos o potenciômetro a

entrada analógica A0.

6

• O EIXO conectaremos

ao pino A0 (fio roxo).

• A alimentação de 5V

(fio verde).

• A referência GND (fio

preto).

MAS ATENÇÃO !!!

Antes de prender o potenciômetro sensor ao

eixo, teste a montagem para verificar se a

rotação está ocorrendo no sentido correto, ou

seja, ao comandar um aumento de posição o

motor deve girar no sentido de aumentar o

potenciômetro sensor.

Se a rotação estiver ocorrendo ao contrário,

simplesmente inverta a polarização do

potenciômetro.

Como o torque do motor de passo costuma ser

alto, ele pode danificar o potenciômetro sensor

tentando levá-lo para uma posição que não pode

ser alcançada.

7

Montagem do circuito

ARDUINO, REGULADOR E

MOTOR

FIO Módulo L298

Pino 2 - Arduino AZUL In_1

Pino 3 - Arduino AZUL In_2

Pino 4 - Arduino LARANJA In_3

Pino 5 - Arduino LARANJA In_4

GND - Arduino PRETO GND

Saída do Regulador AMARELO +12V

GND do Regulador PRETO GND

A+ VERMELHO Motor A

A- PRETO Motor A

B+ VERMELHO Motor B

B- PRETO Motor B

Conexões

8

Entendendo o programa ( Declarações )

9

Código – Fonte do Arduino

Declarações Globais:

(constantes)

Começamos definindo constantes que

representarão os pinos D2, D3, D4 e D5 do

Arduino. Estes pinos serão os

responsáveis pela transmissão da

sequencia de acionamento para o driver.

A constante EIXO refere-se ao pino A0

utilizado pelo potenciômetro sensor. 10

Código – Fonte do Arduino

Declarações Globais:

(Variáveis)

Agora veremos que temos novas variáveis para o controle do Servo Motor de Passo.

inc_dec – Armazena o incremento/decremento da posição.

retardo_entre_os_passos – define o retardo para mudança de passo.

tolerancia – define a precisão do ajuste da posição.

leitura_comando – armazena o valor da posição alvo recebida pelo comando.

leitura_eixo – armazena o valor da posição atual do eixo.

passo – armazena o passo atual da sequencia de passos.

limite_inferior – armazena o valor usado para definir a posição mínima de ajuste.

limite_superior – armazena o valor usado para definir a posição máxima de ajuste.

comando_recebido – armazena o comando recebido pela serial.

recepcao_completa – sinaliza se a recepção do dado foi completada. 11

Entendendo o programa ( Setup )

12

Código – Fonte do Arduino

Setup()

Na função setup(), ajustamos os pinos digitais como saídas, o pino analógico como entrada. Então iniciamos a função Serial. Para a recepção reservamos 200 bytes para o comando recebido (mais que suficiente).

Lemos a posição inicial do eixo e executamos uma função que envia pela serial uma mensagem de configurações atuais e lista de comandos para o usuário.

13

Entendendo o programa ( mensagem )

14

Código – Fonte do Arduino

A função mensagem é uma série de “prints”,

enviados pela serial para tornar mais amigável a

manipulação do programa. Servindo de orientação.

Ela ainda faz uma chamada à função interpretadora

de comando solicitando uma leitura dos valores

das variáveis. Veremos essa função mais a frente.

15

Observação:

A função mensagem é

opcional e pode ser

removida do programa, uma

vez que o usuário já esteja

acostumado com a lista de

comandos.

Código – Fonte do Arduino Exemplo da mensagem enviada - Informações e Comandos

16

Entendendo o programa ( Loop)

17

Código – Fonte do Arduino

Loop():

Na função loop(), lemos novamente a posição atual do eixo e em seguida verificamos se existe alguma recepção completa de dados, usando a variável sinalizadora recepcao_completa. Se esta variável for verdadeira, passamos o controle do programa para a função interpretadora do comando. Se não houver repetimos o mesmo processo de ajuste que fizemos antes utilizando o valor contido na variável leitura_comando como alvo de ajuste e tolerancia como determinante da precisão do ajuste.

18

Código – Fonte do Arduino

Relembrando, para o cálculo da posição alvo

incluímos um valor que indica a tolerância do

posicionamento. Isso nos permitirá lidar com

ruídos na leitura simplesmente aumentando a

faixa alvo.

19

Tolerância total

Valor alvo

(+) “tolerancia” (-) “tolerancia”

Entendendo o programa (girar)

20

Código – Fonte do Arduino

21

girar (int direcao):

A função girar receberá um parâmetro que indicará para qual lado o motor deverá girar.

Este parâmetro é enviado pela avaliação dos valores que ocorre no loop, como vimos a pouco.

O valor do parâmetro “direcao” determinará se o passo deve ser incrementado ou decrementado.

Criamos essa função separadamente somente para ilustrar melhor o funcionamento do programa. Poderíamos ter incluído este código diretamente na avaliação que ocorre no loop.

A função girar funciona da mesma

forma que vimos anteriormente.

Entendendo o programa (ajustar_passo)

22

Código – Fonte do Arduino

23

ajustar_passo(int bobina):

A função ajustar_passo já é conhecida da montagem do vídeo anterior.

É ela que efetivamente ativa ou desativa os pinos de controle do arduino para acionar o driver e consequentemente promover a polarização correta das bobinas do motor.

Assim, ela é responsável por executar os passos determinados pelas avaliações das funções anteriores.

Bem como a função ajustar_passo, que a ativa as bobinas na

sequencia correta.

Entendendo o programa (serialEvent)

24

Código – Fonte do Arduino

25

A função serialEvent() é uma função do Arduino que dispara automaticamente sempre que um dado é recebido pela serial.

Note que não precisamos explicitar nenhuma chamada para esta função pois, uma vez que um dado é recebido, o fluxo do programa é interrompido e esta função é chamada para manipular os dados recebidos.

Fazemos isso verificando se há bytes no buffer de recepção serial do Arduino usando a função Serial.available(). Enquanto houver, armazenamos cada byte na variável caracter e adicionamos à variável comando_recebido até que um caractere de nova linha seja recebido, sinalizando o fim do comando ou até que se esgotem os bytes do buffer de recepção.

Entendendo o programa

( Interpretador de comandos )

26

Cascata de ‘if’. . .

Código – Fonte do Arduino

27

A função interpretadora de comandos é uma coleção de verificações da primeira letra do comando recebido. Cada letra representa um comando e os dados seguintes servirão de argumentos para este comando, isso se houver.

O primeiro comando é o comando “L” que executa uma leitura de todas as variáveis de controle e as envia para o usuários através da serial.

Interpretador de comandos – Comando “L”

Código – Fonte do Arduino

28

O comando “T” lê o restante dos bytes da variável comando, após a primeira letra e usa estes valores para ajustar o valor da variável tolerancia.

Note que usamos o método .substring para cortar da segunda posição (a contagem das posições das strings começam em zero), até o comprimento total da variável comando. Para obter o comprimento usamos o método .length().

Por fim, usamos ainda o método .toInt() para converter este valor em um inteiro.

Interpretador de comandos – Comando “T”

Código – Fonte do Arduino

29

O comando “R” é responsável pelo ajuste da variável retardo_entre_os_passos. Este retardo é importante para controlar a rapidez do movimento. Ela substituiu a variável velocidade que utilizamos antes (somente mudamos o nome).

O argumento para esse comando é capturado da mesma forma que o comando anterior.

Depois de recebido o valor, ele é verificado. O valor deste retardo não pode ser muito pequeno porque faria o motor pular passos. No nosso caso, o limite é 3 milissegundos.

Interpretador de comandos – Comando “R”

Código – Fonte do Arduino

30

Os comando “I” e “S” servem

para ajustar o valor das

variáveis que controlam os

limites do movimento do servo.

Sendo “I” paro limite inferior e

“S” para o limite superior.

A recepção dos valores ocorre

praticamente da mesma forma

que os casos anteriores.

Interpretador de comandos – Comandos “I” e “S”

Código – Fonte do Arduino

31

O comando “M” calcula o valor da posição MÉDIA entre os limites

SUPERIOR e INFERIOR e atribui este valor a variável

leitura_comando, tornando-se assim o alvo do ajuste.

Após o comando “M” o servo sempre se posicionará na posição

intermediária, entre a posição máxima e mínima ajustadas

Interpretador de comandos – Comando “M”

Código – Fonte do Arduino

32

Os comandos “+” e “-” incrementam e

decrementam, respectivamente, a

posição do servo, em passos definidos

pelo valor da variável inc_dec.

O valor desta variável pode ser

ajustado como um argumento destes

dois comandos.

Uma vez ajustada, não é necessário

que se envie novamente o valor do

incremento ou decremento, a menos

que o intuito seja realmente altera-la.

Interpretador de comandos – Comandos “+” e “-”

Código – Fonte do Arduino

33

O comando “A” é responsável pelo o AJUSTE da posição do servo. A

nova posição é o argumento deste comando. Se o argumento for

omitido, será considerado zero e o servo moverá para a posição

mínima.

Interpretador de comandos – Comando “A”

Novo suporte para NEMA 17 . . .

34

Novo suporte para NEMA 17 . . .

35

Novo suporte para NEMA 17 . . .

Arquivo STL para impressora 3D

36

Novo suporte para NEMA 17 . . .

37

Próximo tutorial

Automação de uma casa . . .

Em www.fernandok.com Download arquivo PDF dos diagramas Download arquivo INO do código fonte

38