build-doc updated with prototype
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<meta name="generator" content="pandoc" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||||
<meta name="author" content="M.T. Konstapel" />
|
||||
<meta name="dcterms.date" content="2024-01-15" />
|
||||
<meta name="dcterms.date" content="2024-01-22" />
|
||||
<title>Weather station</title>
|
||||
<link rel="stylesheet" href="./css/mvp.css" />
|
||||
<style type="text/css">
|
||||
@@ -47,6 +47,10 @@
|
||||
<li><a href="#theory-of-operation---software"
|
||||
id="toc-theory-of-operation---software">Theory of operation
|
||||
- Software</a></li>
|
||||
<li><a href="#prototype"
|
||||
id="toc-prototype">Prototype</a></li>
|
||||
<li><a href="#specifications"
|
||||
id="toc-specifications">Specifications</a></li>
|
||||
<li><a href="#schematic"
|
||||
id="toc-schematic">Schematic</a></li>
|
||||
<li><a href="#software-dependencies"
|
||||
@@ -71,7 +75,7 @@
|
||||
<h1 class="title">Weather station</h1>
|
||||
<p class="subtitle">with ModBus RTU interface</p>
|
||||
<p class="author">M.T. Konstapel</p>
|
||||
<p class="date">2024-01-15</p>
|
||||
<p class="date">2024-01-22</p>
|
||||
<p><a href="./weather_station.pdf"><i>PDF version</i></a></p>
|
||||
</header>
|
||||
<main>
|
||||
@@ -89,7 +93,7 @@ people are obsessed with the weather. When I was a child, my grandmother
|
||||
was measuring the temperature and rainfall on a daily basis. My
|
||||
grandfather had an allotment, so he also was very interested in the
|
||||
weather. The first thing my father read in the newspaper was the weather
|
||||
report and the last thing he watched in the television was… the weather
|
||||
report and the last thing he watched on the television was… the weather
|
||||
report. And every hour he listed to the weather report on the radio. If
|
||||
he talked to someone he always started the conversation by talking about
|
||||
the weather. And when I open a new browser window, it automatically
|
||||
@@ -517,12 +521,14 @@ Software</h1>
|
||||
of the micro-controller. Every time its logic level changes an interrupt
|
||||
routine is called. This routine increments a counter and checks how many
|
||||
time has passed since the previous interrupt call. If the previous call
|
||||
was more than 2 seconds ago, the wind speed is (almost) zero. If the
|
||||
previous call was just over a second ago the interrupt counter now holds
|
||||
the amount of pulses in one second. This value is stored and from that
|
||||
value the wind speed can be calculated. If the previous call was under a
|
||||
second ago the measurement is still in progress and no further action is
|
||||
taken.</p>
|
||||
was more than 6 seconds ago, the wind speed is (almost) zero. If the
|
||||
previous call was just over 3 second ago the interrupt counter now holds
|
||||
the amount of pulses in three seconds. This value is stored and from
|
||||
that value the wind speed can be calculated. If the previous call was
|
||||
less than 3 seconds ago the measurement is still in progress and no
|
||||
further action is taken. A measurment period of three seconds is choosen
|
||||
because it is the standard as used by the Dutch meteorological institute
|
||||
(KNMI).</p>
|
||||
<figure>
|
||||
<img src="./images/wind_speed_diagram.svg" title="Wind speed interrupt"
|
||||
alt="Wind speed interrupt" />
|
||||
@@ -765,6 +771,97 @@ by 10 or 100 to get the floating point values.</p>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h1 id="prototype">Prototype</h1>
|
||||
<p>I wanted to locate the weather station at about 100 meters from the
|
||||
house. That meant that interfacing the weather station was not just a
|
||||
matter of connecting a wire to it. And 100 meters is a bit much for a
|
||||
wifi connection either. As I already had experience with LoRa I opted
|
||||
for that. But not LoRaWAN, but LoRa APRS. This is a ham radio network
|
||||
that I often use. I even run my own digipeater. So LoRa APRS it is.</p>
|
||||
<figure>
|
||||
<img src="./images/prototype_block_diagram.svg"
|
||||
title="Block diagram of the prototype"
|
||||
alt="Block diagram of the prototype" />
|
||||
<figcaption aria-hidden="true">Block diagram of the
|
||||
prototype</figcaption>
|
||||
</figure>
|
||||
<p>The weather station’s RS-485 interface is connected to a Raspberry Pi
|
||||
Zero 2W running the aprx digipeater software, as well as some specially
|
||||
written Python programs to interface the build in LoRa transceiver, the
|
||||
GPS module and the weather station itself. Every 10 minutes the
|
||||
digipeater will read the weather station’s registers and sends the data
|
||||
as PE1RXF telemetry messages over the APRS network to a server, which
|
||||
presents the data in a Grafana dashboard. The digipeater can also send
|
||||
standardized APRS weather reports over the APRS network. But more about
|
||||
this project can be found here: <a
|
||||
href="https://www.meezenest.nl/mees-elektronica/RPi_LoRa_shield.html">https://www.meezenest.nl/mees-elektronica/RPi_LoRa_shield.html</a></p>
|
||||
<figure>
|
||||
<img src="./images/prototype_overview_small.jpg"
|
||||
title="The prototype in the garden" alt="The prototype in the garden" />
|
||||
<figcaption aria-hidden="true">The prototype in the garden</figcaption>
|
||||
</figure>
|
||||
<p>As a housing for the prototype, I used an old beehive. These are
|
||||
weatherproof and I had one laying around.</p>
|
||||
<figure>
|
||||
<img src="./images/prototype_sensors_small.jpg"
|
||||
title="Closeup of the sensors" alt="Closeup of the sensors" />
|
||||
<figcaption aria-hidden="true">Closeup of the sensors</figcaption>
|
||||
</figure>
|
||||
<figure>
|
||||
<img src="./images/prototype_inside_annotations_small.jpg"
|
||||
title="Inside the beehive" alt="Inside the beehive" />
|
||||
<figcaption aria-hidden="true">Inside the beehive</figcaption>
|
||||
</figure>
|
||||
<h1 id="specifications">Specifications</h1>
|
||||
<h2 id="wind">Wind</h2>
|
||||
<ul>
|
||||
<li><p>Wind speed is measured by taking 3 second averages from the cup
|
||||
anemometer and using these samples to calculate the average over a 10
|
||||
minute periode.</p></li>
|
||||
<li><p>Wind gust is measured by taking 3 second averages from the cup
|
||||
anemometer.</p></li>
|
||||
<li><p>Wind vane has 8 main directions and another 8 directions in
|
||||
between. But these last do not have the same weight, eg. these positions
|
||||
are not as likely to be measured as the main directions. This is due to
|
||||
the construction of the wind vane: it has eight reed switches for the
|
||||
main directions and if the wind direction happens to sit exactly in
|
||||
between two reed switches, both switches are closed giving the extra 8
|
||||
sub directions. Not great, but it is what it is…</p></li>
|
||||
</ul>
|
||||
<h2 id="rain">Rain</h2>
|
||||
<pre><code>Resolution: 0.2794 mm/impulse</code></pre>
|
||||
<h2 id="humidity-2">Humidity</h2>
|
||||
<pre><code>Operating range : 0 - 100 % RH
|
||||
Recommended range : 20 - 80 % RH
|
||||
Accuracy : +/- 3 % RH (0-80 % RH)
|
||||
+/- 4.5 % (max when > 80 % RH)
|
||||
|
||||
Heater to drive of moisture (can be enabled via ModBus)</code></pre>
|
||||
<h2 id="pressure">Pressure</h2>
|
||||
<pre><code>Operating range : 300 - 1100 hPa
|
||||
Accuracy : +/- 1.0 hPa (0 - 65 °C)
|
||||
+/- 1.7 hPa (-20 - 0 °C)</code></pre>
|
||||
<h2 id="temperature-2">Temperature</h2>
|
||||
<pre><code>Main sensor
|
||||
-----------
|
||||
|
||||
Operating range : -10 - 85 °C (typ)
|
||||
-40 - 85 °C (max)
|
||||
Accuracy : +/- 0.3 °C (typ)
|
||||
+/- 0.4 °C (max)
|
||||
+/- 0.5 °C (max when < -10°C)
|
||||
|
||||
Backup sensor
|
||||
-------------
|
||||
|
||||
Operating range : 0 - 65 °C (typ)
|
||||
-40 - 85 °C (max)
|
||||
Accuracy : +/- 0.5 °C (25 °C)
|
||||
+/- 1.0 °C (0 - 65 °C)</code></pre>
|
||||
<h2 id="modbus-1">ModBus</h2>
|
||||
<pre><code>Physical : RS-485 simplex RTU
|
||||
Settings : 9600 bd 8N1
|
||||
Address : 14</code></pre>
|
||||
<h1 id="schematic">Schematic</h1>
|
||||
<p><a href="./images/weather_station_schematic.pdf"><img
|
||||
src="./images/weather_station_schematic.svg" alt="Schematic" /></a></p>
|
||||
@@ -789,6 +886,8 @@ src="./images/weather_station_schematic.svg" alt="Schematic" /></a></p>
|
||||
<p>Libraries are included with the source code of this project</p>
|
||||
<h1 id="license">License</h1>
|
||||
<p>Copyright (C) 2023, 2024 M.T. Konstapel</p>
|
||||
<p><a
|
||||
href="https://meezenest.nl/mees/">https://meezenest.nl/mees/</a></p>
|
||||
<p>The software is published as open-source software (GPL). The hardware
|
||||
is published as open-source hardware (OSH).</p>
|
||||
<h2 id="software">Software</h2>
|
||||
@@ -804,7 +903,7 @@ option) any later version.</p>
|
||||
</main>
|
||||
<footer>
|
||||
<p>©
|
||||
2024-01-15
|
||||
2024-01-22
|
||||
M.T. Konstapel
|
||||
<a href="https://meezenest.nl/mees/">https://meezenest.nl/mees/</a>
|
||||
</p><p>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.
|
||||
|
Reference in New Issue
Block a user