Weather Station: Solar Power System


One of the goals for the weather station project is to make it solar powered. This, combined with a medium range transmitter (100 m), should make it environmentally friendly as well.

Choosing a battery and solar panel:

To figure out what type of battery/solar panel I need, I started by researching the climate of Vancouver. I also needed the amp draw of the circuit, which I calculated to be about 10mA.


Now, we get an average of 5.2 hours of sun per day, per year. However, during December we get only an average of 1.82 hours of sun per day. We want this weather station to survive the winter unaided, so we need to adjust the calculations for December.

To figure out the recommended current of the solar panel (in mA) we need to go (10mA * 24 h) / 1.82 h. We get about 133mA.


The solar panel I went with is a 9v, 350mA, 3.2 watt solar panel. It’s a bit overkill, but like all solar panels, it can only work in sunlight. Cloudy weather will not do.

On average we go about 2 weeks without a purely sunny day, so I used that to figure out the capacity of the battery. 10 mA * 336 hours = 3360 mAh


To provide power to the circuit on cloudy days and at night, I got a 6v, 5Ah sealed lead-acid battery. I’m curious to see how it performs in the wintertime.

Charging the battery:


It was a huge struggle to automate the charging of this battery. The current circuit I am using is similar to this one from I modified it so it can be controlled with the Arduino chip. Basically, this is how it works:

  • The Arduino checks the voltage of a 2-resistor voltmeter connected to the terminals of the battery. I used a 47k and a 10k resistor for this.
  • If the voltage is more than a fully charged battery, the Arduino brings the pin of the transistor low. This activates a rudimentary float charger, which limits the charging current to 20mA.
  • If the voltage is less than a predefined point, the Arduino brings the base of the transistor to high. This bumps the voltage to ~7.2v, and the LM317 charges the battery at full speed.

The actual current output is internally limited by the LM317, which limits current the hotter it gets. Since I was building the circuit and constantly testing it, the battery would often overcharge.


Lowering power consumption:

Initially, the weather station circuit drew ~30mA when not doing anything, I aimed to get this down to ~10mA:

I started by ordering low quiescent current regulators, specifically 5v and 3.3v regulators. Back when I constructed the circuit I used two resistors to provide the 3.3v needed for the barometer to run, I even calculated the power consumption to be 0.083 watts, or 16mA at 5v! What was I thinking? Replacing this voltage spliter halved my power consumption.


In my Arduino code I implemented the sleep function of the Low Power Library found at Rocket Scream. Since the max sleep time is 8 seconds (without external wake-up), this little loop makes the Arduino sleep for 10 minutes.

void sleep() {
for (int i = 0; i < 75; i++) {
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);

Testing the circuit:


I think now is the best time to test the circuit, during the dark-dark days of October. Here is the entire assembly on two perfboards, with the solar panel facing West. Notice the plant watering prototype on the right!

The red multi-meter shows the amp use. A positive number indicates the battery is being discharged; a negative number indicates the battery is getting charged. Again, the solar panel only charges the battery when it’s in direct sunlight.

The voltmeter which reads 6.4v is powered separately from the circuit and doesn’t increase power consumption. My plan is to leave this setup for several weeks and in the meanwhile, assemble things like the new transmitter (the old one I got for $3 sucks), and begin designing the other sensors.

Vladislav Pomogaev

I'm a highschooler who is interested in technology, science, and engineering. In my spare time I work on projects that allow me to learn new skills and concepts. - Vlad

Leave a Reply

Your email address will not be published. Required fields are marked *