collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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

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

Offline msr

  • Mini Robot
  • *
  • Mensagens: 798
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.372
    • 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.598
    • 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.372
    • 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.598
    • 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.372
    • 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.598
    • 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.631
  • 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...