collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Programação de robot em BASIC. Muitas duvidas  (Lida 6945 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline The Wolfman

  • Mini Robot
  • *
  • Mensagens: 60
Programação de robot em BASIC. Muitas duvidas
« 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
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), é 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?
« Última modificação: 13 de Janeiro de 2012, 18:26 por Psycop »

Offline jp_

  • Mini Robot
  • *
  • Mensagens: 188
Re: Programação de robot em BASIC. Muitas duvidas
« Responder #1 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

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_
« Última modificação: 16 de Fevereiro de 2010, 16:02 por TigPT »

Offline The Wolfman

  • Mini Robot
  • *
  • Mensagens: 60
Re: Programação de robot em BASIC. Muitas duvidas
« Responder #2 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 :)

Offline jp_

  • Mini Robot
  • *
  • Mensagens: 188
Re: Programação de robot em BASIC. Muitas duvidas
« Responder #3 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

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_

Offline The Wolfman

  • Mini Robot
  • *
  • Mensagens: 60
Re: Programação de robot em BASIC. Muitas duvidas
« Responder #4 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
« Última modificação: 08 de Abril de 2010, 16:11 por TigPT »

Offline vicardosof

  • Mini Robot
  • *
  • Mensagens: 223
Re: Programação de robot em BASIC. Muitas duvidas
« Responder #5 em: 05 de Março de 2010, 15:20 »
Que tipo de sensor seria?
Sei algo de basic e posso ajudá-lo.

Offline samuka

  • Mini Robot
  • *
  • Mensagens: 4
  • Gosto de programar em MikroC!!
Re: Programação de robot em BASIC. Muitas duvidas
« Responder #6 em: 08 de Abril de 2010, 16:09 »
eu ja trabalhei e trabalho com o SRF05 o que queres fazer com ele??
Samuka

Samuel Leal

Offline XicoMBD

  • Mini Robot
  • *
  • Mensagens: 571
    • FranciscoDias.net
Re: Programação de robot em BASIC. Muitas duvidas
« Responder #7 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.
« Última modificação: 23 de Abril de 2010, 14:13 por XicoMBD »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Programação de robot em BASIC. Muitas duvidas
« Responder #8 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]
Avr fanboy