• Welcome to LusoRobótica - Robótica em Português.
 

Rasteiro

Started by ricard0g0mes, 19 de July de 2009, 22:46

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ricard0g0mes

Pequena actualização:

Já tenho o PIC a receber e interpretar um comando nunchuck que comprei por 4,5€ no ebay ;)
Agora vou passar à parte de controlo da direcção de acordo com as ordens que lhe dê com o comando.

O próximo passo será criar um sistema de "mapeamento" em X, Y utilizando os encoders rotativos que comprei. Já agora, se alguém tiver um exemplo de programa que use esses encoders ou idênticos, agradeço.
Eles usam o código gray... ainda tenho de o estudar antes... :(


ricard0g0mes

Bem, fica aqui um exemplo que encontrei na rede:

Quote
Quote//This is the decoder for a change in the quadrature inputs. Called on
//port B change
//interrupt, using the fast return stack.
void quad(void) {
   static int old;
   static int new;
   static int value;
   //Here I have an edge on one of the quadrature inputs
   new=input_b();
   //Now I have to decode the quadrature changes. There are four
   // possibilities:
   //I can have a rising or falling edge, on each of the two inputs. I have to
   //look at the state of the other bit, and increment/decrement according
   //to this.
   value=new^old;
   //'value', now has the bit set, which has changed
   if (value & 0x10) {
      //Here the low bit has changed
      if (new & 0x10) {
         //Here a rising edge on A
         if (new & 0x20) --position;
         else ++position;
      }
      else {
         //Here a falling edge on A
         if (new & 0x20) ++position;
         else --position;
      }
   }
   else {
      //Here the high bit (B) must have changed
      if (new & 0x20) {
         //Here a rising edge on B
         if (new & 0x10) ++position;
         else --position;
      }
      else {
         //Here a falling edge on B
         if (new & 0x10) --position;
         else ++position;
      }
   }
   old=new;
   bchanged=0;
}

'position', is a global value containing the current shaft position.
Now, this code looks long, but if you track it through, each possible path, for the different input combinations, involves only reading the port, an XOR, two logic tests, and then incrementing/decrementing the position variable.
Used with the normal interrupt handlers, and reasonable speed on the PIC, this should work fine. However I used it with a minimised 'global' handler, that doesn't save most registers, and like this, it happily handled a servo at up to 5000RPM, on a 128 line encoder.


Pauleta

Viva as Pics!!!  ;)

Essa coisa do mapeamento dá me uma ideia para o meu robot semelhante ao teu. Quem sabe de futuro lhe meta um módulo GPS ou assim. Mas para já ainda o tenho de meter a circular...

Cumprimentos,
Tiago Oliveira

ricard0g0mes

Só uma pequena brincadeira:

http://twitpic.com/byl76


... agora já tenho um LCD a funcionar para diagnostico... não havendo porta serie no portátil... teve de ser ;)



Pauleta

sempre podes usar um cabo conversor RS232 para USB...
Cumprimentos,
Tiago Oliveira

ricard0g0mes

Quote from: Pauleta on 29 de July de 2009, 19:10
sempre podes usar um cabo conversor RS232 para USB...

pois, eu sei. eu tenho um que emprestei a alguém que já não sei quem...
ja comprei um novo pelo ebay... estou à espera que chegue.

ricard0g0mes

Boas,

Já agora, fica aqui o esquema da placa que desenhei juntamente com um amigo para fazer a pcb para interface com o pic18f4550.

todas as portas estão disponíveis por "Molex's", e a comunicação por RS232 e usb tem uns jumpers associados para o caso de se querer usar as portas RC4, RC5, RC6 e RC7 para outros fins que não as comunicações.

Tem tb os botões para reset e entrada em bootloader.


http://twitpic.com/c4qgs

se alguem quiser os gerber files, posso arranjar.

P.S- o esquema tem um erro na max232 (falta ligar os pinos 8, 10 e 15 ao GND e ligar um condensador entre o pino 15 e a GND).


ricard0g0mes

#22
Fica cá um pequeno video com o robot em movimento comandado com o joystick do nunchuck.
Para activar os motores tenho de premir os botões C e Z. A velocidade já depende da pressão que faça do joystick para a frente ou para trás em 3 níveis.

http://www.youtube.com/watch?v=VeqBawgmtWQ

metRo_

Para colocares o vídeo basta colocar o link do youtube :)
Ainda não definis-te para os lados?
Quando isso ficar sem fios!

ricard0g0mes

Quote from: metRo_ on 02 de August de 2009, 23:04
Para colocares o vídeo basta colocar o link do youtube :)
Ainda não definis-te para os lados?
Quando isso ficar sem fios!

pois... o tempo tem sido mesmo muito pouco... uns minutitos por dia.
para os lados é já a seguir... sem fios, para já não é prioridade.

Rebel

Uma ideia: Usar um nunchuck wireless (As ligações devem ser as mesmas)

Pauleta

Altamente!

Engraçado, o meu projecto é semelhante ao teu... essa base de lagartas parece muito porreira. Acho muita piada as lagartas mesmo.

Tenho de pensar também na questão da velocidade variável dos motores.
Cumprimentos,
Tiago Oliveira

ricard0g0mes

Quote from: Pauleta on 03 de August de 2009, 22:53
Altamente!

Engraçado, o meu projecto é semelhante ao teu... essa base de lagartas parece muito porreira. Acho muita piada as lagartas mesmo.

Tenho de pensar também na questão da velocidade variável dos motores.

isso é muito fácil de fazer com o pwm e um controlador como o que usei.


tr3s

Partilha connosco as tuas conclusões, "lessons learned". Como chegaste a essa solução e porquê!
Tr3s
Daniel Gonçalves

ricard0g0mes

Quote from: tr3s on 04 de August de 2009, 12:07
Partilha connosco as tuas conclusões, "lessons learned". Como chegaste a essa solução e porquê!


qual solução? a do controlador?
ou de utilizar um pic?
usei pic pois estou habituado a trabalhar com eles deste o tempo de universidade, em que usava o 16f876 (acho que era assim).
alem disso, tinha por cá algumas free samples ;)