// // 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; }