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: 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: 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:
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 |
Diseño de una estación metereológica autónoma sin hilos y de bajo consumo > Proyectos > Sensores >