Pages: [1]   Go Down
Author Topic: ajuda ae  (Read 843 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Amparo, SP
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: September 23, 2010, 02:00:02 am by RafaelOragio » Logged

Pages: [1]   Go Up
Jump to: