domingo, 15 de mayo de 2016

ESTACIÓN METEOROLÓGICA ALIMENTADA CON ENERGÍA SOLAR , ARDUINO Y BLYNK (Parte 5)



CÓDIGO  DE PROGRAMACIÓN PARA LA VELETA Y EL ANEMÓMETRO .


Continuo creando la estación meteorológica, hoy toca programar , la dirección del viento , y velocidad del viento, con anemómetro y una veleta ,





Lo primero es buscar la información técnica del anemómetro y la veleta, el sensor de la dirección del viento trabaja en un rango de alimentación de 7 a 24v DC , y el rango de salida es de 0.4 a 2v, siendo 0.4v  como ,0 grados dirección NORTE, opté por este rango por que es el  mas próximo a las entradas analógicas del ARDUINO , que van desde 0 - 5v.
   La formula para el escalado de la variable y  determinar las dirección del viento con 16 posiciones ,en la roza de los vientos, es la siguiente 

Variable dirección del viento=(Imput de voltaje-0.4)/16*360

He creado una función para tener el código mas limpio y legible , ya que se esta complicado , y poder solucionar cualquier error fácil mente, al final de esta entrada pondré el código.

Para el sensor de la velocidad del viento, lo mismo la tensión de alimentación esta entre 7 y 24 vDC, y el rango de salida del sensor 0 a 5v, que me viene muy bien para el rango de la señal analógica del ARDUINO como antes aclare, donde 0 v es 0m/s, el ramgo de medida del anemómetro es de 0 a 34.4m/s. la formula para el calculo  de la variable la siguiente :

Variable de la velocidad del viento =((IMPUT voltaje -0.4)*1.6)*34.4

También cree una función el código esta mas abajo.



 */CODIGO VELETA , POR CELSO DEVORA.

 String direccionViento(){
    
   String direccion;
   float m= analogRead(A8);
   float volt =m*5/1024;
  
 if (volt>=0.40 && volt<0.52){
  direccion ="NORTE";
  return direccion ;
  }
 else if (volt>=0.52 && volt<0.62){
 direccion ="NNE";
 return direccion ;
  }
 else if (volt>=0.62 && volt<0.72){
 direccion ="NE";
 return direccion ; 
 }
 else if (volt>=0.72 && volt<0.82){
  direccion ="ENE";
 return direccion ;
 }
 else if (volt>=0.82 && volt<0.92){
  direccion ="ESTE";
 return direccion ;
 }
 else if (volt>=0.92 && volt<1.02){
  direccion ="ESE";
 return direccion ;
 }
 else if (volt>=1.02 && volt<1.12){
  direccion ="SE";
 return direccion ;
 }
 else if (volt>=1.12 && volt<1.22){
  direccion ="SSE";
 return direccion ;
 }
 else if (volt>=1.22 && volt<1.32){
  direccion ="SUR";
 return direccion ;
 }
 else if (volt>=1.32 && volt<1.42){
  direccion ="SSO";
 return direccion ;
 }
 else if (volt>=1.42 && volt<1.52){
  direccion ="SO";
 return direccion ;
 }
 else if (volt>=1.52 && volt<1.62){
  direccion ="OSO";
 return direccion ;
 }
 else if (volt>=1.62 && volt<1.72){
  direccion ="OESTE";
 return direccion ;
 }
 else if (volt>=1.72 && volt<1.82){
  direccion ="ONO";
 return direccion ;
 }
 else if (volt>=1.82 && volt<1.92){
  direccion ="NO";
 return direccion ;
 }
 else if (volt>=1.92 && volt<=2.06){
  direccion ="NNO";
 return direccion ;
  Serial.println("NNO");
 }
// delay (1000);
 }

 float direGrados (){
 float m= analogRead(A8);
 float volt =m*5/1024;
 float grados=(((volt-0.4)/16)*360)*10;
  return grados;

 }

Esta es la función para el anemómetro:


float velocidadViento(){
   float  m= analogRead(A10);
   float volt =m*5/1024;
  float velo=(volt-0.024)/1.6*32.4;   ///0.024
    if(velo<=0){
      velo=0;
    }
  
return velo;

}



1 comentario:

  1. Hola Celso.
    Tan solo comentarte que cuando se realiza una publicación, se ha de ser un poco más riguroso.
    En la actualidad, tengo trabajando una estación METEO con múltiples sensores, entre ellos una veleta y anemómetro de DF-Robot. Si quieres exponer el código de control de adquisición de datos de estos sensores, deberías haber explicado pormenorizadamente éste, ya que de lo contrario, la comunidad no se va a enterar y no apreciará el "trabajo" y "esfuerzo" que te ha supuesto el proyecto.
    Todo esto lo comento desde el punto de vista positivo y constructivo.
    Saludos,
    Manuel.

    ResponderEliminar