Arduino Nano - Motor DC
Este tutorial ensina você a usar o Arduino Nano para controlar um Motor DC. Em detalhes, vamos aprender:
- Como o motor DC funciona
- Como usar o Arduino Nano e o driver L298N para controlar um motor DC
- Como programar o Arduino Nano para controlar a velocidade e a direção de um motor DC
- Como programar o Arduino Nano para controlar dois motores DC simultaneamente
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Sobre o Motor DC
Pinagem do Motor DC
O Motor DC tem dois fios; o fio positivo geralmente é vermelho e o fio negativo geralmente é preto.

Como Funciona
Ao comprar um motor DC, é importante saber a tensão em que ele opera. Por exemplo, vamos considerar um motor DC de 12V.
Quando você alimenta o motor DC de 12V com uma fonte de 12V:
- Conectando 12V e GND ao fio positivo e ao fio negativo, respectivamente: o motor DC gira na velocidade máxima no sentido horário
- Conectando 12V e GND ao fio negativo e ao fio positivo, respectivamente: o motor DC gira na velocidade máxima no sentido anti-horário
Trocar o polo da alimentação entre os dois fios do motor DC inverte o sentido de rotação. Essa técnica é usada para controlar a direção do motor DC, não manualmente, mas por programação.
Se a tensão da fonte de alimentação de um motor DC for menor que 12V, o motor ainda vai girar, mas não na velocidade máxima. Portanto, ajustando a tensão da fonte de alimentação, podemos controlar a velocidade do motor DC. No entanto, essa abordagem normalmente não é usada pela dificuldade de controlar a tensão da fonte de alimentação. Como alternativa, mantemos a tensão da fonte fixa e controlamos a velocidade do motor DC por meio de um sinal PWM. Quanto maior o duty cycle do PWM, mais rápido 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 um motor DC usando o Arduino Nano
Controlar um motor DC envolve dois elementos: velocidade e direção. O Arduino Nano pode gerar um sinal PWM, mas esse sinal tem baixa tensão e baixa corrente, então não pode ser usado diretamente para controlar o motor. Precisamos usar um driver de hardware entre o Arduino Nano e o motor. O driver realiza duas tarefas:
- Amplificar o sinal PWM do Arduino Nano (em termos de corrente e/ou tensão) para o controle de velocidade
- Receber o sinal de controle do Arduino Nano para inverter a polaridade da alimentação, para o controle de direção.

※ Nota:
- Este tutorial pode ser usado para todos os motores DC. Estamos usando um motor DC de 12V como exemplo.
- Ao controlar um motor DC de 5V, mesmo que o pino do Arduino Nano forneça 5V (a mesma tensão do motor DC), ainda é necessário um driver entre o Arduino Nano e o motor DC, pois o pino do Arduino Nano não fornece corrente suficiente para o motor DC.
- Se você usar um motor DC de 5V, precisa de uma fonte de alimentação de 5V para o motor. Se você usar um motor DC de 12V, precisa de uma fonte de alimentação de 12V para o motor.
Existem muitos chips e módulos que podem funcionar como drivers para motores DC, como o L293D e o L298N. Neste guia, vamos usar o driver L298N.
Sobre o Driver L298N
O Driver L298N pode ser usado para controlar motores DC e motores de passo. Este tutorial ensina você a usá-lo para controlar um motor DC.
Pinagem do Driver L298N

O Driver L298N é capaz de controlar dois motores DC de forma independente ao mesmo tempo, chamados de motor A e motor B. Este driver tem treze pinos.
Os pinos comuns aos dois motores:
- Pino VCC: Este pino fornece energia ao motor, com uma faixa de tensão de 5 a 35V.
- Pino GND: Este pino é uma conexão de terra comum que deve ser conectada a 0V (GND).
- Pino 5V: Este pino alimenta o módulo L298N e pode receber 5V de uma fonte de um Arduino Nano.
Pinos do Motor A (Canal A):
- Pinos ENA: Estes pinos são usados para regular a velocidade do Motor A. Removendo o jumper e conectando este pino a uma entrada PWM, poderemos controlar a velocidade do Motor A.
- Pinos IN1 e IN2: Estes pinos são usados para gerenciar o sentido de giro do Motor A. Quando um deles está HIGH e o outro está LOW, o Motor A vai girar. Se as duas entradas estiverem HIGH ou as duas estiverem LOW, o Motor A vai parar.
- Pinos OUT1 e OUT2: Estes pinos são conectados ao Motor A.
Pinos do Motor B (Canal B):
- Pinos ENB: Este pino pode ser usado para controlar a velocidade do Motor B. Removendo o jumper e conectando-o à entrada PWM, podemos ajustar a velocidade do Motor B.
- Pinos IN3 e IN4: Estes pinos são usados para gerenciar o sentido de giro do Motor B. Quando um deles está HIGH enquanto o outro está LOW, o Motor B vai girar. Se as duas entradas estiverem HIGH ou as duas estiverem LOW, o Motor B vai parar de se mover.
- Pinos OUT3 e OUT4: Estes pinos são conectados ao Motor B.
O driver L298N tem duas alimentações de entrada:
- Uma para o motor DC, com faixa de tensão de 5 a 35V (pinos VCC e GND).
- Uma para a operação interna do módulo L298N, com faixa de tensão de 5 a 7V (pinos 5V e GND).
Remova todos os jumpers do driver L298N para simplificar.
Também podemos controlar dois motores DC separadamente e ao mesmo tempo usando um Arduino Nano e um Driver L298N. Para controlar cada motor, precisamos de apenas três pinos do Arduino Nano.
※ Nota:
O restante deste tutorial vai focar no controle de um motor DC usando o canal A. Passos semelhantes devem ser seguidos para controlar o outro motor DC.
Como Controlar a Velocidade do Motor DC via Driver L298N
É fácil controlar a velocidade de um motor DC produzindo um sinal PWM no pino ENA do L298N. Para isso:
- Conecte um pino do Arduino Nano ao ENA do L298N
- Gere um sinal PWM no pino ENA por meio da função analogWrite(). O Driver L298N vai amplificar o sinal PWM para o motor DC.
A velocidade (speed) é um número de 0 a 255. Quando a velocidade é 0, o motor para de se mover. Quando a velocidade é 255, o motor gira na sua taxa mais rápida.
Como Controlar a Direção do Motor DC via Driver L298N
A rotação de um motor pode ser gerenciada dando um nível lógico HIGH/LOW aos pinos IN1 e IN2. A tabela abaixo mostra como controlar a direção nos dois canais.
| Pino IN1 | Pino IN2 | Direção |
|---|---|---|
| LOW | LOW | Motor A para |
| HIGH | HIGH | Motor A para |
| HIGH | LOW | Motor A gira no sentido horário |
| LOW | HIGH | Motor A gira no sentido anti-horário |
Portanto:
- Código Arduino para fazer o motor A girar no sentido horário.
- Código Arduino para fazer o motor A girar no sentido anti-horário.
※ Nota:
O sentido horário/anti-horário do motor DC pode ser invertido conectando os pinos OUT1 e OUT2 aos dois fios do motor de maneira oposta.
Como Parar o Giro do Motor DC
Dois métodos para parar um motor DC:
- Reduzindo sua velocidade a zero
- Colocando os pinos IN1 e IN2 no mesmo valor, LOW ou HIGH.
- Ou
Como controlar um motor DC usando o driver L298N.
Diagrama de Ligação
Retire os três jumpers do módulo L298N antes de conectar os fios.

This image is created using Fritzing. Click to enlarge image
Veja A melhor forma de alimentar o Arduino Nano e outros componentes.
Código Arduino Nano
O código a seguir faz o seguinte, um passo de cada vez:
- Aumenta a velocidade de um motor DC
- Muda a direção
- Diminui a velocidade de um motor DC
- Para o motor DC
Passos Rápidos
- Retire os três jumpers do módulo L298N.
- Copie o código e abra-o na Arduino IDE.
- Clique no botão Upload na Arduino IDE para fazer upload do código para o Arduino Nano.
- Você deve observar:
- O motor DC vai acelerar e depois girar na velocidade máxima por 1 segundo.
- A direção do motor DC será alterada.
- O motor DC vai girar na velocidade máxima por 1 segundo no sentido oposto.
- O motor DC vai desacelerar.
- O motor DC vai parar por 1 segundo.
- Esse processo será repetido continuamente.
※ Nota:
Este tutorial ensina você a ajustar a velocidade de um motor DC em relação à sua velocidade máxima. Para controlar a velocidade absoluta (em rotações por segundo), precisaremos usar um controlador PID e um encoder. Um tutorial separado vai abordar o controle da velocidade absoluta do motor DC.
Como Controlar dois Motores DC usando o Driver L298N
Em breve!