Problem with Wind Speed sensor
-
@AWI said:
..... There should be many examples on the web.Have fun
Unfortunately I cannot find any working example code. Found all kind of stuff on the internet, but nothing that will give me some valuable data.
I think that the examples on the internet mostly uses an pull up anemometer, as far as I can see the Arduino Nano also have a internal one which you can activate on the sketch. But basically, when I use a resistor, which is connected on the yellow and red wire, I am still stuck on the sketch I cannot find something desent (and small), that gives me something valuable. I now know why the windmeter is not an example on the Mysensors site :) Way to difficult :).@rnollen It shouldn't be so complicated.. there are a many ways to do it. Start in the learning curve with the most simple method of counting pulses using the arduino builtin method pulseIn(). (non MySensors, basic arduino). You should be able to see the pulse frequency on the serial port when turning the rotor.
const int anemometerPin = 4 ; // wherever you connected the anemometer unsigned long timePeriod = 0; unsigned long timeon = 0; unsigned long timeoff =0; void setup() { pinMode(anemometerPin, INPUT_PULLUP); Serial.begin(9600); } void loop() { timeon = pulseIn(anemometerPin,HIGH); // Measured Time On timeoff = pulseIn(anemometerPin,LOW); // Measure Time Off timePeriod = timeon + timeoff; // total period = on + off float frequency = 1000000.0/timePeriod; // calculate the frequency Serial.println(frequency); delay(1000); } -
@AWI Thanks, I will give it a try. Today I also received some additional info. The device is a NPN model. Type 12CM, according to the supplier it is 12 pulses for 1m/s per second. But the manual says that this model is 10 pulses for 1m/s.
So basically I could now connect the device as NPN, only I need to find out how :)
-
@AWI Thanks, I will give it a try. Today I also received some additional info. The device is a NPN model. Type 12CM, according to the supplier it is 12 pulses for 1m/s per second. But the manual says that this model is 10 pulses for 1m/s.
So basically I could now connect the device as NPN, only I need to find out how :)
-
@rnollen good news. Npn needs a pull-up so the sketch above should be able to do it. It uses the internal pull-up of the Arduino. I am curious to the outcome.
@AWI said:
@rnollen good news. Npn needs a pull-up so the sketch above should be able to do it. It uses the internal pull-up of the Arduino. I am curious to the outcome.
It does not work entirely correct I think. In the serial Monitor I see "Inf" as outcome of the sketch :( Don't see exactly where that is coming from :)
Maybe something wrong with the wiring? I Attached the 12V DC to red and blue. The Yellow, connected it to the breadboard and a cable from the D7 also to this connection. I took a 4.7K resistor, connected also to this group and the other side of this resistor I connected to the 5V of the Arduino? Is that correct?
When I remove the resistor: then this is my outcome of the sketch:
12.82
inf
inf
3.36
1.88
55.06
inf
37037.03
inf
333333.34
30.95
17.43
inf
142857.14
inf
125000.00
500000.00
500000.00
90909.10
500000.00
39.47
inf
250000.00
500000.00
inf
20.54
45.67
58823.53
inf
9.88
inf
inf
9.17
infThen I got some numbers, but what they mean :) The very high numbers are when rotating..
-
@AWI said:
@rnollen good news. Npn needs a pull-up so the sketch above should be able to do it. It uses the internal pull-up of the Arduino. I am curious to the outcome.
It does not work entirely correct I think. In the serial Monitor I see "Inf" as outcome of the sketch :( Don't see exactly where that is coming from :)
Maybe something wrong with the wiring? I Attached the 12V DC to red and blue. The Yellow, connected it to the breadboard and a cable from the D7 also to this connection. I took a 4.7K resistor, connected also to this group and the other side of this resistor I connected to the 5V of the Arduino? Is that correct?
When I remove the resistor: then this is my outcome of the sketch:
12.82
inf
inf
3.36
1.88
55.06
inf
37037.03
inf
333333.34
30.95
17.43
inf
142857.14
inf
125000.00
500000.00
500000.00
90909.10
500000.00
39.47
inf
250000.00
500000.00
inf
20.54
45.67
58823.53
inf
9.88
inf
inf
9.17
infThen I got some numbers, but what they mean :) The very high numbers are when rotating..
@rnollen the "inf" means infinite and is caused by a 0 division. You can try to remove the line starting with 'float' and print the time values.
I assume you changed the anemometer pin in the sketch to d7...?
And connected the gnd of 12v and 5v together? -
@rnollen the "inf" means infinite and is caused by a 0 division. You can try to remove the line starting with 'float' and print the time values.
I assume you changed the anemometer pin in the sketch to d7...?
And connected the gnd of 12v and 5v together?@AWI said:
@rnollen the "inf" means infinite and is caused by a 0 division. You can try to remove the line starting with 'float' and print the time values.
I assume you changed the anemometer pin in the sketch to d7...?I have did some additional testing. The DC12 is wrong I think, when I use that then the whole sketch does not give any values back. Now used the 5V of the arduino, then I got something readings using this sketch. I have added some additional serial print lines for logging. But when times are zero, then the frequency is INF and that happens when I don't rotate, so that looks OK I think
..
Timeon: 0
Timeoff: 0
TimePeriod: 0
Frequency: inf
Timeon: 0
Timeoff: 87951
TimePeriod: 87951
Frequency: 11.37
Timeon: 24222
Timeoff: 22899
TimePeriod: 47121
Frequency: 21.22
Timeon: 24960
Timeoff: 27680
TimePeriod: 52640
Frequency: 19.00
Timeon: 27545
Timeoff: 28273
TimePeriod: 55818
Frequency: 17.92
Timeon: 63310
Timeoff: 0
TimePeriod: 63310
Frequency: 15.80The serial.print lines:
Serial.print("Timeon: ");
Serial.println(timeon);
Serial.print("Timeoff: ");
Serial.println(timeoff);
Serial.print("TimePeriod: ");
Serial.println(timePeriod);
Serial.print("Frequency: ");
Serial.println(frequency);But any idea, because I am still lost don't know exactly what the conclusion of this is :)
-
@AWI said:
@rnollen the "inf" means infinite and is caused by a 0 division. You can try to remove the line starting with 'float' and print the time values.
I assume you changed the anemometer pin in the sketch to d7...?I have did some additional testing. The DC12 is wrong I think, when I use that then the whole sketch does not give any values back. Now used the 5V of the arduino, then I got something readings using this sketch. I have added some additional serial print lines for logging. But when times are zero, then the frequency is INF and that happens when I don't rotate, so that looks OK I think
..
Timeon: 0
Timeoff: 0
TimePeriod: 0
Frequency: inf
Timeon: 0
Timeoff: 87951
TimePeriod: 87951
Frequency: 11.37
Timeon: 24222
Timeoff: 22899
TimePeriod: 47121
Frequency: 21.22
Timeon: 24960
Timeoff: 27680
TimePeriod: 52640
Frequency: 19.00
Timeon: 27545
Timeoff: 28273
TimePeriod: 55818
Frequency: 17.92
Timeon: 63310
Timeoff: 0
TimePeriod: 63310
Frequency: 15.80The serial.print lines:
Serial.print("Timeon: ");
Serial.println(timeon);
Serial.print("Timeoff: ");
Serial.println(timeoff);
Serial.print("TimePeriod: ");
Serial.println(timePeriod);
Serial.print("Frequency: ");
Serial.println(frequency);But any idea, because I am still lost don't know exactly what the conclusion of this is :)
@rnollen this looks much better. You get frequencies in the 10 to 20 range when rotating. The inf when you're not rotating are caused by timer overflow so nothing wrong there.
Now it is time for a more dedicated measurement. Basically replace the standard arduino routines with your own version. It is middle of the night here so I have to leave it for tomorrow... -
@AWI said:
@rnollen the "inf" means infinite and is caused by a 0 division. You can try to remove the line starting with 'float' and print the time values.
I assume you changed the anemometer pin in the sketch to d7...?I have did some additional testing. The DC12 is wrong I think, when I use that then the whole sketch does not give any values back. Now used the 5V of the arduino, then I got something readings using this sketch. I have added some additional serial print lines for logging. But when times are zero, then the frequency is INF and that happens when I don't rotate, so that looks OK I think
..
Timeon: 0
Timeoff: 0
TimePeriod: 0
Frequency: inf
Timeon: 0
Timeoff: 87951
TimePeriod: 87951
Frequency: 11.37
Timeon: 24222
Timeoff: 22899
TimePeriod: 47121
Frequency: 21.22
Timeon: 24960
Timeoff: 27680
TimePeriod: 52640
Frequency: 19.00
Timeon: 27545
Timeoff: 28273
TimePeriod: 55818
Frequency: 17.92
Timeon: 63310
Timeoff: 0
TimePeriod: 63310
Frequency: 15.80The serial.print lines:
Serial.print("Timeon: ");
Serial.println(timeon);
Serial.print("Timeoff: ");
Serial.println(timeoff);
Serial.print("TimePeriod: ");
Serial.println(timePeriod);
Serial.print("Frequency: ");
Serial.println(frequency);But any idea, because I am still lost don't know exactly what the conclusion of this is :)
@rnollen time for "Take 2" I created it in Codebender to make sure it compiles. Could not test functionality yet.
The "take 2" code implements a non-blocking measurement of the frequency of the anemometer (pulses per second). It should be safe for overflow.
Take 3 could be to translate it to m/s windspeed according to your type of anemometer and finally:
Take 4 MySensors' ise it!! -
@AWI Hmm.. I see this:
1000.00
1000.00
1000.00
1000.00
1000.00
1000.00
1000.00
1000.00
1000.00
500.00
1000.00
0.00
inf
1000.00
0.00
0.00Don't think that this is correct right? Am I doing something wrong, or does these numbers say anything to you :)
-
@AWI Hmm.. I see this:
1000.00
1000.00
1000.00
1000.00
1000.00
1000.00
1000.00
1000.00
1000.00
500.00
1000.00
0.00
inf
1000.00
0.00
0.00Don't think that this is correct right? Am I doing something wrong, or does these numbers say anything to you :)
-
@AWI Sorry for the late reply, I got the flu :( But did test the sketch, but I got the same results basically.. Mostly 1000, inf and sometimes a 500? So what can be wrong here?
Thanks for all you're efforts so far!! Really appreciate it :)
-
@AWI I am still ill, while doing this :) Hopefully tomorrow will be better, Hahaha.. :)
But, the results looks promising and OK I guess :)
8.13
10.87
14.08
20.00
27.78
23.81
25.64
10.75
0.00
1.81
12.66
11.49
10.75
10.00
9.35
8.85
8.33
7.87It's 0 when I am not turning it around, so that is OK. Low number, when rotating it slowly. High number when rotating it fast :)
-
@AWI I am still ill, while doing this :) Hopefully tomorrow will be better, Hahaha.. :)
But, the results looks promising and OK I guess :)
8.13
10.87
14.08
20.00
27.78
23.81
25.64
10.75
0.00
1.81
12.66
11.49
10.75
10.00
9.35
8.85
8.33
7.87It's 0 when I am not turning it around, so that is OK. Low number, when rotating it slowly. High number when rotating it fast :)
-
@rnollen take care.. This is how it should be (with the anemometer) I will post the MySensors version tomorrow (need some sleep now)
-
@rnollen I made the sketch but forgot to post it... Have a look here
https://codebender.cc/sketch:347770
I does not compile in codebender.cc yet because of v2 MySensor but it should in the IDE.
Have fun and let me know the results
-
@rnollen I made the sketch but forgot to post it... Have a look here
https://codebender.cc/sketch:347770
I does not compile in codebender.cc yet because of v2 MySensor but it should in the IDE.
Have fun and let me know the results
@AWI Great job. I'm planning to make my own anemometer, just because it's fun to do. And was already thinking about the problems that might occur. Hardware wise it's easy. Just use a hall sensor to detect pulses and a rotating magnet.
When the diameter of the magnet will be around 9cm, the magnet will reach the Hall sensor within 3ms or less if there's a Hurricane. That can be a problem because the sensor might think that the magnet isn't moving.
Because of that I was thinking about counting the pulses in a interrupt handler (pin 2 or 3) . And just let the loop periodically read the values and send them to the gateway if necessary.
Now comes my question for you. I was thinking of using some kind of decade counter IC. And let the IC handle the pulse counting. That way I only have to read and reset the counter IC. Do you happen to know a good counter IC that I can connect to the Arduino? It would make the project much easier.
-
@AWI Great job. I'm planning to make my own anemometer, just because it's fun to do. And was already thinking about the problems that might occur. Hardware wise it's easy. Just use a hall sensor to detect pulses and a rotating magnet.
When the diameter of the magnet will be around 9cm, the magnet will reach the Hall sensor within 3ms or less if there's a Hurricane. That can be a problem because the sensor might think that the magnet isn't moving.
Because of that I was thinking about counting the pulses in a interrupt handler (pin 2 or 3) . And just let the loop periodically read the values and send them to the gateway if necessary.
Now comes my question for you. I was thinking of using some kind of decade counter IC. And let the IC handle the pulse counting. That way I only have to read and reset the counter IC. Do you happen to know a good counter IC that I can connect to the Arduino? It would make the project much easier.
-
@TheoL I have to dig in my ancient history to find hardware for that purpose. An interrupt routine would be much easier and fast enough. (would be take 4 of this thread :smile:)
@AWI I know it's ancient stuff ;-) But very reliable. Maybe something like this? THE 4017B DECADE COUNTER But I don't know I it could handle the speed?
I'm also thinking about replacing the hall sensor with an infrared pulse sensor. It has a shorter on time than a magnet with a hall sensor. At least that's what I'm thinking ;-)
-
@AWI Thanks for the sketch, but I still run in some issues. When i download the sketch, I got an error with the line "#include <MySensor.h> ". The strange thing is, everything seems to be OK, but it say it cannot be found. When I copy/paste the lines from a different sketch, it does work correct?? The strange thing is, I don't see difference. Maybe something wrong with a font or some sort?
But, then the issues really start. All the Mysensors stuff, is not recognized (e.g.send). I was able to fix that, copying from other sketches and add gw. before everything. In the serial monitor it then looks OK. That seems for me to solve the issues on that side.
But finally, in domoticz, it does not work then :( Everything is looking perfect, I see the sensors appear, but no new device is added). I saw a topic on the domoticz forum where the same thing happened :) and where you also replyed in: https://www.domoticz.com/forum/viewtopic.php?f=42&t=11490&p=82522&hilit=wind#p82522
Tried some various stuff, but no result sofar
Any idea?