Единицы измерения и перевод

Урок про дисциплину единиц: половина ошибок измерений — это перепутанные кПа и Па, °C и K, мВ и В.

Размерность — это «тип» величины (длина, давление, температура); единица — конкретный масштаб внутри размерности (м, кПа, °C).

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

SI-приставки и перевод

Приставки — это просто степени десяти. Перевод сводится к умножению на коэффициент:

$$ x_{[\text{целевая}]} = x_{[\text{исходная}]} \cdot k $$

# Перевод давления между единицами
factors = {
    "Pa":   1.0,
    "kPa":  1000.0,
    "bar":  100000.0,
    "psi":  6894.76,
}

def convert(value, src, dst):
    pa = value * factors[src]      # в паскали
    return pa / factors[dst]       # в целевые

print(convert(1, "bar", "kPa"), "кПа")
print(round(convert(100, "kPa", "psi"), 3), "psi")

Вывод:

100.0 кПа
14.504 psi

Температурные шкалы

Температура коварна тем, что у шкал разный нуль. Цельсий и Кельвин отличаются сдвигом, Фаренгейт — и сдвигом, и масштабом:

$$ K = °C + 273{,}15, \qquad °F = °C \cdot \tfrac{9}{5} + 32 $$

def c_to_k(c): return c + 273.15
def c_to_f(c): return c * 9/5 + 32

for c in (0, 25, 100):
    print(c, "°C =", round(c_to_k(c), 2), "K =", round(c_to_f(c), 1), "°F")

Вывод:

0 °C = 273.15 K = 32.0 °F
25 °C = 298.15 K = 77.0 °F
100 °C = 373.15 K = 212.0 °F

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

Хороший приём — хранить все внутренние величины в одной системе (СИ) и переводить только на входе и выходе. Тогда вся математика идёт в паскалях, кельвинах и вольтах, а пользователю показывают удобные единицы лишь в самом конце. Контроль размерностей — мощный способ ловить ошибки: если в формуле слева метры, а справа метры на секунду, значит где-то опечатка. Профессиональные системы хранят величину вместе с единицей, чтобы перевод и проверка были автоматическими.

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

  • Путать сдвиг и масштаб у температур: Кельвин — только сдвиг, Фаренгейт — и то и другое.
  • Смешивать единицы внутри расчёта (часть в кПа, часть в Па).
  • Забывать, что приставки кратны 1000, а не 100 (кроме санти-/деци-).

Итог

  • Перевод единиц одной размерности — умножение на коэффициент.
  • Температурные шкалы различаются нулём и масштабом, будьте внимательны.
  • Считайте в СИ внутри, переводите только на границах системы.
Проверьте себя
1. Чем перевод Цельсий→Кельвин отличается от Цельсий→Фаренгейт?
AНичем
BКельвин — только сдвиг, Фаренгейт — сдвиг и масштаб
CКельвин — масштаб, Фаренгейт — сдвиг
DОба только масштаб
2. Какой приём снижает число ошибок с единицами в коде?
AСчитать всё в разных единицах
BХранить всё внутри в СИ, переводить только на границах
CИгнорировать единицы
DИспользовать только Фаренгейт