collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 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: Ligar 5 servos ao arduino  (Lida 9060 vezes)

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

Offline Nanner

  • Mini Robot
  • *
  • Mensagens: 1
Ligar 5 servos ao arduino
« em: 20 de Novembro de 2010, 19:56 »
Olá a todos,

Andei a procura aqui pelo fórum mas não consegui encontrar, se foi simplesmente uma má busca peço desculpa x.x Precisava de saber como é possível ligar 5 servos ao arduino. É preciso uma fonte de alimentação externa pois o arduino não fornece energia suficiente, certo? Alguém pode explicar-me (duma forma suficientemente detalhada para quem tem conhecimentos quase nulos de electrónica) como poderei faze-lo? De que forma ligar os motores entre si, à alimentação e ao arduino, e etc.


Desculpem novamente se estou a fazer alguma pergunta idiota ou se simplesmente deveria ter procurado melhor.
Obrigado desde já pela ajuda.

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Ligar 5 servos ao arduino
« Responder #1 em: 21 de Novembro de 2010, 01:56 »
Boas Nanner.

A questão da alimentação depende dos servos. Dependem da corrente que cada servo consome, porque há servos e Servos.
Era provavelmente do teu interesse dares mais informação acerca do material que pretendes usar para que possas obter respostas mais directas e não tão gerais.

Basicamente, vais precisar de ligar os servos a uma fonte (5v - 6v) que debite corrente suficiente para o que eles precisam. Depois, recebem o PWM do Arduino, gerado pela biblioteca Servo.
Todos os servos analógicos têm 3 fios: vermelho/branco (liga ao positivo da fonte), preto/castanho (liga ao negativo da fonte) e amarelo/laranja (liga ao PWM). As alimentações (+ e -) são partilhadas por todos os servos e os sinais de controlo (PWM) são individuais caso queiras ter comportamentos diferentes para cada um dos servos.

Desculpa se não respondi bem àquilo que perguntaste, se eu não percebi tenta ser um pouco mais claro no que pretendes.

Offline Junior Frota

  • Mini Robot
  • *
  • Mensagens: 39
Re: Ligar 5 servos ao arduino
« Responder #2 em: 12 de Janeiro de 2011, 23:42 »
Olá amigos, como nosso amigo Nanner, sou iniciante em robótica e estou tentando desenvolver um projeto de um braço robótico e para isso vou precisar controlar cinco servos futaba S3003, no entanto, fiz alguns testes com apenas dois apenas e dois potenciômetros (cada potenciômetro controlará um servo), mas não consegui controlar nem mesmo dois de uma vez, muito menos cinco.  :-\

O código que eu criei é o seguinte:


#include <Servo.h>

Servo servo_1;          // declara o servo 1
Servo servo_2;          // declara o servo 2

int val_1 = 0;          // variavel que recebe o valor de pot_1
int val_2 = 0;          // variavel que recebe o valor de pot_2
int pot_1 = 0;          // pino de entrada analógica do pot_1
int pot_2 = 2;          // pino de entrada analógica do pot_2

void setup(){
  Serial.begin(9600);   // inicia a comunicacao serial
  servo_1.attach(3);    // pino onde esta ligado o servo 1
  servo_2.attach(5);    // pino onde esta ligado o servo 2
}

void loop(){
  val_1 = analogRead(pot_1);   // val_1 armazena valor lido por pot_1
  val_1 = map(val_1, 0, 1023, 5, 175);
  servo_1.write(val_1);        // servo 1 apresenta angulo indicado por val_1
  val_2 = analogRead(pot_2);   // val_2 armazena valor lido por pot_2
  val_2 = map(val_2, 0, 1023, 5, 175);
  servo_2.write(val_2);        // servo 2 apresenta angulo indicado por val_2
  Serial.print(val_1);         // imprime no terminal o valor de val_1
  Serial.print("x");
  Serial.println(val_2);       // imprime no terminal o valor de val_2
}


Então, não sei onde posso estar errando. Alguém que puder me ajudar, ficarei muito agradecido.
"Nossa maior fraqueza está em desistir. A forma mais certa de vencer, é tentar mais uma vez" (Thomas Edson)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Ligar 5 servos ao arduino
« Responder #3 em: 12 de Janeiro de 2011, 23:47 »
Estás a alimentar os servos com que?
O problema quase de certeza que é falta de corrente, com 5 servos aponta para 2-3A ou mais de pico de corrente se todos se mexerem ao mesmo tempo.
Avr fanboy

Offline Junior Frota

  • Mini Robot
  • *
  • Mensagens: 39
Re: Ligar 5 servos ao arduino
« Responder #4 em: 12 de Janeiro de 2011, 23:52 »
Como no momento tenho apenas dois servos, estou alimentando-os externamente com 6 V (4 pilhas AA).
e quanto ao código-fonte, o que achas? Pois penso que, se eu entender a maneira de como controlar dois servos, penso eu que serei capaz de controlar cinco.
"Nossa maior fraqueza está em desistir. A forma mais certa de vencer, é tentar mais uma vez" (Thomas Edson)

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re: Ligar 5 servos ao arduino
« Responder #5 em: 12 de Janeiro de 2011, 23:55 »
se bem me parece falta-te o delay de 15 ms (tempo de resposta dos servos)..

vê este tutorial: http://www.arduino.cc/en/Tutorial/Knob

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Ligar 5 servos ao arduino
« Responder #6 em: 12 de Janeiro de 2011, 23:55 »
Pois, 4 pilhas AA podem não ser suficientes se os servos forem muito grandes, tens as massas partilhadas entre o arduino e as pilhas?
Avr fanboy

Offline Junior Frota

  • Mini Robot
  • *
  • Mensagens: 39
Re: Ligar 5 servos ao arduino
« Responder #7 em: 13 de Janeiro de 2011, 00:02 »
Muito bom esses tutoriais do site do Arduino, no entanto, controlar um servo é fácil, mas quando tento controlar mais de um, não dá certo. Em alguns momentos um deles fica com movimento desordenado e o outro nem se quer se move.

Eu devo colocar o comando delay(15) depois do controle de cada servo ou apenas no final:

void loop(){
  val_1 = analogRead(pot_1);   // val_1 armazena valor lido por pot_1
  val_1 = map(val_1, 0, 1023, 5, 175);
  servo_1.write(val_1);        // servo 1 apresenta angulo indicado por val_1
  delay(15);
  val_2 = analogRead(pot_2);   // val_2 armazena valor lido por pot_2
  val_2 = map(val_2, 0, 1023, 5, 175);
  servo_2.write(val_2);        // servo 2 apresenta angulo indicado por val_2
  delay(15);
  Serial.print(val_1);         // imprime no terminal o valor de val_1
  Serial.print("x");
  Serial.println(val_2);       // imprime no terminal o valor de val_2
}


ou

void loop(){
  val_1 = analogRead(pot_1);   // val_1 armazena valor lido por pot_1
  val_1 = map(val_1, 0, 1023, 5, 175);
  servo_1.write(val_1);        // servo 1 apresenta angulo indicado por val_1
  val_2 = analogRead(pot_2);   // val_2 armazena valor lido por pot_2
  val_2 = map(val_2, 0, 1023, 5, 175);
  servo_2.write(val_2);        // servo 2 apresenta angulo indicado por val_2
  Serial.print(val_1);         // imprime no terminal o valor de val_1
  Serial.print("x");
  Serial.println(val_2);       // imprime no terminal o valor de val_2
  delay(15);
}


?????
"Nossa maior fraqueza está em desistir. A forma mais certa de vencer, é tentar mais uma vez" (Thomas Edson)

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re: Ligar 5 servos ao arduino
« Responder #8 em: 13 de Janeiro de 2011, 00:07 »
testaste primeiro os angulos de rotação dos servos, para perceberes se há diferenças entre eles?

em princípio deve chegar no final.. isso é só pra dar tempo ao servo pra ele rodar.. da posição em k tá, até à posição que lhe pediste com o potenciómetro..

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: Ligar 5 servos ao arduino
« Responder #9 em: 13 de Janeiro de 2011, 00:11 »
Não sei a bilbioteca servo mudou, mas antes só dava para controlar 2 servos nos pinos 9 e 10, passei logo a usar a biblioteca megaservo, se na realidade a bilbioteca servo mudou, é favor ignorar este post...  :-X

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re: Ligar 5 servos ao arduino
« Responder #10 em: 13 de Janeiro de 2011, 00:15 »
Não sei a bilbioteca servo mudou, mas antes só dava para controlar 2 servos nos pinos 9 e 10, passei logo a usar a biblioteca megaservo, se na realidade a bilbioteca servo mudou, é favor ignorar este post...  :-X

segundo eles já dá para controlar até 8..

(eu tenho-a testada com 4 e funciona)

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Ligar 5 servos ao arduino
« Responder #11 em: 13 de Janeiro de 2011, 00:39 »
Experimenta pôr a condensador de 100uF ou mais ligado entre o + e o - de cada servo, ali mesmo juntinho às fichas deles.

Se estás a usar pilhas alkalinas é capaz de não chegar. Experimenta umas médias ou pilhas AA de NiMH de mais de 1800 mAh.

Offline Junior Frota

  • Mini Robot
  • *
  • Mensagens: 39
Re: Ligar 5 servos ao arduino
« Responder #12 em: 13 de Janeiro de 2011, 00:55 »
Eu tentarei usar a biblioteca Megaservos e verei no que dá.

Por enquanto muito obrigado pela ajuda.
"Nossa maior fraqueza está em desistir. A forma mais certa de vencer, é tentar mais uma vez" (Thomas Edson)

Offline Junior Frota

  • Mini Robot
  • *
  • Mensagens: 39
Re: Ligar 5 servos ao arduino
« Responder #13 em: 13 de Janeiro de 2011, 01:50 »
Então meus amigos, problema resolvido, pelo menos por enquanto.  :P

Acho que o problema não era a biblioteca que esta sendo usada, mas sim o fato de eu não ter ligado o negativo da bateria externa no pino GND da placa Arduino, eu acho que foi até ignorância de minha parte, pois manjo pouco de eletrônica, no entanto, assim que conectei o negativo com o GND da placa, os servos funcionaram perfeitamente.

O código ficou assim:

#include <MegaServo.h>

MegaServo servo_1;
MegaServo servo_2;

int pos_1 = 0;
int pos_2 = 0;
int pot_1 = 0;
int pot_2 = 2;

void setup()
{
  servo_1.attach(9);
  servo_2.attach(8);
}
void loop()
{
  pos_1 = analogRead(pot_1);
  pos_1 = map(pos_1, 0,1023,5,170);
  servo_1.write(pos_1);
  delay(15);
  pos_2 = analogRead(pot_2);
  pos_2 = map(pos_2, 0,1023,5,170);
  servo_2.write(pos_2);
  delay(15);
}


Agora irei tentar outro projeto: controlar a posição de um servo usando o analógico de um joystick de PS2.

"Nossa maior fraqueza está em desistir. A forma mais certa de vencer, é tentar mais uma vez" (Thomas Edson)