For my first project, I’m looking to build an Arduino-powered weather station for my home. So far, the design consists of two parts: an outdoor module and an indoor module.
Both modules will be able to:
Measure temperature
Measure humidity
Measure barometric pressure
The outdoor module will be able to:
Send its measurements to the indoor module
Withstand weather and other adverse conditions
Be powered by battery, possibly with a solar assist
The indoor module will be able to:
Display measurements from both modules via an LCD
Preferably with a button to switch between the display of indoor and outdoor measurements
Provide current measurements to users via a web server over wifi
Submit historical measurements to an online service for trending and graphing
Be powered by a wall plug
Components
2×
DHT22
Temperature and humidity sensor plus pull-up resistor
2×
BMP180
Barometric pressure, temperature, and altitude sensor. Adafruit version on breakout board with 5v conversion onboard
1×
20x4 LCD display
White on blue with backlight
1×
P2N2222 Transistor
Helps control the LCD's backlight via one of the Arduino's PWM pins
1×
1N4001 Diode
Helps control the LCD's backlight via one of the Arduino's PWM pins
It's been a while since I last posted any updates, and to be honest, this project hasn't been high on my list of things to do. However, I've recently started plugging away at re-learning C/C++, which I haven't worked with in twelve years, and figuring out the XBee portion of this project.
In order to do this, I've put together some simple sketches at https://github.com/gjmiller/Arduino-Examples. One covers structs and dynamic memory allocation, and the other covers the reception of data via XBee and dynamic memory allocation. They aren't complicated, but they've been useful in getting me into the groove of this project again.
Next up, assembling the CC3000 shield from Adafruit and testing it out.
By digging through the Arduino forum and some other sites, I've found that the secret to controlling the LCD's backlight via PWM is to use a transistor, resistor, and diode between the PWM pin and pin 16 on the LCD.
So far, I've ordered the parts and tools that I think I need to be able to pull this off.
I've not soldered components as small as electronics before, so I also ordered a MintyBoost kit from Adafruit to learn and practice on. I've completed it and it wasn't as hard as I thought it might be.
I'm working my way through making sure that the parts for the base station are working and am making sure that I'm familiar with each part by itself. I've been able to make the temperature/humidity sensor (DHT22), the barometric pressure/temperature sensor (BMP180 breakout from Adafruit), and 20x4 LCD screen work on their own without much difficulty.
I'm currently in the process of working on getting the LCD to switch from displaying temperature, to displaying humidity, to turning off when a button is pressed. Apparently shutting off the LCD entirely isn't totally trivial, but I think I've found a way to do it with some extra components and some extra code.
To be honest, I've made sure that I could get a reading out of the BMP180, but haven't validated it against another source. I'll do so and report back.
I've run the BMP180 next to an AccuRite station and the BMP180 reports 29.73 inHG, while the AccuRite reports 30.21. It doesn't look like the BMP180 is entirely wacky to me.
I have 2 BMP180 and both do not seem to mearsure correctly even after adjusting for elevation.