Go Down

Topic: ajuda ae (Read 928 times) previous topic - next topic

FoxDie

olá pessoal eu vim aqui para peidr a ajuda de vcs para um assunto que esta me deixando de cabaça quente, eu fiz uma programação de arduino, era para ser uma bengala sensorial em que na hora q o sensor ultrasonico detecta-se algo mandaria o motor DC funcionar..

Porem procurei no forum no site do arduino, e me disseram para fazer um  tal de PWM e uma Ponte H.
A Ponte H eu fiz, porem soh com ela nao funcionou, eu peguei a ponte H desse site: http://lusorobotica.com/index.php?topic=1565.0

Porem nao funcinou, acho eu pelo fato de nao ter o PWM.
Se puderem me explicar melhor como funciona o PWM e se puderem me passar o circuito eletrico de um eu agradeço...

a Programação que eu fiz é essa:


// pinagem do sensor
const int pingPin = 7; // o pino em que eu vou colocar o sensor
const int readPin = 8;
const int buzzPin = 9;
// pinagem do motor vibratorio
const int motorL = 3;
const int motorR = 1;

void setup()
{
 Serial.begin(9600); //onde tudo começa
 //codigo sensor
 //pinMode(motorL, OUTPUT);
 pinMode(motorR, OUTPUT);
 
 long microsecondsToCentimeters(long microseconds);
 
}

void loop() {
 long duration, inches, cm, microseconds ;
 
 

 pinMode(buzzPin, OUTPUT); // dizendo que o sensor ira enviar dados
 pinMode(motorR, OUTPUT); //dizendo que o motor tambem ira enviar
 pinMode(pingPin, OUTPUT); // As linhas a seguir esta dizendo que o sensor irá enviar a cada 2 microsegundos
 digitalWrite(pingPin, LOW);
 delayMicroseconds(2);
 digitalWrite(pingPin, HIGH);
 delayMicroseconds(5);
 digitalWrite(pingPin, LOW);
 
 pinMode(readPin, INPUT);
// int duration = pulseIn(readPin, HIGH);
 //cm = microsecondsToCentimeters(duration);
      //motor vibratorio
 //digitalWrite(motorR,LOW);
 //digitalWrite(motorL,HIGH);
 //delay(5000);
 //digitalWrite(motorL,LOW);
 //digitalWrite(motorR,HIGH);
 //delay(5000);

 
    if (cm<10) { // se cm for menor q tal
 pinMode (motorR, HIGH );
 }
}
 

 long microsecondsToCentimeters(long microseconds)
{

 return microseconds / 29 / 2 ;
   
}

se for tbm algo errado com minha programação me avisem, sou leigo para essas coisas de arduino e programação.
 

#1
Sep 23, 2010, 08:53 am Last Edit: Sep 23, 2010, 09:00 am by RafaelOragio Reason: 1
Olá FoxDie,

dá uma olhada neste post que eu mesmo fiz com relação à ponte-H, pois também foi minha dúvida.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1285159854

O PWM funciona da seguinte forma:

Conforme ocorre a variação do comprimento da onda (como o próprio nome diz, Pulse-width Modulation), em um esquema de ponte-H feito com mosfets ou tips, você conseguirá controlar a velocidade de rotação do motor. Pra você entender melhor como o Arduíno consegue controlar esse pulso, veja esta imagem:



No caso do Arduíno, Ymax = 5v e Ymin = 0v;

Você consegue perceber que temos um ciclo de 33,3% em 5v e 66.6% em 0v?

O que isto significa para o meu motor?

Significa que o motor irá girar com aprox. 33% da sua rotação máxima (não contando as possíveis perdas de potência nos tips ou mosfets). Vamos supor que Ymax fosse de 100%, teríamos um gráfico com apenas 1 reta saindo de Ymax, ou seja, rotação máxima para o motor.

Para você controlar isso no seu programa, na função "analogWrite(pinPWM, valor)" no parâmetro "valor", você irá passar um número que varia entre 0 a 1023, ou seja, 0 = 0v e 1023 = 5v. Vamos supor que você quer que o Arduíno envie pulsos na proporção da imagem acima, no caso, o parâmetro a ser passado seria "341" (1023 / 3), que é o mesmo que 33,3 % de 1023!

[]'s

Rafael.

Go Up