collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[Hoje às 15:31]


Arame de Estendal por almamater
[Ontem às 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: Robot de Busca e Salvamento![CONLUIDO]  (Lida 71320 vezes)

0 Membros e 2 Visitantes estão a ver este tópico.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re: Robot de Busca e Salvamento!
« Responder #165 em: 20 de Junho de 2010, 23:15 »
Quando os motores arrancam, mandam um pico que pode descer a tensão aos 3V, o suficiente para dar reset à parte lógica.

Aconteceu-me isso com este projecto: Plataforma de Desenvolvimento 4x4

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #166 em: 20 de Junho de 2010, 23:18 »
O atmega não deve gostar muito de 6V, penso que a voltagem máxima são de 5.5V
Um condensador de decoupling é um condensador que se coloca o mais próximo possivel das patas do integrado e ligado entre os 5v e a massa que serve para filtrar ruido de alta frequência que possa ser injectado nas linhas de alimentação e que provocam o mau funcionamento do componente em questão, para além de que ajuda a filtrar o ruido em geral introduzido pelo regulador de tensão e pelo próprio micro-controlador.
Devias ter por ai uns condensador de 100uF se não me engano entre o Vcc e o Gnd o kit do breaduino até trás um se não me engano.
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #167 em: 20 de Junho de 2010, 23:22 »
sim já sei o que é..
nao reconheçia pelo nome..
eu estou a usar, 2 condensadores de 10 mF , como sugere este tutorial. http://itp.nyu.edu/physcomp/Tutorials/ArduinoBreadboard
se calhar o problema era mesmo do regulador, faz algum sentido.. pq tinha  o robot a seguir muito descansadinho a pista, e a dado momento o led verde (do pino 19) bloqueava (ficava sempre aceso) e op programa parava de correr..
cumprimentos,
Fred

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #168 em: 20 de Junho de 2010, 23:28 »
Mas deves ter um mais pequeno junto aos pinos, assim como deves usar um condensador antes do regulador maior que o que está depois do regulador, nem devem ser iguais porque isso pode trazer-te problemas.
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #169 em: 20 de Junho de 2010, 23:37 »
então achas que deva colocar um de 100 mF antes do regulador? e depois coloco um de 10 mF e outro ainda mais pequeno? dizme mais ou menos de quanto sff, para amanha comprar quando for à loja
cumprimentos,
Fred

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #170 em: 20 de Junho de 2010, 23:56 »
Credo, isso são valores monstruosos, regra geral usa-se 6800uF antes e 1000 ou 2000 depois e 100nF nos pernos do micro
Avr fanboy

Offline AcidDagger

  • Mini Robot
  • *
  • Mensagens: 364
  • Make Bits, Making robotics in Portugal
    • Make Bits
Re: Robot de Busca e Salvamento!
« Responder #171 em: 20 de Junho de 2010, 23:57 »
são uF e nao mF

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #172 em: 21 de Junho de 2010, 00:07 »
lool, coloquei a letra errada, e nao em lembrei que tambem existem os millis :p

6700 micro? eu so estou a usar 10  :o
mas já percebi o que devo usar, o amanha compro um de 100 nF e vejo o que tem lá perto dos 1000 uF
obrigado pela ajuda :)
cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #173 em: 01 de Julho de 2010, 18:42 »
Boas mais uma vez..

ja reparei todos os erros que tinha, corrigi os erros de contactos por simpatia (fiz a nova placa, com o condensador de 100mF atras do regulador e de 100nF à frente do regulador) e a leitura do array de 5 sensores não têm qualquer problema),

agora continuo com o mesmo erro :s o breaduino a dado momento deixa de correr o programa :s, so o corre bem quando ligo( ou faço reset), depois deixa de correr e o robot deixa de seguir a linha..

alguém sabe pq isto acontece? tenho quase a certeza que está tudo bem montado, verifiquei todas as ligações mais que uma vez,
agora não entendo pq me acontece isto, caso seja ruído dos motores, como posso anular esse ruído?,

Ps: quando o breaduino está a correr o programa, o led verde do pino 19 está sempre a piscar, quando ele para de correr o programa (ou pelo menos os motores deixam de responder à programação) o led do pino 19 apaga, não voltando a piscar. Experimentei desligar a alimentação dos motores e colocar o carrinho sobre a linha para vêr se o led também parava de piscar, e pára, talvez não seja por ruído dos motores (afirmo isso com base nesta experiência que fiz),

alguém é capaz de me ajudar?
já estou a ficar sem saber o que fazer e até terça tinha de ter o projecto concluído, por incrivel que pareca a parte que estou a ter mais dificuldades e não a estou a conseguir resolver é esta, a locomoção do robot..que também é das mais importantes se não a mais importante.., mas aparêntemente parece a mais fácil..

preciso mesmo de ajuda.
agradeçia sugestões para resolver o meu problema..
« Última modificação: 01 de Julho de 2010, 18:44 por fred gomes »
cumprimentos,
Fred

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #174 em: 01 de Julho de 2010, 18:44 »
Podes mostrar o teu actual programa, o que me ocorre é ficares sem ram e os registos ficam todos trocados.
Avr fanboy

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #175 em: 01 de Julho de 2010, 18:46 »
Código: [Seleccione]
/* variaveis de utilizadas*/

const int nsensores = 5;
const int sensor[] = {2,3,4,5,6};
const int motor_right = 10;
const int motor_left = 9;
int led_pin = 13;


/* variaveis auxiliares*/

int senval[] = {0,0,0,0,0};
int vel_right = 0;
int vel_left = 0;
int maxvel = 150;
double errorval = 0.0;
double lasterror = 0.0;
boolean SCstop = false;
boolean SCstart = false;

void setup(){
  Serial.begin(9600);
  pinMode (motor_right, OUTPUT);
  pinMode (motor_left, OUTPUT);
  pinMode (2, INPUT);
  pinMode (3, INPUT);
  pinMode (4, INPUT);
  pinMode (5, INPUT);
  pinMode (6, INPUT);
  digitalWrite (2, HIGH);
  digitalWrite (3, HIGH);
  digitalWrite (4, HIGH);
  digitalWrite (5, HIGH);
  digitalWrite (6, HIGH);
}
void loop(){
 errorval = LineError();
 sensor_de_cores();

 if(SCstart){
   if(errorval < 0.0){
    vel_left = (int)(maxvel*(1-fabs(errorval)));
    vel_right = (int)(maxvel);
  }
  else if(errorval > 0.0){
    vel_left = (int)(maxvel);
    vel_right = (int)(maxvel*(1-errorval));
  }
  else{
    vel_left = (int)(maxvel);
    vel_right = (int)(maxvel);
  }
  //Fazer actuar os motores:
  analogWrite(motor_right,vel_right);
  analogWrite(motor_left, vel_left);
 
  if (errorval == 0){
    SCstop = false;
  }
  else{
    SCstop = true;
  }
  if (SCstop){
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
  }
 }
}


// escolher o sensor que esta sobre a linha

double LineError()
{
  double error = 0.0;
  int valorsensor = 0;
 
  for (int i=0; i < nsensores; i++){

    senval[i] = digitalRead (sensor[i]);
  }

  valorsensor = (senval[0]) | (senval[1]<<1) | (senval[2]<<2) | (senval[3]<<3) | (senval[4]<<4);
 
  switch (valorsensor){
    case 0b10000:
    error = -1.0; break;
    case 0b11000:
    error = -0.75; break;
    case 0b01000:
    error = -0.5; break;
    case 0b01100:
    error = -0.25; break;
    case 0b00100:
    case 0b01110:
    error = 0.0; break;
    case 0b00110:
    error = 0.25; break;
    case 0b00010:
    error = 0.5; break;
    case 0b00011:
    error = 0.75; break;
    case 0b00001:
    error = 1.0; break;
    case 0b00000:
    if(error == 0)
    error = lasterror;
    break;
    }
    lasterror = error;
    return error;


void sensor_de_cores(){
 
  int ldr_green = 0;
  int ldr_red = 1;
  int valor_green = 0;
  int valor_red = 0;
 
  valor_green = analogRead(ldr_green);
  valor_red = analogRead( ldr_red);
 
  // Detectar a cor verde;
 
  if (valor_green >=450 && valor_green <=650
  && valor_red >=550 && valor_red <=700){
    SCstart = false;
  }
 
  // Detectar a cor vermelha;
 
  else if (valor_red >=500 && valor_red <= 670
  && valor_green >650){
    SCstart = false;
    delay(10000);
    SCstart = true;
  }
  else{
    SCstart = true;
  }
}
   

porque fico sem ram?,como posso corrigir isso?
cumprimentos,
Fred

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot de Busca e Salvamento!
« Responder #176 em: 01 de Julho de 2010, 19:07 »
Usando muitas variaveis, loops, chamadas de funções recursivas, quase tudo o que fazes no programa que mete variaveis á mistura usa ram, porque o processador só tem 32 registos e muitos só podem ser usados para certas operações, dai ser preciso usar a ram para guardar as tuas variaveis, assim á primeira vista nem sequer estás a usar comunicações serial, um problema que eu vejo no ide do arduino é não mostrar a ram usada pelo nosso programa.
Avr fanboy

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Robot de Busca e Salvamento!
« Responder #177 em: 01 de Julho de 2010, 19:12 »
Que bibliotecas é que estás a chamar? Eu não estive a ver o código mas pelo tamanho não me parece que ficasse sem ram.

Código: [Seleccione]
/* variaveis de utilizadas*/

const int nsensores = 5;
const int sensor[] = {2,3,4,5,6};
const int motor_right = 10;
const int motor_left = 9;
int led_pin = 13;


/* variaveis auxiliares*/

int senval[] = {0,0,0,0,0};
int vel_right = 0;
int vel_left = 0;
int maxvel = 150;
double errorval = 0.0;
double lasterror = 0.0;
boolean SCstop = false;
boolean SCstart = false;

void setup(){
  Serial.begin(9600);
  pinMode (motor_right, OUTPUT);
  pinMode (motor_left, OUTPUT);
  pinMode (2, INPUT);
  pinMode (3, INPUT);
  pinMode (4, INPUT);
  pinMode (5, INPUT);
  pinMode (6, INPUT);
  digitalWrite (2, HIGH);
  digitalWrite (3, HIGH);
  digitalWrite (4, HIGH);
  digitalWrite (5, HIGH);
  digitalWrite (6, HIGH);
}
void loop(){
 errorval = LineError();
 sensor_de_cores();

 if(SCstart){
   if(errorval < 0.0){
    vel_left = (int)(maxvel*(1-fabs(errorval)));
    vel_right = (int)(maxvel);
  }
  else if(errorval > 0.0){
    vel_left = (int)(maxvel);
    vel_right = (int)(maxvel*(1-errorval));
  }
  else{
    vel_left = (int)(maxvel);
    vel_right = (int)(maxvel);
  }
  //Fazer actuar os motores:
  analogWrite(motor_right,vel_right);
  analogWrite(motor_left, vel_left);
 
  if (errorval == 0){
    SCstop = false;
  }
  else{
    SCstop = true;
  }
  if (SCstop){
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
  }
 }
}


// escolher o sensor que esta sobre a linha

double LineError()
{
  double error = 0.0;
  int valorsensor = 0;
 
  for (int i=0; i < nsensores; i++){

    senval[i] = digitalRead (sensor[i]);
  }

  valorsensor = (senval[0]) | (senval[1]<<1) | (senval[2]<<2) | (senval[3]<<3) | (senval[4]<<4);
 
  switch (valorsensor){
    case 0b10000:
    error = -1.0; break;
    case 0b11000:
    error = -0.75; break;
    case 0b01000:
    error = -0.5; break;
    case 0b01100:
    error = -0.25; break;
    case 0b00100:
    case 0b01110:
    error = 0.0; break;
    case 0b00110:
    error = 0.25; break;
    case 0b00010:
    error = 0.5; break;
    case 0b00011:
    error = 0.75; break;
    case 0b00001:
    error = 1.0; break;
    case 0b00000:
    if(error == 0)
    error = lasterror;
    break;
    }
    lasterror = error;
    return error;


void sensor_de_cores(){
 
  int ldr_green = 0;
  int ldr_red = 1;
  int valor_green = 0;
  int valor_red = 0;
 
  valor_green = analogRead(ldr_green);
  valor_red = analogRead( ldr_red);
 
  // Detectar a cor verde;
 
  if (valor_green >=450 && valor_green <=650
  && valor_red >=550 && valor_red <=700){
    SCstart = false;
  }
 
  // Detectar a cor vermelha;
 
  else if (valor_red >=500 && valor_red <= 670
  && valor_green >650){
    SCstart = false;
    delay(10000);
    SCstart = true;
  }
  else{
    SCstart = true;
  }
}
   

porque fico sem ram?,como posso corrigir isso?

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #178 em: 01 de Julho de 2010, 19:15 »
sim eu apaguei-as pq pensava que o problema era disso..

também já apaguei este fragmento :
Código: [Seleccione]
if (errorval == 0){
    SCstop = false;
  }
  else{
    SCstop = true;
  }
  if (SCstop){
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);
    digitalWrite(led_pin,HIGH);
    delay(170);
    digitalWrite(led_pin,LOW);
    delay(170);

a pensar que o problema era daqui, mas não, agora ele nem responde, o programa... vou fazer a leitura dos sensores para o pc mais uma vez só para ter a certeza que o problema não é daí...

eu não estou a usar nenhuma biblioteca,

cumprimentos,
Fred

Offline fred gomes

  • Mini Robot
  • *
  • Mensagens: 238
Re: Robot de Busca e Salvamento!
« Responder #179 em: 01 de Julho de 2010, 19:26 »
a leitura dos sensores não têm qualquer problema, já confirmei..

não consigo mesmo imaginar de onde possa vir o err
cumprimentos,
Fred