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).