terça-feira, 21 de junho de 2011

Regional da OBR no Espírito Santo

A garra do Hulk, com 4 servo motores do VEX
A OBR

As 6 equipes que participaram do campeonato
Como devem ter percebido, estive ausente este mês devido ao campeonato da OBR (Olimpíada Brasileira de Robótica) que ocorreu sábado passado, no IFES vitória e que me tomou muito tempo.
O desafio é construir e programar um robô autônomo, capaz de seguir uma faixa preta aleatória, contendo obstáculos e gaps (falhas). E no final do trajeto, resgatar uma vítima que é uma lata de refrigerante. Este campeonato é também chamado de RoboCup Junior RESCUE A.
Participaram do campeonato 1 equipe do nível 1 e 6 equipes do nível 2, sendo uma delas a nossa equipe: EMEROTECOS.
Nosso robô, contava com diversos sensores, inclusive uma placa Multiplexadora de sensores e motores utilizando o ARDUINO, que eu produzi para conectar ao NXT.
Ela neste evento, serviu apenas para comandar os quatro motores do VEX, de acordo com os comandos do NXT, mas poderia ser adicionado até 20 servos, ou 20 sensores digitais sendo 8 analógicos. Ele se comunica com o NXT via I²C. Fiz basicamente o mesmo que AQUI, porém utilizando o Arduino nano como micro controlador.


Sensores

Placa Multiplexadora com Arduino
Utilizamos 10 sensores de luz, para seguir a linha e conseguir aplicar algoritmos do tipo PID para se acertar com precisão na linha, e minimizar o erro dele ao longo do percurso.
Um sensor de bussola, fundamental para fazer curvas bem-feitas, e saber sua direção relativa a locais do qual o robô tinha conhecimento de sua direção (como uma borda).
Um sensor de distância Infravermelho, capaz de diferenciar 1mm de distância, responsável por gerar um gráfico no qual usamos para saber a posição da vítima na última sala.


Algoritimos de navegação

O Hulk, robô da OBR regional 2011
Para facilitar a programação, passei algumas horas criando uma máquina de estados para o RobotC, o que me ajudou muito posteriormente. Esta tal "máquina de estados", é um simples diagrama, no qual posso passar de um estado para outro, de qualquer parte do meu programa.
Um exemplo: O robô esta seguindo linha, e uma multi-tarefa, detecta que o sensor de toque foi pressionado. O estado principal, que segue linha, não precisa se preocupar com isso, e apenas deixará de executar este estado, e passará para o de desvio de obstáculo. Isso, sendo feito de qualquer parte do programa!
Agora vem a parte pratico-teórica de verdade.
O robô inicia checando todos os sensores, e motores. Se qualquer um deles estiver desligado/desconectado/quebrado/sumido/derretido/qualquer outra coisa, o NXT joga uma mensagem de erro na tela, dizendo qual sensor esta com erro, e oque deve ser feito.
Feito isso, entra a tela inicial, e escolhemos portanto, seguir linha com um clique no NXT.
Ele começa a seguir linha, e se algum desses 3 eventos ocorrer, ele entra em um novo estado:

  • O robô não esta mais enxergando linha, salva a posição da bússola e vai para a tarefa de gap.
    • Se andou por mais de uma distância, e não detectou linha nenhuma, sabe que esta na ultima sala (pois não há linha) e vai para a tarefa de pegar a lata.
    • Se detectou novamente a linha, volta para a tarefa de seguir linha.
  • O robô detecta que a velocidade angular da roda (derivada do encoder) esta baixa, então vai para a tarefa de obstáculo.
    • Na tarefa de obstáculo, ele desvia e volta para a tarefa de seguir linha.
  • O robô detecta que ao tentar se acertar na linha, seu ângulo de reentrada na linha foi maior que 130º, então sabe que fez alguma cagada (como ir na direção oposta) e reverte seu sentido.

Como não havia paredes na última sala, o sensor de infravermelho detectava sempre seu valor máximo quando não estava vendo a lata, e seu valor mínimo quando na lata. Para achar a posição dela, ele varria a sala com 90º, e gravava 200 amostras de distância. Logo após, varria essas 200 amostras, e descobria qual delas, teve o menor ponto, e que estava ao lado de menores pontos também (para filtrar amostras erradas).
Logo depois, andava um pouco mais a frente, e repetia este processo até estar próximo suficiente, para evitar erros, e conseguir pegar com as garras do Hulk.
Feito isso, o robô se posicionava nas 2 bordas da sala, para resetar sua posição XY e seguia para o final.
Isso tudo em 1300 linhas (com comentários) para conseguir fazer as missões.
Um vídeo mostrando ele na hora do campeonato (o filme não ficou muito bom, pois foi filmado de longe).

O que vem agora?

Se tiver um tempo, edito um vídeo para postar com algumas filmagens do robô em ação.
Como ganhamos o campeonato, iremos para o brasileiro em Setembro que ocorrera em São João Del Rei onde também participaremos do RoboCup Soccer, que são outros 500...
Dia 3 de Julho, viajaremos para Istambul na Turquia, para competir no campeonato mundial, RoboCup RESCUE B e voltaremos dia 14. Vou levar o Xoom, e se der faço um webcasting ao vivo de lá! Só preciso ter Internet.

No mais é isso.
Podem perguntar a vontade quanto ao robô, espero que tenham gostado e que tenha ajudado!

terça-feira, 7 de junho de 2011

Sorteio, anunciando o ganhador!

O vídeo fala por si só...

Parabéns ao ganhador!
O PIC será enviado pelo Francisco pelos correios. Faça bom uso!
Fiquem ligados, que tem mais novidades por vir...
Agradeço a todos que participaram, apoiaram, e elogiaram!
Um abraço,
Ivan Seidel

sábado, 28 de maio de 2011

Novidades para o blog

Robô do Soccer Junior (desenho do solidworks)


Como sabem, participo de campeonatos de robótica a um longo tempo, e nossa equipe quer divulgar o que estamos fazendo de novidade para os campeonatos, para ajudar e mostrar nosso trabalho.
A partir de hoje, sempre que algum passo for dado nos robôs irei postar aqui o que foi feito.

Os integrantes da equipe são: Ivan Seidel Gomes (Eu), Matheus Canejo e Yan Marim.
Também fazem parte: Prof. Felipe Nascimento Martins e Prof. Hudson Cassio.

Vamos participar de 3 campeonatos este ano:


  • Robocup Junior Soccer
    2 robôs autônomos jogam com outros 2 uma partida de futebol dentro de um campo medindo 1,80 x 2,40 m.
    O objetivo é fazer mais gols até o final dos 2 rouds.
    O tamanho máximo dos robôs é de 22x22x22 cm e seu peso máximo é de 2,5kg.
    REGRAS
    Até o momento, temos o robô desenhado no solidworks, algumas peças de acrílico prontas, as peças de alumínio serão cortadas brevemente. O robô será controlado por 1 NXT e 1 Arduino Nano v3.0.
    O robô irá se locomover na forma OMNI-DIRECIONAL para ter fácil e rápida mobilidade no campo.
    Postarei sobre os robôs separadamente e detalhada mente depois.
    O CAMPEONATO brasileiro ocorrerá em São João del Rei em MG no final do mês de setembro, no qual também participaremos.
  • Robocup Junior Rescue A
    1 robô autônomo que deve seguir uma faixa preta colocada aleatória mente ao longo de 3 salas, representando "um caminho seguro". O robô deve desviar de obstáculos sobre a faixa, e "gaps" que são pedaços sem faixa. No final da 2ª sala, há uma rampa onde o robô deve subir para chegar na 3ª sala que não haverá faixa, onde o robô deverá pegar uma vítima feita de lata de refrigerante posta em qualquer lugar e coloca-la em cima de um "patamar" em forma triangular que estará em alguns dos cantos.
    O robô terá 5 minutos para realizar as tarefas, e há perda de pontos por erros.
    REGRAS
    As peças para montar o robô chegaram esta semana, e agora é botar a mão na massa e no teclado. Ano passado participamos deste campeonato, e conseguimos pontuação máxima e o menor tempo no campeonato brasileiro (posto um vídeo depois).
    O campeonato ocorrera no próximo mês (Junho) no dia 18 em vitória - ES e é mais conhecido como OBR.
  • Robocup Junior Rescue B
    1 robô autônomo que deve achar o final de um labirinto feito com paredes aleatórias e detectar vítimas termicamente aquecidas (para isso AQUELE sensor térmico).
    O robô tera 5 minutos para realizar as tarefas, e há perda de pontos por erros.
    REGRAS
    Ainda não começamos a montar este robô, estamos na fase do "brainstorm", existe a possibilidade de usarmos o próprio robô do soccer pois já terá sensores ultrasonicos, câmera, e sistema omni-direcional.
    O CAMPEONATO será na Turquia - Istambul em julho e iremos representar o Brasil.
Um abraço a todos, e se tiverem duvidas sobre qualquer parte podem perguntar, estaremos a disposição para responder.

sexta-feira, 20 de maio de 2011

Meu outro novo brinquedo, Osciloscópio de bolso...

Oi pessoal!

Esta semana, chegou meu brinquedinho novo, DSO Nano que é um osciloscópio digital de bolso!

Para quem não sabe oque é um osciloscópio, a definição dada pela wikipédia é:
'O osciloscópio é um instrumento de medida eletrônico que cria um gráfico bi-dimensional visível de uma ou mais diferenças de potencial.[...]'.

Muito útil para medir essas tensões que variam centenas de vezes por segundo, e você não é capaz de ver com apenas um multimetro...

Fiz um pequeno vídeo para mostrar ele em "ação", é bem curtinho porque meu tempo esta bem curtinho nesses dias...



É incrível, o que ele faz, pelo preço que custou. Pesa 60g, tem uma velocidade de 2M sample e uma conversão AD de 12bits (4096 possíveis valores), uma tela lcd de 320x240, de 0 à 80V para medição, e algumas funcionalidades muito interessantes, como:

Tensão máxima, mínima, média, frequência, ciclo,duty cicle. Pode ser acionado por uma interrupção configurável de borda tanto positiva quanto negativa, pause em tempo real e algumas outras que ainda não sei mexer...

Ah sim, se você não gosta de ver na tela, pode gravar os dados no cartão SD e depois baixar para o computador sem problema algum.

Ele te permite: escolher dois pontos para medir a variação da tensão, e do tempo também, alterar o offset, e ver os dados após gravados.

A bateria, dura cerca de 2h, carreguei ontem o bixim, e tá aguentando bastante!

E o que me fez ficar apaixonado, foi seu microcontrolador! adivinhem...
Um ARM Cortex M3! isso mesmo, o mesmo do qual fiz o curso...

Para os interessados, estou fazendo pedidos dele sob encomenda em meu SITE.

E não se esqueçam de se inscrever no sorteio do PIC aqui.

Até a próxima!

terça-feira, 10 de maio de 2011

Brinquedo novo! LaunchPad MSP430

Eba! mais um brinquedinho para me divertir...


Agora, é o LaunchPad,MSP430 da Texas Instruments, um micro controlador bastante conhecido e usado a milênios...
Por incríveis U$4.30, incluindo frete comprei uma belezura dessa, e chegou hoje, após 1 semana de compra!

É uma placa que já vem com Mini USB para gravação, e com 2 micro controladores, bastante parecidos, mas um possui I²C, outro não.

Especificações:
2kB Flash
128B RAM
10GPIO
1x 16 bit timer
WDT
BOR
1x USI (I²C/SPI)
8ch 10 bit ADC



Achei o preço muito bom, e estou pensando em sortear um desse, oque acham?

Posto mais depois, com alguns testes realizados com ele.

sábado, 7 de maio de 2011

Sorteio! Concorra à um PIC16F877a

Olá leitores,
Para divulgar meu blog, e a loja de um amigo meu, sortearei um PIC16F877A.


O sorteio ocorrerá dia (1 de Junho) 7 de Junho, e para participar você precisa:

- Seguir o blog (aqui no lado direito estará o botão "seguir")
- Comentar neste post, dizendo qualquer coisa, que tenha a palavra "Tech", qualquer coisa mesmo... pode não ter sentido, e INCLUIR SEU E-MAIL PARA ENTRARMOS EM CONTATO!

O PIC foi doado pelo meu amigo Francisco, que esta montando sua loja virtual, de peças eletrônicas, o diferencial, é que são peças bem difíceis de se achar, e bem singulares.
Aqui esta a loja dele: VALLE SOLUÇÕES

Só sortearei o PIC, se existir mais de 32 pessoas para concorrer no dia 1º. O sorteio será realizado, só dentre aqueles que POSTAREM neste tópico e SEGUIREM o blog.

Divulguem por favor pessoal! Se isso der certo, todo mês posso fazer um...

Boa sorte a todos!

--
Atualização:

sexta-feira, 6 de maio de 2011

Sensor Termico Infra Vermelho

Olá leitores!
Quero mostrar a vocês, o sensor térmico infra-vermelho (TIR) que será usado no campeonato na Turquia, agora em Julho de 2011, na categoria Rescue B da Robocup Júnior.
O objetivo é achar a saída de um labirinto aleatório, e detectar "vítimas" aquecidas eletricamente. O sensor responsável por detectar estas vítimas será o da foto a baixo:

Sensor Térmico Infra Vermelho (3 na foto)
Ele é bem pequeno, e possui 3 modos de uso: Trigger, I²C, e PWM.
Com 4 pinos, 2 sendo alimentação e outro terra, restam 2 para comunicação.
O modo Trigger, é usado quando você quer apenas saber quando atingiu uma certa temperatura, usado em aparelhos eletrônicos para controle de temperatura e etc.
O modo PWM, gera um pulso PWM referente a leitura térmica do sensor.
Já o Modo I²C, através de registradores você pode acessar o valor absoluto da temperatura, vale lembrar que existem alguns sensores dentro de um único sensor, e que a leitura é a média deles.
A precisão dele, é de 0,01ºC quando em condições isotérmicas com o ambiente.
Vou fazer ele comunicar com o Arduino, e depois com o NXT.
Abraços, e até a próxima!