LusoRobótica - Robótica em Português
Sistemas específicos => Picaxe => Tópico iniciado por: RodriguesRobotica em 28 de Dezembro de 2010, 20:31
-
Boa noite a todos :D!
Sou novo aqui no forum, espero ajudar e ser ajudado quando necessário. Cumprimentos a todos ;D
Tenho um projecto em mãos que consiste no seguinte : Coloco um objecto de cor em cima de um robô e ele, dependendo da cor, irá fazer um certo circuito, seguindo uma linha preta. Haverá 3 cores possíveis.
O robô parte sempre do mesmo local, seguindo a linha ate encontrar 3 locais para virar dependendo da cor do objecto.
Eu quero que por exemplo se a caixa for de cor preta, quando os 3 sensores de pista estiverem a 1 (detectar preto) , o robô deve virar para a esquerda, seguir novamente a linha e parar quando os 3 sensores de pista estiverem novamente accionados , para que a caixa seja colocada num certo local.
Por sua vez se a caixa for de cor vermelha, o robô deverá ignorar a primeira vez que os 3 sensores accionem simultaneamente, virar a esquerda da 2º vez que estejam accionados os sensores e parar da 3º vez que os mesmo estejam accionados. :D
E assim sucessivamente para a outra cor.
O meu problema está ai mesmo, como faço para que o robô passe pela 1º vez que os 3 sensores estejam accionados, vire no 2º e pare no 3º???
Se alguém me pudesse ajudar. . ..
A programação do robô está a ser feita a partir do PICAXE 28X1
Tem uma imagem anexada, fiz um esquema para perceberem melhor.
Cumprimentos
-
repara nesta imagem modificada que anexo.
eu recomendo que haja a linha na posição inicial do robot, caso haja necessidade deste voltar e parar nessa posição..
em vez das curvas serem feitas por haver 3 sensores activos, sejam feitas se houver dois sensores activos.
e haver para cada cor um percurso pré definido.
-
Sim, o projecto está com o robot a voltar ao inicio, eu é que não representei na imagem ;)
Quanto a ele fazer as curvas com dois sensores activos, isso vai causar interferência quando o robot estiver a percorrer a linha normalmente.
-
Isso é resolvido usando um simples contador...
Caso o objecto seja verde, tem de contar até 3;
Caso o objecto seja vermelho, tem de contar até 2;
Caso o objecto seja preto, tem de contar até 1;
Colocas uma variável com o valor máximo do contador, após detecção da cor do objecto (apenas tem de ser feita uma vez).
Depois, de cada vez que ficam todos activos, aumentas o contador.
E verificas:
Se o valor actual do contador é igual ao valor máximo, então é para virar agora à esquerda.
-
bah! k cromo.. só agora reparei k não anexei nada.. mas tb n importa, tu percebeste a ideia, e de kk forma não tinha lido bem a dúvida.. :S desculpa a perda de tempo..
-
Caro Ricardo-reis, sim percebi e obrigado pela ajuda :)
Caro microbyte, obrigado pela ajuda, e acho que percebi o que me quis dizer, só não estou a conseguir aplicar :S
Segundo o que me disse, vamos pensar na cor verde:
Declaro a variável com o valor máximo e declaro o contador: b5 = 3
b6= 0
symbol contador= b6
(Qual é a instrução do contador? vou lhe chamar contador ;D):
If esq= 1 and cent= 1 and dir= 1 then
gosub contador
Contador:
b6= b6 +1
If b5 = b6 then
gosub viraresquerda
Acho que é isto, pelo menos pelo que entendi, mas nao sei a a variável do contador . . . ..
obrigado pela sua ajuda :)
-
Começo já por dizer para me tratares por tu. ;)
O contador é uma variável, não uma subrotina.
Não sei como declaras isso em BASIC (?).
Afinal é mais simples do que te disse.
Imagino que tenhas uma rotina para a detecção da cor.
Vais ter de definir uma variável para o contador (pode chamar-se o que tu quiseres, presumo).
Em pseudo-código:
# após deteccao da cor:
if cor = verde
contador = 3
else if cor = vermelho
contador = 2
else if cor = preto
contador = 1
# garante que só defines estes valores 1 vez e após teres a certeza da cor do objecto
# depois na parte da decisão:
if esq= 1 and cent= 1 and dir= 1
contador = contador - 1
if contador = 0
viraresquerda
Aqui modifiquei um pouco aquilo que disse, em vez de precisares de 2 variáveis, só precisas efectivamente de uma, e vais decrementando até chegar a 0 -> nesta situação tens de chamar a sub-rotrina "viraresquerda"
A variável chama-se contador e é do tipo inteiro. Agora terás de procurar pela internet como se declaram variáveis. ;)
Espero ter ajudado.
-
Sim, ajudas-te e muito :D, pelo que vi a teoria/programa é essa agora só falta por em pratica para ver se tudo corre bem.
Mais uma vez, obrigado ;)