collapse

* Posts Recentes

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]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


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]


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

Autor Tópico: Robot Wireless - Câmera, GPS, entre outros.  (Lida 41908 vezes)

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

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #30 em: 19 de Outubro de 2011, 21:53 »
Começando pelo line follower, o que vais ter de fazer são digitalRead nesses pinos. Experimenta brincar com o exemplo DigitalReadSerial por exemplo  :)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #31 em: 19 de Outubro de 2011, 21:56 »
Os servos, assim como qualquer outro motor é normal que ande um para trás e outro para a frente, porque estão montados ao contrário um do outro, por isso se queres andar a fundo para a frente, num deles terás de fazer um write a 0 e no outro a 255.
Avr fanboy

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #32 em: 19 de Outubro de 2011, 22:13 »
Começando pelo line follower, o que vais ter de fazer são digitalRead nesses pinos. Experimenta brincar com o exemplo DigitalReadSerial por exemplo  :)

Tenho só este código para começar:


void setup() {
  Serial.begin(9600);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
}

void loop() {
  int sensorValue1 = digitalRead(5);
  int sensorValue2 = digitalRead(6);
  int sensorValue3 = digitalRead(7);
 
  Serial.println(sensorValue1, DEC);
  Serial.println(sensorValue2, DEC);
  Serial.println(sensorValue3, DEC);
 
}


Mas agora pensei assim:

tenho que definir o que é andar para a frente, para trás, esquerda e direita.

e depois:

if digitalRead(5) = 1 > go left
etc


Mas como? Alguma sugestão?

Peço desculpa por estar a colocar dúvidas "parvas" e por estar a ser insistente, mas não sei mesmo como começar. Obrigado desde já :)

Já agora, senso: das minhas experiências com estes servos, o ponto de paragem é o 63 e 64. Aqui invertem sentido também, e começam a aumentar a velocidade. Não devia ser no 75 então? ou 90?

Cumprimentos

EDIT:

Bem, cheguei a este código:


#include <Servo.h>
 
Servo myservo1;
Servo myservo2;
 
 
void setup()
{
  Serial.begin(9600);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
 
  myservo1.attach(10);
  myservo2.attach(11);

}

void loop() {
  int sensorValue1 = digitalRead(5);
  int sensorValue2 = digitalRead(6);
  int sensorValue3 = digitalRead(7);
 
  Serial.println(sensorValue1, DEC);
  Serial.println(sensorValue2, DEC);
  Serial.println(sensorValue3, DEC);

}



  if (digitalRead(5)=1) { //Sensor Direito Preenchido, Objectivo - Esquerda
 
    myservo1.write(0); //Motor Direito Avança
    myservo2.write(0); //Motor Esquerdo Recua
   
   
   
  }

  if (digitalRead(6)=1) { //Sensor do Meio Preenchido
   
    myservo1.write(0); //Motor Direito Avança
    myservo2.write(128); // Motor Esquero Avança

 
  }

  if (digitalRead(7)=1) { //Sensor Esquerdo Preenchido, Objectivo - Direita
   
    myservo1.write(128); //Motor Direito Recua
    myservo2.write(128); //Motor Esquerdo Avança
   
  }



Estou a ter alguns erros, e nem sei se isto vai dar no arduino. Os erros são todos o mesmo:


Sweep:31: error: expected unqualified-id before 'if'
Sweep:40: error: expected unqualified-id before 'if'
Sweep:48: error: expected unqualified-id before 'if'


Resolução para este erro? E será que este código vai fazer o que pretendo?

Cumprimentos
« Última modificação: 19 de Outubro de 2011, 23:00 por tgferreira »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #33 em: 19 de Outubro de 2011, 23:24 »
Tens vários erros no código, para começar quando queres comparar uma variavel com outra usas == e não =, que serve para meter esse valor na variavel, e depois os teus if's estão depois do loop, logo estão fora dessa função e não vai compilar como podes ver.
Outra coisa, como ja estas a ler os sensores, podes usar as variaveis no if e por fim, em vez de int para guardar esses valores podes usar um char que admite valores entre -127 e 128.

Código: [Seleccione]
#include <Servo.h>

Servo myservo1;
Servo myservo2;


void setup()
{
Serial.begin(9600);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);

myservo1.attach(10);
myservo2.attach(11);

}

void loop() {
char sensorValue1 = digitalRead(5);
char sensorValue2 = digitalRead(6);
char sensorValue3 = digitalRead(7);

Serial.println(sensorValue1, DEC);
Serial.println(sensorValue2, DEC);
Serial.println(sensorValue3, DEC);





if (sensorValue1 == 1) { //Sensor Direito Preenchido, Objectivo - Esquerda

myservo1.write(0); //Motor Direito Avança
myservo2.write(0); //Motor Esquerdo Recua
}

if (sensorValue2 == 1) { //Sensor do Meio Preenchido

myservo1.write(0); //Motor Direito Avança
myservo2.write(128); // Motor Esquero Avança
}

if (sensorValue3 == 1) { //Sensor Esquerdo Preenchido, Objectivo - Direita

myservo1.write(128); //Motor Direito Recua
myservo2.write(128); //Motor Esquerdo Avança
}


}

Avr fanboy

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #34 em: 19 de Outubro de 2011, 23:32 »
Tens vários erros no código, para começar quando queres comparar uma variavel com outra usas == e não =, que serve para meter esse valor na variavel, e depois os teus if's estão depois do loop, logo estão fora dessa função e não vai compilar como podes ver.
Outra coisa, como ja estas a ler os sensores, podes usar as variaveis no if e por fim, em vez de int para guardar esses valores podes usar um char que admite valores entre -127 e 128.

Código: [Seleccione]
#include <Servo.h>

Servo myservo1;
Servo myservo2;


void setup()
{
Serial.begin(9600);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);

myservo1.attach(10);
myservo2.attach(11);

}

void loop() {
char sensorValue1 = digitalRead(5);
char sensorValue2 = digitalRead(6);
char sensorValue3 = digitalRead(7);

Serial.println(sensorValue1, DEC);
Serial.println(sensorValue2, DEC);
Serial.println(sensorValue3, DEC);





if (sensorValue1 == 1) { //Sensor Direito Preenchido, Objectivo - Esquerda

myservo1.write(0); //Motor Direito Avança
myservo2.write(0); //Motor Esquerdo Recua
}

if (sensorValue2 == 1) { //Sensor do Meio Preenchido

myservo1.write(0); //Motor Direito Avança
myservo2.write(128); // Motor Esquero Avança
}

if (sensorValue3 == 1) { //Sensor Esquerdo Preenchido, Objectivo - Direita

myservo1.write(128); //Motor Direito Recua
myservo2.write(128); //Motor Esquerdo Avança
}


}


Boas,

Antes de mais, muito obrigado pela ajuda :D

Agora estou com outro problema esquisito: quando o sensor IR do meio está a detectar a linha, ele gira 180º e inverte o sentido. Segundo o código deveria seguir em frente. O que será?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #35 em: 19 de Outubro de 2011, 23:36 »
Mete um print dentro de cada if, pois ele só está a seguir o código que tem dentro.
Avr fanboy

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #36 em: 19 de Outubro de 2011, 23:39 »

Vê se assim funca bem.


Alterei os ifs para que a primeira opção seja ir em frente e só caso não possa virar.


Adicionei também uns voids com as direcções pa ser mais fácil de perceber  :)


Citar
#include <Servo.h>


Servo myservo1;
Servo myservo2;


void setup()
{
  Serial.begin(9600);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
 
  myservo1.attach(10);
  myservo2.attach(11);


}


void loop()
{
  char sensorValue1 = digitalRead(5);
  char sensorValue2 = digitalRead(6);
  char sensorValue3 = digitalRead(7);


  Serial.println(sensorValue1, DEC);
  Serial.println(sensorValue2, DEC);
  Serial.println(sensorValue3, DEC);




  if (sensorValue2 == 1 && sensorValue1 == 0 && sensorValue3 == 0)
  { //Sensor do Meio Preenchido e os outros apagados
    frente();
  }
  else
  {
    if (sensorValue1 == 1)
    { //Sensor Direito Preenchido, Objectivo - Esquerda
      esquerda();
    }
 
    if (sensorValue3 == 1)
    { //Sensor Esquerdo Preenchido, Objectivo - Direita
      direita();
    }
  }


}


void frente()
{
  myservo1.write(0); //Motor Direito Avança
  myservo2.write(128); // Motor Esquero Avança
}


void esquerda()
{
  myservo1.write(0); //Motor Direito Avança
  myservo2.write(0); //Motor Esquerdo Recua
}


void direita()
{
  myservo1.write(128); //Motor Direito Recua
  myservo2.write(128); //Motor Esquerdo Avança
}



Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #37 em: 20 de Outubro de 2011, 00:11 »
Boas,

Entretanto fiz umas experiências, mas acabei por usar o vosso código.

Obrigado, uma vez mais!

Amanhã posto updates.

Cumprimentos.

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #38 em: 20 de Outubro de 2011, 16:26 »
Boas pessoal.

Estou com um problema, algo estúpido:

O robot segue a linha, no sentido dos ponteiros do relógio. Estou a fazer os testes com uma elipse do tamanho de uma folha A4. O problema é que quando o coloco no sentido oposto ao dos ponteiros do relógio ele não consegue seguir a linha porque o que ele tem que fazer para mudar de direcção é diferente.

Alguma sugestão? Dá para estar sempre configurado nos dois sentidos, ou sempre que quiser trocar tenho de vir ao pc?

Cumprimentos

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #39 em: 20 de Outubro de 2011, 16:36 »
Em principio ele devia estar a andar bem nos dois sentidos  ???


Experimenta trocar sensorValue1 == 1 por sensorValue1 == 1 && sensorValue3 == 0 e sensorValue3 == 1 por sensorValue3 == 1 && sensorValue1 == 0 ...

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #40 em: 20 de Outubro de 2011, 16:45 »
Em principio ele devia estar a andar bem nos dois sentidos  ???


Experimenta trocar sensorValue1 == 1 por sensorValue1 == 1 && sensorValue3 == 0 e sensorValue3 == 1 por sensorValue3 == 1 && sensorValue1 == 0 ...

Acho que eram os valores que tinha nos servos, acabei por corrigir nem sei bem como.

Entretanto: funciona perfeitamente no sentido dos ponteiros do relógio. Contra, nem sempre, só às vezes. Julgo que está a entrar em loop (posso estar a dizer asneira agora):

Isto é: só tenho condições definidas para quando acendem todos, nenhum, ou cada um individualmente. Vou agrupá-los aos pares, para que ele saiba sempre o que fazer.

Então, parte é o que tu disseste, mais:

se acenderem o do meio e direita: soft turn para a direita

se acenderem o do meio e o da esquerda: soft turn para a esquerda.

O que achas?


EDIT:

Fiz o que disse em cima, a única coisa que fiz foi "tirar" os softs e vira mesmo para a direita / esquerda. Agora, em ambos os sentidos está com a "avaria" que disse em cima:

Resumidamente, demora a "processar" o que há-de fazer. Avança, pára, pensa, arranca, etc. Isto acontece quando muda de sensor. Alguma sugestão?

EDIT2:

Ah, se tiver o cabo USB ligado está tudo bem. Se estiver só pilhas, demora a processar. Low battery? Não encontro outra explicação :/
« Última modificação: 20 de Outubro de 2011, 16:54 por tgferreira »

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #41 em: 20 de Outubro de 2011, 16:47 »
sim, é bom que cubras todos os casos possíveis  :)

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #42 em: 20 de Outubro de 2011, 19:22 »
Ora cá estou eu de volta:

Desmontei e montei tudo, verifiquei as pilhas, pus-lhe 4AAA a 1.4V. Não se justifica. O código é este: está aqui algo mal?

Código: [Seleccione]
#include <Servo.h>


Servo myservo1;
Servo myservo2;


void setup()
{
  Serial.begin(9600);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
     
  myservo1.attach(10);
  myservo2.attach(11);


}


void loop()
{
  char sensorValue1 = digitalRead(5);
  char sensorValue2 = digitalRead(6);
  char sensorValue3 = digitalRead(7);


  Serial.println(sensorValue1, DEC);
  Serial.println(sensorValue2, DEC);
  Serial.println(sensorValue3, DEC);




  if (sensorValue2 == 1 && sensorValue1 == 0 && sensorValue3 == 0)
  {
    frente();
  }
  else
  {
    if (sensorValue1 == 1)
    {
      esquerda();
    }
 
    if (sensorValue3 == 1)
    {
      direita();
    }
   
     if (sensorValue1 == 0 && sensorValue2 == 0 && sensorValue3 == 0)
    {
      procura();
    }
   
    if (sensorValue1 == 1 && sensorValue2 == 1 && sensorValue3 == 1)
    {
      frente();
    }
   
    if (sensorValue1 == 1 && sensorValue2 == 1)
    {
      void esquerda();
    }
   
    if (sensorValue2 ==1 && sensorValue3 == 1)
    {
      void direita();
    }
   
  }


}


void frente()
{
  myservo1.write(75); //Motor Direito Avança
  myservo2.write(55); // Motor Esquero Avança

}


void esquerda()
{
  myservo1.write(55); //Motor Direito Avança
  myservo2.write(55); //Motor Esquerdo Recua

}


void direita()
{
  myservo1.write(75); //Motor Direito Recua
  myservo2.write(75); //Motor Esquerdo Avança
 
}

void procura()
{
  myservo1.write(75);
  myservo2.write(55);
 


O que acontece é que, dá tudo na mesma só que ele pára durante segundos, arranca e volta a parar, e assim sucessivamente...

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #43 em: 20 de Outubro de 2011, 19:30 »
boas,
eu usando o picaxe se usar a função debug que serve para enviar dados do picaxe para o pc, o programa corro muito mais lento.

não sei como escreves-te o teu programa, mas o que quero dizer com isto é que se calhar estas a enviar e a receber dados de algum lado e queres escrever e ler os mesmos e pode ser isso que te faz pausar o programa nesses momentos

Offline tgferreira

  • Mini Robot
  • *
  • Mensagens: 148
Re: Robot Wireless - Câmera, GPS, entre outros.
« Responder #44 em: 20 de Outubro de 2011, 20:30 »
boas,
eu usando o picaxe se usar a função debug que serve para enviar dados do picaxe para o pc, o programa corro muito mais lento.

não sei como escreves-te o teu programa, mas o que quero dizer com isto é que se calhar estas a enviar e a receber dados de algum lado e queres escrever e ler os mesmos e pode ser isso que te faz pausar o programa nesses momentos

Boas,

Entretanto acabei por não conseguir chegar a conclusão nenhuma. Então resolvi pegar no código com que o robot estava bom ontem, e cheguei ao seguinte:

Ontem, por brincadeira, tinha um LED aqui no Arduino, no pino 13. Ontem mesmo o robot estava com este problema: parecia quue precisava de tempo para processar. Mas reparei que assim que lhe tirava o LED, que tudo ficava normal, e fluído. Só que hoje tenho exactamente as mesmas coisas de ontem, nos mesmos circuitos e nenhum LED... E a verdade é que continua lento MESMO com o código com que hoje e ontem esteve fluído, o do Xico...

Alguma sugestão?


EDIT1:

Bom, já tentei bastantes coisas, e já fiz pesquisa. Ainda assim coloco aqui um vídeo para que possam ver o que se passa:

Basicamente ele está ligado, detecta a linha, só que só se mexe milímetros. Parece apenas um impulso eléctrico de um milésimo de segundo. A partir do momento em que ligo o cabo USB (+/- 58 segundos), e o coloco na linha, ele faz tudo o que é pretendido que faça, à velocidade objectivo. Não consigo explicar.

Aqui está o vídeo:




Acima, está o código utilizado. Julgo que o problema não será daí, porque se fosse, não faria o que faz quando ligado ao PC. Julgo...
« Última modificação: 20 de Outubro de 2011, 21:39 por tgferreira »