• Welcome to LusoRobótica - Robótica em Português.
 

[Tutorial] Arduino + Motor Servo

Started by AndréD., 29 de August de 2009, 23:54

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

AndréD.

Boas Pessoal...


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.








3º Passo

Abrir o programa Arduino 0017.
Visitar este 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.

#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



- Depois é so carregar no botao de Upload



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



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).




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




C - Ligar o ultimo terminal ao GND do arduino




D - Ligar o fio preto ao GND do arduino.




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




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




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...

#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.

antonio_jose

Parabens
Está excelente AndréD.
Era mesmo isto que precisava, para controlar os servos do meu Drone atraves de potenciometros.

amando96

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...

AndréD.

Quote from: amando96 on 30 de August 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...

Boas...

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

Cumps
AndréD.

ricardo-reis

depende da biblioteca k usares.. mas sim, em princípio será 8..

antonio_jose

O Potenciometro é de quantos Ohms?

Cumprimentos

AndréD.

Boas...

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

Cumps
AndreD.

antonio_jose

Para se utilizar mais que um servo/potenciometro basta repetir o código e alterar apenas os pinos, né?

Cumprimentos

ricardo-reis

yep.. é isso mesmo.. tendo em atenção k os pinos dos servos (normalmente) são os pwm..

metRo_

Quote from: 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

raulse

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...

zordlyon

tens k ver o datasheet do potenciometro...

cumps..
Cumprimentos,
André Carvalho.

senso

O mais certo é dois dos terminais serem massas, pois servem de terminal e de meio de fixação do slider.
Avr fanboy