Метеостанция: от давления к погоде

Урок-практикум: из показаний датчиков давления, температуры и влажности делаем осмысленные погодные величины.

Метеостанция — связка датчиков (давление, температура, влажность), показания которых пересчитываются в производные величины: давление на уровне моря и точку росы.

Сырое давление зависит от высоты, поэтому метеосводки приводят его к уровню моря. А по температуре и влажности считают точку росы — температуру, при которой выпадет конденсат. Соберём оба расчёта.

Приведение давления к уровню моря

Барометрическая формула связывает измеренное давление $p$ на высоте $h$ с приведённым к морю:

$$ p_0 = p \left(1 - \frac{0{,}0065\,h}{T + 0{,}0065\,h + 273{,}15}\right)^{-5{,}257} $$

где $T$ — температура в °C, $h$ — высота в метрах.

def sea_level_pressure(p, h, T=15):
    return round(p * (1 - 0.0065*h / (T + 273.15 + 0.0065*h)) ** -5.257, 2)

# на высоте 500 м прибор показал 950 гПа
print(sea_level_pressure(950, 500), "гПа")

Вывод:

1007.7 гПа

Точка росы (формула Магнуса)

Точка росы $T_d$ из температуры $T$ и относительной влажности $RH$:

$$ \gamma = \frac{a\,T}{b + T} + \ln\frac{RH}{100}, \qquad T_d = \frac{b\,\gamma}{a - \gamma} $$

с константами $a = 17{,}27$, $b = 237{,}7\,°C$.

import math

def dew_point(T, RH):
    a, b = 17.27, 237.7
    gamma = (a*T) / (b + T) + math.log(RH / 100)
    return round((b*gamma) / (a - gamma), 2)

print("25°C, 60% -> точка росы", dew_point(25, 60), "°C")
print("25°C, 90% -> точка росы", dew_point(25, 90), "°C")

Вывод:

25°C, 60% -> точка росы 16.68 °C
25°C, 90% -> точка росы 23.24 °C

Как работает под капотом

Заметьте: ни одна из этих величин не измеряется напрямую — обе вычисляются из нескольких сырых показаний. Это типично для прикладной сенсорики: датчики дают первичные величины, а полезный результат — производный. Перед расчётами показания стоит профильтровать (раздел 5): давление и влажность шумят, и точка росы, считаемая через логарифм, чувствительна к шуму влажности. На реальной станции цепочка такая: сырой код АЦП → калибровка → фильтр → производная величина → отображение.

Частые ошибки

  • Показывать сырое давление без приведения к уровню моря — его не сравнить со сводкой.
  • Подставлять влажность в процентах туда, где нужна доля (или наоборот).
  • Считать точку росы по нефильтрованной влажности — логарифм усилит шум.

Итог

  • Полезные погодные величины — производные от нескольких датчиков.
  • Давление приводят к уровню моря, точку росы считают по Магнусу.
  • Перед расчётом производных величин показания фильтруют.
Проверьте себя
1. Почему атмосферное давление приводят к уровню моря?
AЧтобы число было красивее
BЧтобы убрать зависимость от высоты и сравнивать со сводками
CЧтобы уменьшить шум
DТак требует датчик
2. Что показывает точка росы?
AСкорость ветра
BТемпературу, при которой влага начнёт конденсироваться
CДавление на уровне моря
DОсвещённость