Anemómetro

Medición de la velocidad del viento mediante un anemómetro:

Un anemómetro consiste en un elemento giratorio con varias aspas con cazoletas. Cuando el viento sopla estas aspas comienzan a girar, lo que nos permite calcular la velocidad del viento.


El anemómetro que utilizaremos será uno de tipo de cierre por contacto. Consta de un interruptor que cierra el circuito cada vez que da una vuelta. Según los datos del fabricante con una velocidad de 2.4 Km/h se produce un cierre por segundo.

Para implementar la medida de la velocidad del viento, utilizaremos una de las interrupciones por pulsación de las que dispone el microcontrolador.  Estas interrupciones detectan si ha habido una pulsación en el pin de entrada. Contando las interrupciones durante un periodo de tiempo calcularemos la velocidad instantánea del viento.

Para crear la base de tiempo, utilizaremos uno de los Timers de los que dispone el microcontrolador. Los Timers se pueden utilizar como temporizador que una vez alcanzan el tiempo configurado producen una interrupción en el microcontrolador.

Queremos una resolución de 1Km/h de velocidad. Sabiendo que una vuelta del anemómetro corresponde a 2.4 Km/h hacemos la siguiente conversión:

1 pulso/2.4 s = 1 Km/h

Implementando una base de tiempo de 2,4 segundos con el Timer 0, si contamos los pulsos que transcurren durante ese periodo, obtendremos la velocidad del viento en Km/h.

Conexión del sensor al microcontrolador:

Conectamos el pin 1 del anemómetro al pin RB2 (INT2) del microcontrolador junto con una resistencia de Pull-Up de 10K. El pin 2 del anemómetro lo conectamos a masa.

Flowchart para la lectura del anemómetro:



Se inicia la configuración del Timer 0 para una base de 2,4 segundos, se habilitan las interrupciones en el puerto RB2, se inicia el temporizador y mientras transcurre el tiempo se van contando las pulsaciones en el puerto RB2. Una vez finaliza el tiempo de 2,4 segundos (Time_out) se deshabilitan las interrupciones y se calcula la velocidad del viento sabiendo que cada pulsación corresponde a 1Km/h. Se resetean las variables de número de pulsos y de finalización de tiempo (Time_out)  y se envían los datos.


Diagrama FSM :


Para iniciar la lectura y envío de los datos de  velocidad del viento hay que pulsar el botón RB0. Para parar la lectura se pulsa de nuevo el botón RB0 y se vuelve al estado inicial ‘Idle’.

Esquema Proteus:



Configuración del Timer 0 para un tiempo de 2.4 segundos:

Vamos a utlizar el Timer 0 del microcontrolador como temporizador. El Timer 0 es un contador de 8/16 bits que produce una interrupción en el micro cuando se produce un desbordamiento del contador TMR0 register (FFFFh a 0000h) activando la bandera TMR0IF. Una vez se ha producido este desbordamiento hay que limpiar la bandera TMR0IF de forma manual mediante software para que el contador se reinicie y empiece de nuevo.

En la siguiente figura se muestra el diagrama de bloques del Timer0 del PIC18f87k22


Puede funcionar mediante dos relojes: el interno Fosc/4 y con reloj externo conectado al pin T0CKI (RA4), dispone de un prescaler programable de 8 bits y de registros TMR0L y TMRoH de lectura y escritura.

La ecuación para obtener un tiempo determinado sería la siguiente:

Tiempo = (4/Fosc)*prescaler*(65536-TMR0)

Para configurar el Timer0 hay que modificar el registro T0CON: TIMER0 CONTROL REGISTER


Configuración de tiempo 2,4 segundos:

  • Reloj interno Fosc/4
  • Modo 16 bits
  • Reloj interno Fosc/4
  • Prescaler 128
  • Precargar el valor  46786 en TMR0

Sabiendo que el oscilador del microntrolador está configurado a 4Mhz tenemos:

2.4 Segundos = (4/4Mhz)*128*(65536-46786)

Hay que tener en cuenta que cada vez que el contador TMR0 se desborda, empieza a contar de 0. Por ese motivo, hay que precargar de nuevo el valor de TMR0 de 46786 una vez que se produzca la interrupción y resetemos la bandera  TMR0IF



ċ
Dir_Vel_Viento.X.production.cof
(87k)
Alberto Gómez,
7 sept 2016, 1:51
ċ
Dir_Vel_Viento.pdsprj
(37k)
Alberto Gómez,
7 sept 2016, 1:51
Comments