Wireless Weather Station with Pitot Tube AnemometerFollow project
How do you feel about this article? Help us to provide better content for you.
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
What do you think of this article?
First of all, we need to determine elements measured by the weather station. Two common measurements are temperature and relative humidity. To obtain the"feels like" temperature (i.e. You feel colder under chilly wind), we also want to measure the wind speed in the weather station. We will use a tube anemometer to measure the wind speed since it consumes small power and is more affordable.
We want to view the measurements on a smartphone, tablet, or PC. To do so, let's build a wireless weather station. The available wireless technologies are Wi-Fi, cellular networks, and Bluetooth. However, both Wi-FI and 3G/4G require the device to be connected to an existing network and consume a large amount of power. Therefore, we pick the Bluetooth Low Energy (BLE).
An Arduino Due will be used as the control platform. It has a 3.3V digital voltage and is compatible with almost all I2C, or SPI sensors and actuators. We use a 9V battery to power the weather station.
Sensors in the Weather Station
To save us time, we collect the measurements through Digilent Pmod Sensor Modules. These sensor modules can be directly connected to Arduino Due. No external circuitry is needed. We can have all sensors in the wireless weather station by using Digilent Pmod Sensors. That is very convenient.
Pmod TMP3 Digital Temperature Sensor
Pmod TMP3 is an ambient temperature sensor. It can measure a wide range of ambient temperatures (-40°C to +125°C) at up to 0.0625 °C of resolution (12 bits). The standard accuracy is +/- 1°C. It can be powered from the 3V3 pin of the microcontroller and doesn't require any other external hardware to operate. The Pmod TMP3 communicates with Arduino Due through the I2C interface. We can follow the below wiring instructions and connect it to Arduino Due.
|Pmod TMP3||Arduino Due|
|SCL (1)||SCL (21)|
|SDA (2)||SDA (20)|
There are 8 different I²C slave addresses ranging from 0x48 to 0x4F. If all jumpers are left in the default positions, the I2C address of the device is 0x48. The default resolution is 9 bits. We can set the desired resolution at the configuration register of address 0x01 (Microchip TCN75A datasheet section 5.3.2) set the address pointer to 0x00 which is the address of the stored data. To read the temperature, we write to register the address of the stored data (0x00). The temperature data come in two bytes and are arranged in a two's complement format. We use the following equation to convert the measured data are converted into the ambient temperature (Microchip TCN75A datasheet section 5.3 and 5.3.1)
Equation: Ambient Temperature = Measured Data (in decimal) x 2-4
Data transfers are initiated by a Start condition (Start), followed by a 7-bit device address and a read/write bit. An Acknowledge (ACK) from the slave confirms the reception of each byte. Each access must be terminated by a Stop condition (Stop). (Microchip TCN75A datasheet section 4)
Pmod HYGRO Digital Humidity Sensor
Pmod HYGRO is a relative humidity sensor, which can determine the relative humidity of the environment with up to 14 bits of resolution. The accuracy ±2%. It can be powered from the 3V3 pin of the microcontroller and doesn't require any other external hardware to operate. The Pmod HYGRO communicates with Arduino Due through the I2C interface. We can follow the below wiring instructions. Since both Pmod TMP3 and Pmod HYGRO are through the I2C interface, they can be daisy-chained. (connect one Pmod to the Arduino, then the second Pmod to the first one)
|Pmod HYGRO||Arduino Due|
|SCL (3)||SCL (21)|
|SDA (4)||SDA (20)|
The I2C address of the device is 0x40. The easiest way to communicate the humidity sensor with Arduino Due is to use the library ClosedCube_HDC1080.h.
Pmod DPG1 Differential Pressure Gauge Sensor and Pitot-static tube
The Pitot-static tube is an aerodynamic coaxial tube, the inner part being open and pointed in the direction of the wind, the outer one has small holes on its surface. The outer tube gives the static pressure while the inner tube gives the stagnation pressure (pressure appearing because of the wind blowing directly into the tube).
The difference between the two gives the dynamic pressure, from which the speed of the fluid flow (wind) can be determined with the following equation (Bernoulli's equation):
Wind speed in itself doesn't mean anything to us, so we encode the speed based on the Beaufort scale.
|Beaufort Number||Wind Speed (mph)||Wind Speed (kmph)||Wind Speed (knots)||Description||Wind Effects on Land|
|0||<1||<1||<1||Calm||Calm, smoke rises vertically|
|1||1-3||1-5||1-3||Light Air||Wind motion visible in smoke|
|2||4-7||6-11||4-6||Light Breeze||Wind felt on exposed skin. Leaves rustle|
|3||8-12||12-19||7-12||Gentle Breeze||Leaves and small twigs in constant motion|
|Dust and loose paper are raised. Small branches begin to move|
|5||19-24||29-38||17-21||Fresh Breeze||Small trees begin to sway|
|6||25-31||39-49||22-27||Strong Breeze||Large branches are in motion. Whistling heard in overhead wires. Umbrella use is difficult|
|7||32-38||50-61||28-33||Near Gale||Whole trees in motion. Some difficulty walking into the wind|
|8||39-46||62-74||34-40||Gale||Twigs and small branches break from trees. Cars veer on road.|
|9||47-54||75-88||41-47||Strong Gale||Larger branches break from trees. Light structural damage|
|10||55-63||89-102||48-55||Storm||Trees broken and uprooted. Considerable structural damage|
|11||64-72||103-117||56-63||Violent Storm||Widespread damage to structures and vegetation|
|12||>73||>117||>64||Hurricane||Considerable and widespread damage to structures and vegetation. Violence|
To create a Pitot-static tube, we need two plastic tubes with different diameters. In this project, we make use of a 2.5ml syringe and an empty pen refill to create the tube. You also need a cutter, a drill, and some glue which is bicomponent polyester putty to seal off the tubes and to make the outer one aerodynamic (more on this later).
First, cut the tip of the syringe and drill some holes on one of its ends. Drill two other holes on the syringe for the smaller tubes: one along its axis and one near its base. Use a 3mm drill bit (the diameter of the smaller tube). You can refer to the image below, the holes are marked with red:
Cut two pieces from the pen refill and insert them in the syringe as shown in the image below. Remember that the longer one should stick out from the syringe at both ends.
Now use putty to seal the holes where the small tubes (pen refill) are inserted into the syringe. Also, seal the back of the syringe. Use a piece of putty to make the tip of the syringe more aerodynamic. The below image shows the glued tube.
Now, let's look into the dynamic air pressure sensor. We use Digilent Pmod DPG1 as a differential pressure gauge sensor. The Pmod DPG1 can detect a very small pressure difference (0 - 10 KPa) between its two inputs.
Pmod DPG1 can communicate with Arduino Due through SPI with SPI Mode 0. The below table shows the wiring instruction.
|Pmod DPG1||Arduino Due|
When the glue dries, you can connect the Pitot-static tube to a Pmod DPG1 through small rubber tubes. These smaller tubes come with Pmod DPG1.
We can use the following equation to calculate the pressure difference.
To calibrate the assembled Pmod DPG1 and Pitot-static tube, you can make some measurements under still air and display the measured pressure difference in the Serial Monitor. By doing so, you can eliminate any offset from the measurements.
Note: Pmod DPG1 can only accept a certain range of pressure differences without damaging the internal piezoresistive silicon. When the Pmod is laid on a flat surface such that the transducer is above the PCB, the top most nozzle is P1 (the receiving nozzle to detect fluctuating pressure) and the bottom-most nozzle is P2 (the pressure reference nozzle for P1). The pressure at P1 is recommended to be between 0 and 10 kPa above the pressure present at P2.
We send the data collected by the weather station to any receiver (e.g. tablet, laptop, or desktop) through Bluetooth. To do that, we connect Pmod BLE, a Low Energy Bluetooth module, to one of Arduino Due's UART ports (for example Serial1):
|Pmod BLE||Arduino Due|
|RXD (2)||TX1 (18)|
|TXD (3)||RX1 (19)|
The Pmod BLE can be configured with ASCII commands. To do so, we send "$$$" when we initialize the Pmod BLE and convert it into Command mode. Then, we can send the following commands to configure the Pmod. Every command must be finished with a carriage return (\r)and inside " ".
- "SF,1": resets the configurations into factory default.
- "S-,name": set the device name. The device will automatically append its serial number at the end of the name.
- "SGA,0": set the output power to maximum
- "SS,C0": enable device information transmission and Transparent UART mode. We will use this mode to communicate with Arduino Due.
After we configure the module, we exit the command mode by sending "---\r". The Pmod BLE will be back to data mode and transmit the data. The full list of commands can be found at https://reference.digilentinc.com/_media/reference/pmod/pmodble/rn4871_user_guide.pdf.
WARNING: Hot-plugging (un-plugging or plugging in the device while powered) the Pmod BLE can possibly wipe the internal memory on the device. Fixing this requires a UART terminal connection between a PC and the Pmod BLE.
Data can be received in a Serial Monitor. We make use of a free Android app (Serial Bluetooth Terminal from Kai Morich) to display the data and status. To establish the connection, we have to give the required permissions to the app and turn on the GPS and Bluetooth on mobile phones or tablets.
Open the menu (left upper corner), then select "Devices". Select the "Bluetooth LE" tab, then select Pmod BLE (whichever name you name for Pmod BLE). The app automatically opens the terminal and displays the data coming from the Bluetooth module.
Full Connection Diagram