Medir distancias con IR. rutina en GcBasic

Ir abajo

Medir distancias con IR. rutina en GcBasic

Mensaje por arcachofo el Jue 27 Nov 2008 - 4:09

He probado varias posiblidades para medir distancias con IR,
tanto cambiando la intensidad de señal como la frecuencia y obtengo
resultados parecidos.... y al final creo que me voy a decidir por el
código má sencillo, que lo consigo cambiando frecuencia, el tema se
basa en hacer una rutina en ASM con 14 ciclos (reloj 4 Mhz)de Led encendido y otros 14 ciclos de Led
apagado, todo esto dentro de un bucle for x=6 to 1 que va saltando x
instrucciones, de manera que la primera medición la hace con 14-6
ciclos encendido y 14-6 apagado, y la última con 14-1=13 us, así va
cambiando de frecuencia con bastante exactitud.


Código:
 


for med=6 to 1 step -1
pul = 65                  ;con 65 pulsos obtengo el mayor alcance, pero se puede variar
det = 0
asm
{
 movf    _med,W        ;pasa med a W,...                      W=med

pulsod:
 bsf _porta,6          ;enciende Led
 addwf    _pcl,F      ;salta "med" instrucciones,...      PCL=PCL+W
 nop                  ;PCL es el contador de programa,
 nop                  ;si añado 2 a PCL
 nop                  ;se saltará 2 instrucciones
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 btfss    _porta,4      ;lee receptor IR,...            IF PORTA.4=1 THEN
 incf    _det,F        ;contador de detección...    det=det+1  ; END IF


 bcf    _porta,6      ;apaga Led
 addwf    _pcl,F        ;salta "med" instrucciones...  PCL=PCL+W
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 decfsz    _pul,F        ;este es el contador de pulsos: pul=pul-1
 ;si pul=0 se salta la siguiente instrucción
 goto    pulsod

}
if det > 30 then
 goto sale
end if

call delay_ms (30)      'sin este delay el alcanze disminuye mucho, aunque se puede variar
next med

goto salir              'No hay detección

sale:                  'Hay detección, distancia = 6-med , cuanto mayor sea med el pulso es más corto
 ' y por tanto más se aleja de los 38 khz, med=6 lo más cerca y med=1 lo más lejos.


Esta rutina la pensé para el Led
central para medir hasta 2m y haciendo un giro de 360º busque la
salida, pero creo que también la voy a usar en detección de obstáculos
y que reaccione distinto según la distancia a la que se ecuentre el
obstáculo, así podrá reaccionar a obstáculos desde unos 50cm, pero a la
vez podrá pasar por huecos pequeños... creo... ... tambien para seguir objetos manteniendose a cierta distancia, etc...

En el siguiente video se vé el comportamiento del robot con esta rutina aplicada para mantenerse a cierta distancia de un objeto:

avatar
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.