Go Down

Topic: Controle Velocidade 2 Motores DC com Ponte H - Arduino UNO (Read 783 times) previous topic - next topic

chovlan

Boa Noite a Todos!

Resumindo o meu problema, so consigo controlar a velocidade de um unico motor corretamente, se coloco os 2 ao mesmo tempo, um funciona corretamente e o outro fica fraco, as pilhas que estao alimentando a ponte H sao relativamente novas e um pack com 4 pilhas AA duracell dando um total de 6V, se eu deixo a ponte Jampeada para 5 V os 2 motores funcionam corretamente, porem se tento controlar a velocidade nao funciona, alguem saberia me dizer o que poderia ser?

CODIGO:

//Incluindo biblioteca Ultrasonic.h
#include "Ultrasonic.h"

//criando objeto ultrasonic e definindo as portas digitais 
//do Trigger - 12 - e Echo - 13
Ultrasonic ultrasonic(12,13);

long microsec = 0;
float distanciaCM = 0;

//motor A
//int ENABLE1 = 5;
int velocidadeA = 5;
int IN1 = 7 ;
int IN2 = 6 ;
 
//motor B
//int ENABLE2 = 3;
int velocidadeB = 3;
int IN3 = 2 ;
int IN4 = 4 ;
 
//Inicializa Pinos
void setup(){
  
 Serial.begin(9600); //Inicializando o serial monitor
 
 pinMode(IN1,OUTPUT);
 pinMode(IN2,OUTPUT);
 pinMode(IN3,OUTPUT);
 pinMode(IN4,OUTPUT);
 pinMode(velocidadeA,OUTPUT);
 pinMode(velocidadeB,OUTPUT);
}
 
void loop(){
//Lendo o sensor
microsec = ultrasonic.timing(); 
//Convertendo a distância em CM
distanciaCM = ultrasonic.convert(microsec, Ultrasonic::CM);
/*Inicio dos Estados do motor A*/
digitalWrite(velocidadeA,1);
digitalWrite(velocidadeB,1);

verDistancia();

Serial.print(distanciaCM);
Serial.println(" cm");
delay(1000);
}

//Método que centraliza o controle de acendimento dos leds.
void verDistancia() {
   
  if (distanciaCM > 30) {
     //Sentido Ant
     //motor A
     //Intermediaria
    analogWrite(velocidadeA,110);
    analogWrite(velocidadeB,110);
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH);
     //Motor B
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,HIGH);   
  }

  if (distanciaCM < 30) {
     //Sentido Horario
     //motor A
     //Intermediaria
    analogWrite(velocidadeA,255); 
    analogWrite(velocidadeB,255);
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW);

    //Motor B
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
  }
}

luisilva

Não há esquema, nem uma explicação daquilo que o código devia fazer (como por exemplo, porque é que se mede a distância), assim é complicado fazer qualquer comentário.

Go Up