Manual

do

Maker

.

com

Stepper motor: controlando motor de passo com Arduino

Stepper motor: controlando motor de passo com Arduino

Não era minha intenção escrever nesse momento sobre motores de passo, mas é uma coisa muito legal de escrever porque esses motores tem características avançadas e o controle deles através de biblioteca é muito simples! Vamos ver como controlar o motor de passo com Arduino.

Primeiramente, vou recomendar algumas leituras, caso você deseje ir mais a fundo (e acredito que deva ir, se pretende utilizar motores de passo). No exemplo, utilizarei o motor de passo da imagem abaixo:

O datasheet desse motor está nesse link.

Perceba que as cores dos motores de passo não são um padrão (exceto pertencendo ao mesmo datasheet), além de que o número de fios pode variar. No nosso exemplo, o motor possui 4 fios. Mais uma vez utilizaremos um CI L293D para controlar o motor, mas dessa vez com uma alimentação externa conectada ao pino 8. Para alimentá-lo, utilizei uma bateria de 9v (apesar do motor ser de 12v, funcionou sem fazer fumaça nem derreter a protoboard). O Arduino alimentei pela USB de meu notebook mesmo (coragem nesse momento).

No datasheet se pode ver na tabela esquerda abaixo em common rating:

1.8º +- 5%

Isso quer dizer que cada passo possui aproximadamente 1.8 graus de movimento, com 5% de margem de erro. No link eletronica.org descreve as variações de cada motor de passo que podem ser de 0.72,1.8, 3.6, 7.5, 15 e até 90 graus. No nosso caso, o datasheet descreve como 1.8, então para sabermos quantos passos temos em uma volta basta dividir 360º por 1.8º, que dá exatamente 200 passos - essa é a precisão desse motor.

Além dos passos, também podemos controlar a direção e velocidade e isso que faz tão divertido mexer com esse tipo de motor!

No canto direito superior estão descritos os dois pares de fio; Red e Green e Yellow com Blue. Mas além disso, perceba que cada fio tem uma letra; Red e Yellow para A e B, respectivamente. Então, esses dois fios devem assumir as mesmas posições em lados opostos do CI. Dessa forma teremos de um lado vermelho e verde. O verde na posição 11e o vermelho na posição 14. Como o amarelo é o B, então no mesmo pino da direção oposta do CI teremos o amarelo - pino número 3 e o fio azul, pino número 6. No modelo do Fritzing, os fios do motor aparecem como duas fases e dois terras, mas o desenho deixa claro suas ligações:

Maiores detalhes sobre o CI podem ser encontrados nesse outro post.

Motores de passo são comumente utilizados em impressoras para alinhar cabeça de impressão, em braços robóticos e diversas outras aplicações que exijam precisão. No momento não tenho um projeto aplicável para desenvolvermos, mas vamos fazer provas dos controles com base nos exemplos da própria IDE de desenvolvimento.

Um passo por vez

Esse é o primeiro exemplo descrito aqui. Veja o código:

#include <Stepper.h>

const int stepsPerRevolution = 200;  // passos por volta

// Pinos utilizados para a comunicacao
// (8 e 9 de um lado, 10 e 11 do outro)
Stepper myStepper(stepsPerRevolution, 8,9,10,11);            

void setup() {
  // velocidade (60 RPM):
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // rotacao em sentido horario
   Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);
  
   // Agora em direcao oposta, os 200 passos
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500); 

}

E para finalizar essa etapa, o vídeo do motor a 60 RPM, passo a passo (não reparem na bagunça, deixei o projeto do robô montado em paralelo).

No próximo post (se não tiver mais uma etapa dos posts do projeto robô pronta) pretendo mostrar mais algumas coisas com motor de passo. Espero ter alguma idéia aplicável para tornar o exemplo mais divertido, apesar de que simplesmente controlar essas belezinhas já é uma diversão!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.