LusoRobótica - Robótica em Português

Discussão Geral => Ideias => Tópico iniciado por: andnobre em 06 de Fevereiro de 2009, 20:29

Título: tutorial de servos
Enviado por: andnobre em 06 de Fevereiro de 2009, 20:29
oi a todos devido a dificuldades que eu estou a ter com os servos era de bom agrado ter um tutorial sobre servos do tipo desde programas de calibração ate a modificacao dos servos de varios tipos e feitios assim o pessoal ja teria varias ideias porque na net ha tanta informacao que uma pessoa ja nao sabe o que é melhor.
quem diz os servos diz outros tipo de sensor.
abracos
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 06 de Fevereiro de 2009, 20:40
este post parece uma indirecta vinda do tig.. :) eu já posto kk coisa.. :)
Título: Re:tutorial de servos
Enviado por: andnobre em 06 de Fevereiro de 2009, 20:47
n e nada espero que nao tenham levado a mal mas é assim ja que eu tenho problemas so quero expor aos outros para qd aprecer alguem com eles ja fiquem resolvidos e qd mais informacao melhor mas com qualidade que este forum sempre nos habituou
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 06 de Fevereiro de 2009, 20:49
:) eu tava a brincar.. por ele já mo ter sugerido antes..

tava a procurar o que fiz ontem pa testar o meu mas n encontro.. se calhar gravei-lhe alguma coisa por cima, sem krer.. eu mais logo faço, k vou ter de saír daqui a pouco.. :S 

(desculpa, mas eu tava mm a brincar, n leves a mal, pá..)
Título: Re:tutorial de servos
Enviado por: andnobre em 06 de Fevereiro de 2009, 20:50
nada dissso esta tudo bem mas eheheh
Título: Re:tutorial de servos
Enviado por: TigPT em 07 de Fevereiro de 2009, 01:27
Hahaha

Sim, como já tenho digo, acho que devemos de apostar neste tipo de artigos, full reviews sobre cosias em especifico com os respectivos passinhos todos para servir de tutorial. Ok ok lá vem ele com a desculpa de que não tem tempo por isso não fez mas que fazia parte de lista... O que é certo é que é verdade :P

Ando a ver se não só organizo a minha vida que está muito atribulado, como se organizo o futuro do LusoRobótica.
Há muita coisa que não se vê que tem que ser feita... Estou a dar o meu máximo para levar este fórum a bom rumo, isso implica muito trabalho, mais do que poderia imaginar!

Ando a preparar algumas alterações, que são para o bem de todos.

(Desculpem o offtopic... :P Espero não ser banido por andar a fazer offtopics em todo o lado ;D)
Título: Re:tutorial de servos
Enviado por: metRo_ em 07 de Fevereiro de 2009, 01:39
Código: [Seleccione]
#include <Servo.h>
 
Servo myservo;
void setup()
{
  myservo.attach(9);
}
void loop()
{                             
    myservo.write(pos);
}

Estou a usar este código para colocar o servo na posição pertendida e o que se passa é que para posições a cima de +- 170º ele começa a fazer um barulho como se o motor quisesse continuar a andar, um grgggrrrrgrgrgrrrrrgrgr
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 01:45
batente.. não?
Título: Re:tutorial de servos
Enviado por: TigPT em 07 de Fevereiro de 2009, 01:46
Nunca utilizei essa lib, prefiro calcular à mão sabendo que

servo dá 180º de pwm 0 a pwm 255 então:

-90º = 0
+ 90º = 255

Todos os outros valores são uma regra de 3 simples... Mas tenho que explorar.

Que tal irmos juntando ideias para depois se compilar tudo num tutorial em condições?

Código para calibrar o servo (normal ou modificado):
Código: [Seleccione]
analogWrite(pin,127);Rodar o parafuso do servo até o motor ficar parado sem vibrar.

depois fazer um teste de posições:
Código: [Seleccione]
for(int i = 0; i<=255;i++){
  analogWirte(pin,i);
  delay(100);
}

Meter um tutorial nosso de como modificar um servo para rotação continua,

Mais ideias?
Título: Re:tutorial de servos
Enviado por: metRo_ em 07 de Fevereiro de 2009, 01:47
Não me parece, a não ser que a batente chegue ao final antes dos 180º, pois pode ser isto.

Consegues explicar que parafuso é? tenho aqui um futaba s3003 e não vejo parafuso nenhum :S
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 01:50
pode ser um suposto servo de 90º.. basicamente os batentes estão posicionados a 180, mas ele supostamente só é concebido pra dar 90.. (talvez pelos potenciometros ou o raio..)

eu já tentei com essa lib e com a servoTimer1.. realmente com ambas dá-me amplitudes inferiores a 180º, hei-de experimentar o codigo que o tig tá a mostrar..
Título: Re:tutorial de servos
Enviado por: TigPT em 07 de Fevereiro de 2009, 01:51
numa das faces do servo ele tem um orifício circular com cerca de meio centímetro de diâmetro, onde cabe uma chave de fendas estrela que irá rodar um "parafuso" potenciómetro para fazer a calibração do servo. É o único sítio onde uma superfície não é plana na caixa do servo.

Lembrei-me de uma cosias.

Se o desmontaste, se ao montar não posicionaste bem as peças, podia parecer no sitio mas ter ficado o batente deslocado.

Tem que se rodar o potenciómetro todo para um lado, e encostar o batente a esse mesmo lado antes de fechar a caixa do servo.
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 01:58
tens a certeza? eu ja montei com eles a 90º..
Título: Re:tutorial de servos
Enviado por: TigPT em 07 de Fevereiro de 2009, 02:00
Desde que os dois dispositivos estejam a um extremo, o potenciómetro e o batente, não há problema, nos alterados para rotação continua este problema nem se coloca pois o batente é removido e o potenciómetro também.
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 02:03
vou ver se refaço o raio do código pa pôr o servo a rodar conforme carregas nas teclas.. n sei k me deu de gravar outra coisa por cima.. :S
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 02:46
Código: [Seleccione]
#include <ServoTimer1.h>

ServoTimer1 servo1;

int tecla;

void setup() {
  Serial.begin(9600);         
  servo1.attach(9);
}

void loop() {
if (Serial.available() > 0){
  tecla = Serial.read();
  if(tecla == 'z'){
    Serial.println("Esquerda");
servo1.write(110);
 
  }
  if(tecla == 'c'){
    Serial.println("Direita");
    servo1.write(70);
 
  }
  if(tecla == 'x'){
    Serial.println("Centro");
    servo1.write(90);
    }
  }
}

testem aí este.. a biblioteca ServoTimer1 n sei o que faz de especial, mas é a que estava sugerida no tut da ladyada.. (http://www.ladyada.net/make/mshield/use.html)

deixo anexada a biblioteca.. (que deve ser extraída na pasta hardware/library/ do arduino.)
Título: Re:tutorial de servos
Enviado por: andnobre em 07 de Fevereiro de 2009, 11:22
com o codigo que escreves o meu servo anda so as voltas e nao faz nada daquilo que é pedido.
Título: Re:tutorial de servos
Enviado por: andnobre em 07 de Fevereiro de 2009, 11:28
bem n sei mesmo o que fazer aos meus servos eu tenho 4 da futaba s3003 a modificacao que eu fiz foi:
tirar o batente depois colocar uma divisor resistivo com duas resistencias de 10K em vez do potenciometro.
estes servos nao nada do colocar uma chave de estrela para calibrar....
a modificação que eu fiz vem na elecktor de agosto de 2008 que vem na pagina 55.
Título: Re:tutorial de servos
Enviado por: guibot em 07 de Fevereiro de 2009, 11:36
eu já modifiquei vários servos e nunca usei resistências... queres que eles fiquem servos de rotação contínua certo?

eu apenas removo o circuito por completo, tiro o batente e ligo fios novos aos pins do motor, e fico com um motor dc normal com redutoras.

espero estar a ajudar  ;)
Título: Re:tutorial de servos
Enviado por: TigPT em 07 de Fevereiro de 2009, 12:22
Mas se fazes assim, deixas de poder controlar o sentido e velocidade só por um fio certo?!
Título: Re:tutorial de servos
Enviado por: guibot em 07 de Fevereiro de 2009, 12:36
fica um motor dc normal..  controlo o sentido com a ponte-H e a velocidade com PWM

não é isto que se pretende?
Título: Re:tutorial de servos
Enviado por: guibot em 07 de Fevereiro de 2009, 12:39
Citar
controlar o sentido e velocidade só por um fio certo?!

ok agora percebi.. desculpem se estou a complicar  :D
Título: Re:tutorial de servos
Enviado por: TigPT em 07 de Fevereiro de 2009, 12:47
Citar
controlar o sentido e velocidade só por um fio certo?!

ok agora percebi.. desculpem se estou a complicar  :D
Pois, ele quer uma coisas simples e por isso o servo de rotação continua, ao transforma-lo num potor DC, vai complicar porque terá que utilizar ponte H e tudo mais.

Mas fica a ideia para se alguém quiser um motor DC com muita desmultiplicação.
Título: Re:tutorial de servos
Enviado por: guibot em 07 de Fevereiro de 2009, 13:00
Ricardo finalmente encontrei o tal código que muda a posição do servo consoante a tecla (de 0 a 9) que pressionas, aqui fica  ;)

Código: [Seleccione]
/*
 * Servo Serial Better
 * -------------------
 *
 *
 * Created 18 October 2006
 * copyleft 2006 Tod E. Kurt <tod@todbot.com>
 * http://todbot.com/
 *
 * adapted from "http://itp.nyu.edu/physcomp/Labs/Servo"
 */

int servoPin = 7;     // Control pin for servo motor

int pulseWidth = 0;    // Amount to pulse the servo
long lastPulse = 0;    // the time in millisecs of the last pulse
int refreshTime = 20;  // the time in millisecs needed in between pulses
int val;               // variable used to store data from serial port

int minPulse = 700;   // minimum pulse width

void setup() {
  pinMode(servoPin, OUTPUT);  // Set servo pin as an output pin
  pulseWidth = minPulse;      // Set the motor position to the minimum
  Serial.begin(19200);         // connect to the serial port
  Serial.println("Servo Serial Better ready");
}

void loop() {
  val = Serial.read();      // read the serial port
  // if the stored value is a single-digit number, blink the LED that number
  if (val >= '0' && val <= '9' ) {
    val = val - '0';       // convert from character to number
    val = val * (180/9);   // convert from number to degrees
    pulseWidth = (val * 9) + minPulse;  // convert angle to microseconds
    Serial.print("moving servo to ");
    Serial.print(pulseWidth,DEC);
    Serial.println();
  }
  updateServo();   // update servo position
}

// called every loop().
// uses global variables servoPin, pulsewidth, lastPulse, & refreshTime
void updateServo() {
  // pulse the servo again if rhe refresh time (20 ms) have passed:
  if (millis() - lastPulse >= refreshTime) {
    digitalWrite(servoPin, HIGH);   // Turn the motor on
    delayMicroseconds(pulseWidth);  // Length of the pulse sets the motor position
    digitalWrite(servoPin, LOW);    // Turn the motor off
    lastPulse = millis();           // save the time of the last pulse
  }
}

Título: Re:tutorial de servos
Enviado por: jagsilva em 07 de Fevereiro de 2009, 13:07
fica um motor dc normal..  controlo o sentido com a ponte-H e a velocidade com PWM

não é isto que se pretende?

Já alterei dois motores para rotação continua e retirei a placa. Ja tenho montada a ponte mas agora estou na duvida sobre qual a melhor livraria para comandar os motores. Podes dar uma ajuda?
Obrigado
Título: Re:tutorial de servos
Enviado por: TigPT em 07 de Fevereiro de 2009, 13:08
Que trabalheira... está tudo maluco...  :o
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 13:26
gui, o que eu postei tb faz a rotação dependendo da tecla k pressionas.. n serve é pa servos modificados, n reparei que era isso que ele kria.. tb se arranja código pra isso.. é como o tig disse ontem.. :)
Título: Re:tutorial de servos
Enviado por: guibot em 07 de Fevereiro de 2009, 13:29
Citar
Citação de: guibot em Hoje às 12:36
fica um motor dc normal..  controlo o sentido com a ponte-H e a velocidade com PWM

não é isto que se pretende?

Já alterei dois motores para rotação continua e retirei a placa. Ja tenho montada a ponte mas agora estou na duvida sobre qual a melhor livraria para comandar os motores. Podes dar uma ajuda?
Obrigado

se alteras-te os motores para rotação contínua não precisas de livraria, agora tornaram-se motores DC normais
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 13:33
pois.. servos modificados n são servos, são motores dc de três fios.. lol..
Título: Re:tutorial de servos
Enviado por: guibot em 07 de Fevereiro de 2009, 13:36
Citar
pois.. servos modificados n são servos, são motores dc de três fios.. lol..

ou não, se os modificares como eu disse ficam só com 2 fios como um DC normal  LOL
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 14:28
pois, se n lhe meteres as resistencias é.. :P n lhe controlas é a velocidade de rotação, ou estou enganado?
Título: Re:tutorial de servos
Enviado por: guibot em 07 de Fevereiro de 2009, 14:32
ja respondi a essa pergunta anteriormente..   :P

controlo velocidade como faço com um DC normal, ou seja, com PWM  :P
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 14:34
n vi.. pois, assim sendo é porreiro.. só que é capaz de ficar mais caro.. em vez das resistencias meter a ponte h.. só na ponte ficam 5 euros, ou à volta disso.. as resistencias n são tão caras..
Título: Re:tutorial de servos
Enviado por: jagsilva em 07 de Fevereiro de 2009, 15:04
mas afinal a placa q querem fazer é para controlar servos ou dc??
Título: Re:tutorial de servos
Enviado por: TigPT em 07 de Fevereiro de 2009, 15:14
Motores DC, os servos não preciso de placa de controlo pois basta alimentar e ligar o fio de sinal ao mircocontrolador (Arduino por exemplo).
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 07 de Fevereiro de 2009, 15:21
lol.. mas realmente este tópico tá a descambar.. :P era suposto ser de tuts pa servos e já vai em motores dc e placas e genéricos..
Título: Re:tutorial de servos
Enviado por: andnobre em 09 de Fevereiro de 2009, 15:30
no programa que o guibot aqui deixo na posicao 5 o servo n pode mexer certo?
poderei ter descoberto o meu problema....
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 09 de Fevereiro de 2009, 15:45
eu n tenho a certeza, mas tendo em conta que esse programa admite 10 valores possíveis, suponho que sejam 5 angulos/velocidades diferentes para cada lado, n tendo a posição de 90º ou parado.. tenta com o meu código, que é bem mais restrito e auto-explicativo.. os valores que tenho nele são valores de angulos, portanto, mais simples e directo de ver o que está bem ou mal..
Título: Re:tutorial de servos
Enviado por: andnobre em 09 de Fevereiro de 2009, 15:53
oi entao no teu programa o x ou seja o centro o servo tem de estar parado...
é isso ?
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 09 de Fevereiro de 2009, 16:06
se o servo é de 180 graus sim.. se está modifocado para rotação contínua como acho k disseste, não..
Título: Re:tutorial de servos
Enviado por: andnobre em 09 de Fevereiro de 2009, 16:11
pois o meu servo ja esta configurado p rotacao continua.
Título: Re:tutorial de servos
Enviado por: ricardo-reis em 09 de Fevereiro de 2009, 16:14
assim sendo, n te sei dizer em que circunstancias ele pára.. que eu nunca experimentei isso.. :S espera por alguém que te possa dar essa info..
Título: Re:tutorial de servos
Enviado por: silva_p em 09 de Fevereiro de 2009, 16:22
pára na posição em que estiver o potenciometro. se n tiver potenciometro n sei pk tb n fiz
Título: Re:tutorial de servos
Enviado por: andnobre em 09 de Fevereiro de 2009, 18:28
mas afinal qual e programa que da p calibrar os servos???
Título: Re:tutorial de servos
Enviado por: TigPT em 09 de Fevereiro de 2009, 22:20
Para calibrar os servos manda-se um PWM de 50% ou seja, angulo de 90º (se o servo era originalmente de 180º) ou um analogWrite de 127 pois o analogWrite faz pwm de 0 a 255, e os 127 fica nos 50%.

Tens que fazer analogWrite(pin,127); e o servo tem que ficar parado, caso contrario é porque está descalibrado.