por fernando koyanagi 1 - animoby games...leitura_comando – armazena o valor da posição alvo...
TRANSCRIPT
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
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
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
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
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”
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.
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.
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.
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”
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