About 15 years ago, a friend of mine informed me that Sensirion would send a sample of one of their temperature sensors to anyone who filled a form on their web page (I’m not sure if this is still the case). After the Sensirion sensor arrived in the mail, I wired it to my PC’s parallel printer port, wrote a little code, and built a simple web page that could display the room temperature.
Ever since then, building my own weather station has been on my hobby-project back log. I realize one can purchase all sorts of thermometers and weather stations off the shelf, but I thought it would be fun to build my own.
I decided I wanted a wireless station with a web front end, which would measure and log temperature, humidity, barometric pressure, and the soil moisture of my plants.
I decided this would be a good project to learn about development with the NodeJS runtime. I was pleased – not only was it easy to learn, but it was easy to do what I wanted.
The weather station itself is built around the Arduino platform, which collects data from various sensors, and sends an update every 15 minutes using a wireless module, to my PC, equipped with a matching wireless module, connected by USB (it is not using Wi-Fi).
A) Soil Moisture Sensor
B) Battery Pack (I use 3xAA batteries)
C) DHT22 Temperature and Humidity Sensor
D) BMP180 Barometric Pressure Sensor
E) APC220 Wireless Module
F) Bare Bones Arduino (Atmel 328P Microcontroller)
On my home PC, I have a client application that listens for the broadcasts from the weather station. When a reading is received, it makes a web service call to upload the weather readings to a server I have hosted on Amazon EC2.
The biggest challenge I encountered was power consumption. My first revision consumed 60 mA, and drained 8 AA Alkaline batteries in a little over a day. I have since been able to reduce the average power consumption to about 1 mA, and have been running on 3 AA batteries for quite some time.
To achieve this, first, I incorporated the Narcoleptic sleep library for the Arduino, and sampled the temperature once every 15 minute, which saved about 12 mA. Turning off the the wireless module when not in use saved about 8 mA. The voltage regulator I was using to reduce my 12 V battery pack to 5V consumed 14 mA – simply moving to 3 AA batteries allowed me to eliminate it. The final savings came from moving the circuit from an Arduino Nano clone to a bare-bones Arduino, which eliminated the draw from the Nano’s LEDs, voltage regulator, and USB-to-serial converter.
From my website, I can then view the readings and compare my readings with those from Yahoo Weather.
Check it out at http://www.hotelexistence.ca/weather/. It is currently reporting the weather readings from my North York balcony.
Complete source code and build details: weatherstation.zip
Update – November 6, 2016: Moved parts from breadboard to prototype board