LusoRobótica - Robótica em Português

Robótica => Tutoriais => Tópico iniciado por: TigPT em 17 de Julho de 2008, 14:02

Título: [Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: TigPT em 17 de Julho de 2008, 14:02
Dia 5:

Então e se quisermos controlar dispositivos como os servos com o nosso Arduino?! este precisam dos conhecidos PWM, são ondas quadradas que variam entre GRD e VCC, e o que varia é o tempo de on e off do sinal.

Fica uma imagem explicativa do PWM, e da correspondência de valores para o analogWrite do Arduino:

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fwww.lusorobotica.com%2Fimg%2Farduino%2Fpwm.gif&hash=0a7c3c667e32d199b9a239c3fc24b5fb)
Fonte da image: http://www.arduino.cc (http://www.arduino.cc)

Para fazermos o output de um PWM, dispomos dos pins 3, 5, 6, 9, 10 e 11, mas podemos recorrer à biblioteca Servo.h que se encontra no site http://www.arduino.cc (http://www.arduino.cc), e assim controlar servos com PWM por qualquer dos pins do Arduino.

Como para o meu robô não preciso de usar mais de 6 servos neste momento, vou fazer um simples analogWrite(pinNumb, 0-255) como no código abaixo, para controlar o PWM.

Se ligarmos este sinal a uma simples ponte H para controlar motores DC, o que fazemos é activar e desactivar os transistors, produzindo assim com o máximo de torque uma velocidade mais baixa do que se utilizasse-mos um valor analógico entre GRD e VCC, para alem de que evita o aquecimento dos transistors, visto que estes estão sempre ou ao corte, ou saturado.

No vídeo abaixo faço um exemplo disso mesmo, que pode ser facilmente acompanhado pelo código em anexo.

Coloquei um bocado de fita branca na roda para se poder ver as diferenças de velocidade.
http://www.revver.com/video/900986 (http://www.revver.com/video/900986)

Gerar PWM com Arduino (http://lusorobotica.com/index.php/topic,499.msg4418.html#msg4418)
Título: Re:[Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: joaoamaral em 05 de Maio de 2009, 23:10
sobre o PWM encontrei este vídeo :)

PWM Tutorial (http://www.youtube.com/watch?v=YmPziPfaByw#ws-lq-lq2-hq-hd)
Título: Re:[Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: TigPT em 06 de Maio de 2009, 10:41
Excelente vídeo, obrigado por partilhares ;)
Título: Re:[Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: metRo_ em 07 de Maio de 2009, 14:28
Neste post também mostro umas pwm's do arduino!
http://lusorobotica.com/index.php/topic,499.msg4418.html#msg4418 (http://lusorobotica.com/index.php/topic,499.msg4418.html#msg4418)
Título: Re:[Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: TigPT em 07 de Maio de 2009, 14:38
Neste post também mostro umas pwm's do arduino!
http://lusorobotica.com/index.php/topic,499.msg4418.html#msg4418 (http://lusorobotica.com/index.php/topic,499.msg4418.html#msg4418)

Fizeste bem em dizer, adicionei ao primeiro post ;)
Título: Re:[Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: antonio_jose em 12 de Junho de 2009, 00:47
Arduino PWM Fun (http://www.youtube.com/watch?v=dj7I01OQ5TY#lq-lq2-hq)
Título: Re:[Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: amando96 em 12 de Junho de 2009, 08:50
Excelente vídeo, obrigado por partilhares ;)

a roda is ponte-H é de ''o meu robot'' né?
Título: Re:[Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: TigPT em 12 de Junho de 2009, 09:20
sim.. :) não chegou a funcionar por causa de umas falhas... :)
Título: Re: [Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: Raul em 30 de Setembro de 2009, 18:43
Mas eu vi que se pode controlar um servo digitalmente, com o digitalWrite(pin, value)
Esta aqui o circuito e tudo, estranhei a necessidade da resistência.

servo output
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg514.imageshack.us%2Fimg514%2F4163%2Fservodigital.jpg&hash=66560d279554a5423e851f51e5a06f34) (http://img514.imageshack.us/i/servodigital.jpg/)

Hobby servos are a type of self-contained motor that can move in a 180º arc. All that is needed is a pulse sent every 20ms. This example uses a servoPulse function to move the servo from 10º -170º and back again.
Código: [Seleccione]
int servoPin = 2; // servo connected to digital pin 2
int myAngle; // angle of the servo roughly 0-180
int pulseWidth; // servoPulse function variable
void setup()
{
pinMode(servoPin, OUTPUT); // sets pin 2 as output
}
void servoPulse(int servoPin, int myAngle)
{
pulseWidth = (myAngle * 10) + 600; // determines delay
digitalWrite(servoPin, HIGH); // set servo high
delayMicroseconds(pulseWidth); // microsecond pause
digitalWrite(servoPin, LOW); // set servo low
}
void loop()
{
// servo starts at 10 deg and rotates to 170 deg
for (myAngle=10; myAngle<=170; myAngle++)
{
servoPulse(servoPin, myAngle); // send pin and angle
delay(20); // refresh cycle
}
// servo starts at 170 deg and rotates to 10 deg
for (myAngle=170; myAngle>=10; myAngle--)
{
servoPulse(servoPin, myAngle); // send pin and angle
delay(20); // refresh cycle
}
}
Título: Re: [Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: TigPT em 30 de Setembro de 2009, 20:17
No fundo esse código está a gerar um pwm por software.
Título: Re: [Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: Njay em 30 de Setembro de 2009, 23:20
É assim que funciona a biblioteca MegaServo do ambiente de programação do Arduino.
Título: Re: [Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: Raul em 02 de Outubro de 2009, 19:38
Mas é necessário ter aquela resistência de 220 ohms?
Ou os 220ohms o arduino já os aplica dentro dele?
Cumprimentos
Título: Re: [Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: Njay em 02 de Outubro de 2009, 22:50
A resistência de 220 Ohm é uma segurança extra. Não é necessário, mas se quiseres um sistema tolerante a algumas falhas, podes pôr.
Título: Re: [Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: leandrosilva em 08 de Setembro de 2010, 17:04
Mt boa explicaçao das pwm's :D bom trabalho ;)
Título: Re: [Arduino]Dia 5 - Arduino analogWrite ( PWM )
Enviado por: Mikey em 06 de Janeiro de 2011, 16:54
TigPT o ficheiro do codigo do motor1 esta corrupto quando se extrae .
alguem disponibiliza ?