collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Robot + IR  (Lida 8316 vezes)

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

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Robot + IR
« em: 09 de Fevereiro de 2011, 15:20 »
Boas,

Estou a montar um robot usando o arduino com o Motorshield v3.0 e já consigo mete-lo a andar para trás e para a frente, só que agora quero ligar o sensor de infra-vermelhos só que não sei onde o tenho que ligar nem como vou trabalhar com ele.

Gostava que alguém me podesse dar umas indicações de como ligar, testar, etc.

Desde já, Obrigado!

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Robot + IR
« Responder #1 em: 09 de Fevereiro de 2011, 15:38 »
Boas,

Estou a montar um robot usando o arduino com o Motorshield v3.0 e já consigo mete-lo a andar para trás e para a frente, só que agora quero ligar o sensor de infra-vermelhos só que não sei onde o tenho que ligar nem como vou trabalhar com ele.

Gostava que alguém me podesse dar umas indicações de como ligar, testar, etc.

Desde já, Obrigado!

Que sensor estás a usar?

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #2 em: 09 de Fevereiro de 2011, 15:46 »
O sensor é o Sharp 2Y0A02 F 04

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Robot + IR
« Responder #3 em: 09 de Fevereiro de 2011, 16:08 »
Sabes inglês?!

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #4 em: 09 de Fevereiro de 2011, 16:16 »
Sei e o problema não é isso.

O problema é que não sou nenhum profissional de electrónica, e como tenho a ponte-h, não sei onde é que tenho que ligar os pinos.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Robot + IR
« Responder #5 em: 09 de Fevereiro de 2011, 16:38 »
Por que assim é mais facil de explicar de maneira a aprenderes.

O ideal é sempre começar por procurar o datasheet do componente, todas as informações relativas ao componentes encontram-se neste documento.

Neste caso está aqui: http://sharp-world.com/products/device/lineup/data/pdf/datasheet/gp2y0a02_e.pdf

Fiz um printscreen do que acho que é necessário.


A vermelho tens o Supply Voltage, é a tensão de alimentação do componentes, podemos ver que deve ser entre -0.3 até 7V, como Arduino funciona a 5V vamos usar 5V. Então ao pino Vcc do componente (quadro azul) ligas 5V, estes 5V vêm de um dos pinos do Arduino. Ao pino do GND do componente (quadro azul) ligas o gnd do Arduino. Neste momento temos o componente alimentado.

O sinal que sai do sensor é uma sinal analógico. Se reparares no quadro verde este sinal vai deste -0.3 até um máximo do Vcc+0.3V. No nosso caso irá então de 0 a 5V (usamos 5V no Vcc). Sendo este sinal analógio é necessário ligar este sinal a uma entrada analógica do Arduino. O Arduino possui uns pinos que estão indicados na placa por Analog In. É num destes pinos que deves colocar o sinal.


Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #6 em: 10 de Fevereiro de 2011, 11:18 »
Muito obrigado,

já me ajudou a progredir mais um passo no meu projecto.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot + IR
« Responder #7 em: 10 de Fevereiro de 2011, 15:16 »
Se tiveres o fio descarnado e enrolares o cobre com as pontas dos dedos para ficar tipo em espiral quase de certeza que dá para meter na breadboard, se não, solda-se uns headers.
Usar o google é sempre bom, é que meter sharp ir sensor arduino no google deve dar para mil resultados, provavelmente todos com código, fotos, esquemas, videos, e mais qualquer coisa.
Avr fanboy

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #8 em: 14 de Fevereiro de 2011, 16:35 »
Boas,

já andei mais no meu projecto...mas agora surgiu-me um novo problema: o código.

O que eu só quero que funcione por agora é:
- Quando o valor do sensor for maior que 200, o motor anda para a frente (o PWM é de 255).
- Quando o valor do sensor for entre 100 e 200, o motor reduz a velocidade (o PWM passa para 133).
- Quando o valor do sensor for menor que 100, o motor pára.

Gostava de saber é como é que meto o motor a rodar para trás, em vez de
Citar
analogWrite(PWMA, 255);
tenho que meter o número negativo?
Citar
analogWrite(PWMA, -255);
Assim?

Outra dúvida é que eu na quarta-feira meti o sensor a funcionar, e o valor do sensor era pequeno quando tinha o obstáculo perto e aumentava à medida que se afastava...ora hoje deu precisamente para fazer o contrário e não sei porquê lol


Este é o código que eu fiz até agora:

Citar
byte sensorPin=5;
int Valor=0;
int maxVal=0;
int minVal=1024;

 int PWMA=10; //pino pwm do motor 1
 int PWMB=11; //pino pwm do motor 2
 int DIRA=12; //pino de controlo do motor 1
 int DIRB=13; //pino de controlo do motor 1


void setup() {
  Serial.begin(9600);
  Serial.println("in setup");   
  pinMode(13, OUTPUT);
  analogWrite(PWMA,255); //definir PWM do motor 1 para velocidade máxima (0 a 255)
  analogWrite(PWMB,255); //definir PWM do motor 2 para velocidade máxima (0 a 255)
}

void loop() {
  //Serial.println("In loop");
  Valor = analogRead(sensorPin);
  if(Valor < minVal) {
    minVal = Valor;
  }
  if(Valor > maxVal) {
    maxVal = Valor;
  }
  Serial.print("Max: ");
  Serial.print(maxVal);
  Serial.print(" Min: ");
  Serial.print(minVal);
  Serial.print(" Ultimo: ");
  Serial.println(Valor);
 
   if(100 < Valor < 200 )
   {
    reduzir(); //chama a função frente
    }
  //  delay(5000); //os motores andam para a frente durante 5 segundos

    if(Valor < 100)
    {
      stop();
    }
   
  {
  delay(1000);
}

}
void tras()
{
  analogWrite(PWMA, -255);
  digitalWrite(DIRA, HIGH);
}

void frente()
{
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
digitalWrite(DIRA,LOW);
digitalWrite(DIRB,LOW);
}

void stop()        // Esta funçao define o PWM a 0 para que o carro pare.
{
analogWrite(PWMA, 0);
analogWrite(PWMB, 0);
}

void reduzir()    // esta função define o PWM a 133 para o carro reduzir a velocidade.
{
analogWrite(PWMA, 133);
digitalWrite(DIRA, LOW);

}

void esquerda()
{
  analogWrite(PWMA, 133);
  digitalWrite(DIRA, HIGH);
  analogWrite(PWMB, 0);
  digitalWrite(DIRB, LOW);
}

void direita()
{
 analogWrite(PWMB, 133);
 digitalWrite(DIRB, HIGH);
 analogWrite(PWMA, 0);
 digitalWrite(DIRA, LOW);
}

Desde já obrigado pelas ajudas ;)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot + IR
« Responder #9 em: 14 de Fevereiro de 2011, 16:43 »
Vai ao site do fabricante do teu shield e vê quais são os pinos que definem a direção de rotação dos motores, porque vai haver um pino que quanto metes a 1 ele vai andar num sentido e quando metes a 0 anda noutro.
O analogWrite tem de ser sempre um valor entre 0 e 255, meter um valor negativo ele trunca a 0 e não faz nada.
No setup quando metes o pwm a 255 no setup os motores não começam logo a andar?

EDIT: aliás até tens ai, o DIRA  e DIRB são quem trata da direção, é só veres se LOW é para a frente ou para trás..
Até já tens ai funções que mexem o DIRA e DIRB para andar para a frente e para trás, é o que dá copiar código e colar, nem sequer tentam perceber o que copiam.
Avr fanboy

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: Robot + IR
« Responder #10 em: 14 de Fevereiro de 2011, 16:44 »
O sensor pode estar a dar os resultados opostos aos da outra vez porque se calhar ligaste doutra maneira?

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #11 em: 14 de Fevereiro de 2011, 16:53 »
A função que anda para a frente foi copiada, as outras fui eu que as fiz (e secalhar sao essas que estão mal -__-)

amando96, eu liguei exactamente da mesma maneira.

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #12 em: 03 de Junho de 2011, 21:56 »
Ora muito bem..

O projecto avançou, já tenho o material todo, o carro está montado, está tudo testado, só me falta a parte em que sou mais fraco, a programação.

O carro vai ter 2 sensores infra-vermelhos (para detectar obstáculos) e 2 sensores de luz (para seguir a luz).

O meu professor mandou-me fazer um código com funções e mais não sei o quê, e sinceramente, não sei como é que hei-de  o fazer.
Tenho os valores dos sensores, que os vou deixar aqui para quem se disponibilizar a ajudar-me, e a dar ideias.

Infra-vermelhos:
Quanto tem obstáculo: >100
Quando não tem obstáculo: <100

Sensor Luz:
Quando tem luz: > 700
Quando não tem luz: < 700

Ora, como devem ter percebido, é suposto o carro seguir a luz e desviar-se dos obstáculos, mas tem 1 sensor de cada tipo dos lados esquerdo e direito.

Deixo aqui o código que tenho feito até agora.

Citar

byte sensorIR1=1;  //define o pino 1 para o sensor de infra-vermelhos do lado esquerdo
byte sensorIR2=2;  // define o pino 2 para o sensor de infra-vermelhos do lado direito
byte sensorLUZ1=3;  //define o pino 3 para o sensor de luz do lado esquerdo
byte sensorLUZ2=4;  //define o pino 4 para o sensor de luz do lado direito


int ValorIR1;  // valor do infra-vermelho do lado esquerdo
int ValorIR2;  // valor do infra-vermelho do lado direito
int ValorLUZ1; //  valor da luz do lado esquerdo
int ValorLUZ2;  // valor da luz do lado direito

 int PWMA=10; //pino pwm do motor 1
 int PWMB=11; //pino pwm do motor 2



void setup() {
  Serial.begin(9600);   
  analogWrite(PWMA,255); //definir PWM do motor 1 para velocidade máxima (0 a 255)
  analogWrite(PWMB,255); //definir PWM do motor 2 para velocidade máxima (0 a 255)
}

void loop() {
 
  ValorIR1 = analogRead(sensorIR1);
 
  Serial.print(" Valor do IR Esquerdo: ");
  Serial.println(ValorIR1); 

 ValorIR2 = analogRead(sensorIR2);
 
  Serial.print(" Valor do IR Direito: ");
  Serial.println(ValorIR2); 
 
 
  ValorLUZ1 = analogRead(sensorLUZ1);
 
  Serial.print(" Valor da LUZ do lado esquerdo: ");
  Serial.println(ValorLUZ1); 
 
    ValorLUZ2 = analogRead(sensorLUZ2);
 
  Serial.print(" Valor da LUZ do lado direito: ");
  Serial.println(ValorLUZ2);
  Serial.print("");

 {
   
  delay(5000);
}

}


void frente()
{
analogWrite(PWMA, 255);
analogWrite(PWMB, 255);
}

void stop()        // Esta funçao define o PWM a 0 para que o carro pare.
{
analogWrite(PWMA, 0);
analogWrite(PWMB, 0);
}

void esquerda()
{
  analogWrite(PWMA, 0);
  analogWrite(PWMB, 133);
}

void direita()
{
 analogWrite(PWMB, 0);
 analogWrite(PWMA, 133);
}



Desde já o meu obrigado!

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot + IR
« Responder #13 em: 03 de Junho de 2011, 22:14 »
Estas duas chavetas á volta do delay:
Código: [Seleccione]
{
   
  delay(5000);
}


Não fazem nada, então agora é chamar as funções quando queres que ele ande para a frente ou que vire.
Para isso usas if's para comparar os valores, se fores iguais para a luz por exemplo anda em frente, se for mais luz de um lado viras para esse lado, e etc,etc.
Avr fanboy

Offline Pirex

  • Mini Robot
  • *
  • Mensagens: 10
Re: Robot + IR
« Responder #14 em: 03 de Junho de 2011, 23:21 »
Eu na altura tinha dito ao meu stor que fazia com IFs, ao que ele me disse que isso não servia porque o carro ia andar sempre aos S's.

Mas vou ver se funciona, só experimentando mesmo.

Mas há 1 pormenor, é praticamente impossível dar valores iguais nos 2 sensores de luz, são muito sensíveis, e não sei como fazer, tipo, uma margem de uns 100 valores de diferença entre os 2 sensores seria como se fosse a mesma luz nos dois, e seguia em frente.