Need some advices on making a weather station

Hi folks

Im thinking about making my own weather station instead of buying one. So far I'm just walking around with some ideas in my head. I ran upon some questions that I need some advices on. I hope you can help me! :slight_smile:

The project would require two circuits:
1: A transmitter circuit placed outside my house from where the data is collected. This circuit includes different sensors (Temperature, humidity, barometric and maybe more).

2: A receiver circuit placed inside my house from where the data can be seen. This circuit includes some kind of visualization. Im thinking about a standard LCD display with some buttons to change the data on the screen.

Now to the questions:

1: The wireless communication between the two circuits. Im know xbees are popular. However, I find them pretty expensive. I used this RF Link kit before. Back then the wireless communication only was a matter of sending a letter when pressing a button. This time it's more complex. The Arduinos most send a lot of different data to each other. And they need to be able to distinguish what data is from what sensor. Do you have any advices on this? How to make the receiving Arduino know what data is for the temperature sensor and what is from the humidity sensor fx?

2: Power. I don't want to buy new batteries all the time. Maybe solar panels? Maybe other?

3: How much should i concern about protecting the outside placed circuit from the weather?

Thanks! :slight_smile:

This: http://www.exp-tech.de/Shields/315MHz-RF-Link-Kit.html will work fine.
You can send a series if bytes that represent letters and numbers. If you use a CRC or Check Sum, the data can be very reliable.

I've had good luck with these . There are well supported libraries for arduino, a few of which support ack'ing.

you can set up your sensor to transmit data on regular intervals and (I would recommend) also save it to an SD card.

I did a tipping bucket rain gage with temperature, humidity and barometric pressure too... works really well.

I have my indoor unit reporting both outdoor and indoor conditions on an lcd.

have fun!

Are all sensors connected to the same central location with the wireless transmitter? If yes, then just do print such as Temp=12, Humi=50\r each time you send data and disassemble the data on the receiver end.

If you wish to expand this project to include more sites, more locations, then you need to consider xbee. Cheap transceivers can't network.

If you wanted to use solar panels, you would have to use batteries to store extra charge in the night and on cloudy days, but I am sure you have already thought through that. Powerful solar panels can be expensive, and at least where I live the sun is not reliable. You could always use rechargeable batteries. Those usually come with a charger, or you could always build your own. Remember that batteries charge on DC, so you would need to use a bridge rectifier to rectify the signal if you hook it up straight to AC. Unless you have a river or some other flowing body of water with a high current, batteries and solar panels are probably the best option. You know if you REALLY want to go the extra mile, your local electric company will send you a check for energy that you put back into the power lines.

I don't know where you live, but it's always a good idea to add a little weather protection to a circuit. This shouldn't be too complicated. Where I live animal protection is another thing I would need to factor in from rabbits and squirrels, to deer.

Thanks for the answers!

steinie44:
If you use a CRC or Check Sum, the data can be very reliable.

What do you mean when you say CRC and Check Sum?

liudr:
Are all sensors connected to the same central location with the wireless transmitter? If yes, then just do print such as Temp=12, Humi=50\r each time you send data and disassemble the data on the receiver end.

Yes - all sensors connected to the same location. How would you disassemble the data on the receiver end? Is there some kind of function or command that checks if a certain data variable includes a certain number/word?

I would use sprintf to assemble information and sscanf to disassemble them.

Some may recommend Sprint class functions but I don't use them.

What do you mean when you say CRC and Check Sum?

This is basically a process that take each byte as it's sent and generates a code of sorts. A simple example would be to add all the bytes and send the sum at the end. The receiver performs the same operation and compares them. If they don't match then the data is corrupt. There are all sorts of ways to do it with byte encoding like Xor, Or, And, Add and so on so a unique code is generated that can't be duplicated by changing the data.

I'm actually in the process of doing exactly the same thing. This might make for interesting reading

My setup is further along that yours at this point and basically consists of the following

Sender:
Arduino Pro Mini 3.3v
nrf24l01+ (I got mine from Seeedstudio for $2.90 each)
a DHT22/RHT03 sensor for temp and humidity
a BMP180 for barometric pressure
The Weather station from Sparkfun with weather vane, anemeter and rain bucket.
1000mah lipo
Adafruit solar charger
Adafruit 2w solar panel

My receiver side is still undecided. So far I've been using an R3 UNO with a 20x4 LCD but that won't be large enough I don't think so I'm looking to move to a 3.3v platform and driving a Nokia 5110 LCD screen. This may end up being a Netduino based unit since that'll get me free network connectivity and SD card and I have one spare :slight_smile:

So far, I'm sending temp, humidity and lipo voltage from sender to receiver every 10 seconds and with the RockeScream sleep library I'm getting upwards of a month from the lipo alone, without the solar charger installed at all (still waiting for it to arrive)

The first thing you need to do is use a platform on the sender that doesn't have USB. My dev platform was a 3.3v Arduino Pro but I've since moved down to a Pro Mini 3.3v. On these power usage is about 0.07ma, on an R3 UNO is was more like 30ma in full sleep, all being used powering the USB side of things that's not required.

Lessens learned so far and challenges encountered are:

  • Use the RF24 library, it makes life so much easier, it is also designed to send an array, so one value per slice makes it easy
  • Power down the radios before you sleep and power them back up when you wake. They won't work if you don't.
  • Powering the DHT22 from a digital pin allows me to turn it off when not being sampled. It didn't buy me much power but it was worth it.
  • There is a brand new library for the Sparkfun weather station posted in the comments. It's worth using if you can because decoding it all manually is painful. I had to add a couple of routines to it to enable/disable interrupts so I could put the board to sleep
  • Use a voltage divider into an analogue port to monitor battery voltage
  • The Pro Mini annoyingly puts A4/A5 in a stupid place that you can't access easily if you plan on building a circuit with veroboard or stripboard.... I couldn't believe the I2C pins wouldn't be easily accessable.

If you don't care about humidity then you can use any number of temp sensors that are cheaper and probably accurate enough.

The outside unit has some interesting requirements. Your temp, and humidity sensors need to be shaded but ventilated to get accurate results, sealing them in a box will give you rubbish. The pressure sensor needs to be out of the sun too, but also needs to be isolated from the wind. The "Solar Shield" linked from the sparkfun guide is the ideal solution to these however originally I think I'll be trying a standard enclosure with some vent holes in the bottom and a grill over it and place that behind the solar panel which should keep it pretty well shaded.

WendoNZ:
I'm actually in the process of doing exactly the same thing. This might make for interesting reading

My setup is further along that yours at this point and basically consists of the following

Sender:
Arduino Pro Mini 3.3v
nrf24l01+ (I got mine from Seeedstudio for $2.90 each)
a DHT22/RHT03 sensor for temp and humidity
a BMP180 for barometric pressure
The Weather station from Sparkfun with weather vane, anemeter and rain bucket.
1000mah lipo
Adafruit solar charger
Adafruit 2w solar panel

My receiver side is still undecided. So far I've been using an R3 UNO with a 20x4 LCD but that won't be large enough I don't think so I'm looking to move to a 3.3v platform and driving a Nokia 5110 LCD screen. This may end up being a Netduino based unit since that'll get me free network connectivity and SD card and I have one spare :slight_smile:

So far, I'm sending temp, humidity and lipo voltage from sender to receiver every 10 seconds and with the RockeScream sleep library I'm getting upwards of a month from the lipo alone, without the solar charger installed at all (still waiting for it to arrive)

The first thing you need to do is use a platform on the sender that doesn't have USB. My dev platform was a 3.3v Arduino Pro but I've since moved down to a Pro Mini 3.3v. On these power usage is about 0.07ma, on an R3 UNO is was more like 30ma in full sleep, all being used powering the USB side of things that's not required.

Lessens learned so far and challenges encountered are:

  • Use the RF24 library, it makes life so much easier, it is also designed to send an array, so one value per slice makes it easy
  • Power down the radios before you sleep and power them back up when you wake. They won't work if you don't.
  • Powering the DHT22 from a digital pin allows me to turn it off when not being sampled. It didn't buy me much power but it was worth it.
  • There is a brand new library for the Sparkfun weather station posted in the comments. It's worth using if you can because decoding it all manually is painful. I had to add a couple of routines to it to enable/disable interrupts so I could put the board to sleep
  • Use a voltage divider into an analogue port to monitor battery voltage
  • The Pro Mini annoyingly puts A4/A5 in a stupid place that you can't access easily if you plan on building a circuit with veroboard or stripboard.... I couldn't believe the I2C pins wouldn't be easily accessable.

If you don't care about humidity then you can use any number of temp sensors that are cheaper and probably accurate enough.

The outside unit has some interesting requirements. Your temp, and humidity sensors need to be shaded but ventilated to get accurate results, sealing them in a box will give you rubbish. The pressure sensor needs to be out of the sun too, but also needs to be isolated from the wind. The "Solar Shield" linked from the sparkfun guide is the ideal solution to these however originally I think I'll be trying a standard enclosure with some vent holes in the bottom and a grill over it and place that behind the solar panel which should keep it pretty well shaded.

Thanks for your inputs. Some good points.

You say you will put your Arduino to sleep? What do you mean?

To save power I was thinking about buying a boot converter to connect what ever parts that need much power - like the sensors and transmitter. I guess a transistor could be used to power off the the boost converter - and what ever attached - to save power. What do you think about this?

The sensors you can power from a digital pin and just turn it off that way.

The rf24 radios can be powered down via their driver (radio.powerdown() and radio.powerup()

I used the rocketscream low power library to put the arduino to sleep. This is where the biggest savings in power came from.

I doubt running transistors to power down sensors would be required or worth it, they shouldn't draw enough power to make that necessary. As I said, just connect their VCC to a normal pin in output mode and set it low when you don't need to read from it. Just be aware some sensor take time to give reliable results after power up