Você está na página 1de 4

Arduino

Controle de velocidade e direção do motor DC


com L293D
Nesta experiência mostra como controlar a velocidade e o sentido de
rotação do motor DC usando o chip de driver do motor Arduino UNO e
L293D.

O chip de driver quádruplo L293D meio H nos permite acionar 2 motores


em ambas as direções. Com duas saídas PWM do Arduino, podemos
controlar facilmente a velocidade e a direção de rotação de um motor
DC. (PWM: modulação por largura de pulso).

Componentes Necessários:

• Placa Arduino UNO


• Driver L293D
• Motor de 6V DC
• Potenciômetro de 10K ohm
• Botão de apertar
• Fonte de 12V
• Protoboard
• Jumpers

Circuito de controle do motor DC do Arduino:


É mostrado no diagrama feito no Circuits, do Tinkercad e mostra o
esquema do projeto que pode ser simulado, onde podemos verificar o
funcionamento.

A velocidade do motor CC (em ambas as direções) é controlada com o


potenciômetro de 10k conectado ao canal analógico 0 (A0) e a direção de
rotação é controlada com o botão de pressão conectado ao pino 8 da placa
UNO do Arduino. Se o botão for pressionado, o motor mudará sua direção
diretamente.

O driver L293D possui 2 VCCs: VCC1 é + 5V e VCC2 é + 12V (o mesmo que a


tensão nominal do motor). Os pinos IN1 e IN2 são os pinos de controle em
que:
EM 1 EM 2 Função

L H Direção 1

H L Direção 2

L L Parada rápida do motor

H H Parada rápida do motor

Como mostrado no diagrama de circuitos, precisamos apenas de 4 pinos


terminais do Arduino, o pino A0 altera a velocidade do motor, o pino 8 é o
botão que alterna a direção de rotação do motor. Os pinos 9 e 10 são saídas
de sinal PWM; a qualquer momento, há apenas 1 PWM ativo, permitindo
controlar a direção e a velocidade, variando o ciclo de trabalho do sinal
PWM. O pino PWM ativo decide a direção de rotação do motor (um de cada
vez, a outra saída é lógica 0).

Código do Arduino: O código do


Arduino está abaixo.

1 // Arduino DC com controle de velocidade e direção


2
3 #define button 8
4 #define pot 0
5 #define pwm1 9
6 #define pwm2 10
7
8 boolean motor_dir = 0;
9 int motor_speed;
10
11 void setup() {
12 pinMode(button, INPUT_PULLUP);
13 pinMode(pwm1, OUTPUT);
14 pinMode(pwm2, OUTPUT);
15 }
16
17 void loop() {
18 motor_speed = analogRead(pot) / 4;
19 if(motor_dir)
20 analogWrite(pwm1, motor_speed);
21 else
22 analogWrite(pwm2, motor_speed);
23 if(!digitalRead(button)){ // If direction button is pressed
24 while(!digitalRead(button)); // Wait until direction button
25 released
26 motor_dir = !motor_dir; // Toggle direction variable
27 if(motor_dir)
28 digitalWrite(pwm2, 0);
29 else
30 digitalWrite(pwm1, 0);
31 }
}
Desafio:
Colocar um Display LCD e mostrar:
Velocidade em Rotações por minuto (RPM)
E Sentido de rotação (horário e Antihorário).

Você também pode gostar