LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: msr em 08 de Dezembro de 2009, 18:04

Título: Arduino+Servo
Enviado por: msr em 08 de Dezembro de 2009, 18:04
Olá pessoal,

Estava aqui a ver se punha um servo a mecher, mas está complicado.

Estou a usar um servo dos que o NJay tem à venda.
Confirmem-me sff as ligações:
- vermelho: 5V
- laranja: GND
- castanho: SINAL

Certo?

Já os pus uma vez a mecher, assim que chegaram, já não me lembro bem como o fiz mas hoje não estou a ver o que está a falhar. Aqui vai o código:


Código: [Seleccione]
int servoPin = 0;

void ServoMove(char side)
{

  int i = analogRead(servoPin)/4;
  Serial.print("Servo position: ");
  Serial.println(i);
 
  if(side == RIGHT)
    for(; i < 256; i++){
      analogWrite(servoPin, i);
      delay(50);
    }
  else
    for(; i >= 0; i--){
      analogWrite(servoPin, i);
      delay(50);
    }

}

Já confirmei, através de Serial.prints que faz os cliclos bem, mas o servo nao meche. Deve estar qualquer coisa a falhar no analogWrite nao?


Obrigado pela ajuda
Título: Re: Arduino+Servo
Enviado por: TigPT em 08 de Dezembro de 2009, 18:30
Olá..

Vermelho: 5V
Castanho: GND
Laranja: Sinal
Título: Re: Arduino+Servo
Enviado por: Njay em 08 de Dezembro de 2009, 18:44
Citar
int i = analogRead(servoPin)/4;
Isto não me parece que faça o que estás a pensar... O analogRead() lê a tensão no pino usando o ADC, não tem nada a ver com o PWM (analogWrite()) para o servo. Também não te aconselho que uses o analogWrite para controlar servos, pois ele não respeita o tempo minimo entre impulsos. Usa antes a lib MegaServo que vem com o ambiente do Arduino.
Título: Re: Arduino+Servo
Enviado por: p0wd3r em 08 de Dezembro de 2009, 18:48
Ir incrementando a saída analógica ??? Penso que isso apenas faz variar a tensão nessa OUTPUT. Eu não estou habituado a este tipo de linguagem (indirecta) mas não sei se isso funciona desse modo, acho que seria mais fácil aplicar aí um sinal PWM  :-\
Título: Re: Arduino+Servo
Enviado por: TigPT em 08 de Dezembro de 2009, 18:49
Mas o código até faz sentido visto que o analog in é de 0~1023 e o analogWrite é de 0~255

1024/4 = 256

Contudo é preferível utilizar as bibliotecas que recorrem aos timers.
Título: Re: Arduino+Servo
Enviado por: Njay em 08 de Dezembro de 2009, 18:57
O msr está a ler do mesmo pino (servoPin)  em que está a escrever (analogWrite()) para controlar o servo. Que valor de tensão é que ele vai ler desse pino que está ligado a uma entrada do servo?... Isto não vai funcionar bem, e até vai ter interferências porque o analogRead() configura o pino para ser uma entrada e o PWM pára (e o servo também pára), depois logo a seguir ele faz analogWrite() e o pino é reconfigurado para ser uma saída em PWM e o PWM re-começa, e assim em ciclo infinitamente, isto deve dar alguma instabilidade, além de não ser o que ele pretende.
Título: Re: Arduino+Servo
Enviado por: TigPT em 08 de Dezembro de 2009, 19:08
Não Njay.. o analogRead só lé dos pins do ADC logo ele está a ler do pin 0 do ADC e depois no analogWrite já é o pin0 do digital.. neste caso o pin RX.

Deves de mudar para um dos pin que diz PWM para utilizar a lib analogWrite correctamente (11, 10, 9, 6, 5 ou 3).

Estás a pensar AVR mas isto tem muita API pelo meio para impedir fazer porcaria.
Título: Re: Arduino+Servo
Enviado por: Njay em 08 de Dezembro de 2009, 19:14
Ahh, pois é, tens razão, os pinos digitais são completamente separados dos de entrada analógica...
Título: Re: Arduino+Servo
Enviado por: LordNelthon em 16 de Dezembro de 2009, 17:51
Estou com um problema semelhante, não consigo colocar os meus servos a rodar. Tenho as ligações correctamente feitas mas nada. :(
Estou a usar o analogWrite().

EDIT: Encontrei um exemplo aqui no forum usando o servo.h. Para usar corrente externa tenho de ligar gnd do arduino ao negativo da fonte externa?
Título: Re: Arduino+Servo
Enviado por: amando96 em 16 de Dezembro de 2009, 20:49
Estou com um problema semelhante, não consigo colocar os meus servos a rodar. Tenho as ligações correctamente feitas mas nada. :(
Estou a usar o analogWrite().

EDIT: Encontrei um exemplo aqui no forum usando o servo.h. Para usar corrente externa tenho de ligar gnd do arduino ao negativo da fonte externa?

exacto, mas se for só um servo ele funciona sem power externo :D mas se for para uso continuo é melhor
Título: Re: Arduino+Servo
Enviado por: LordNelthon em 16 de Dezembro de 2009, 21:21
exacto, mas se for só um servo ele funciona sem power externo :D mas se for para uso continuo é melhor
É para uso continuo. Bem me parecia que era necessário fazê-lo mas não tinha a certeza e tinha receio de danificar alguma coisa.

Obrigado. :)
Título: Re: Arduino+Servo
Enviado por: microbyte em 16 de Dezembro de 2009, 22:49
exacto, mas se for só um servo ele funciona sem power externo :D mas se for para uso continuo é melhor
É para uso continuo. Bem me parecia que era necessário fazê-lo mas não tinha a certeza e tinha receio de danificar alguma coisa.

Obrigado. :)

Atenção às voltagens ;) 5v a 6v... Mais que isso não. ;)

Boa sorte :D
Título: Re: Arduino+Servo
Enviado por: LordNelthon em 16 de Dezembro de 2009, 23:53

Atenção às voltagens ;) 5v a 6v... Mais que isso não. ;)

Boa sorte :D
São 4 pilhas AA. :)
Título: Re: Arduino+Servo
Enviado por: jorge_rc em 17 de Dezembro de 2009, 14:33
Nao sei qual é a limitaçao do arduino, mas para o servo, o ideal é utilizar com 5 pilhas recarregaveis..
Título: Re: Arduino+Servo
Enviado por: microbyte em 17 de Dezembro de 2009, 19:39
Só para não pensarem que se acabaram de contradizer, estão ambos correctos.

4 pilhas AA NÃO RECARREGÁVEIS = ~6v
5 pilhas AA RECARREGÁVEIS = ~6v

Isto porque as recarregáveis têm 1.2v e as normais 1.5v ;)
Só para clarificar o pessoal...
Título: Re: Arduino+Servo
Enviado por: jorge_rc em 17 de Dezembro de 2009, 20:31
Sim, sim, mas não se esqueçam também que as 5 pilhas recarregáveis, quando estão carregadas chegam aos 7v, e depois vou progressivamente baixando... No entanto todos os servos que usei no RC até agora aguentaram perfeitamente os 7v sem qualquer problema..
Título: Re: Arduino+Servo
Enviado por: Njay em 17 de Dezembro de 2009, 21:44
No entanto todos os servos que usei no RC até agora aguentaram perfeitamente os 7v sem qualquer problema..
... até ao dia em que um fica maluco ou deixa de funcionar.
Título: Re: Arduino+Servo
Enviado por: microbyte em 17 de Dezembro de 2009, 21:51
No entanto todos os servos que usei no RC até agora aguentaram perfeitamente os 7v sem qualquer problema..
... até ao dia em que um fica maluco ou deixa de funcionar.
Lol... :D Acho que também não ficam malucos com 7v...
Título: Re: Arduino+Servo
Enviado por: jorge_rc em 17 de Dezembro de 2009, 21:59
No entanto todos os servos que usei no RC até agora aguentaram perfeitamente os 7v sem qualquer problema..
... até ao dia em que um fica maluco ou deixa de funcionar.

Os 7v que referi são os resultantes das 6 pilhas recarregaveis, quando acabadas de carregar... e ja me passaram muitos servos e nenhum se queixou até agora  8)
Título: Re: Arduino+Servo
Enviado por: Njay em 17 de Dezembro de 2009, 23:05
As pessoas têm a ideia de que se experimentam 1 ou 2 ou 10 vezes um dispositivo a funcionar fora das suas especificações, que afinal está tudo bem e vai funcionar sempre. É infelizmente uma ideia completamente errada. Ao manter um dispositivo em funcionamento fora das suas especificações, o dispositivo vai-se degradando com o tempo, e se for utilizado "vezes suficientes" acabará por falhar, "misteriosamente" ou "sem aparente razão" (que é o que costumam dizer as pessoas, e depois algumas ainda dizem que o material é que não prestava :)).

Também se pode dizer "sei que estou a abusar um bocadinho do dispositivo, mas aceito que ele um dia vai falhar e aceito o risco, é uma peça barata e a aplicação não é critica", mas isso é muito diferente de dizer que "nenhum se queixou até agora"; é que no 1º caso quem o diz sabe o que está a fazer, e no 2º quem o diz não faz a menor ideia ;).
Título: Re: Arduino+Servo
Enviado por: microbyte em 17 de Dezembro de 2009, 23:46
Eu percebi o que quiseste dizer com o "até ao dia em que"...  ;D

Se há especificações por alguma razão é. Qualquer prática fora das especificações é uma má prática... Disso não há dúvida...
Título: Re: Arduino+Servo
Enviado por: jorge_rc em 18 de Dezembro de 2009, 10:50
OK.

As mais de mil pessoas que andam no radiomodelismo e que utilizam servos, e a sua grande maioria (pelo menos em automodelismo) utiliza os packs de 6v, devem de estar a destruir os servos todos por causa disso...

A voltagem especificada pela maioria das marcas, os 6v é a voltagem nominal.
Título: Re: Arduino+Servo
Enviado por: microbyte em 18 de Dezembro de 2009, 11:31
OK.

As mais de mil pessoas que andam no radiomodelismo e que utilizam servos, e a sua grande maioria (pelo menos em automodelismo) utiliza os packs de 6v, devem de estar a destruir os servos todos por causa disso...

A voltagem especificada pela maioria das marcas, os 6v é a voltagem nominal.

Agora não estou a perceber... Se 6v é a voltagem especificada pelo fabricante porque é que hão-de estar a destruir o servo?
Título: Re: Arduino+Servo
Enviado por: jorge_rc em 18 de Dezembro de 2009, 11:46
Vou tentar explicar o melhor que posso...

A grande maioria dos servos, nas suas especificações, indica como tensão recomendada, os 6v, certo?

Esses 6v são a tensão nominal, que correspondem a 5 pilhas recarregáveis de 1.2v. No entanto, as 5 pilhas quando carregadas tem mais que 6v, chegam aos 7v até. No entanto, isso é sempre "calculado" utilizando a tensão nominal.

Por isso, quando em vez de utilizarem as pilhas utilizarem alguma outra fonte externa (como uma fonte de alimentação), não tem problema em irem até aos 7v reais.

Para concluir: 5 pilhas recerregáveis tem uma tensão nominal de 6v, no entanto, a sua tensão real varia entre os 7v (carregadas) e os 5v mais ou menos (quando descarregadas). E esta diferença entre os 7v e os 5v não causa problema ao servos.


Um abraço
Título: Re: Arduino+Servo
Enviado por: microbyte em 18 de Dezembro de 2009, 11:50
Já percebi o que querias dizer.

Só não concordo com isto:
Para concluir: 5 pilhas recerregáveis tem uma tensão nominal de 6v, no entanto, a sua tensão real varia entre os 7v (carregadas) e os 5v mais ou menos (quando descarregadas). E esta diferença entre os 7v e os 5v não causa problema ao servos.

Quando está descarregada, uma bateria tem pouco mais de 0v...
Título: Re: Arduino+Servo
Enviado por: jorge_rc em 18 de Dezembro de 2009, 18:33
As pilhas recerregaveis não devem baixar dos 0.7/0.8v a partir daí aumenta o risco de não voltarem a receber carga como dantes... alem disso, desde os 0.7v até aos 0v, a descida é muito mais rápida...
Título: Re: Arduino+Servo
Enviado por: Njay em 19 de Dezembro de 2009, 15:35
Se 6V é uma tensão nominal, há-de haver uma tensão máxima, e é essa que deve ser respeitada.

Quanto à tensão mínima de pilhas recarregáveis, depende da quimica, mas nunca é 0V. Nas NiMH a recomendação para se ter uma vida longa é que não se deixem ir abaixo de 1V por célula.