LusoRobótica - Robótica em Português
Robótica => Discussão geral sobre robótica => Tópico iniciado por: R.S. em 24 de Junho de 2009, 12:05
-
tenho 5 servos tamanha standard e nao sei o que fazer com eles. :'(
podem me dar ideias por favor.
abraços R.S.
-
podias dar-mos a mim, eu acho uma boa ideia. ;D ;D ;D
jp_
-
cada custou 10 euros 5x10=50 euros e como é para um membro do lusorobotica vendo os 5 a 80 ok?!!!
-
ou não os queres vender ou essas contas ??? ??? ;D
-
é pelos vistos fica mais caro por ser membro do lusorobotica :-\ Não gosta do forum
Mas a ideia eras ser dados não comprados ;D ;D
jp_
-
é pá ter servos A MAIS é que é bom, agora A MENOS é pior, guarda uns quantos na gaveta, nunca se sabe se um dos que estas a usar avareia...
-
Para já podes começar por modificar 2 deles para rotação continua para fazer de motores, espetas o arduino em cima e já tens uma base móvel de robótica. Depois podes fazer um braço mecânico para apanhar coisas do chão :P 3 servos já chegam para uns bons eixos de liberdade, e ups... já os gastei todos :D
-
boa ideia tigpt vou fazer só o braço a base ja tenho.
-
boa ideia tigpt vou fazer só o braço a base ja tenho.
olha se quiseres trocar dois dos servos, por dois que eu tenho de rotação continua, era fixe, não tinhas de os modificar, eu agora não os uso os meus de rotação continua...
-
Para já podes começar por modificar 2 deles para rotação continua para fazer de motores, espetas o arduino em cima e já tens uma base móvel de robótica. Depois podes fazer um braço mecânico para apanhar coisas do chão :P 3 servos já chegam para uns bons eixos de liberdade, e ups... já os gastei todos :D
Smalluino! :D
-
o "braço" ja esta quase concluido, so me falta fazer a "mao"
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi817.photobucket.com%2Falbums%2Fzz97%2Fkrokojunior%2F24062009796.jpg&hash=f49aefa9e4780b60b6445a119abf55509b87d1cb)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fi817.photobucket.com%2Falbums%2Fzz97%2Fkrokojunior%2F24062009797.jpg&hash=5bc8e1c5bbbc8d92128ea961a885707b739c1afc)
tenho aqui o codigo para controlar um servo com potenciometro, como "multiplico o codigo" para controlar 4 servos??
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
abraços R.S.
-
e um videozinho :)
-
tenho aqui o codigo para controlar um servo com potenciometro, como "multiplico o codigo" para controlar 4 servos??
pois.. não.. não multiplicas pk se não estou em erro, a biblioteca n te permite controlar tanto servo.. :) mas não estou mt certo disto..
-
A lib servo permite até 8 servos sem ter que fazer SoftwareServo::refresh() e um por cada pin (14) se utilizares esse método.
http://www.arduino.cc/playground/ComponentLib/Servo (http://www.arduino.cc/playground/ComponentLib/Servo)
-
Agora metes umas rodas e fazes isso andar atrás das pessoas, a agarrar-lhes nas pernas com a garra. Devia ser um fartote de rir :)
-
ai é, tiago? tinha ideia que n suportava tantos, deve ser a servotimer2, então..
lol, njay.. n devia era passar da primeira, com o pontapé k levava.. :D
-
#include <SoftwareServo.h>
#include <Servo.h>
SoftwareServo myservo;
int potpin1 = 0;
int potpin2 = 1;
int potpin3 = 2;
int potpin4 = 3;
int val;
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
myservo3.attach(12);
myservo4.attach(13);
}
void loop()
{
val = analogRead(potpin1);
val = analogRead(potpin2);
val = analogRead(potpin3);
val = analogRead(potpin4);
val = map(val, 0, 1023, 0, 179);
myservo1.write(val);
myservo2.write(val);
myservo3.write(val);
myservo4.write(val);
delay(15);
SoftwareServo::refresh();
}
esta mal mas é tipo isto que eu quero fazer mas eu como nao percemo lá muito de programaçao da me sempre algum erro. :'(
-
2º desafio... fazê-lo robusto o suficiente para resistir a pontapés e voltar logo para agarrar a perna do transeunte outra vez :)
-
lol.. dps só falta pôr um speaker a gritar 'rendes-te ou morres?!'
-
#include <SoftwareServo.h>
#include <Servo.h>
SoftwareServo myservo;
int potpin1 = 0;
int potpin2 = 1;
int potpin3 = 2;
int potpin4 = 3;
int val;
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
myservo3.attach(12);
myservo4.attach(13);
}
void loop()
{
val = analogRead(potpin1);
val = analogRead(potpin2);
val = analogRead(potpin3);
val = analogRead(potpin4);
val = map(val, 0, 1023, 0, 179);
myservo1.write(val);
myservo2.write(val);
myservo3.write(val);
myservo4.write(val);
delay(15);
SoftwareServo::refresh();
}
esta mal mas é tipo isto que eu quero fazer mas eu como nao percemo lá muito de programaçao da me sempre algum erro.
-
R.S.
aqui:
val = analogRead(potpin1);
val = analogRead(potpin2);
val = analogRead(potpin3);
val = analogRead(potpin4);
val = map(val, 0, 1023, 0, 179);
Estás a ler tudo para a mesma variável, ou seja, só vais ficar com o valor de potpin4 pois os outros já foram rescritos pela ultima leitura.
Tens que ter uma variável para cada potenciómetro.
Ia sugerir usar um array mas pode-te complicar, por isso para já vai fazendo como sabes, depois damos-te a solução que só assim é que se aprende ;)
já agora... a postar código utiliza o botão de "Inserir Código" ou a tag [code ][/code ]
sem os espaços.
-
#include <SoftwareServo.h>
#include <Servo.h>
SoftwareServo myservo;
int potpin1 = 0;
int val1;
int potpin2 = 1;
int val2;
int potpin3 = 2;
int val3;
int potpin4 = 3;
int val4;
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
myservo3.attach(12);
myservo4.attach(13);
}
void loop()
{
val1 = analogRead(potpin1);
val2 = analogRead(potpin2);
val3 = analogRead(potpin3);
val4 = analogRead(potpin4);
val1 = map(val1, 0, 1023, 0, 179);
val2 = map(val2, 0, 1023, 0, 179);
val3 = map(val3, 0, 1023, 0, 179);
val4 = map(val4, 0, 1023, 0, 179);
myservo1.write(val1);
myservo2.write(val2);
myservo3.write(val3);
myservo4.write(val4);
delay(15);
SoftwareServo::refresh();
}
ainda me da um erro na funçao void setup
-
Tá a dar-te erro porque no inicio do programa fazes:
SoftwareServo myservo;
mas na funçao setup usas myservo1, myservo2, myservo3 e myservo4.
-
entao qual é a soluçao?
-
suponho que:
SoftwareServo myservo1,myservo2,myservo3,myservo4;
-
nao percebi
-
Em vez de
#include <SoftwareServo.h>
#include <Servo.h>
//--->>>SoftwareServo myservo; = ERRADO
SoftwareServo myservo1,myservo2,myservo3,myservo4;// = CORRECTO
int potpin1 = 0;
int val1;
int potpin2 = 1;
int val2;
int potpin3 = 2;
int val3;
Ve o que escrevi no codigo
-
#include <SoftwareServo.h>
#include <Servo.h>
SoftwareServo myservo1,myservo2,myservo3,myservo4;// = CORRECTO
int potpin1 = 0;
int val1;
int potpin2 = 1;
int val2;
int potpin3 = 2;
int val3;
int potpin4 = 3;
int val4;
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
myservo3.attach(12);
myservo4.attach(13);
}
void loop()
{
val1 = analogRead(potpin1);
val2 = analogRead(potpin2);
val3 = analogRead(potpin3);
val4 = analogRead(potpin4);
val1 = map(val1, 0, 1023, 0, 179);
val2 = map(val2, 0, 1023, 0, 179);
val3 = map(val3, 0, 1023, 0, 179);
val4 = map(val4, 0, 1023, 0, 179);
myservo1.write(val1);
myservo2.write(val2);
myservo3.write(val3);
myservo4.write(val4);
delay(15);
SoftwareServo::refresh();
}
ja esta correcto, agora so falta testar.
obrigado a todos
-
mete um delay maior no fim... ai uns 100ms que só 15 nem aquece nem arrefece e os servos passam o tempo todo a tremer para corrigir as variações do adc. ;) De resto parece td ok :P
-
era mesmo esse o problema que eu ia agora postar, os servos nao param!!! lol
-
era mesmo esse o problema que eu ia agora postar, os servos nao param!!! lol
;) muitos anos nisto :P
-
no braço tem dois servos hitec e dois futaba e os hitec nao funcionam, alguem sabe o problema?
-
Já trocaste as fichas no arduino uns com os outros para ter a certeza k é nesses servos e não nas ligações ou dos pins!?
Pode ter a ver com a precisão dos pwm mas primeiro confirma. Mete um servo que não funciona no sitio de um que estava a dar e vice versa e vê o que acontece.
-
troquei, funcionam todos!!
-
Já está resolvido?! ou funcionam todos os servos mas só num certo pin?
-
coloquei todos os servos hitec!!
o probelema é o mesmo, so dois servos e dois potenciometros é que estao a funcionar. ???
-
usa a bilbioteca megaservo
-
nao resulta!!
-
alguem tem o codigo do ZECA (guibot)?
-
experimenta meter um delay de 10 ms entre cada analogin pois pode ser o adc (não custa experimentar).
-
assim?
#include <SoftwareServo.h>
#include <Servo.h>
SoftwareServo myservo1,myservo2,myservo3;// = CORRECTO
int potpin1 = 0;
int val1;
int potpin2 = 1;
int val2;
int potpin3 = 2;
int val3;
void setup()
{
myservo1.attach(10);
myservo2.attach(11);
myservo3.attach(12);
}
void loop()
{
val1 = analogRead(potpin1);
delay(10);
val2 = analogRead(potpin2);
delay(10);
val3 = analogRead(potpin3);
delay(10);
val1 = map(val1, 0, 1023, 0, 179);
val2 = map(val2, 0, 1023, 0, 179);
val3 = map(val3, 0, 1023, 0, 179);
myservo1.write(val1);
myservo2.write(val2);
myservo3.write(val3);
delay(100);
SoftwareServo::refresh();
}
-
exacto.. melhorou ou nem por isso?!
-
nao :-[
-
SoftwareServo::refresh() method at least once every 50ms
troca lá isto:
delay(100);
SoftwareServo::refresh();
por isto:
delay(40);
SoftwareServo::refresh();
delay(40);
SoftwareServo::refresh();
-
petaculo!!! ja esta mas acho que da para aperfeiçoar melhor o codigo e o robo; ele ainta treme e o servo da base quando esta nos 0º nao consegue levantar o braço, mas tudo funciona.
-
Agora podes começar a pensar em fazer 3 leituras, calculas a média e depois mexes... assim treme menos ;)
-
estamos à espera do video... ;)
-
o video ja esta a ser colocado no vimeo, estou a espera que acabe o upload.
quais sao as peças necessarias para montar um sintema xbee?
Abralos R.S.
-
2x xbee
ou dois micros como o arduino, ou um micro e uma interface para pc.
-
http://www.inmotion.pt/store/product_info.php?cPath=7&products_id=65 (http://www.inmotion.pt/store/product_info.php?cPath=7&products_id=65)
http://www.inmotion.pt/store/product_info.php?cPath=7&products_id=129 (http://www.inmotion.pt/store/product_info.php?cPath=7&products_id=129)