Vladislav Pomogaev

Engineering Graduate – VE7ZAH

IoT Weather Station v2.0

For my term project for my highschool’s design class I decided to design and build a solar powered, automatic weather station. The goal was to design a small, compact weather station with the following requirements:

  • Must be solar powered, with a battery for operation at night
  • Must be compact in size, with a non-destructive mounting method
  • Must be able to upload data to the WeatherUnderground network
  • Must be weather-proof
  • Has to measure temperature, humidity, air pressure, and the UV index

I managed to meet all of these requirements and then some. The weather station was successfully broadcasting and uploading it’s measurements to WeatherUnderground for a period of about two years, until the unit suffered a catastrophic failure, probably due to corrosion of the battery and solar panel connectors.

Prototype Circuit

The prototype weather station circuit on the breadboard. The low-power Atmega concatenates the information from the sensors and sends them to the base station through the 433MHz transmitter.

I started the project off by building the prototype circuit on a breadboard. I used all new components, except the 433MHz radio, which I salvaged off the old weather station. But right before I did that, I thought of using the ESP8266 Wi-Fi chip instead. I ran some tests on the chip at my school using a USB to UART converter, and I could not connect to the Wi-Fi network. Even though our network had basic WPA encryption, there was an additional login page after you connected. I could not figure out a way to login to that page, so I decided to use the radio link that I was familiar with.

I connected the new sensors to an Atmega328 micro-controller, and powered everything using a MAX604 linear voltage regulator. This regulator had a VERY low dropout voltage in the mV range, which made it very efficient. I used this regulator to bring the 3.7-4.2V of the Li-Po battery, down to a perfect 3.3V.

I decided to use an old Blackberry battery for this project because I had one laying around, and because I knew it had voltage protection circuitry, which would turn off the power when the battery got too low. In order to charge the battery, I went with a TP4056 module. This module is very efficient, and it is able to work off a 5V input. I also had a small, 5V solar panel laying around, which was able to charge the battery through the TP4056 board even in low lighting. Here is the full schematic for the Riverside weather station:

Eagle schematic for the project. Lots of custom footprints and symbols had to the be made for this project because most of the components were actually “Arduino compatible” modules bought off the internet and did not have any designs available.

Making the PCB

The weather station’s circuit board, battery, and mini-solar panel on a desk. The circuit board has not yet been weather-proofed.

I decided to make the circuit into a PCB instead of making it on a perfboard. A PCB is more rigid and durable than a perfboard, and I wanted this weather station to be durable. I took the breadboard design and transferred it over into an Eagle CAD schematic. I had to make schematic symbols and footprints for some of the components I used.

Once I had everything in schematic form, I transferred it over to a PCB design. I set the border for the PCB to be a 100mm x 75mm rectangle, which was the size of the double sided, copper-clad board that I had. Then came the task of laying out the components and making the traces. I laid out the components as simply as I could, and this is how it looked like when I was done:


To physically make the PCB, I decided to use my dad’s homemade CNC mill. I downloaded PCBGcode, a plugin for Eagle CAD, and used the default settings to export the etch and drill g-code files for the top and bottom layer. I then took those files over to a program called Autoleveler (a free version of this program is available somewhere on the internet). It took the etch files, and turned them into files that made use of the CNC machine’s probe tool.

I started up the CNC machine, put in a 0.1mm, 30 degree etching bit, then used two alligator clips to probe the surface of the copper-clad board. This told the machine where the surface was, which enabled the machine to etch the PCB with a uniform depth.


I started by etching the bottom layer, then I used a homemade wooden jig to perfectly flip the PCB over, then I etched the other side. I did have to move the home position 100mm to the left when I changed sides.

After the etching was complete, I swapped the bit out for a 0.8mm drill bit. The PCBGcode plugin generated separate files for drilling, so I ran the appropriate file. I did not have to probe the surface this time, but I added some break-trough in the settings to make sure the drill bit went all the way through.


After that, it was time to take the PCB out, and solder all of the components on. I was a bit off center with the holes on the top layer, but that was okay, since I wasn’t going to solder the top layer (except the vias) anyways.

Making a 3D Printed Enclosure


One of the things my old weather station lacked was a proper enclosure (which is also why I never put the old weather station outside). With the help of my school’s 3D printer (Makerbot Replicator 2), I managed to build a very nice body for my weather station out of while PLA. I used about a 20% infill, with rafts and supports. I designed the case to accommodate the PCB, and I also made a little stand in the back for zip-tying the weather station to a pipe.

The PCB and battery fit perfectly into the base. However, the case still needed a lid. For some reason the Makerbot always stopped in the middle of printing the lid, so I decided to make it by hand out of some 1/4″ high density foam.



In order to upload data to the WeatherUnderground network, I had to write an application for the computer on the receiving end of the 433Mhz radio using the PWS API. The software was written in C# using Visual Studio, and it was quite similar to the old weather station software.

Speaking of receivers, I re-used the same receiver from my old weather station in this project. Mr. Mietzker, my tech teacher, donated an old laptop to function as the receiver for my weather station. I set up the laptop in a place where it should not be disturbed, and made a patch cable to connect it to the internet. I set up my receiver program to run when the computer starts, and set the computer to restart in the event of a power-failure. If nothing catastrophic were to happen to the weather station, it should continue to upload data to WeatherUnderground as long as the laptop has power and internet.



In the end, I really liked how this project turned out. I learned a lot about 3D printing, and it inspired me to 3D print more readily in my future projects. I also learned how design a circuit with low power-consumption in mind.

I hope this weather station lasts a long time, and that it helps the students of Riverside to never get caught in the rain without an umbrella.