LusoRobótica - Robótica em Português
Robótica => Iniciantes => Tópico iniciado por: ruicosta93 em 24 de Março de 2011, 20:32
-
Chegou hoje os servos para o meu primeiro robo.
Quando vou a testa-los com aquele codigo do smalluino de testar os servos eles fazem barulho como se tivessem a tentar puxar mas não mexem.
Alguem me sabe dizer qual é o problema.
Os servos são da modelcraft aqueles que o njay vende.
-
Talvez falta de corrente, estás a alimentar por USB?
Tenta uma fonte externa e só um servo de cada vez.
-
Ja tentei com a minha fonte de alimentação.
Dei-lhe com 5.74 v. ligei positivo ao vermelho do servo gnd ao preto e cor de laranja do servo ao pino 9 e fiz o uploud deste codigo.
int motorEsq = 9;
void setup(){
Serial.begin(9600);}
void loop(){
for (int i=0;i<=255; i++){
analogWrite(motorEsq, i);
Serial.print("A testar valor: ");
Serial.println(i);
delay(500); } }
Ele faz o mesmo barulho de á bocado mas agora vibra mais mas nõa gira. parece que tá a roer qualquer coisa.
Para este codigo os servos tem de estar modificados.? e que eu ainda não modifiquei. queria testar primeiro para pooder trocsr se houver algum problema.
-
Tinhas a massa da fonte ligada á massa do Arduino?
Se não estava ligada liga as duas e volta a tentar.
-
Experimenta este:
// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
-
Eu continuo a alimentar o arduino por usb.-
Depois tenho a fonte a alimentar o servo. e tenho o de sinal do servo no pino nove.
Além disto ainda tenho de ligar o gnd da fonter ao gnd do arduino?
-
Sim, que é para estar tudo ao mesmo potencial, se as massas não forem comuns o sinal do Arduino pode estar dezenas ou centenas de volts acima ou abaixo da voltagem do servo, porque as fontes são isoladas.
-
tambeém já fiz isso e nada. mexe pouco. parece que tá preso.
será que tenho de o alterar primeiro.?
-
Não, porque um servo tem de mexer, a alteração é só para ele rodar continuamente e não só os 180 graus mais ou menos tipicos de um servo.
Já tentas-te rodar o braço á mão, pode custar um pouco, mas deve mexer bem assim que começar a andar.
-
Já rodei o braço á mão. é preciso aplicar um pouco de força mas roda bem. Faz um barulho mas acho que é o barulho caracteristico das engrenagens.
-
Já o consegui a meter a mexer , mas só utilizando a biblioteca servo doi arduino.
Mas eu pensava que os servos fossem mais rapidos. Mas pronto.~
Alguem me sabe dizer porque que não consigo com o analogwrite mexer o servo.?
é porque para programar o robo é mais facil com o analogWrite.
-
Nem reparei que estavas a usar o analogWrite :facepalm:
O analogWrite nao funciona porque é a frequencia errada, podes alterar os timers para funcionar, mas usar a biblioteca servo é tal e qual usar o analogWrite..
-
Boas. Eu fiz a alteração dos servos para continua.
Meto agoira este codigo :
int motorEsq = 9; // atenção ao valor dos pinos queestão a
int motorDrt = 10; // usar, se não for este, modifiquem no código!
void setup(){ Serial.begin(9600);}
void loop(){ for (int i=0;i<=255; i++){
analogWrite(motorEsq, i);
analogWrite(motorDrt, i);
Serial.print("A testar valor: ");
Serial.println(i);
delay(500); } }
E o resultado é o seguinte. ele testa os servos até ao 68.
Depois começa a parar. tento fazer outra vez o uploud do codigo diz que a com3 está ocupada.
Alguem me pode ajudar. Porquê só testa até ao 68.?
-
Os motores começam a puxar corrente e o atmega faz reset..
E já devias saber que directamente não podes usar o analogWrite, não sei o que acontece mas até podes estar a meter os servos em carga por estarem a receber comandos mas não andarem por não serem os comandos certos, usa a biblioteca servo.
-
Boas já consigo meter os servos a mexer com a biblioteca servo.
Fiz as alterações para continua. o problema e que meto o potenciometro a 90 graus dou umas voltas com ele e rapidamente muda de posição.
o POTENCIOMETRO sem lhe tocar já muda de posição. é um potenciometro muito façil de rodar. Já tentei meter um bocado de cola mas não fica grande coisa além que a roda dentada não fica no sitio.
O que tava a pensar era medir a resistência quando ele tá a 90 graus(parado) pelo que medi é 1.70k. agora arranjar uma resistencia de 1.70k e colocar de uma ponta ao centro e arranjar outra de 2.67 (valor total do potenciometro e meter de uma ponta a outra ponta. que me dizem?
Será que isto vai correr bem ou vai dar asneira.?
-
Tens de medir a resistência entre uma das patas da ponta e o centro, e depois entre a outra pata e o centro, e metes duas resistências como as que o potenciometro tem entre cada par de patas.
-
Não te metas nisso. Verifica melhor se está tudo bem cortado e o pot não tá a raspar ao de leve, em alguma situação, na engrenagem preta. Podes tirar umas fatiazinhas do eixo do pot com um x-acto para o emagrecer. Este pot não costuma rodar sozinho com facilidade.
-
Pois. já o tentei cortar um pouco mas continua a rodar.
e o boraco tá bem, limpo ate já tem um pouco a mais. A cabeça já anda um bocado solta.
Vou tentar colar e dobrar para dentro tem espaçoi dentro para encolher o potenciometro. Asim ja não fica a bater na roda dentada.
-
Já tenho os servos a funcionar já comecei a fazer uma base provisoria para testes.
Fica aqui uma imagem
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg199.imageshack.us%2Fimg199%2F7717%2Fimagem0073j.jpg&hash=0c77743e33f54ae7b7f72a037889c8db88742740)
Agora vou por os LDR e ver se os consigo programar para se desviarem dos obstaculos.