In the final part of this project we configure the controller as a web client. We transmit the station data to a cloud server every 60 seconds. The cloud server it connects to processes the data and stores it into a database. It also timestamps the data as there is no clock used in the controller.
You can view the data by connecting to this cloud server and retrieving the data for a date / time range. It then displays the temperature, humidity and barometric pressure on a line chart. Any rainfall is shown as a black vertical line at the bottom of the chart.
We use SVG (Scalable Vector Graphics) which is supported by most browsers to display this chart.
The first software option we setup is to configure the weather station controller as a basic web server.
We assign a static IP address to the EtherTen board which allows any browser on the same network as the weather station to access the data. When a browser connects the server responds with a simple html page which has all of the current sensor values plus the lowest and highest temperature recorded.
In part 8 of the project we have a look at the various ways we can get data from the weather station.
If you want to access the data from within you own network only then we can setup a basic web server that you can access from a browser. The other alternative is to setup the station as a client that connects to a cloud server and uploads the data. This has the advantage that you can access the data from anywhere.
We have put together a short guide on how to make the weather shelter. Most of it is made from plastic plumbing parts that you can purchase from your local hardware store / depot. Some of the components were salvaged from bins at building sites. All up it cost between 10 to 15 dollars and about an hour to assemble.
For this weather station we used the shelter to house the DS18B20 temperature sensor and the BME280 for humidity and barometric pressure. The temperature sensor is exposed to air flow by being mounted inside the vents at the top of the shelter. Air can also enter at the bottom of the shelter to allow humidity and pressure measurements. We chose not to use the temperature reading from the BME280 as it tends to read high inside the PVC tube. This is because it is not exposed to direct air flow movement.
The last sensor we will hookup to the weather station is the Davis Anemometer to record wind strength and direction. This sensor uses an analog input to measure the wind direction and a digital input to count the revolutions of the wind cups.
In the sketch we are going to make some changes to it's operation. We are going to implement a timer interrupt to control the operation of the sketch. This will get the sketch ready to implement the web server functionality which will be uploaed soon.
To detect rain we are using the Hydreon RG-11 Rain Sensor. This optical sensor can detect rainfall and simulate a tipping bucket rain gauge.
As far as the Arduino is concerned it is wired up as a switch. The sensor has a built in relay that is opened and closed when rain is detected. We count the number of relay open and closes to calculate the amount of rain fall. This sensor requires 12V DC and can operate in several modes that are set using dip switches mounted inside the sensor.
The next sensor we connect up is the Bosch BM280 temperature, humidity and barometric pressure sensor. We will only be using the humidity and pressure parts of the sensor.
We expand the weather station sketch to include the BME280 sensor. At the end of this step we will display the temperature (DS18B20), humidity and barometric pressure from the BME280.
We connect up the first sensor to the Weather Station. The DS18B20 sensor is used to measure the temperature.
The sensor we are using is a weatherproof sensor that is mounted inside the environmental shelter. It is protected from the rain and direct sunlight but is exposed to the movement of air through the shelter.
We also start the software sketch for the Arduino. As we add each sensor we also expand the sketch to incorporate the new sensors.
We have put together an Arduino based weather station that incorporates many of the sensors we have created hookup guides for.
The weather station is connected to the internet and transmits the data to our website for processing and display. For this project we are using power over ethernet to provide power and connectivity. In a future project we are going to use a WIFI connection to provide this connectivity.
The weather station is powered via power over ethernet. We inject 12V DC through the ethernet cable. The Hydreon RG-11 sensor requires 12V to operate. The 12V is dropped down to 9V before it is fed into the Arduino board. All other sensors run on 5V which is provided by the Arduino board.
The following sensors are used:
We have split the project up into multiple parts. The first part is an overview of the project.
This is the latest temperature, humidity sensor from Sensirion. This sensor unlike some of the earlier models is fully I2C complaint. The Sensirion sensors are known for there high accuracy which in the case of the SHT31 is ±2% relative humidity and ±0.3°C.
To make things easy we use the sensor mounted on a breakout board. The board we used was supplied by Adafruit. This board and sensor supports I2C address 0x44 or 0x45. The sample sketch and library supports both addresses. For more details click on the link below.
This sensor is an alternative to the traditional tipping bucket rain sensor. It uses optical sensors to detect rain impacting on the dome that covers the sensor. When rain is detected it activates a relay that acts as a switch.
The RG-11 has several modes of operation. It can emulate a traditional tipping bucket and we can set the bucket size via dip switches inside the sensor. This is the mode we use when connecting the sensor to the Arduino.
We have a hookup guide that covers connecting the sensor to the Arduino which also includes a sample sketch. We also use the RG-11 in one of our weather station projects that will be put online soon.
A viewer request. Is it possible to connect more than one BME280 on the same I2C bus?
The BME280 sensor has two I2C addresses (0x77 and 0x76). Using I2C we can connect two sensors on the same bus by setting the second sensor to address(0x76). The hookup guide shows you how to wire up the sensor to use the alternate address.
We have to use the cactus.io BME280_I2C library as many of the other libraries do not support multiple sensors on I2C. For more details including a sample sketch for the Arduino click on the link below in the Hookup Guide section.
If you have wanted to setup your own weather station then the Davis Anemometer is a great starting point. This sensor is readily available and is easy to setup and connect to the Arduino.
The sensor measures the wind speed using cups that trigger a reed switch every revolution. To determine the wind speed we count the number of revolutions over a period of time. By then applying a formula we can determine the wind speed in km/hr, knots or mph.
The wind vane is attached to a potentiometer which varies the resistance depending on what direction the wind vane is pointing. We determine the wind direction by an anlog input. The analog value is converted to a wind direction.
We have a details page giving an overview of the wiring and electrical functionality of the anemometer. We also have a 3 part tutorial that goes into details of hooking up to the Arduino. This involves calibrating the wind direction. We will be releasing a weather station project that involves using the Davis anemometer.
We have a range of projects that utilise the Davis anemometer and these will be uploaded soon.
The BME280 is an environmental sensor with the ability to measure temperature, humidity and barometric pressure. It supports either SPI or I2C for communications. We have put together hookup guides for connecting the sensor to the Arduino board.
The best way to use the BME280 is with a breakout board. These are available from the major hardware suppliers.
We have used the BME280 in several tutorials and projects. We have a library for this sensor that supports I2C and allows connecting two sensors on the same I2C bus. We have another library for the SPI bus.
So for more details about using the BME280 click on one of the links below.
The Arduino platform has been around for a few years now. It comes in many layouts, colors and configurations. It's a great platform to learn embedded programming on. The low cost boards come with a range of inputs and outputs that allow the connection of a large range of sensors and other components.
We have put together many tutorials and hookup guides using the Arduino and connecting it to a range of sensors and devices. We are in the process of finishing off several projects using the Arduino platform with a range of sensors.
Click on the links below for more details about the Arduino Platform
We have a range of hookup guides for connecting a range of sensors from simple temperature and humidity sensors through to larger sensors such as anemometers and rain sensors.
There are some new boards coming out from Arduino that incorporate features such as built in Wifi and more powerful processors. We will be having a look at these boards once they become available.