Você está na página 1de 3

Pesquise neste blog :

22 outubro 2016
Pesquisar
Como usar motor DC com encoder no Arduino Custom Search

Neste post vamos mostrar um motor muito usado em projetos de robótica, que é um motor DC com encoder
embutido. Esse tipo de motor com encoder permite que você possa calcular a distância percorrida pelo robô,
ou ajustar a velocidade do motor de acordo com a leitura de sensores.

Assine nossa newsletter:

Seu email...

Quero assinar!

O motor que vamos utilizar é o motor DC 6V com encoder embutido, o mesmo mostrado na imagem acima,
que tem uma pequena placa na parte de trás onde estão instalados os sensores hall que vão ler as
informações relativas à rotação do motor.

São 2 sensores na placa, e com ele podemos medir não só a velocidade como também o sentido de rotação, o
que pode ser muito útil na hora de configurar o robô para evitar obstáculos, virar para direita/esquerda,
retornar, etc.

Conexões do motor DC com encoder embutido

Essa placa tem um conector com 6 pinos, onde vamos ligar tanto a alimentação do motor (pinos M- e M+), a
Marcadores
alimentação dos sensores do encoder (GND e 3.3V) e onde teremos o sinal de saída, nos pinos C1 (canal A do
encoder) e C2 (canal B do encoder): arduino bluetooth componentes display
esp8266 gsm HC-SR04 IR LCD livros modulos
motores raspberry pi sensores shield
temperatura videos wireless

Arquivo do blog

► 2018 (22)
► 2017 (24)
▼ 2016 (28)
► Dezembro 2016 (2)
► Novembro 2016 (2)
▼ Outubro 2016 (2)
Comunicação sem fio com módulo
Assim, precisamos de apenas dois pinos do Arduino para ler as informações dos sensores do encoder. O pino PN532 NFC RFID
C1 será ligado ao pino 2 do Arduino (interrupção 0), e o pino C2 será ligado ao pino digital 4. Como usar motor DC com encoder no
Arduino
Ligação do Motor DC 6V 210 RPM no Arduino ► Setembro 2016 (2)
► Agosto 2016 (3)

Como esse motor exige mais corrente do que a suportada pelos pinos do Arduino, vamos usar no nosso ► Julho 2016 (2)
circuito um módulo ponte H L298N (abaixo), controlando o sentido de rotação com um potenciômetro de 10K ► Junho 2016 (1)
ligado ao pino digital A0.
► Maio 2016 (3)
► Abril 2016 (3)
► Março 2016 (3)
► Fevereiro 2016 (2)
► Janeiro 2016 (3)

► 2015 (35)
► 2014 (55)
► 2013 (66)
Postagens populares

Como utilizar o módulo I2C


com display LCD

Controle remoto IR no
Arduino

Ligamos então o motor em uma das saídas da ponte H (OUT1 e OUT2), os pinos GND e 3.3V da placa do
encoder nos pinos correspondentes no Arduino, a saída C1 no pino digital 2, e a saída C2 no pino digital 4:
Acionando portas do
Arduino usando Android e
bluetooth

Controlando um servo motor


com Arduino

Ligando uma lâmpada com


módulo relé

Fale com o administrador do site


Politica de Privacidade

Os pinos 6 e 7 controlam o sentido de rotação do motor: sentido horário (pino 6 HIGH e pino 7 LOW) ou anti-
horário (pino 6 LOW e pino 7 HIGH).
O conteúdo do blog Arduino e Cia, está
Programa motor DC com encoder licenciado com uma Licença Creative
Commons - Atribuição-CompartilhaIgual 4.0
Internacional.

O programa abaixo não utiliza bibliotecas específicas, efetuando a leitura dos pinos 2 (interrupção 0 do
Arduino, utilizado para a contagem de pulsos) e 4 (usado para identificar o sentido de rotação do motor).

1 //Programa: Motor DC com encoder


2 //Autor: Arduino e Cia
3
4 const byte Encoder_C1 = 2;
5 const byte Encoder_C2 = 4;
6 byte Encoder_C1Last;
7 int duracao;
8 boolean Direcao;
9
10 //Pinos de ligacao ponte H L298N
11 #define pino_motor1 6
12 #define pino_motor2 7
13
14 void setup()
15 {
16 Serial.begin(57600);
17 //Pino potenciometro
18 pinMode(A0, INPUT);
19 //Definicao pinos ponte H
20 pinMode(pino_motor1, OUTPUT);
21 pinMode(pino_motor2, OUTPUT);
22 //Definicao do encoder
23 EncoderInit();
24 }
25
26 void loop()
27 {
28 Serial.print("Pulso: ");
29 Serial.print(duracao);
30 int valor = analogRead(A0);
31 if (valor >= 512)
32 {
33 digitalWrite(pino_motor1, LOW);
34 digitalWrite(pino_motor2, LOW);
35 //delay(1000);
36 digitalWrite(pino_motor1, LOW);
37 digitalWrite(pino_motor2, HIGH);
38 Serial.println(" Sentido: Anti-horario");
39 }
40 else
41 {
42 digitalWrite(pino_motor1, HIGH);
43 digitalWrite(pino_motor2, LOW);
44 Serial.println(" Sentido: Horario");
45 }
46 duracao = 0;
47 delay(100);
48 }
49
50 void EncoderInit()
51 {
52 pinMode(Encoder_C2, INPUT);
53 attachInterrupt(0, calculapulso, CHANGE);
54 }
55
56 void calculapulso()
57 {
58 int Lstate = digitalRead(Encoder_C1);
59 if ((Encoder_C1Last == LOW) && Lstate == HIGH)
60 {
61 int val = digitalRead(Encoder_C2);
62 if (val == LOW && Direcao)
63 {
64 Direcao = false; //Reverse
65 }
66 else if (val == HIGH && !Direcao)
67 {
68 Direcao = true; //Forward
69 }
70 }
71 Encoder_C1Last = Lstate;
72
73 if (!Direcao) duracao++;
74 else duracao--;
75 }

Conforme o valor enviado pelo potenciômetro ligado na porta analógica A0, o sentido de rotação do motor é
alterado. Essa alteração pode ser acompanhada no Serial Monitor, onde também é mostrada a quantidade de
pulsos lida pelo encoder (não esqueça de alterar a velocidade da serial para 57600):

Experimente incorporar ao circuito um potenciômetro para controlar também a velocidade do motor, assim você
pode acompanhar a variação na quantidade de pulsos lidos.

Postado por Arduino e Cia às 16:17

Marcadores: encoder, l298n, motores

22 comentários:
kbecao 25 de outubro de 2016 11:17

tem previsão de fazer testes com clone de controle de ar condicionado??? Já tem 3 semanas que estou
apanhando aqui...não consigo de jeito nenhum infelizmente...
A cada vez que aperto o mesmo botão recebo código diferente, quando envio o código, sempre é enviado um
diferente(usando um arduino para enviar e outro para receber - testes)...Será a biblioteca?
http://www.instructables.com/id/Ar-Condicionado-controlado-por-Arduino-via-infrave/
Responder

Vinicius lisboa 3 de novembro de 2016 12:28

Qual a relação da quantidade de pulsos lidos com a velocidade?


Responder

Respostas

Unknown 13 de dezembro de 2017 22:58

Aparentemente, a relação é de aproximadamente 340 ppr (pulsos por revolução) segundo uma pagina
do AliExpress que vende o mesmo produto.

Anônimo 13 de dezembro de 2017 22:59