collapse

* Links de Robótica

* Posts Recentes

Recomendação de um opamp para um DAC r2r por jm_araujo
[Hoje às 10:48]


Feira de electricidade e eletrónica por beirao
[Hoje às 00:32]


RN42 e TP-Link MR3020 por doiga
[Ontem às 19:22]


Ajuda Projecto IR / RF por senso
[Ontem às 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]


Amplificador audio por beirao
[12 de Novembro de 2017, 23:43]

Autor Tópico: Arduino+Servo  (Lida 5139 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline msr

  • Mini Robot
  • *
  • Mensagens: 795
Arduino+Servo
« 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

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.235
    • Tiago Rodrigues
Re: Arduino+Servo
« Responder #1 em: 08 de Dezembro de 2009, 18:30 »
Olá..

Vermelho: 5V
Castanho: GND
Laranja: Sinal

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.141
    • Tróniquices
Re: Arduino+Servo
« Responder #2 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.
« Última modificação: 08 de Dezembro de 2009, 18:46 por Njay »

Offline p0wd3r

  • Mini Robot
  • *
  • Mensagens: 74
Re: Arduino+Servo
« Responder #3 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  :-\

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.235
    • Tiago Rodrigues
Re: Arduino+Servo
« Responder #4 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.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.141
    • Tróniquices
Re: Arduino+Servo
« Responder #5 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.
« Última modificação: 08 de Dezembro de 2009, 19:14 por Njay »

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.235
    • Tiago Rodrigues
Re: Arduino+Servo
« Responder #6 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.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.141
    • Tróniquices
Re: Arduino+Servo
« Responder #7 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...

Offline LordNelthon

  • Mini Robot
  • *
  • Mensagens: 96
  • Programming Addicted
Re: Arduino+Servo
« Responder #8 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?
« Última modificação: 16 de Dezembro de 2009, 18:28 por SONIC_ »
Simplesmente fanático por Open Source

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.627
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: Arduino+Servo
« Responder #9 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

Offline LordNelthon

  • Mini Robot
  • *
  • Mensagens: 96
  • Programming Addicted
Re: Arduino+Servo
« Responder #10 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. :)
Simplesmente fanático por Open Source

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Arduino+Servo
« Responder #11 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

Offline LordNelthon

  • Mini Robot
  • *
  • Mensagens: 96
  • Programming Addicted
Re: Arduino+Servo
« Responder #12 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. :)
Simplesmente fanático por Open Source

Offline jorge_rc

  • Mini Robot
  • *
  • Mensagens: 521
Re: Arduino+Servo
« Responder #13 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..

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Arduino+Servo
« Responder #14 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...