Anemómetro integrado en Excontrol con Arduino

Podremos compartir las instalaciones domóticas que tenemos, así podremos dar ideas a otros compañeros del foro.
Responder
Avatar de Usuario
Electra
Mensajes: 108
Registrado: Mar Feb 12, 2019 9:10 pm
Ubicación: Albacete

Anemómetro integrado en Excontrol con Arduino

Mensaje por Electra » Sab Nov 23, 2019 9:09 pm

Después de varios años con ExControl funcionando en mi casa como sistema domótico y tras instalar unos toldos, tenía la necesidad de monitorizar la velocidad del viento para que en caso de que éste llegara a un determinado nivel pudiera cerrar los toldos y evitar males mayores.
Por la red busque algo ya hecho y encontré una estación metereológica con arduino a la que podía adaptar a nuestro sistema:
http://cactus.io/hookups/weather/anemom ... r-software

Ya sólo falta adqurir la pieza que nos transforme la velocidad del viento en pulsos y me costó bastante encontrarla, pero básicamente es un repuesto para estación metereológica, yo lo adquirí en esta tienda:
http://www.electronicaprobas.net/tienda ... 14603.html
Anemometro_WS1080.jpg
Internamente lleva un pequeño pulsador magnético que abre y cierra los 2 contactos según la velocidad del viento y que se conectan a nuestro arduino como una entrada más, OJO SÓLO EN UN PIN TIPO INTERRUPT (en el ejemplo es el pin 2)

Pues ahora toca adaptar el código a Excontrol con el configurador

Primero creamos 2 sensores tipo float
Después vamos introduciendo código de usuario
USER CODE LIBRARY START

Código: Seleccionar todo

//ANEMOMETRO
			  
#include "TimerOne.h"          // Timer Interrupt set to 2 second for read sensors
#include <math.h>

#define WindSensorPin (2)      // The pin location of the anemometer sensor
GLOBAL VARIABLES ZONE

Código: Seleccionar todo

///VIENTO
volatile bool IsSampleRequired;       // this is set true every 2.5s. Get wind speed
volatile unsigned int  TimerCount;    // used to determine 2.5sec timer count
volatile unsigned long Rotations;     // cup rotation counter used in interrupt routine
volatile unsigned long ContactBounceTime;  // Timer to avoid contact bounce in interrupt routine

float WindSpeed=0;        // speed kilometers per hour
float speedmax=0;
void UserSetup() { //EQUIVALENT ARDUINO SETUP FUNCTION

Código: Seleccionar todo

                   //ANEMOMETRO  
  
  IsSampleRequired = false;
  
  TimerCount = 0;
  Rotations = 0;   // Set Rotations to 0 ready for calculations
  
  Serial.begin(9600);

  pinMode(WindSensorPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr_rotation, FALLING);

  Serial.println("Davis Anemometer Test");
  Serial.println("Speed (kmh)     \ms\tDirection\tStrength");

  // Setup the timer intterupt
  Timer1.initialize(500000);
  Timer1.attachInterrupt(isr_timer);
void UserLoop(){ //EQUIVALENT ARDUINO LOOP FUNCTION

Código: Seleccionar todo

       //ANEMOMETRO

  if(IsSampleRequired)
  {
     // convert to km/h using the formula V=P(2.25/T)
     // V = P(2.25/2.5)*0,621371 = P * 0,5592339   Millas a Kilometros
     WindSpeed = Rotations / 1,79; // 1/0,5592339=1,788160553213959
     Rotations = 0;   // Reset count for next sample
     
     IsSampleRequired = false; 
     
     Serial.print(WindSpeed);    Serial.print("\t\t");
     Serial.print(ms(WindSpeed));    Serial.print("\t"); 

  }
void LoopNewSecond(){//This event occurs every second

Código: Seleccionar todo

  //ANEMOMETRO
     if(WindSpeed>=speedmax){
     speedmax=WindSpeed;
   }
      
  if(WindSpeed/10>Consignas[2]){viento=true;Pantalla=119;SelectScene(3);SetAlarm(3);} // Se selecciona la escena(3)
  else{viento=false;ResetAlarm(3);}
//USER FUNCTIONS. CREATE YOUR FUNCTION HERE

Código: Seleccionar todo

           //VIENTO
// isr routine fr timer interrupt
void isr_timer() {
  
  TimerCount++;
  
  if(TimerCount == 50)
  {
    IsSampleRequired = true;
    TimerCount = 0;
  }
}

// This is the function that the interrupt calls to increment the rotation count
void isr_rotation ()   {

  if ((millis() - ContactBounceTime) > 15 ) {  // debounce the switch contact.
    Rotations++;
    ContactBounceTime = millis();
  }

}

// Convert km/h to m/s
float ms(float speed) {
   return speed * 0.2778;
}
Y este es el resultado:
Anemometro_WS1080.jpg
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.

Avatar de Usuario
Sigmundfreud
Mensajes: 269
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

Re: Anemómetro integrado en Excontrol con Arduino

Mensaje por Sigmundfreud » Dom Nov 24, 2019 8:20 am

Te ha quedado genial, y veo que difiere bastante las medidas tomadas con los datos de aemet

Juan Ramon
Mensajes: 249
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Re: Anemómetro integrado en Excontrol con Arduino

Mensaje por Juan Ramon » Dom Nov 24, 2019 8:39 am

Muchas gracias Electra por compartirlo y por las explicaciones.
Juan Ramón.

Avatar de Usuario
PAEYA
Mensajes: 47
Registrado: Mar Feb 12, 2019 8:40 pm

Re: Anemómetro integrado en Excontrol con Arduino

Mensaje por PAEYA » Dom Nov 24, 2019 9:43 pm

Envidia sana :lol: :lol:

Jaime
Mensajes: 4
Registrado: Mié Mar 27, 2019 7:28 pm

Re: Anemómetro integrado en Excontrol con Arduino

Mensaje por Jaime » Dom Nov 24, 2019 10:00 pm

Solo puedo decirte, IMPRESIONANTE

Avatar de Usuario
manuch
Mensajes: 37
Registrado: Mar Feb 12, 2019 8:49 pm

Re: Anemómetro integrado en Excontrol con Arduino

Mensaje por manuch » Dom Dic 08, 2019 8:22 pm

Excelente aporte Electra, muchas gracias por compartirlo.
"Una experiencia nunca es un fracaso, pues siempre viene a demostrar algo" Edison

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado