Features
- Temperature, Humidity and barometric pressure measurement
- No external power for outdoor sensors required (solar powered)
- Wireless communication between outdoor sensor and PC
- Full logging and reporting on weather information on PC
- Relatively inexpensive and easy to build
Components of the solution
- Arduino compatible Seedstudio Stalker board for remote sensors.
- XBee based communication between outdoor sensor and PC
- Solar panel and LiPo battery for outdoor sensor power
- XBee Explorer connected to PC for communication reception
- C# based PC application to store, report and graph all data
What will you need to build this?
- Seeduino Stalker v2 ($39). If you chose v2.1 there will be some code modifications required.
- Solar panel for powering the outdoor sensor ($ 2.00)
- A LiPo battery of 1000mAH or 2000mAh ($7.5 - $12)
- DHT22 Humidity sensor ($ 9.95)
- BMP085 Barometric pressure sensor ($19.95)
- A 10K Resistor
- 2x Xbee series 2 modules (2x $25.95)
- XBee Explorer ($ 24.95)
- Jumper wires
- USB Cable to connect PC to XBee Explorer
- Optional small bread-board to hook up the two sensors above. Choose either a solder-less one or something like this that does require soldering or any other alternative you think is suitable for you.
Notes about the components:
Battery: I built the outdoor sensor unit with 2000mAh battery, however by monitoring the device for few months now, including winter I can tell you this is really an overkill as the battery does not get drained or even close to that. I have every reason to believe a 1000mAh or even less will be enough.
Price: For almost any of the components above, I recommend spending some time online, including eBay to find a much better price for each. My experience in the last 6months is that you can find things on eBay for fraction of the cost compared to the amateurs sites.
Board: I used the Seedstudio Stalker for remote sensor controller, however one can really build it with many other Arduino compatible boards. The reason I chose this one is because it has both XBee module socket, on-board real-time-clock (RTC), ready for LiPo battery power and charger, which are all great features that are required here. I did take advantage of the RTC for waking up the board periodically.
XBee: I used the 2mW Series 2 ZigBee modules while in fact for this application without future enhancements that I consider, one can use Series I modules and perhaps the 1mW versions. Since I plan future enhancements I used the Series 2 modules. As for transmitting power, the 2mW will be my recommendation. My house is built of concrete and the distance between outdoor sensor station and PC is not too long, still if I take it 5 meters further, the reception becomes very poor.
DHT22: You can choose to use DHT11 instead of the DHT22
Other Tools you will need:
- Arduino IDE. I use the version 0022. Porting the code and libraries to newer IDE version should not be too difficult but pointless as far as I am concern.
- X-CTU tool for configuring the XBee modules
- I use the following libraries: TMP102 (Stalker on-board temperature sensor), R8025 (Stalker on-board RTC), BMP085 (barometric pressure sensor), DHT (for DHT22 humidity sensor), NewSoftwareSerial (for debugging console), Xbee-arduino (for wireless communication). All these libraries are included in the code ZIP file here, however if you decide to port or modify things here, I thought is important to mention this list. Specifically when porting to newer IDE note the name of NewSoftwareSerial was changed, and you need to use #include instead of #include (back-compat of the IDE was not high on the list I guess :-))
- Soldering Iron
Disclaimer:
This is a hobby build and not a product. I did not include any languages support other than English. I use only Celsius temperatures (you can modify code to use Fahrenheit if you want), there is no data archiving and grooming support and more similar stuff that makes something a product rather than a hobby build.
WeatherStationMan208.zip618 KB
Remove these ads by
Signing UpStep 1: Assembly Instructions
- Connect all the sensors to the Stalker/Arduino board
- Make minor modification to the Stalker
- Configure the XBee modules
- Load program onto the Stalker
- Run program on the PC
DHT22 connected to digital pin 2.
DHT22 Pin 4 to GND of Arduino
DHT22 Pin 2 to digital pin 2 of Arduino
10KOhm resistor between pin 1 (Vcc) to pin 2 (data) of the sensor
DHT22 Pin 3 is left not connected.
Consider using small bread-board for this small circuit
For this to work you will need to connect the FTDI to the below pins or simply use
additional FTDI board (that's what I did). If you only use one board then you will need
to connect it to the programming side, load the program then connect to the console pins to see the output, which is pretty tedious if you ask me.
To connect console only, here are the connections required:
GND from the FTDI to Arduino GND
Rx from the FTDI to digital pin 9 of the Arduino
Tx from the FTDI to digital pin 3 of the Arduino
Gnd from sensor breakout board to GND of Arduino
SDA from sensor breakout board to Aruino analog pin 4
SCL from sensor breakout board to Arduino analog pin 5
If you are using small bread-board for the DHT22 sensor, you can probably include this sensor on it too.
Minor modification to the Stalker board
In the v2.0 you will need to place a short on the bottom side of the board to connect INTA\ and PD2 pads, see this picture.
I did not checked it with v2.1 of the Stalker, but could see the same functionality still exist there. Having said that, the RTC module used in the Stalker v2.1 is very different DS3231 compared to R8025 on the v2.0. There are Arduino libraries for this new version RTC module out there, but it will obviously require some code modifications on the sketch I have here. This is not very difficult though, so don't be too scared of that.
Next connect Arduino digital output 5 to XBee pin 9. You will see Pin 1 marked on the XBee and Pin 9 is one before last on that row. The Stalker does expose 0.1" header that represents the XBee pins so it is easy to solder a header and do the connection, or use simple wire for that.
Configuring the XBee modules
There is quite a bit of information and in-depth on the XBee modules on the net. I will not go into all the details here. Few notes though: The XBee modules have API mode and Command mode firmwares. I use the library that requires the API mode. Also, with Series 2 of XBee, there is a role for each module, so we need one coordinator that is connected to the PC and one endpoint which is the module installed on the remote weather station. Also there is some addressing information that needs to be identical between units, and I chose this address code to be 2266 (my birthday if anyone is curious). Obviously you can choose something different. On the coordinator side (PC) the AO needs to be 0. On the weather station side the AO should be 2 (but in any case I ignore the return codes, so it will work anyway).
- Install the X-CTU utility
- Optionally do firmware upgrade to the XBee Modules (please note you need the API mode firmware)
- Configure one unit to be coordinator and another to be endpoint
- Configuration for both coordinator and endpoint (the sensor) is included in the ZIP file for this instructable
- Write down the Coordinator XBee address (Nodes Addressing/SH and Addressing/SL).
- Place the XBee module configured as endpoint into the Stalker socket
- Place the XBee module configured as coordinator into the XBeeExplorer and connect it to the PC
- Connect the UartBee to the Stalker programming pins (see Seeduino site for details).
- Make the recommended modifications to Arduino IDE so that it will know about this type of board (see the content in ArduinoIDE sub directory of the ZIP file attached here)
- Add the libraries from the ZIP file sub directory Libraries to the user libraries of your Arduino IDE
- Connect the UartBee to your PC USB
- Place the code for the Stalker in your development area,
- Go to the line in the ..pde file that says "static XBeeAddress64 addr64 = XBeeAddress64(0x0013A200, 0x40869EF2);" and modify the numbers to have the address of your coordinator as you wrote down in previous section XBeeAddress64(SH, SL);
- Compile and load the program onto the Stalker
- Connect battery and solar charger once you also assembled all in your enclosure
- Place the .exe and .dll files on your PC in some directory of your choice (no, did not do an install program). WeatherSationMan.exe and DTG.Spreadsheet.dll are located in the WeatherStationMan\bin\Debug
- Run the program and double click on the COM port to which your XBee is connected to
- After a minute or so, you should start to see readings of the weather information from the remote station
- Add the program to automatically start on boot time by following steps in this explanation. Follow the path and file name of the program with the parameter specifying the COM port to which the XBee is connected. For example, if the COM port is COM20, you will do something like: C:\Temp\WeatherStationMan.exe COM20
WeatherStation.zip509 KB





































Visit Our Store »
Go Pro Today »




Having a little trouble though and am fairly new to arduino and coding in general.
When I go to verify the code I'm getting the following issues:
In file included from Battery.cpp:3:
/Users/admin/Documents/Arduino/libraries/NewSoftSerial/NewSoftSerial.h:33:2: error: #error NewSoftSerial has been moved into the Arduino core as of version 1.0. Use SoftwareSerial instead.
In file included from Battery.cpp:3:
/Users/admin/Documents/Arduino/libraries/NewSoftSerial/NewSoftSerial.h:99: error: conflicting return type specified for 'virtual void NewSoftSerial::write(uint8_t)'
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'
Battery.cpp: In function 'void Battery_init()':
Battery.cpp:15: error: 'INTERNAL' was not declared in this scope
Battery.cpp:15: error: 'analogReference' was not declared in this scope
Battery.cpp:16: error: 'INPUT' was not declared in this scope
Battery.cpp:16: error: 'pinMode' was not declared in this scope
Battery.cpp:18: error: 'HIGH' was not declared in this scope
Battery.cpp:18: error: 'digitalWrite' was not declared in this scope
Battery.cpp: In function 'void Battery_charge_status()':
Battery.cpp:27: error: 'boolean' was not declared in this scope
Battery.cpp:27: error: expected `;' before 'OK'
Battery.cpp:28: error: expected `;' before 'CH'
Battery.cpp:29: error: 'OK' was not declared in this scope
Battery.cpp:29: error: 'CH' was not declared in this scope
Battery.cpp:50: error: 'OK' was not declared in this scope
Battery.cpp:50: error: 'CH' was not declared in this scope
Battery.cpp: In function 'void Battery_voltage_read()':
Battery.cpp:56: error: 'analogRead' was not declared in this scope
Any idea's what I'm doing wrong?
Thanks
If you have some experience you can port the code to the new IDE, but if not and you are only looking to build it, use the older version of the Arduino IDE.
Do I need to track down the older versions of the libraries(other than the ones you have included in the zip)?
Thanks
In other words, you don't need to track changes for the libraries.
I am planning to update this with newer version of the code that will work with newer Stalker version (contribution of another reader) and newer IDE. It will take me time, and not high enough on my endless todo...
Thanks for you help!
a. Faster memory freeing
b. In some cases the "packet" button remained green after reception of data is over.
c. Move program and data to D: instead of C: by default
2. Howto for Windows 8 people, a link to add this program to your automatically stated list:
http://www.eightforums.com/tutorials/5180-startup-items-manage-windows-8-a.html
The link you should create is as following:
(a) assuming program is located in D:\Temp
(b) The serial port of the Xbee is COM3
Then the link is D:\Temp\WeatherStationMan,exe COM3
3. Notes:
- If you need to change the default drive, modify the code in WeatherStationManConstants.cs
- Latest was built with Visual Studio 2012, as oppose to VS2010 for previous builds
Always happy to hear a good thing
$23 difference is a lot for a manual :-)