Go Down

Topic: ajuda ae (Read 945 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy