Você está na página 1de 6

VELOCIMETRO, TACOMETRO Y ODOMETRO PARA BICICLETAS

Bsicamente consiste en la utilizacin de un sensor magntico digital (UGN 3132 en este caso)
que, mediante imanes en la rueda, manda pulsos a un microcontrolador (16F628A en este
caso) y ste, mediante su programacin, muestra los resultados en un LCD.



CIRCUITO



B: batera 9v L1: llave de encendido y apagado
C: capacitores cermicos de .1 L2: llave de km/h a m/s y viceversa
7805: regulador de V de 9 a 5v (LM 7805) R1: resistencias PULL-UP (1k)
VDD: salida del regulador (5v) R2: resistencia backlight del LCD (se cal-
PS: pulsador del reset cula con un preset conectado al LCD)
X1: cristal de 4,19 Mhz R3 y R4: idem R2
: GND (masa) R5: resist. PULL-UP para el ugn (333 ohm)
U: UGN 3132

*P15,P2,P3,P1 etc, son los pines correspondientes al LCD
Configuracin de pines del LCD:
http://www.winstar.com.tw/products_detail_ov.php?lang=es&ProID=22

*Hay muchas referencias en el circuito con el fin de simplificarlo y no mezclar las pistas.

* Clculo de R2 *Clculo de R3 y R4




Funcionamiento bsico del UGN 3132
El UGN 3132 es como una llave magntica digital, cuando un campo magntico pase cerca de
l se activar. (Debido a que los imanes tienen que pasar cerca, se tiene que ver bien donde
poner el UGN para que agarre bien los imanes de la rueda, as tambin como se tiene que ver
donde poner los imanes en la rueda.)La salida del UGN ser igual a la seal de entrada.



Datasheet : http://www.datasheetcatalog.org/datasheet/allegromicrosystems/3132.pdf

*Se presupone que a mientras mas potencia tenga el imn, mas distancia puede tomar el
UGN para detectarlo.


PROGRAMA DEL MICROCONTROLADOR (lenguaje basic)

Define CONF_WORD = 0x3f61 ' instruccin del reset del pic por RA5 (propia del fabricante)

Define CONF_WORD = 0x3f61

AllDigital
TRISA.2 = 1
TRISB.0 = 1
TRISA.5 = 1
Define LCD_BITS = 4 'completo registros del lcd
Define LCD_DREG = PORTB
Define LCD_DBIT = 4
Define LCD_RSREG = PORTB
Define LCD_RSBIT = 1
Define LCD_EREG = PORTB
Define LCD_EBIT = 3
Define LCD_RWREG = PORTB
Define LCD_RWBIT = 2
Define LCD_COMMANDUS = 2000
Define LCD_DATAUS = 100
Define LCD_INITMS = 100
Lcdinit
T1CON.T1CKPS1 = 1 'valor del preescaler 8
T1CON.T1CKPS0 = 1
T1CON.T1OSCEN = 0 'oscilador off
T1CON.TMR1CS = 0 'habilita el clock del micro
T1CON.TMR1ON = 1 'habilita el timer 1
Lcdcmdout LcdHome 'escribo en LCD el nombre del proyecto
Lcdout "velodotacometro"
Lcdcmdout LcdLine2Home
Lcdcmdout LcdLine2Pos(7)
Lcdout "K&M"
Lcdcmdout LcdClear
PIE1.TMR1IE = 1 'interrupcin por timer1
INTCON.GIE = 1 'interr. global
INTCON.PEIE = 1 'interr. por perifricos
INTCON.INTE = 1 'interr. por rb0
Dim a As Byte
a = 0
Dim np As Byte
np = 0
Dim velockm As Word
Dim pasos As Word
Dim veloc As Long
Dim distm As Byte
Dim distkm As Byte
Dim velocm As Word
Dim rev As Word
pasos = 0
distkm = 0
distm = 0
lop:
Lcdcmdout LcdHome 'escribo en LCD todas las magnitudes con sus unidades de medicin
If RA2 = 1 Then 'condicin para (con una llave) indicar velocidad en m/s o km/h
Lcdout #velocm
Lcdout "m/s"
Else
Lcdout #velockm
Lcdout "km/h"
Endif
Lcdcmdout LcdLine1Pos(10)
Lcdout #rev
Lcdout "rpm"
Lcdcmdout LcdLine2Pos(6)
Lcdout #distkm
Lcdout ","
Lcdout #distm
Lcdout "km"
WaitMs 1000 'cada 1 seg
Lcdcmdout LcdClear 'borro el contenido del LCD
Goto lop
End
On Interrupt
Save System
pregunta:
If INTCON.INTF = 1 Then 'interrupcion por rb0
np = np + 1 'cuento el num de pulsos para calcular la distancia
a = a + 1 'cuento el num de pulsos para calcular velocidad
If PIR1.TMR1IF = 1 Then 'pregunto si salto la interr. del timer para saltar a las cuentas
Goto tiempo1
Endif
Goto fin2
Else
tiempo1: interrupcin por timer1
pasos = pasos + 1 'verifico cuantas veces salto la interr. del timer para completar 1 seg
If pasos = 2 Then 'si la interr. salto 2 veces salta al bucle de cuentas (tiempo2)
pasos = 0 'reseteo el num de pasos
Goto tiempo2
Else
Goto fin2
Endif
tiempo2:
veloc = a * 360 'cuentas
rev = a * 6
velockm = veloc / 476
velocm = velockm / 4
a = 0
If np > 476 Then
distm = distm + 1
np = 0
If distm > 9 Then
distkm = distkm + 1
distm = 0
Endif
Endif
Endif
fin2:
INTCON.INTF = 0 'borro las banderas de la interrupcion
PIR1.TMR1IF = 0
Resume

El programa consta bsicamente de, mediante el uso de las interrupciones por RB0
[INTCON.INTE] y por el Timer1 [PIE1.TMR1IE] del PIC (usando oscilador externo), realizar las
cuentas necesarias para sacar las distintas magnitudes mediante el numero de pulsos que
manda el UGN.
Los pulsos van a ingresar por RB0 y se van a ir acumulando en 2 distintas variables (a y
np).
A la interrupcin por el timer la utilizamos para realizar las cuentas, en base al tiempo, cada
1 segundo. Con un preescaler de 8 y un cristal de 4,19 MHZ, la interrupcin salta cada medio
segundo ,por eso esta la variable pasos, cada 2 veces que salte la interrupcin se cuenta 1
segundo y salta al bucle de las cuentas.
Datasheet del PIC
http://ww1.microchip.com/downloads/en/devicedoc/40044f.pdf

Razonamiento de las cuentas
Las cuentas se realizan en base a las revoluciones. Si calculamos el permetro de la rueda
podemos determinar cuantas revoluciones tiene que dar para llegar a 1km. En este caso se
calculo un permetro de 2,10 metros por lo que tiene que dar 476 revoluciones (aprox) para
recorrer 1km.
En este caso utilizamos 10 imanes en la rueda (mientras ms imanes ms precisin en los
clculos) por lo que el numero de revoluciones cada 1 segundo va a estar dado por a/10. La
variable a se ira reseteando (a=0) cada 1 segundo porque sino la velocidad nunca va a bajar
su valor. Entonces a va a tener un valor distinto en cada segundo.

Esta regla nos va a dar una distancia por cada segundo:

476 rev -------------1km
a/10 rev------------ x
Entonces:

(a/10)/476 = kms recorrido en 1 segundo

Para sacar un valor en km/h se multiplica ese resultado por 3600 (cantidad de segundos de 1
hora).

(a/10*3600)/476=kms/h (a*360)/476= kms/h (simplificando 10 con 3600)

Para sacar la velocidad en m/s se divide el valor de km/h en 3,6. Como el PIC no saca
decimales, en el programa lo dividimos por 4.

veloc = a * 360 velockm: variable de veloc en km/h en el programa
velockm = veloc / 476 velocm: variable de veloc en m/s
velocm = velockm / 4

Para sacar las revoluciones por minuto (rpm) se toma el nmero de revoluciones en 1 segundo
(a/10) y se lo multiplica por 60. Simplificando el 10 con el 60 queda:

rev = a * 6 rev: variable de revoluciones

Para sacar la distancia recorrida se hace uso de 3 variables np, distm y distkm. Recordar
que la variable np viene del conteo de nmero de pulsos en la interrupcin por RB0 al igual
que a. Lo que hacemos es sacar que numero de pulsos es necesario para recorrer 100
metros lo que sera 476 pulsos. Entonces simplemente se hace un contador con las otras 2
variables:

If np > 476 Then Cada 100 metros distm se incrementa en 1, al llegar a 10 ste ya tenemos
distm = distm + 1 recorrido 1 km, entonces la variable distkm se incrementara en 1 y
np = 0 distm volver a 0 para iniciar el conteo nuevamente al igual que np.
If distm > 9 Then
distkm = distkm + 1
distm = 0
Endif
Endif

*De este modo la distancia se puede calcular en kms con 3 decimales pero va a ser mas
impreciso ya que se necesitaran 4,7 pulsos para que marque 1 metro recorrido o 47,6 para
que marque 10 metros recorridos. Por este motivo marcamos distancia en kms con 1
decimal.

Una vez realizada las cuentas solo queda mostrar los resultados en el LCD fuera de la
interrupcin, para aumentar la eficiencia del programa


Notas: *Vale aclarar que las variables de conteo (pasos, np, a, distm y distkm) se las pone a
0 al inicio del programa.
*Las variables que no son de conteo tienen que estar declaradas como Word o
Long porque pueden llegar a tomar valores altos. Las variables de conteo
declaradas como Byte ya estn bien.
* En el programa tambin se programa el reset propio del PIC, mediante un pulsador
en circuito, y la seleccin de la unidad de medida de la velocidad, mediante una l
llave en circuito, ambos en configuracin PULL-UP.


VIDEO DEL PROYECTO

http://www.youtube.com/watch?v=Fo1BwE5uINM

*El LCD puede ser de cualquier tamao, no necesariamente tan grande, pero si debe ser de
16x2 caracteres.

Você também pode gostar