LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: AndréD. em 29 de Agosto de 2009, 23:54

Título: [Tutorial] Arduino + Motor Servo
Enviado por: AndréD. em 29 de Agosto de 2009, 23:54
Boas Pessoal...

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-20.jpg&hash=4bdaa5a98cbcc53acd7af5aef3c0f2553d11d172)

Mais uma vez cá estou eu para mais um pequeno tutorial...

Bom depois de toda a tarde a ver se conseguia fazer um "hack" qualquer no meu motor shield para controlar servos, o certo é que nao consegui... E Desisti, porque a partir de certa altura achei que tava a desperdiçar tempo...

Entao decidi estudar um pouco a biblioteca que nos permite controlar tao facilmente os servos (Servo.h), e decidi entao fazer dois tutoriais pelo preço de um...  :D :D :D

Espero que gostem....


Material Necessario (Hardware):
- Servo
- Arduino
- Potenciometro
- 6x Fios De ligação
- Rectangulo de Pele (ou outro material nao condutor) para proteger o arduino
- Cabo USB
- Computador
- BreadBoard


Material Necessario (Software):
- Arduino 0017 (Disponivel em arduino.cc)


1º Passo

Primeiro que tudo temos de recolher todo o material necessario e ter uma secretaria minimamente limpa para puder trabalhar á vontade..


2º Passo

 - Ligar o fio branco da ficha do servo no pino 8 do nosso arduino.
 - Ligar o fio vermelho da ficha do servo no pino 5v do nosso arduino.
 - Ligar o fio preto da ficha do servo no pino GND do nosso arduino.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-6-3.jpg&hash=17aa216c8398bb60236e8fd0ae9ce7768a991be9)

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-8-1.jpg&hash=0bb8aab19fa6df7332c5dcde3e0b403178991595)

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-102.jpg&hash=52bfe0395655ba0886554c0a5973fa18ad1a068b)


3º Passo

Abrir o programa Arduino 0017.
Visitar este (http://arduino.cc/en/Reference/Servo) link para se ficar a conhecer melhor a biblioteca Servo.h.

Depois de esturdar-mos um pouco a biblioteca referida em cima, vamos entao proceder á programação.


4º Passo

Depois de vermos do que a bliblioteca é capaz passemos á programação. Em baixo fica o codigo que alterei para melhor compreensão.

Está tudo comentado para que todos os que se iniciem em programação nao tenham grande dificuldade em perceber qualquer parte do codigo aqui estudado.

Código: [Seleccione]
#include <Servo.h> // Biblioteca que permite controlar mais facilmete os Servos
Servo servo1;      // Criação de um objecto que permitira controlar o servo
 
 
int posicao = 0;   // inicialização da variavel posiçao a 0
int contagem = 0;  // inicialização da variavel posiçao a 0
void setup()
{
  servo1.attach(8);  // Porta onde ira ser ligado o servo
}
 
 
void loop()
{
 if (contagem < 20){ // Condiçao, se a variavel contagem for menor que 20 faz o codigo que esta ente {}
  for(posicao = 0; posicao < 180; posicao +=1)  // Servo gira da posiçao 0 para a posiçao 180 de 1 em 1 grau
  {                              
    servo1.write(posicao);              // "Escreve" no pino 8 a posiçao para onde o servo se vai deslocar
    delay(3);                       // Espera de 3 milisegundos para que o servo possa chegar á sua posiçao
  }
  for(posicao = 180; posicao>=1; posicao-=1)     // Servo gira da posiçao 180 para a posiçao 0 de 1 em 1 grau
  {                                
    servo1.write(posicao);             // "Escreve" no pino 8 a posiçao para onde o servo se vai deslocar
    delay(3);                      // Espera de 3 milisegundos para que o servo possa chegar á sua posiçao
  }
  contagem ++;                  // Adiciona mais 1 á variavel contagem
  }
}

Coloquei um pequeno contador para o servo nao estar infinitamente a girar para um lado e outro, assim depois de 20, que é mais que suficiente para vermos que está tudo ok, o servo para.


5º Passo

Vamos agora proceder ao Upload do codigo para o arduino.

 - Primeiro ligamos o USB ao Arduino

FOTO INDISPONIVEL

 - Depois ao PC

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-18.jpg&hash=9666344c9e0e0ff9e15cb9a992543da8a83a50cb)

 - Depois é so carregar no botao de Upload

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2Fupload.jpg&hash=7757b0bf7cd3f251e5dbf95e77ced36d3c63a23f)

 - E por fim esperar que no canto inferior esquerdo apareça a mensagem "Done Uploading"

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2Fdu.jpg&hash=0feb41d54806fab86bd3b10b2ffa204c0f19a141)

NOTA: Se neste passo acontecer algo e nao aparecer essa mensagem, recomendo a verificarem o codigo e/ou se o cabo está correctamente ligado ao PC e ao Arduino.


6º Passo

Testar o servo com o potenciometro e sem o potenciometro.

(Video Brevemente Disponivel) -> Tou sem Camera...




Montagem com potenciometro

Para controlarmos um servo com um potenciometro teremos que seguir estes passos...


A - Ligar o terminal do meio do potenciometro a um dos pinos analogicos do arduino (eu utilizei o 0).

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-14-1.jpg&hash=fe11691a50f272f7419ecdfa77993d66e25ffcd7)


B - Ligar o terminal de um dos lados do potenciometro aos 5v do nosso arduino

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-15-1.jpg&hash=f2e4c91e2d1adb388532857fdfa277f7dbfd4607)


C - Ligar o ultimo terminal ao GND do arduino

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-17-1.jpg&hash=29ee81851511256290b1552a084925a2cb83e591)


D - Ligar o fio preto ao GND do arduino.

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-182.jpg&hash=98d3463aec77df95a98a143a2caed14e0c811faf)


E - Ligar o fio vermelho ao terminal do potenciometro onde se encontram os 5v (provenientes do arduino)

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-19-1.jpg&hash=b49ee65e99302edd88a04f7e6ca97dca3fab0633)


F - Ligar o fio branco do servo a um pino do arduino (Eu utilizi o 8 )

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi263.photobucket.com%2Falbums%2Fii160%2FMonky_2008%2FUntitled-20.jpg&hash=4bdaa5a98cbcc53acd7af5aef3c0f2553d11d172)


G - Utilizando a mesma biblioteca (Servo.h) vamos entao programar o nosso Atmega para que se possa controlar o servo pelo potenciometro...

Comentei todo o codigo para que todos facilmente o entendam...

Código: [Seleccione]
#include <Servo.h> // Biblioteca que permite controlar mais facilmete os Servos

Servo servo1;      // Criação de um objecto que permitira controlar o servo
 
 
int pinopot = 0;  // Declaração da variavel para o pino que vai ler o valor do potenciometro, neste caso é o pino analogico 0
int valor;    // Declaração da variavel onde vai ser colocado o valor lido do pino analogico 0
 
void setup()
{
 servo1.attach(8);  // Porta onde ira ser ligado o servo
}
 
void loop()
{
  valor = analogRead(pinopot);            // leitura do valor do potenciometro e "escrita" desse valor na variavel valor
  valor = map(valor, 0, 1023, 0, 179);     // Escala para que o valor do potenciometro possa corresponder a um valor de posiçao no servo
  servo1.write(valor);                  // Gira o servo de acordo com a escala da linha acima
  delay(1);                           // Espera de 1 milisegunda para que o servo possa atingir a sua posiçao
}


Depois do passo "G" é so continuar com o 5º e 6º passo mencionados em cima...

Espero que tenham Gostado e peço desculpa por algum erro...

Cumps
AndréD.
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: antonio_jose em 30 de Agosto de 2009, 12:58
Parabens
Está excelente AndréD.
Era mesmo isto que precisava, para controlar os servos do meu Drone atraves de potenciometros.
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: amando96 em 30 de Agosto de 2009, 13:53
qual o máximo de servos/potenciometros que podemos ter de uma vez? eu uma vez esperimentei 3, mas só dois funcionavam :-s.

mas não esperimentei com a biblioteca megaservo...
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: AndréD. em 30 de Agosto de 2009, 14:04
qual o máximo de servos/potenciometros que podemos ter de uma vez? eu uma vez esperimentei 3, mas só dois funcionavam :-s.

mas não esperimentei com a biblioteca megaservo...

Boas...

Corrijam-me se estiver enganado mas penso que podes controlar ate 8 servos.

Cumps
AndréD.
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: ricardo-reis em 30 de Agosto de 2009, 14:16
depende da biblioteca k usares.. mas sim, em princípio será 8..
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: antonio_jose em 30 de Agosto de 2009, 14:48
O Potenciometro é de quantos Ohms?

Cumprimentos
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: AndréD. em 30 de Agosto de 2009, 14:51
Boas...

O potenciometro é de 1000 Ohm....  :D :D :D

Cumps
AndreD.
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: antonio_jose em 30 de Agosto de 2009, 15:43
Para se utilizar mais que um servo/potenciometro basta repetir o código e alterar apenas os pinos, né?

Cumprimentos
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: ricardo-reis em 30 de Agosto de 2009, 16:07
yep.. é isso mesmo.. tendo em atenção k os pinos dos servos (normalmente) são os pwm..
Título: Re:[Tutorial] Arduino + Motor Servo
Enviado por: metRo_ em 31 de Agosto de 2009, 11:19
Citação de: Forum Arduino.cc

There are many Arduino libraries that are suitable for driving servos and speed controllers – here are a few of the references:

The servo library included in the Arduino download – can control one or two servos on pins 9 and 10: http://www.arduino.cc/en/Reference/Servo

A servo library that uses timer2 to control up to 8 servos:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230479947

A software servo library that can control many servos but a refresh function needs to be called every 20ms or so: http://www.arduino.cc/playground/ComponentLib/Servo

An external board that controls up to 8 servos using serial commands: http://www.pololu.com/catalog/product/207

An external board with hardware servo control and an arduino compatible processor: http://www.sparkfun.com/commerce/product_info.php?products_id=8785
Título: Re: [Tutorial] Arduino + Motor Servo
Enviado por: raulse em 29 de Novembro de 2010, 18:55
Opá...

da pra colocar um potenciometro deslizante? como devo fazer, pois o mesmo tem 4 saidas, e esse potenciometro ai do tutorial tem 3...

abraços...
Título: Re: [Tutorial] Arduino + Motor Servo
Enviado por: zordlyon em 29 de Novembro de 2010, 23:33
tens k ver o datasheet do potenciometro...

cumps..
Título: Re: [Tutorial] Arduino + Motor Servo
Enviado por: senso em 29 de Novembro de 2010, 23:37
O mais certo é dois dos terminais serem massas, pois servem de terminal e de meio de fixação do slider.