//
// Aneometer (Windsensor)
// Christoph Wertmann, Etienne Ribeiro
// 3. Februar 2009
//
//
// Pin
// green: Digital Input
// white: GND
// broun: 3V to 5V
//




// Var
// (average)
int sensordataCount = 0;
const int  sensordataBounderies = 10;
int sensordataHistory[sensordataBounderies];
int lastAverageValue = 0;
// (calibration)
float sensorCalibration = 14; // 35hz = 2.5m/s   // 1m/s = 14  61 == 8.4





//
// Aneo_getSpeedHZ
//  Mesures over a periode and returns Hz (Intervals / 1000ms)
//  digitalPin: Pin to mesure from
//  delayIntervall: Interval to mesure

int Aneo_getSpeedHZ (int digitalPin, int delayIntervall) {

        //
        pinMode(digitalPin,INPUT);
        int HzCounter = 0;
        int lastImp = 0;


        // Mesure over a periode (delayIntervall)
        long start = millis();
        while (start + delayIntervall >= millis()) {

                int imp = pulseIn(digitalPin, HIGH);
                if(imp != lastImp) {

                        HzCounter++;        // count HIGH impulse
                        lastImp = max(imp,0);

                }

        }


        // Calculate Hz
        int Hz = HzCounter * (1000 / delayIntervall);


        // Average mesurements
        if (sensordataCount + 1 >= sensordataBounderies) {

                lastAverageValue = Aneo_private_getAverage();
                sensordataCount = 0;

        }
        sensordataHistory[sensordataCount] = Hz;
        sensordataCount ++;


        // Return Hz (HzCounter per 1000 ms)
        return Hz;

}






//
// Aneo_parse
//   Parse Hz to m/s or km/h

double Aneo_parseMS (int HZ) {

        // Calculate m/s from Hz
        return (HZ / sensorCalibration);

}

double Aneo_parseKMH (int HZ) {

        // Calculate km/h from Hz
        double ms = (HZ / sensorCalibration);
        return ms*3.6;

}





//
// Aneo_getAverage

int Aneo_getAverage () {

        return lastAverageValue;

}
float Aneo_private_getAverage() {

        float result = 0;
        for(int i = 0; i<sensordataBounderies; i++) {
                result += sensordataHistory[i];
        }
        result = result / sensordataBounderies;
        return result;

}

This website has been archived and is no longer maintained.