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

iBot

Started by durza, 21 de December de 2009, 23:16

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

durza

Antes de construir o meu projecto em acrilico decidi construir em K-line para ver mais ou menos as dimensões e como vai ficar distribuido o material!

algumas fotos:



Material todo testado






Mais tarde explico o funcionamento detalhado do projecto.


cumprimentos,



durza

durza

Explicação:

vai ter um menu com tres opçoes:
- Controlo remoto
- Autonomo
- Seguir movimentos

controlo remoto -

com o joystick do lado esquerdo o robot anda para a frente ou para tras, com o joystick do lado direito o robot anda para o lado esquerdo ou para o lado direito

trabalha atraves de radio frequencia, de modulos de um carrito telecomandado que tinha velho,
o modulo emissor fica dentro do comando de uma ps2, para ler os valores analogicos dos joysticks coloquei um picaxe 14m e atraves dos valores liga os contactos no modulo emissor por transistors, pilha de 9v e um regulador de tensao (lm7805).

modulo receptor, ligo a entradas no picaxe 40x1 e conforme as entradas forem activadas atraves do comando ligo saidas para os servos que vao servir de motores, usando um l293b para os poder controlar.

Autonomo -

Em modo autonomo o robot detecta obstaculos atraves de sensores de infra-vermelhos e ultra sons, infra-vermelhos para detectar objectos a esquerda ou a direita e falta de piso, o ultra sons para descubrir o melhor caminho ou caminho mais livre para seguir perante obstaculo, perante um obstaculo e o local dele desvia-se controlando os servos (motores) atraves do l293b com as mesmas saidas do picaxe.

Seguir movimentos -

Em modo Seguir movimentos o robot detecta um obstaculo (ex. mão) com os infra-vermelhos e compara as distancias, se as distancias forem diferentes o robot roda ate as distancias igualarem, ou seja, vai "olhar" sempre para a "mão".



Em todos os modos as medidas que o robot estiver a medir, como o ultra sons, infra-vermelhos, temperatura e ldr vão aparecer no lcd 20x4 (lcd ligado por i2c) e conforme o valor da ldr as luzes nocturnas ligam ou desligam.


entretanto ja fiz uma maquete para saber as medidas e testar o material e ver o robot a mexer, estou a espera das lagartas por isso coloquei uma rodas para poder fazer testes

algumas fotos e videos:
















teste de limites dos servos:


iBot v.1


iBot


a cabeça abana muito porque nao esta muito rigido mas o projecto final vai ser em acrilico!

criticas, apoios, ajudas, comentarios é tudo bem vindo

cumprimentos

Njay

Parece que isso tá a andar a passos largos, hein? Muito bom, paraéns e força nisso!

Tyran

Hehe muito fixe   :D

TigPT

Está a ficar muito bom! Só aconselhava para fazer movimentos mais lentos com a cabeça senão ela espeta-se no chão. Suavizar um pouco não custa nada!

durza

Obrigado a todos!  ;D  sim está a andar rapido, o tempo começa a ficar apertado :S


Quote from: TigPT on 19 de January de 2010, 09:18
Está a ficar muito bom! Só aconselhava para fazer movimentos mais lentos com a cabeça senão ela espeta-se no chão. Suavizar um pouco não custa nada!

obrigado! Como posso diminuir a velocidade dos servos? ???  ajuda aqui

cumprimentos

TigPT

Se pretenderes ir da posição 0 para a posição 90

Moves para a posição 10, depois 20, depois 30, etc até à 90.

Com um ciclo destes e tempos controlados entre cada iteração, a cabeça do robot vai rodar de forma mais suave. (se mesmo assim andar aos soluções baixa o delta de 10 para uns 5 ou menos)

Ex:

sevoFromTo(int from, int to){
  int negativo (from > to);
  int actual = from;
  while( actual != to){
    moveServo(actual += negativo?((to - actual) %10):((to - actual) %10)*-1);
    delay(10);
  }
}


Qualquer coisa deste genero. Não garanto que o código funcione pois foi escrito agora às 3 pancadas mas dá para transmitir a ideia.

durza

Quote from: TigPT on 19 de January de 2010, 11:24
Se pretenderes ir da posição 0 para a posição 90

Moves para a posição 10, depois 20, depois 30, etc até à 90.

Com um ciclo destes e tempos controlados entre cada iteração, a cabeça do robot vai rodar de forma mais suave. (se mesmo assim andar aos soluções baixa o delta de 10 para uns 5 ou menos)

Ex:

sevoFromTo(int from, int to){
  int negativo (from > to);
  int actual = from;
  while( actual != to){
    moveServo(actual += negativo?((to - actual) %10):((to - actual) %10)*-1);
    delay(10);
  }
}


Qualquer coisa deste genero. Não garanto que o código funcione pois foi escrito agora às 3 pancadas mas dá para transmitir a ideia.

estou a fazer em picaxe portanto axo ke o codigo, segundo o que escreves te fica:

servopos 7, 70
servopos 7, 80
servopos 7, 90
servopos 7, 100


mas acho que assim a velocidade é a mesma, pk so altero a posiçao do servo e nao a velocidade :S

cumprimentos

TigPT

Os servos não digitais não permitem alterar a velocidade por isso terás que fazer por software. Assim deves de dar passos pequenos e inserir delays (tempos de espera) entre cada passo para que ele passe a demorar mais tempo.

Experimenta, vais ver que fica mais lento.

durza

Quote from: TigPT on 19 de January de 2010, 11:57
Os servos não digitais não permitem alterar a velocidade por isso terás que fazer por software. Assim deves de dar passos pequenos e inserir delays (tempos de espera) entre cada passo para que ele passe a demorar mais tempo.

Experimenta, vais ver que fica mais lento.

Ok, então vou tentar por pausas e varias posições para ver se fica mais lento e seguido! obrigado

durza

controlar velocidade de servos em picaxe:


controlar velocidade dos servos –



init:
symbol headpos = b13
symbol headmax = 200
symbol headmin = 165
symbol headmiddle = 180
symbol head = 6
symbol neckpos = b12
symbol neckmax = 200
symbol neckmin = 70
symbol neckmiddle = 130
symbol neck = 7
servo 6, 180
servo 7, 130



" define a saída 7 para o servo do pescoço e a saída 6 para o servo da cabeça, guarda a posição da cabeça e do pescoço em memorias,
através dos símbolos definidos defeni o limite máximo e o limite mínimo e o ponto intermédio dos servos"




rt:
for headpos=180 to headmax step 1:servopos head, headpos:pause 10:next
for headpos=200 to headmin step -1:servopos head, headpos:pause 10:next
for headpos=headmin to headmiddle step 1: servopos head, headpos:pause 10:next
for neckpos=130 to neckmax step 1:servopos neck, neckpos:pause 10:next
for neckpos=200 to neckmin step -1:servopos neck, neckpos:pause 10:next
for neckpos=neckmin to neckmiddle step 1: servopos neck, neckpos:pause 10:next
pause 1000
goto rt



"Coloca a posição 180 na memoria e depois sobe a posição de 1 em 1 até a posição máxima do servo com intervalos de 10 milissegundos,
procedendo desta forma para todos os movimentos, aumentando ou diminuindo a posição na memoria de 1 em 1, para definir a posição que quero
basta escolher o símbolo já definido e mover a memoria de 1 em 1"




video:

P1200722

durza

Amanha ja é a primeira avaliação do projecto!!

não sei o que dizer sobre o projecto, ou pelo menos como começar :s

guibot

parece muito bem encaminhado! força com isso!!

à muito que não via um robot engraçado por aqui   :)

Raul

Uma pergunta, onde arranjaste esses analógicos (joystick). Só encontro na sparkfun.
Retiraste de um comando da ps2 ou pc?
Eu queria saber se é possível retirar e trabalhar com eles a parte?
Se fosse ia ao chinês compra um comando XD

Desculpa ser um pouco egoísta XD, continua o trabalho, bem bonito.

Cumprimentos

guibot

Raul isso que perguntas é muito possível, vê aqui   ;)