build-doc updated with prototype

This commit is contained in:
marcel
2024-01-22 15:01:02 +01:00
parent e1331d6266
commit d71e334bd8
17 changed files with 720 additions and 1913 deletions

View File

@@ -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 stations 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 stations 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 &gt; 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 &lt; -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>&copy;
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>.