collapse

* Links de Robótica

* Posts Recentes

Printer 3D barata por andre_f_carvalho
[Hoje às 13:09]


Procuro resistências 220 Ohm de 1% por brunus
[02 de Dezembro de 2016, 15:50]


Package de cond 10uF 35V smd? por KammutierSpule
[02 de Dezembro de 2016, 11:19]


Videos hipnoticos de mecanica industrial por TigPT
[02 de Dezembro de 2016, 00:07]


FPV Drone Racing? por brunus
[02 de Dezembro de 2016, 00:00]


Decodificar cabo por Hugu
[01 de Dezembro de 2016, 23:11]


Ajuda para replicar e reparar um Dimmer por brunus
[30 de Novembro de 2016, 23:23]


Adaptar impressora 3D a Drill Maschine por Hugu
[30 de Novembro de 2016, 23:20]


Módulo gsm por dio123
[30 de Novembro de 2016, 13:39]


RAM SO-DIMM 256 MB por Hugu
[29 de Novembro de 2016, 22:52]

Autor Tópico: Dúvida com seguidor de linhas..  (Lida 2763 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Dúvida com seguidor de linhas..
« em: 23 de Janeiro de 2010, 11:38 »
Boas pessoa.
Hoje decidi pegar no projecto dum seguidor de linhas (utilizando o arduino) que se encontrava pendente devido a uns problemas que tinha com o funcionamento dele e que não os tinha conseguido resolver..

programação que estou a utilizar é a seguinte:

Código: [Seleccione]
int motor_right1 = 5;
int motor_right2 = 6;
int motor_left1 = 10;
int motor_left2 = 11;
int sensor_right = 5;
int sensor_left = 0;
int valor = 0;
int valor1 = 0;

void setup(){
  Serial.begin(9600);
 
  pinMode (motor_right1, OUTPUT);
  pinMode (motor_right2, OUTPUT);
  pinMode (motor_left1, OUTPUT);
  pinMode (motor_left2, OUTPUT);

}


void loop(){

 
  valor = analogRead (sensor_right);
  Serial.print (valor);
  delay (200);


  if (valor < 350){
  analogWrite (motor_right1, 0);
  analogWrite (motor_right2, 0);

  }
  else {
  analogWrite (motor_right1,255);
  analogWrite (motor_right2, 0);
  }
    Serial.print("  ");

  valor1 = analogRead (sensor_left);
  Serial.println (valor1);
  delay(200);

  if (valor1 <350){
    analogWrite (motor_left1,0);
    analogWrite (motor_left2,0);

  }
    else{
    analogWrite (motor_left1,255);
    analogWrite (motor_left2,0);
    }

  if (valor > 350 && valor1 < 350){
  analogWrite (motor_right1,0 );
  analogWrite (motor_right2, 0);
  analogWrite (motor_left1, 255);
  analogWrite (motor_left2,0);
  while (valor > 350 && valor1 >350);
  }
  if (valor <350 && valor1 > 350){
    analogWrite (motor_right1, 255);
    analogWrite (motor_right1, 0);
    analogWrite (motor_left1, 255);
    analogWrite (motor_left1, 0);
    while (valor > 350 && valor1 >350);
     }
}

os sensores dão os valores esperados, ora muito altos, ora muito baixos, mas os motores nao se comportam segundo a programação.., estou a utilizar o L293D,

alguém sabe o porquê de não obter os resultados esperados?

cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Dúvida com seguidor de linhas..
« Responder #1 em: 23 de Janeiro de 2010, 12:05 »
Boas.
alteração de código (estive a ver melhor e o código que tinha tinha inversão de marcha incluida, não a estou a utilizar agora...

Código: [Seleccione]
int motor_right = 3;
int motor_left = 6;
int sensor_right = 5;
int sensor_left = 0;
int valor = 0;
int valor1 = 0;

void setup(){
  Serial.begin(9600);
 
  pinMode (motor_right, OUTPUT);
  pinMode (motor_left, OUTPUT);

}


void loop(){

 
  valor = analogRead (sensor_right);
  Serial.print (valor);
  delay(200);


  if (valor < 350){
  analogWrite (motor_right, 0);

  }
  else {
  analogWrite (motor_right,255);
  }
    Serial.print("  ");

  valor1 = analogRead (sensor_left);
  Serial.println (valor1);
  delay(200);

  if (valor1 <350){
    analogWrite (motor_left,0);

  }
    else{
    analogWrite (motor_left,255);
    }

  if (valor > 350 && valor1 < 350){
  analogWrite (motor_right,0 );
  analogWrite (motor_left, 255);
  while (valor > 350 && valor1 >350);
  }
  if (valor <350 && valor1 > 350){
    analogWrite (motor_right, 255);
    analogWrite (motor_left, 0);
    while (valor > 350 && valor1 >350);
     }
}

agora os motores andam e param consoante o valor dos sensores, mas se colocar o sensor da esquerda no branco e o da direita manter-se no preto, o da direita abranda um bocado, e o da esquerda abranca mais do que o da direita e continua andar "aos solabancos, muito de vagarinho", isso nao deveria acontecer, o da direita deveria continuar andar normalmente e o da esquerda parar...o mesmo acontece para o oposto, sensor da direita no preto, e da esquerda no branco..

alguém sabe a que se deve isto?
Obrigado.
cumprimentos,
Fred

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.300
Re: Dúvida com seguidor de linhas..
« Responder #2 em: 23 de Janeiro de 2010, 14:19 »
diz-nos como tens tu ligado o circuito (pelo menos a parte do arduino + ponte h + motores)..

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Dúvida com seguidor de linhas..
« Responder #3 em: 23 de Janeiro de 2010, 14:59 »
Boas Ricardo..
Então...

### Pinos da Ponte H---> 
                                         pino1.+ da fonte
                                         pino2.saída PWM 6 do arduino
                                         pino3.motor right
                                         pino 4 e 5. massa
                                         pino6.motor left
                                         pino7.saída PWM 3 do arduino
                                         pino8.+ da fonte

essa parte penso que está bem ligada, caso contrário os motores nem andariam.o meu problema é que ao colocar um sensor no branco e outro no preto , o motor que deveria parar nao para por completo (anda aos solbancos de vagarinho) e o reduz a sua velocidade mas anda ligeiramente mais depressa..,

cumps
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Dúvida com seguidor de linhas..
« Responder #4 em: 23 de Janeiro de 2010, 15:22 »
Uma coisa boa que fazias era meter um Serial.print() dos valores no loop, que é para veres quais são os valores...

Aconselhava-te a tirar os whiles que tens dentro dos IFs... Pode muito bem ser isso que esteja a causar os solavancos...

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Dúvida com seguidor de linhas..
« Responder #5 em: 23 de Janeiro de 2010, 21:12 »
Boas mycrobyte :)
Segui os teus conselhos, e  já funcionou :D , muitissimo obrigado...
e já agora, sabes me dizer o porquê dos whiles provocarem os solabancos nos motores?, eu pensava que isso deveria ter haver com alguns "delay´s"..
cumprimentos,
Fred

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Dúvida com seguidor de linhas..
« Responder #6 em: 23 de Janeiro de 2010, 21:52 »
Boas mycrobyte :)
Segui os teus conselhos, e  já funcionou :D , muitissimo obrigado...
e já agora, sabes me dizer o porquê dos whiles provocarem os solabancos nos motores?, eu pensava que isso deveria ter haver com alguns "delay´s"..

É muito simples, ao definires valores concretos, estás a partir do princípio que o valor real nunca anda próximo desse valor que defines... Ora, pode acontecer que o valor real seja até exactamente o valor que tu definiste como margem...

Agora supõe outra coisa. Imagina que os valores dos 2 sensores são: 900 e 200
tens:
valor = 900 e valor1 = 200

Agora vê o teu código... Relembro que o código é lido sequencialmente e as coisas não são executadas em simultâneo.
void loop(){

 
  valor = analogRead (sensor_right);
  Serial.print (valor);
  delay(200);


  if (valor < 350){ não entra aqui, porque valor = 900
  analogWrite (motor_right, 0);

  }
  else { Entra aqui...
  analogWrite (motor_right,255);
  }
    Serial.print("  ");

  valor1 = analogRead (sensor_left);
  Serial.println (valor1);
  delay(200);

  if (valor1 <350){ Entra aqui porque valor1 = 200
    analogWrite (motor_left,0);

  }
    else{
    analogWrite (motor_left,255);
    }

  if (valor > 350 && valor1 < 350){ Entra aqui, pelas mesmas razões
  analogWrite (motor_right,0 );
  analogWrite (motor_left, 255);
  while (valor > 350 && valor1 >350);

  }
  if (valor <350 && valor1 > 350){
    analogWrite (motor_right, 255);
    analogWrite (motor_left, 0);
    while (valor > 350 && valor1 >350);
     }
}

Ora, o que é executado, está sublinhado... E resumidamente, por ordem:
  • Motor direito on (255)
  • Motor esquerdo off (0)
  • Motor direito off (0)
  • Motor esquerdo on (255)

Ora cá está o belo do solavanco.

Para já não falar que os whiles, penso que querias que não saísse dali enquanto se verificasse a condição que tens no IF. Ora vê:
if (valor > 350 && valor1 < 350){
  while (valor > 350 && valor1 >350);
}

Se as condições não são as mesmas, o while não faz ali nada, pois quando valor > 350 && valor1 >350, nem chegas a executar o que está dentro do IF.

Isto fez algum sentido? Espero ter tirado algumas dúvidas a mais pessoal. ;)

PS: é microbyte  :D

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Dúvida com seguidor de linhas..
« Responder #7 em: 23 de Janeiro de 2010, 22:15 »
já percebi o motivo dos solabancos..lool, tens toda a razão..
eu tinha muitas coisas desnecessárias no código (apesar de não estarem propiamente incorrectas só estavam ali atrapalhar),

já alterei o codigo e ja funciona na prefeição...
mais uma vez mto obrigado pelas explicações mycrobite ;)
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Dúvida com seguidor de linhas..
« Responder #8 em: 23 de Janeiro de 2010, 22:18 »
ups :-X
sorry, ...microbyte..
cumprimentos,
Fred

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Re: Dúvida com seguidor de linhas..
« Responder #9 em: 09 de Maio de 2010, 00:39 »
coloca aqui o codigo final sff...
OxyGen #

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Dúvida com seguidor de linhas..
« Responder #10 em: 09 de Maio de 2010, 19:52 »
Olá..
neste tópico tens la o código.

"Robot de Busca e Salvamento!"

 está logo no inicio..
cumprimentos,
Fred