Medir distancias con IR. rutina en GcBasic
Página 1 de 1.
Medir distancias con IR. rutina en GcBasic
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.
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:
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:
arcachofo- Participante Activo
- Mensajes : 91
Fecha de inscripción : 26/11/2008
Temas similares
» [SOLUCIONADO]Problema GCBASIC
» Compilador Basic libre para PIC: GCBASIC
» Ubuntu 12.04 y GCBasic
» GCBasic: Librería Comparadores para PIC
» Librería para multitarea en GCBasic.
» Compilador Basic libre para PIC: GCBASIC
» Ubuntu 12.04 y GCBasic
» GCBasic: Librería Comparadores para PIC
» Librería para multitarea en GCBasic.
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|