LusoRobótica - Robótica em Português

Software => Basic => Tópico iniciado por: The Wolfman em 16 de Fevereiro de 2010, 15:21

Título: Programação de robot em BASIC. Muitas duvidas
Enviado por: The Wolfman em 16 de Fevereiro de 2010, 15:21
Olá, boa tarde

Secalhar alguns já se devem ter apercebido, mas eu estou no 12ºano, e estou a construir um robot para área de projecto. É um robot de busca e salvamento que vai ter como entradas e LDR e três sensores de ultra-sons (frente e lados), e vai ter como saidas um LED e dois motores DC.

Decidimos utilizar um picaxe 28X1, e como tal, lidaremos com BASIC.

As minhas experiências anteriores? Programazitos nas aulas de matemática Mas eram programas simples e não tinham nada de sub-rotinas.

Os procedimentos do robot são estes.

-Andar sempre em frente, e quando estiver a ir contra um obstáculo, desviar-se e depois de os sensores ''não acusarem nada'', continuar em frente.

Depois o robot tem uma sub rotina. Quando o LDR encontrar uma ''vitima'', o robot irá parar e acender um LED, e depois disso irá retomar o seu percurso.

Quanto ao código, tenho já uma coisinha feita, mas tudo ainda muito rudimentar, e tenho dificuldades em juntar as rotinas.

Para os pinos dos motores DC, usei como base este pdf:
http://www.rev-ed.co.uk/docs/axe020.pdf (http://www.rev-ed.co.uk/docs/axe020.pdf)
Este pdf fala nos pinos 4,5,6 e 7 para os motores, visto que eles tem de estar ligados a um controlador.

Para já tenho isto (o valor do ldr foi ao calhas)
Código: [Seleccione]
'pinos 4 e 5 para motor esquerdo, e pinos 6 e 7 para motor direito

motoresfrente: 'motores a andar para a frente
high 4
low 5
high 6
low 7
goto motoresfrente

motorestras: 'motores a andar para trás
low 4
high 5
low 6
high 7
goto motorestras

motoresparados: 'motores parados
low 4
low 5
low 6
low 7
goto motoresparados

esquerda: 'robot a andar para a esquerda
low 4
high 5
high 6
low 7
goto esquerda

direita: 'robot a andar para a direita
high 4
low 5
low 6
high 7
goto direita

ldr: 'sensor LDR para detectar vitimas
readadc 0,b1
if b1 > 90 then goto led
if b1 < 90 then goto ldr

led: 'sinal que foi detectada uma vitima
high 1
pause 500
low 1
pause 500
goto led

Primeira duvida, tenho aqui duas rotinas, uma de estar a andar para a frente ou para os lados, e outra de estar a ler a a interpretar a entrada analógica do LDR. Como as relaciono?

Depois, alguém sabe como é que eu programo os sensores?

Segundo este pdf (http://www.rev-ed.co.uk/docs/SRF005.pdf (http://www.rev-ed.co.uk/docs/SRF005.pdf)), é algo deste género:
Código: [Seleccione]
symbol trig = 3 ‘ Define output pin for Trigger pulse
symbol echo = 6 ‘ Define input pin for Echo pulse
symbol range = w1 ‘ 16 bit word variable for range
main:
pulsout trig,2 ‘ produce 20uS trigger pulse (must be minimum of 10uS)
pulsin echo,1,range ‘ measures the range in 10uS steps
pause 10 ‘ recharge period after ranging completes
‘ now convert range to cm (divide by 5.8) or inches (divide by 14.8)
‘ as picaxe cannot use 5.8, multiply by 10 then divide by 58 instead
let range = range * 10 / 58 ‘ multiply by 10 then divide by 58
debug range ‘ display range via debug command
goto main ‘ and around forever
Alguém que perceba de BASIC, oiu já tenha trabalhado com estes processadores, me pode ajudar?

Só não consigo fazer com que ele faça duas rotinas ao mesmo tempo.

Para o LDR, acho que posso considerar feito.
Código: [Seleccione]
ldr: 'sensor LDR para detectar vitimas
readadc 0,b1
if b1 > 90 then goto led
if b1 < 90 then goto ldr

led: 'sinal que foi detectada uma vitima
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
high 1
pause 500
low 1
pause 500
goto ldr
Com este código, sempre que o LDR acusa determinado valor (o 90 foi ao calhas, depois tenho de ver que material vou usar), um LED acende durante 10 seg.

Existe maneira de simplificar isto? Do género um comando que diga para repetir o ciclo LED 10 vezes, e depois para voltar ao LDR?
Título: Re: Programação de robot em BASIC. Muitas duvidas
Enviado por: jp_ em 16 de Fevereiro de 2010, 16:00
boas wolfman,

Bom primeiro aconselho-te a dares uma vista de olhos aqui:  http://lusorobotica.com/index.php/topic,1803.msg17277.html#msg17277 (http://lusorobotica.com/index.php/topic,1803.msg17277.html#msg17277)

não têm o mesmo tipo de sensores mas as rotinas de movimento são as mesmas, mas está muito melhor estruturado.

se verificares sempre que entrares numa das rotinas de movivento (frente; traz; virar; etc ) que criaste nunca mais o programa saí de lá.

Código: [Seleccione]
motoresfrente: 'motores a andar para a frente
high 4
low 5
high 6
low 7
goto motoresfrente

motorestras: 'motores a andar para trás
low 4
high 5
low 6
high 7
goto motorestras

Se pretendes piscar um led 10 vezes usa o ciclo for next

ex:

Código: [Seleccione]
for i=0 to 9

high 1
pause 500
low 1
pause 500

next

espero ter ajudado

jp_
Título: Re: Programação de robot em BASIC. Muitas duvidas
Enviado por: The Wolfman em 16 de Fevereiro de 2010, 16:09
Eu estava a pensar em juntar às rotinas do movimento dos motores, os dados dos sensores, mas o que sugeres então?

Quanto ao que me disseste, quando vou simular, ele não reconhece o i...

Vou ler o teu tópico com atenção :)
Título: Re: Programação de robot em BASIC. Muitas duvidas
Enviado por: jp_ em 17 de Fevereiro de 2010, 23:44
boas wolfman,

relativamente a:
Citar
Quanto ao que me disseste, quando vou simular, ele não reconhece o i...

tenta:

Código: [Seleccione]
for b0= 0 to 9

high 1
pause 500
low 1
pause 500
next b0

mas o melhor é veres isto: http://www.rev-ed.co.uk/docs/picaxe_manual2.pdf (http://www.rev-ed.co.uk/docs/picaxe_manual2.pdf)

faz o dowload deste PDF e dá uma leitura

pag. 53 ciclos FOR ... Next

O problema das rotinas que salta à vista é que quanto acabas a rotina voltas para o início da mesma

Citar
motoresfrente: 'motores a andar para a frente
...
...
...

goto motoresfrente

o ultimo comando deveria ser um " Return " sem aspas

mas se leres o pdf que te indiquei certamente tiras essas dúvidas


jp_
Título: Re: Programação de robot em BASIC. Muitas duvidas
Enviado por: The Wolfman em 21 de Fevereiro de 2010, 17:50
Já tenho alguns progressos, por exemplo (ainda não está acabado, mas a ''lógica'' já está melhorada)
Código: [Seleccione]
ldr: 'sensor LDR para detectar vitimas
readadc 0,b1
if b1 > 90 then goto led
if b1 < 90 then goto motoresfrente

led: 'sinal que foi detectada uma vitima
for b0 = 1 to 10
if pin1 = 1 then exit
high 1
pause 500
low 1
pause 500
next b0
goto ldr

'pinos 4 e 5 para motor esquerdo, e pinos 6 e 7 para motor direito

motoresfrente: 'motores a andar para a frente
high 4
low 5
high 6
low 7
goto ldr

motorestras: 'motores a andar para trás
low 4
high 5
low 6
high 7
goto motorestras

motoresparados: 'motores parados
low 4
low 5
low 6
low 7
goto motoresparados

esquerda: 'robot a andar para a esquerda
low 4
high 5
high 6
low 7
goto esquerda

direita: 'robot a andar para a direita
high 4
low 5
low 6
high 7
goto direita
Ele lê o LDR, se o valor for maior que 90 pisca, senão anda para a frente, e no fim de andar para a frente, vai ler o LDR outra vez para não andar preso sempre na mesma instrução.

Agora falta-me aqui incluir os sensores, mas não percebo o código da picaxe :s

Já alguém trabalhou com um SRF05 em picaxe que possa explicar? Temos um professor a ajudar-nos, a ver se falo com ele que ele dizia-nos que nos ajudava com os sensores.

Como é que vai ser a lógica? Lê LDR, lê sensor frontal, esquerdo e direito, e depois com os valores (if blá blá), dizemos-lhe para onde queremos que ele ande, certo?

Quanto aos motores, estava a ler o manual, e vi o comando forward e os pinos dos motores estão certos :D
Título: Re: Programação de robot em BASIC. Muitas duvidas
Enviado por: vicardosof em 05 de Março de 2010, 15:20
Que tipo de sensor seria?
Sei algo de basic e posso ajudá-lo.
Título: Re: Programação de robot em BASIC. Muitas duvidas
Enviado por: samuka em 08 de Abril de 2010, 16:09
eu ja trabalhei e trabalho com o SRF05 o que queres fazer com ele??
Título: Re: Programação de robot em BASIC. Muitas duvidas
Enviado por: XicoMBD em 22 de Abril de 2010, 17:48
Boas,
Eu também estou a trabalhar num robot utilizando um 28x1 numa AXE020.
 Também estás a utilizar uma ou apenas usas o PDF como guia?

Acho que o devias tentar simplificar o teu código.
Fiz um baseado na tua ideia mas apenas utilizando um SFR05.
Lê e tenta perceber, se tiveres alguma dúvida quanto a ele avisa.


Código: [Seleccione]
'Localizações
 symbol trig = 3 ' Define output pin for Trigger pulse
 symbol echo = 6 ' Define input pin for Echo pulse
'Variáveis
 symbol DFrente = w1 'Variável para Distancia Frente
'Ajustes
 symbol DMin = 30 'Define a distancia minima em cm
 symbol LMin = 90 'Define a Luz minima em cm


'Rotina Principal
main:
 gosub LDR
 gosub SFR05
goto main





'Sub Rotinas
SFR05:
 pulsout trig,2 'Emite ultra-sons de 20uS (o minimo é 10uS)
 pulsin echo,1,DFrente 'mede a distancia em passos de 10uS
  pause 10 ' pausa
   let DFrente = DFrente * 10 / 58 'converte para cm
    'Analise Distancia
     if DFrente>DMin then
       gosub frente 'Se a distancia for maior que a Distancia Minima anda para a frente
      else
       gosub esquerda 'Se a distancia não for maior que a Distancia Minima gira para a esquerda
      endif

goto main



LDR: 'sensor LDR para detectar vitimas
 readadc 0,b1
  if b1 > 90 then
    goto led
   else
    return
   endif


LED: 'sinal que foi detectada uma vitima
 gosub parar
 for b0= 0 to 9
  high 1
   pause 500
  low 1
   pause 500
  next b0
 End



'Movimentos
Frente: 'motores a andar para a frente
high 4
low 5
high 6
low 7
return

Tras: 'motores a andar para trás
low 4
high 5
low 6
high 7
return

Parar: 'motores parados
low 4
low 5
low 6
low 7
return

Esquerda: 'robot a girar para a esquerda
low 4
high 5
high 6
low 7
return

Direita: 'robot a girar para a direita
high 4
low 5
low 6
high 7
return

Obrigado senso.
Título: Re: Programação de robot em BASIC. Muitas duvidas
Enviado por: senso em 22 de Abril de 2010, 21:34
Carregas no botão que tem o simbolo # e colas o teu código entre as tags que o botão mete, que são estas: [code ]código fica aqui[ /code]