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

smalluino problema

Started by joao rexinho, 23 de April de 2010, 18:02

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

joao rexinho

Boas, recentemente adiquiri dois servo motores springrc  SM-S4303R para fazer um smalluino. Montei o, fiz o upload do código para o arduino duemilanove e os servos começaram a andar um para trás e outro para a frente e respondem aos ciclos do código :-\ :-\ :-\ O que esta a acontecer?????????Verifiquei as entradas e estão correctas, será problema do Arduino? :-\ :-\ :-\

Uploaded with ImageShack.us

Uploaded with ImageShack.us

Uploaded with ImageShack.us

Uploaded with ImageShack.us

Uploaded with ImageShack.us

Uploaded with ImageShack.us
Que tal está?
http://sites.google.com/site/roboticaelectronica/home
Estudante de Engenharia Eletrônica e Telecomunicações em Aveiro

AcidDagger

provavelmente tens o os fios da alimentação trocados  ;)

joao rexinho

Acho que não
preto = GND
vermelho = VIN
branco = 11 PWN, 10 PWN
http://sites.google.com/site/roboticaelectronica/home
Estudante de Engenharia Eletrônica e Telecomunicações em Aveiro

S Teixeira

É um problema de código.
Já me aconteceu o mesmo e o problema estava no código

joao rexinho

Podias indicar o problema pf? Já troquei a entrada para 6, 5 o motor fica a fazer barulho e anda muito devagar mas mesmo assim não responde aos ciclos.

int motorEsq = 11;
int motorDrt = 10
;
void setup()
{
pinMode(motorEsq, OUTPUT);
pinMode(motorDrt, OUTPUT);
}
void loop()
{
parado(4);
frente(2);
esquerda(6);
tras(2);
esquerda(6);
direita(6);
}
void parado(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 127);
  analogWrite(motorDrt, 127);
  delay(500);
}
}
void tras(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 152);
  analogWrite(motorDrt, 102);
  delay(500);
}
}
void frente(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 102);
  analogWrite(motorDrt, 152);
  delay(500);
}
}
void esquerda(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 102);
  analogWrite(motorDrt, 102);
  delay(500);
}
}
void direita(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 152);
  analogWrite(motorDrt, 152);
  delay(500);
}
}
http://sites.google.com/site/roboticaelectronica/home
Estudante de Engenharia Eletrônica e Telecomunicações em Aveiro

S Teixeira

O código está correcto
Deve ser necessário ir a um dos motores e modificar-lhe o sentido de rotação
A folha técnica do motor explica como proceder e é muito fácil.

amando96

Faz outro código, e brinca com os numeros do analogWrite, tive uns servos que para andar no mesmo sentido um tinha de estar 90, e o outro a 75  :o
e é mais fácil mexer nums numeros do que abrir o servo...

S Teixeira

#7
  neste endereço explica como alterar o sentido de rotação do servo da Paralax
http://www.parallax.com/dl/docs/prod/motors/crservo.pdf
Isto deverá resolver a questão
Não é necessário abrir o servo, é com uma chave de fenda que actua num pequeno parafuso

AcidDagger

pois, experimenta codigos mais simples

int motorEsq = 11;
int motorDrt = 10;

void setup()
{
pinMode(motorEsq, OUTPUT);
pinMode(motorDrt, OUTPUT);
}
void loop()
{
 
    digitalWrite(motorEsq, HIGH);  // Este pino HIGH, em conjunto com o de baixo LOW
    digitalWrite(motorDrt, HIGH);   // Fazem com que o motor da direita ande em frente
    delay (2000);
    digitalWrite(motorEsq, LOW);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motorDrt, HIGH);  // Fazem com que o motor da esquerda ande em frente
    delay (1000);                    // Tempo que vai ficar a fazer esta função
    digitalWrite(motorEsq, HIGH);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motorDrt, LOW);  // Fazem com que o motor da esquerda ande em frente
    delay (1000);
    digitalWrite(motorEsq, LOW);   // Este pino LOW, em conjunto com o de baixo HIGH
    digitalWrite(motorDrt, HIGH);  // Fazem com que o motor da esquerda ande em frente
    delay (1000);
    }

AcidDagger

Ja agora, como tas a alimentar os servos?

amando96

#10
Mas esse código é para motores dc com ponte H
EDIT: até não é, mas não funciona com um servo  :o

AcidDagger

ponte H sao quantro pinos

mas isto ja faz os servos mexer nao?

amando96

Sempre pensei que precisavam de um pulso.

joao rexinho

Desculpem tive 2 treinos de hoquei. utilizei este e funcionam bem os servos mas qando meto o codigo do smalluino estam sempre a andar. Estive a a mexer na peça para mudar os sentido, com este código não dá. Esta a ser alimentada pelo pc porque tenho as pilhas a carregar.
#include <Servo.h>

Servo myservo1;
Servo myservo2;

void setup()
{
  myservo1.attach(10);
  myservo2.attach(11);
}

void loop()
{
  myservo1.write(45);
  myservo2.write(45);
  delay(1000);
  myservo1.write(135);
  myservo2.write(135);
  delay(1000);
}
http://sites.google.com/site/roboticaelectronica/home
Estudante de Engenharia Eletrônica e Telecomunicações em Aveiro

joao rexinho

Ja consegui virei la a peça ao maximo e depois no codigo alterei o analogWrite. :) :) :) :) ;D ;D ;D ;D :D :D :D :D :D
Muito obrigado a todos ::) ::) ::)
O codigo ficou algo como isto
int motorEsq = 11;
int motorDrt = 10
;
void setup()
{
pinMode(motorEsq, OUTPUT);
pinMode(motorDrt, OUTPUT);
}
void loop()
{
parado(4);
frente(2);
esquerda(6);
tras(2);
esquerda(6);
direita(6);
}
void parado(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 0);
  analogWrite(motorDrt, 0);
  delay(500);
}
}
void tras(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 45);
  analogWrite(motorDrt, 150);
  delay(500);
}
}
void frente(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 150);
  analogWrite(motorDrt, 45);
  delay(500);
}
}
void esquerda(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 45);
  analogWrite(motorDrt, 45);
  delay(500);
}
}
void direita(int tempo){ // tempo = segundos/2
for(int i = 0; i<tempo;i++){
  analogWrite(motorEsq, 150);
  analogWrite(motorDrt, 150);
  delay(500);
}
}
http://sites.google.com/site/roboticaelectronica/home
Estudante de Engenharia Eletrônica e Telecomunicações em Aveiro