Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Medir distancias con IR. rutina en GcBasic

Ir abajo

Medir distancias con IR. rutina en GcBasic Empty Medir distancias con IR. rutina en GcBasic

Mensaje por arcachofo 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... Medir distancias con IR. rutina en GcBasic Icon_lol ... 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:

arcachofo
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.