MyWindSensor
-
Made een Windsensor for MySensors, Works well!
used an adafruit https://www.adafruit.com/product/1733 windmeter./** * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <henrik.ekblad@mysensors.org> * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * REVISION HISTORY * versie 1.1 bert ramselaar * Used an UNO with a NRF24+ with external antenna * * DESCRIPTION * Arduino Wind Sensor * Adafruit Anemometer Wind Speed Sensor -> https://www.adafruit.com/product/1733 * connect the sensor as follows : * VCC (brown) >>> 5V * A (blue) >>> A0 or any other analog pin * GND (black) >>> GND * * */ // Enable debug prints #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 //#define MY_RADIO_RFM69 #include <MySensors.h> #define CHILD_ID_WIND 0 #define WIND_SENSOR_ANALOG_PIN 0 unsigned long SLEEP_TIME = 2000; // Sleep time between reads (in milliseconds) // VARIABLES float W_Raw_A0 = 0; // stores the RAW value coming from the sensor 0 to 1023 float W_Volt = 0; // stores voltage calculated form A0 float W_WindSpeed = 0; // Windspeed in meters per second (m/s) float W_WindSpeed_last = 0; // previus Windspeed sended float W_Voltage_Conversion = .004882814; //This constant maps the value provided from the analog read function, which ranges from 0 to 1023, to actual voltage, which ranges from 0V to 5V float W_voltageMin = .4; // Mininum output voltage from anemometer in mV. float W_voltageMax = 2.0; // Maximum output voltage from anemometer in mV. float W_windSpeedMin = 0; // Wind speed in meters/sec corresponding to minimum voltage float W_windSpeedMax = 32; // Wind speed in meters/sec corresponding to maximum voltage int W_beaufort = 0; // Calculated beaufort scale MyMessage windMsg(CHILD_ID_WIND, V_WIND); void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Wind Sensor", "1.1"); // Register all sensors to gateway (they will be created as child devices) present(CHILD_ID_WIND, S_WIND); } void loop() { W_Raw_A0 = analogRead(WIND_SENSOR_ANALOG_PIN); // Get WIND value from A0 W_Volt = W_Raw_A0 * W_Voltage_Conversion; //Convert sensor value to actual voltage //Convert voltage value to wind speed using range of max and min voltages and wind speed for the anemometer if (W_Volt <= W_voltageMin) { W_WindSpeed = 0; //Check if voltage is below minimum value. If so, set wind speed to zero. } else { // calculate winspeed in Meters per Second W_WindSpeed = (W_Volt - W_voltageMin) * W_windSpeedMax / (W_voltageMax - W_voltageMin); //For voltages above minimum value, use the linear relationship to calculate wind speed. // corrected // ~~W_WindSpeed = W_WindSpeed * 3.6 // convert from m/s to km/h~~ } Serial.print("Raw Signal Value (0-1023): "); Serial.print(W_Raw_A0); Serial.print(" - Voltage: "); Serial.print(W_Volt); Serial.print(" - Windspeed M/S: "); Serial.print(W_WindSpeed); // unit: M/S Serial.print(" - Beaufort: "); Serial.println(beaufort()); // unit: beaufort scale if (ceil(W_WindSpeed) != W_WindSpeed_last) { **/// CHANGED convert float to de nearest integer and converted (W_WindSpeed * 3.6) to km/h ///** send(windMsg.set((int16_t)ceil(W_WindSpeed * 3.6))); W_WindSpeed_last = ceil(W_WindSpeed); //beaufort(); // option windspeed in beafort //send(windMsg.set(W_beaufort)); // option windspeed in beafort } sleep(SLEEP_TIME); } int beaufort(void) { if (W_WindSpeed < 0.39) { W_beaufort = 0; return W_beaufort; } else if (W_WindSpeed >= 0.3 & W_WindSpeed <= 1.5) { W_beaufort = 1; return W_beaufort; } else if (W_WindSpeed >= 1.6 & W_WindSpeed <= 3.3) { W_beaufort = 2; return W_beaufort; } else if (W_WindSpeed >= 3.4 & W_WindSpeed <= 5.4) { W_beaufort = 3; return W_beaufort; } else if (W_WindSpeed >= 5.5 & W_WindSpeed <= 7.9) { W_beaufort = 4; return W_beaufort; } else if (W_WindSpeed >= 8.0 & W_WindSpeed <= 10.7) { W_beaufort = 5; return W_beaufort; } else if (W_WindSpeed >= 10.8 & W_WindSpeed <= 13.8) { W_beaufort = 6; return W_beaufort; } else if (W_WindSpeed >= 13.9 & W_WindSpeed <= 17.1) { W_beaufort = 7; return W_beaufort; } else if (W_WindSpeed >= 17.2 & W_WindSpeed <= 20.7) { W_beaufort = 8; return W_beaufort; } else if (W_WindSpeed >= 20.8 & W_WindSpeed <= 24.4) { W_beaufort = 9; return W_beaufort; } else if (W_WindSpeed >= 24.5 & W_WindSpeed <= 28.4) { W_beaufort = 10; return W_beaufort; } else if (W_WindSpeed >= 28.5 & W_WindSpeed <= 32.6) { W_beaufort = 11; return W_beaufort; } else if (W_WindSpeed >= 32.7) { W_beaufort = 12; return W_beaufort; } } -
Made een Windsensor for MySensors, Works well!
used an adafruit https://www.adafruit.com/product/1733 windmeter./** * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <henrik.ekblad@mysensors.org> * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * REVISION HISTORY * versie 1.1 bert ramselaar * Used an UNO with a NRF24+ with external antenna * * DESCRIPTION * Arduino Wind Sensor * Adafruit Anemometer Wind Speed Sensor -> https://www.adafruit.com/product/1733 * connect the sensor as follows : * VCC (brown) >>> 5V * A (blue) >>> A0 or any other analog pin * GND (black) >>> GND * * */ // Enable debug prints #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 //#define MY_RADIO_RFM69 #include <MySensors.h> #define CHILD_ID_WIND 0 #define WIND_SENSOR_ANALOG_PIN 0 unsigned long SLEEP_TIME = 2000; // Sleep time between reads (in milliseconds) // VARIABLES float W_Raw_A0 = 0; // stores the RAW value coming from the sensor 0 to 1023 float W_Volt = 0; // stores voltage calculated form A0 float W_WindSpeed = 0; // Windspeed in meters per second (m/s) float W_WindSpeed_last = 0; // previus Windspeed sended float W_Voltage_Conversion = .004882814; //This constant maps the value provided from the analog read function, which ranges from 0 to 1023, to actual voltage, which ranges from 0V to 5V float W_voltageMin = .4; // Mininum output voltage from anemometer in mV. float W_voltageMax = 2.0; // Maximum output voltage from anemometer in mV. float W_windSpeedMin = 0; // Wind speed in meters/sec corresponding to minimum voltage float W_windSpeedMax = 32; // Wind speed in meters/sec corresponding to maximum voltage int W_beaufort = 0; // Calculated beaufort scale MyMessage windMsg(CHILD_ID_WIND, V_WIND); void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Wind Sensor", "1.1"); // Register all sensors to gateway (they will be created as child devices) present(CHILD_ID_WIND, S_WIND); } void loop() { W_Raw_A0 = analogRead(WIND_SENSOR_ANALOG_PIN); // Get WIND value from A0 W_Volt = W_Raw_A0 * W_Voltage_Conversion; //Convert sensor value to actual voltage //Convert voltage value to wind speed using range of max and min voltages and wind speed for the anemometer if (W_Volt <= W_voltageMin) { W_WindSpeed = 0; //Check if voltage is below minimum value. If so, set wind speed to zero. } else { // calculate winspeed in Meters per Second W_WindSpeed = (W_Volt - W_voltageMin) * W_windSpeedMax / (W_voltageMax - W_voltageMin); //For voltages above minimum value, use the linear relationship to calculate wind speed. // corrected // ~~W_WindSpeed = W_WindSpeed * 3.6 // convert from m/s to km/h~~ } Serial.print("Raw Signal Value (0-1023): "); Serial.print(W_Raw_A0); Serial.print(" - Voltage: "); Serial.print(W_Volt); Serial.print(" - Windspeed M/S: "); Serial.print(W_WindSpeed); // unit: M/S Serial.print(" - Beaufort: "); Serial.println(beaufort()); // unit: beaufort scale if (ceil(W_WindSpeed) != W_WindSpeed_last) { **/// CHANGED convert float to de nearest integer and converted (W_WindSpeed * 3.6) to km/h ///** send(windMsg.set((int16_t)ceil(W_WindSpeed * 3.6))); W_WindSpeed_last = ceil(W_WindSpeed); //beaufort(); // option windspeed in beafort //send(windMsg.set(W_beaufort)); // option windspeed in beafort } sleep(SLEEP_TIME); } int beaufort(void) { if (W_WindSpeed < 0.39) { W_beaufort = 0; return W_beaufort; } else if (W_WindSpeed >= 0.3 & W_WindSpeed <= 1.5) { W_beaufort = 1; return W_beaufort; } else if (W_WindSpeed >= 1.6 & W_WindSpeed <= 3.3) { W_beaufort = 2; return W_beaufort; } else if (W_WindSpeed >= 3.4 & W_WindSpeed <= 5.4) { W_beaufort = 3; return W_beaufort; } else if (W_WindSpeed >= 5.5 & W_WindSpeed <= 7.9) { W_beaufort = 4; return W_beaufort; } else if (W_WindSpeed >= 8.0 & W_WindSpeed <= 10.7) { W_beaufort = 5; return W_beaufort; } else if (W_WindSpeed >= 10.8 & W_WindSpeed <= 13.8) { W_beaufort = 6; return W_beaufort; } else if (W_WindSpeed >= 13.9 & W_WindSpeed <= 17.1) { W_beaufort = 7; return W_beaufort; } else if (W_WindSpeed >= 17.2 & W_WindSpeed <= 20.7) { W_beaufort = 8; return W_beaufort; } else if (W_WindSpeed >= 20.8 & W_WindSpeed <= 24.4) { W_beaufort = 9; return W_beaufort; } else if (W_WindSpeed >= 24.5 & W_WindSpeed <= 28.4) { W_beaufort = 10; return W_beaufort; } else if (W_WindSpeed >= 28.5 & W_WindSpeed <= 32.6) { W_beaufort = 11; return W_beaufort; } else if (W_WindSpeed >= 32.7) { W_beaufort = 12; return W_beaufort; } }@Bert-Ramselaar HI and welcome to the forum!
I modified your post slightly to include code tags, which improves readability.
Could you give some more info on your project (which sensor did you use? And did I mention that we simply looooove pictures ;-))? -
@Bert-Ramselaar HI and welcome to the forum!
I modified your post slightly to include code tags, which improves readability.
Could you give some more info on your project (which sensor did you use? And did I mention that we simply looooove pictures ;-))? -
@Yveaux He actually posted the link to the sensor :)
It is rather expensive but since it isn't a pulse counter sensor but it gives a voltage to read it is probably why it isn't cheap. -
@Yveaux He actually posted the link to the sensor :)
It is rather expensive but since it isn't a pulse counter sensor but it gives a voltage to read it is probably why it isn't cheap.@gohan said in MyWindSensor:
since it isn't a pulse counter sensor but it gives a voltage to read it is probably why it isn't cheap
A simple pro-mini can do the same; only costs a few €...
Looks like it's full metal, so probably a lot more durable than the plastic ones that tend to agree rapidly in the sun...
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login