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
Top Related