LusoRobótica - Robótica em Português
Discussão Geral => Ideias => Tópico iniciado 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
-
este post parece uma indirecta vinda do tig.. :) eu já posto kk coisa.. :)
-
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
-
:) 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á..)
-
nada dissso esta tudo bem mas eheheh
-
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)
-
#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
-
batente.. não?
-
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):
analogWrite(pin,127);
Rodar o parafuso do servo até o motor ficar parado sem vibrar.
depois fazer um teste de posições:
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?
-
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
-
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..
-
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.
-
tens a certeza? eu ja montei com eles a 90º..
-
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.
-
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
-
#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.)
-
com o codigo que escreves o meu servo anda so as voltas e nao faz nada daquilo que é pedido.
-
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.
-
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 ;)
-
Mas se fazes assim, deixas de poder controlar o sentido e velocidade só por um fio certo?!
-
fica um motor dc normal.. controlo o sentido com a ponte-H e a velocidade com PWM
não é isto que se pretende?
-
controlar o sentido e velocidade só por um fio certo?!
ok agora percebi.. desculpem se estou a complicar :D
-
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.
-
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 ;)
/*
* 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
}
}
-
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
-
Que trabalheira... está tudo maluco... :o
-
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.. :)
-
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
-
pois.. servos modificados n são servos, são motores dc de três fios.. lol..
-
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
-
pois, se n lhe meteres as resistencias é.. :P n lhe controlas é a velocidade de rotação, ou estou enganado?
-
ja respondi a essa pergunta anteriormente.. :P
controlo velocidade como faço com um DC normal, ou seja, com PWM :P
-
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..
-
mas afinal a placa q querem fazer é para controlar servos ou dc??
-
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).
-
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..
-
no programa que o guibot aqui deixo na posicao 5 o servo n pode mexer certo?
poderei ter descoberto o meu problema....
-
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..
-
oi entao no teu programa o x ou seja o centro o servo tem de estar parado...
é isso ?
-
se o servo é de 180 graus sim.. se está modifocado para rotação contínua como acho k disseste, não..
-
pois o meu servo ja esta configurado p rotacao continua.
-
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..
-
pára na posição em que estiver o potenciometro. se n tiver potenciometro n sei pk tb n fiz
-
mas afinal qual e programa que da p calibrar os servos???
-
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.