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: Wall fallower robot  (Lida 16791 vezes)

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

Offline Azoto

  • Mini Robot
  • *
  • Mensagens: 14
Wall fallower robot
« em: 01 de Junho de 2010, 20:23 »
Boa tarde, estou de momento a finalizar a minha PAT, ja criei o chassi, as placas e de momento estou na programação. Uso 3 sonares SRF08 (um para a esquerda, outro para a direita e um para o centro). Tal como ja devem saber, o sonar funciona por I2C. Até aqui tudo bem, mas tenho um grande problema com o código. Ao iniciar o robot ele lê os 3 sonares e vê em que direção tem de andar o problema é que a informação só é dada após a leitura dos 3 sonares demorando muito tempo, ou seja ele começa a andar e vai lendo os sonares  e se o sonar do centro detectar uma parede a menos de 9 centimetros ele não vira logo porque ainda falta ler o sonar da direita. O que acontece é que o robot bate na parede. O robot está com um atraso de resposta cerca de 3 segundos e não entendo porquê. Gostaria que alguem me ajudasse pois falta uma semana para entregar o projecto.

Se quizerem ver mais sobre o meu robot está aqui o meu site, não está actualizado pois não tenho muito tempo para isso http://wall-follower-robot.pt.vu/

Obrigado, Nuno Cruz

Offline antonio_jose

  • Mini Robot
  • *
  • Mensagens: 336
Re: Wall fallower robot
« Responder #1 em: 01 de Junho de 2010, 20:32 »
Boa Tarde Azoto

Bem Vindo ao Fórum :), espero que consigas resolver o teu problema, e que faças muitos projectos ;)

E Parabéns pelo site, continua assim...

Cumprimentos

Offline Azoto

  • Mini Robot
  • *
  • Mensagens: 14
Re: Wall fallower robot
« Responder #2 em: 01 de Junho de 2010, 20:34 »
Muito obrigado!!! não me consegues ajudar com este problema? nem tentar falar com alguem que perceba para me ajudar? é que tou mesmo com dificuldade!!

Offline antonio_jose

  • Mini Robot
  • *
  • Mensagens: 336
Re: Wall fallower robot
« Responder #3 em: 01 de Junho de 2010, 20:43 »
Eu a nível de programação ainda estou num nível muito básico e não encontrei o código do teu robô, no teu site :(

Mas o melhor é postares aqui neste teu post, o código, e o circuito eléctrico. Para o pessoal ver onde está o problema. É capaz de haver alguém que te ajude ;)

Offline ngoncalves

  • Mini Robot
  • *
  • Mensagens: 145
    • Thinking Olive Tree
Re: Wall fallower robot
« Responder #4 em: 01 de Junho de 2010, 20:52 »
Sem conhecer o código, aqui vão algumas dicas:

 1. Solução força bruta: fazer o robot andar mais lentamente. Assim dá tempo de ler todos os sonares e não bater nas paredes

 2. Solução não tanto força bruta: regular a velocidade do robot de acordo com as medições dos sonares. Quanto mais perto estiver um objecto, mais devagar anda o robot

 3. Utilizar o endereço de broadcast do bus I2C para que todos os sonares comecem a funcionar ao mesmo tempo. Assim não tens que esperar que um sonar termine, para ir ler o seguinte

 4. Diminuir o alcance útil do sonar, por forma a que seja mais rápida a leitura.

 5. Combinação das soluções anteriores

 
-----
Ambient intelligence, mobile robotics, life. 42
http://www.thinkingolivetree.blogspot.com/

Offline Azoto

  • Mini Robot
  • *
  • Mensagens: 14
Re: Wall fallower robot
« Responder #5 em: 01 de Junho de 2010, 20:58 »
Eu não coloquei o código pois iria estar a fornecer algo que nunca se deve fornecer nos robot's

posso é colucar aqui as configurações e a leitura de um dos sonraes para ver se isto está correcto. Uso a pic 18f252, um cristal de 10mhz.

...
#use I2C(FAST, SCL=PIN_C3, SDA=PIN_C4, FORCE_HW) 
...
int16 ler_sonar_esquerda()//112 é o sonar da esquerda
{
      int16 range;
      i2c_start();
      i2c_write(0xE0); 
      i2c_write(0x00);
      i2c_write(0x51);
      i2c_stop();
     
      delay_ms(105);
     
      i2c_start();
      i2c_write(0xE0);
      i2c_write(0x02);
      i2c_start();
      i2c_write(0xE1);
     
      range =i2c_read() << 8;
      range += i2c_read(0);
     
      i2c_stop();
      delay_ms(100);
      return range;
}

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Wall fallower robot
« Responder #6 em: 01 de Junho de 2010, 21:10 »
Porque tantos delays?
Estás ai a queimar tempo sem fazer NADA, depois, se não revelas o código tambem ninguem tem uma bola de cristal para adivinhar o que tu escreves-te.
A melhor maneira de ler os sensores é round robin, ou seja ler o sensor que não é lido á mais tempo e assim sucessivamente, tipo um loop, metes os sensores em free-runing, um timer a dar base de tempo e em casa interrupt do timer les um sensor, guardas os dados, processas os dados e quando se der outro interrupt lês outro sensor e assim sucessivamente, desses 205ms que queimas ai em delays, podias passar para no minimo um terço desse valor, o que já é muito mais rápido.
Porque é que fazes o shift left, o sensor manda-te 16 bits de dados?
Porque é que um fazes read e noutro read(0) se vai tudo para o range? (eu e i2c ainda não nos conhece-mos bem tambem...)
Avr fanboy

Offline AcidDagger

  • Mini Robot
  • *
  • Mensagens: 364
  • Make Bits, Making robotics in Portugal
    • Make Bits
Re: Wall fallower robot
« Responder #7 em: 01 de Junho de 2010, 21:10 »
se nao colocares o codigo completo desejo-te muita sorte...  :)

Assim é muito mais dificil

Offline ngoncalves

  • Mini Robot
  • *
  • Mensagens: 145
    • Thinking Olive Tree
Re: Wall fallower robot
« Responder #8 em: 01 de Junho de 2010, 21:11 »
Eu não coloquei o código pois iria estar a fornecer algo que nunca se deve fornecer nos robot's

Ah ?  :o

Porque é que o código que corre num robot não deve ser conhecido por terceiros ?
-----
Ambient intelligence, mobile robotics, life. 42
http://www.thinkingolivetree.blogspot.com/

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Wall fallower robot
« Responder #9 em: 01 de Junho de 2010, 21:19 »
É impressão minha ou sempre que les o sensor estás a fazer a inicialização do mesmo, dei uma olhadela no datasheet e é isso mesmo que pareces estar a fazer, assim ainda perdes mais tempo...
Código: [Seleccione]
      int16 range;
      i2c_start();
      i2c_write(0xE0);
      i2c_write(0x00);
      i2c_write(0x51);
      i2c_stop();
Isto aqui parece ser a inicialização do sensor para ler em centimetros e com um ganho analógico de 94 o 51 não percebo o que é.

Encontrei isto nos googles:
Código: [Seleccione]
'***********************************************************
'**                                                       **
'**   SRF08 Demonstration Software for the PICAXE-28x     **
'**     showing how to change the SRF08 I2C address       **
'**                                                       **
'**          Copyright 2003 - Devantech Ltd               **
'**    Commercial use of this software is prohibited      **
'**    Private and educational use only is permitted      **
'**                                                       **
'**         Written by Gerald Coe - May 2003              **
'**                                                       **
'***********************************************************

' NEW_ADDRESS can be set to any of E0, E2, E4, E6, E8, EA, EC, EE
'                                  F0, F2, F4, F6, F8, FA, FC, FE
symbol NEW_ADDRESS = $EC

main:
   i2cslave $00,i2cfast,i2cbyte     ' Define General Broadcast i2c address for the SRF08
   writei2c 0,($A0)                 ' 1st command in address change sequence
   writei2c 0,($AA)                 ' 2nd
   writei2c 0,($A5)                 ' 3rd
   writei2c 0,(NEW_ADDRESS)         ' The new address for the SRF08

' now show range reading to prove address change is OK
   i2cslave NEW_ADDRESS,i2cfast,i2cbyte ' use new i2c address for the SRF08
loop:
   writei2c 0,(81)                  ' Send Ranging command to get range in cm
   pause 100                        ' Wait for ranging to complete
   readi2c 2,(b5, b4)               ' Read the Range
   debug w2                         ' Display Range, Note b5-b4 are w2 high-low bytes
   goto loop

Em 4 linhas de código faz-se uma leitura do sensor, tu estás a usar 17 e com o dobro de tempo de delay, fazendo um round robin como disse acima les um sensor a cada 33ms, muito mais rápido que os teus actuais 205ms gastos em delay mais o tempo que demora a enviar esses comandos todos em i2c.
« Última modificação: 01 de Junho de 2010, 21:22 por senso »
Avr fanboy

Offline Azoto

  • Mini Robot
  • *
  • Mensagens: 14
Re: Wall fallower robot
« Responder #10 em: 01 de Junho de 2010, 21:23 »
Porque tantos delays?
Estás ai a queimar tempo sem fazer NADA, depois, se não revelas o código tambem ninguem tem uma bola de cristal para adivinhar o que tu escreves-te.
A melhor maneira de ler os sensores é round robin, ou seja ler o sensor que não é lido á mais tempo e assim sucessivamente, tipo um loop, metes os sensores em free-runing, um timer a dar base de tempo e em casa interrupt do timer les um sensor, guardas os dados, processas os dados e quando se der outro interrupt lês outro sensor e assim sucessivamente, desses 205ms que queimas ai em delays, podias passar para no minimo um terço desse valor, o que já é muito mais rápido.
Porque é que fazes o shift left, o sensor manda-te 16 bits de dados?
Porque é que um fazes read e noutro read(0) se vai tudo para o range? (eu e i2c ainda não nos conhece-mos bem tambem...)
Esse 1º delay é necessário para que ele espere para começar a ler a distancia. tanto o 1º como o 2º não tenho a certeza se são necessários mas encontreios num exemplo sobre o I2C.

Sim o sensor manda 16 bits
range += i2c_read(0) server para ler o 2º byte e colucalo em 1ºpois tão trocados.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Wall fallower robot
« Responder #11 em: 01 de Junho de 2010, 21:24 »
Ok, então lê o que postei antes do teu tópico e se quiseres mostra ai o teu código todo, só sais daqui a ganhar pois alguem te vai ajudar a fazer o trabalho que tu devias fazer e assim ficas com melhor nota...
Avr fanboy

Offline AcidDagger

  • Mini Robot
  • *
  • Mensagens: 364
  • Make Bits, Making robotics in Portugal
    • Make Bits
Re: Wall fallower robot
« Responder #12 em: 01 de Junho de 2010, 21:27 »
Achas que esse tipo de robot ainda ninguem fez?

Posta mas é o codigo se queres que te ajudem...

Offline Azoto

  • Mini Robot
  • *
  • Mensagens: 14
Re: Wall fallower robot
« Responder #13 em: 01 de Junho de 2010, 21:30 »
Pessoal esse não é o problema é que este código que tenho aqui foi-me fornecido por uma pessoa...como não sabia como ler os sonares pedi ajuda e acabou por me fornecer o código completo, como não sei se este se importa que forneça o código todo não o poderei colucar... peço desculpa mas gostaria que me ajudassem na mesma.

Offline Azoto

  • Mini Robot
  • *
  • Mensagens: 14
Re: Wall fallower robot
« Responder #14 em: 01 de Junho de 2010, 21:31 »

Isto aqui parece ser a inicialização do sensor para ler em centimetros e com um ganho analógico de 94 o 51 não percebo o que é.

o 51 é para o sonar fornecer a distância em cm