Arduino - Motor DC
Neste tutorial, vamos aprender:
- Como o motor DC funciona
- Como controlar a velocidade e o sentido do motor DC.
- Como controlar um motor DC usando o driver L298N.
- Como controlar dois motores DC usando o driver L298N.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor DC
Pinagem do Motor DC
O Motor DC tem dois fios:
- Fio positivo: geralmente vermelho
- Fio negativo: geralmente preto

Como Funciona
Quando você compra um motor DC, precisa saber com qual tensão o motor DC funciona. Vamos usar um motor DC de 12V como exemplo.
Quando você alimenta o motor DC de 12V com uma fonte de 12V:
- 12V e GND no fio positivo e no fio negativo, respectivamente: o motor DC gira na velocidade máxima no sentido horário
- 12V e GND no fio negativo e no fio positivo, respectivamente: o motor DC gira na velocidade máxima no sentido anti-horário
Como descrito acima, quando a polaridade da alimentação é invertida entre os dois fios do motor DC, o sentido de rotação é invertido. Esse método é usado para controlar o sentido do motor DC. Claro, não trocando manualmente, mas por meio de programação.
Se fornecermos aos motores DC uma alimentação abaixo de 12V, o motor ainda gira, mas não na velocidade máxima. Isso significa que, se mudarmos a tensão da fonte de alimentação, podemos mudar a velocidade do motor DC. No entanto, esse método não é usado na prática por causa da dificuldade de controlar a tensão da fonte. Em vez disso, fixamos a tensão da fonte e controlamos a velocidade do motor DC por meio de um sinal PWM. Quanto maior o ciclo de trabalho (duty cycle) do PWM, maior a velocidade com que o motor DC gira.

A animação a seguir mostra como um sinal PWM é usado para controlar a velocidade de um motor DC:

Como controlar o motor DC usando Arduino
Controlar um motor DC envolve dois fatores: velocidade e sentido. O Arduino pode gerar o sinal PWM. No entanto, esse sinal PWM tem baixa tensão e baixa corrente, então não podemos usá-lo para controlar o motor DC. Precisamos usar um driver de hardware entre o Arduino e o motor DC. O driver faz dois trabalhos:
- Amplificar o sinal PWM do Arduino (corrente e tensão) → para o controle de velocidade
- Receber o sinal de controle do Arduino para inverter a polaridade da alimentação → para o controle de sentido.

※ Nota:
- Este tutorial pode ser aplicado a todos os motores DC. O motor DC de 12V é apenas um exemplo.
- Quando você controla um motor DC de 5V, embora o pino do Arduino forneça 5V (a mesma tensão do motor DC), você ainda precisa de um driver entre o Arduino e o motor DC, porque o pino do Arduino não fornece corrente suficiente para o motor DC.
Existem muitos tipos de chips e módulos (por exemplo, L293D, L298N) que podem ser usados como drivers de motor DC. Neste tutorial, vamos usar o driver L298N.
Sobre o Driver L298N
O Driver L298N pode ser usado para controlar motor DC e motor de passo. Neste tutorial, vamos aprender a usá-lo para controlar o motor DC.
Pinagem do Driver L298N

O Driver L298N pode controlar dois motores DC de forma independente ao mesmo tempo, chamados motor A e motor B. O Driver L298N tem 13 pinos:
Os pinos comuns para os dois motores:
- Pino VCC: fornece alimentação para o motor. Pode ser qualquer valor entre 5 e 35V.
- Pino GND: é um pino terra comum, deve ser conectado ao GND (0V).
- Pino 5V: fornece alimentação para o módulo L298N. Pode ser alimentado pelo 5V do Arduino.
Pinos do Motor A (Canal A):
- Pinos ENA: são usados para controlar a velocidade do Motor A. Removendo o jumper e conectando este pino a uma entrada PWM, podemos controlar a velocidade do Motor A.
- Pinos IN1 e IN2: são usados para controlar o sentido de rotação do Motor A. Quando um deles está em HIGH e o outro em LOW, o Motor A gira. Se as duas entradas estiverem ambas em HIGH ou ambas em LOW, o Motor A para.
- Pinos OUT1 e OUT2: são conectados ao Motor A.
Pinos do Motor B (Canal B):
- Pinos ENB: são usados para controlar a velocidade do Motor B. Removendo o jumper e conectando este pino a uma entrada PWM, podemos controlar a velocidade do Motor B.
- Pinos IN3 e IN4: são usados para controlar o sentido de rotação do Motor B. Quando um deles está em HIGH e o outro em LOW, o Motor B gira. Se as duas entradas estiverem ambas em HIGH ou ambas em LOW, o Motor B para.
- Pinos OUT3 e OUT4: são conectados ao Motor B.
Como descrito acima, o driver L298N tem duas entradas de alimentação:
- Uma para o motor DC (pinos VCC e GND): de 5 a 35V.
- Uma para o funcionamento interno do módulo L298N (pinos 5V e GND): de 5 a 7V.
O driver L298N também tem três jumpers para usos avançados ou outras finalidades. Para simplificar, remova todos os jumpers do driver L298N.
Podemos controlar dois motores DC de forma independente ao mesmo tempo usando um Arduino e um Driver L298N. Para controlar cada motor, precisamos de apenas três pinos do Arduino.
※ Nota:
O restante deste tutorial controla um motor DC usando o canal A. Controlar o outro motor DC é parecido.
Como Controlar a Velocidade do Motor DC com o Driver L298N
É simples controlar a velocidade do motor DC gerando um sinal PWM no pino ENA do L298N. Podemos fazer isso assim:
- Conecte um pino do Arduino ao ENA do L298N
- Gere um sinal PWM no pino ENA usando a função analogWrite(). O Driver L298N amplifica o sinal PWM para o motor DC
A velocidade é um valor entre 0 e 255. Se a velocidade for 0, o motor para. Se a velocidade for 255, o motor gira na velocidade máxima.
Como Controlar o Sentido do Motor DC com o Driver L298N
O sentido de rotação de um motor pode ser controlado aplicando um nível lógico HIGH/LOW nos pinos IN1 e IN2. A tabela abaixo mostra como controlar o sentido nos dois canais.
| Pino IN1 | Pino IN2 | Sentido |
|---|---|---|
| LOW | LOW | O Motor A para |
| HIGH | HIGH | O Motor A para |
| HIGH | LOW | O Motor A gira no sentido horário |
| LOW | HIGH | O Motor A gira no sentido anti-horário |
- Fazer o motor A girar no sentido horário
- Fazer o motor A girar no sentido anti-horário
※ Nota:
O sentido de rotação fica invertido se os pinos OUT1 e OUT2 forem conectados aos dois pinos do motor DC de forma invertida. Nesse caso, basta trocar os pinos OUT1 e OUT2 ou mudar o sinal de controle nos pinos IN1 e IN2 no código.
Como Parar a Rotação do Motor DC
Existem duas formas de parar o motor DC
- Definir a velocidade como 0
- Definir os pinos IN1 e IN2 com o mesmo valor (LOW ou HIGH)
Ou:
Como controlar um motor DC usando o driver L298N.
Diagrama de Ligação
Remova os três jumpers do módulo L298N antes de fazer a ligação.

This image is created using Fritzing. Click to enlarge image
Código Arduino
O código abaixo faz o seguinte:
- Acelera o motor DC
- Muda o sentido
- Desacelera o motor DC
- Para o motor
Passos Rápidos
- Remova os três jumpers do módulo L298N.
- Copie o código acima e abra-o no Arduino IDE
- Clique no botão Upload no Arduino IDE para carregar o código no Arduino
- Você verá:
- O motor DC acelera e depois gira na velocidade máxima por 1 segundo
- O sentido do motor DC muda
- O motor DC gira na velocidade máxima por 1 segundo no sentido inverso
- O motor DC desacelera
- O motor DC fica parado por 1 segundo
- O processo acima se repete continuamente.
※ Nota:
Neste tutorial, aprendemos a controlar a velocidade do motor DC em relação à velocidade máxima. Para controlar a velocidade absoluta (voltas por segundo), precisamos usar um controlador PID e um encoder. O controle da velocidade absoluta do motor DC será apresentado em outro tutorial.
Como Controlar dois Motores DC usando o Driver L298N
(em breve)