• Nenhum resultado encontrado

Por Fernando Koyanagi 1

N/A
N/A
Protected

Academic year: 2021

Share "Por Fernando Koyanagi 1"

Copied!
38
0
0

Texto

(1)
(2)

Motor de passo como servo com comunicação serial

(3)

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.

(4)

Montagem . . .

Continuaremos utilizando a mesma montagem anterior. Mas

deixaremos somente o potenciômetro de leitura do eixo.

(5)

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.

(6)

Montagem . . .

Conectaremos o potenciômetro a

entrada analógica A0.

O EIXO conectaremos

ao pino A0 (fio roxo).

A alimentação de 5V

(fio verde).

A referência GND (fio

(7)

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.

(8)

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

(9)

Entendendo o programa ( Declarações )

(10)

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

(11)

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.

(12)
(13)

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

(14)
(15)

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.

(16)

Código – Fonte do Arduino

(17)

Entendendo o programa ( Loop)

(18)

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

(19)

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”

(20)
(21)

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.

(22)
(23)

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.

(24)
(25)

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.

(26)

Entendendo o programa

( Interpretador de comandos )

(27)

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.

(28)

Código – Fonte do Arduino

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.

(29)

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.

(30)

Código – Fonte do Arduino

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.

(31)

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”

(32)

Código – Fonte do Arduino

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 “-”

(33)

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.

(34)
(35)

Novo suporte para NEMA 17 . . .

(36)

Novo suporte para NEMA 17 . . .

(37)

Novo suporte para NEMA 17 . . .

(38)

Próximo tutorial

Automação de uma casa . . .

Em www.fernandok.com

Download arquivo PDF dos diagramas Download arquivo INO do código fonte

Referências

Documentos relacionados

As espécies predominantes (mais freqüentes, constantes e dominantes) foram Anastrepha obliqua (Macquart) em Campos dos Goytacazes e São Francisco do Itabapoana, Anastrepha fraterculus

Métodos: Foi realizada análise retrospectiva dos prontuários de 23 pacientes exenterados no Serviço de Órbita do Departamento de Oftalmologia da Faculdade de Medicina

Os altos índices de hanseníase na Região do Acre foram os motivos que nos levaram a estudar as alterações oculares mais freqüentes nos pacientes internos no Hospital Colônia.. Os

Advanced painful bullous keratopathy (APBK) in patients with unsuccessful clinicai treatment and concómitant retinal or vitreous disease, in whom the restoration of vision

Em conclusão, a instilação de uma gota do cloridrato de proparacaína a 0,5% sobre os músculos retos horizontais não altera as forças isométrica máxima e mínima enquanto duas

A classificação do padrão topográfico pré e pós-operató­ rio dos pacientes incluídos para cirurgia foi realizada por 3 examinadores independentes que não possuíam os dados

- Human keratinocyte cell line (HaCaT), (received from Prof. Fusenig, head of the Division of Differen­ tiation and Carcinogenesis of the German Cancer Research Center

O comportamento dos pacientes amarelos e negros foi semelhante e, em nenhum momento da evolução pós-operatória, apresentaram diferença estatisticamente significante entre