о холоднокровности пчелы

Помню, в школе на уроках биологии рассказывали про теплокровных и холоднокровных животных; насекомых, а, значит, и пчелу относили к холоднокровным. Поэтому когда первый раз прочитал, что пчела - пойкилотермное животное, слегка насторожился. Оказалось - зря, это тоже, что холоднокровное, но “по-научному”, ещё встречается “эктотермное”. А теплокровные - гомойтермные или эндотермные; они способны сохранять постоянную температуру тела, независимо от температуры окружающей среды - это птицы и млекопитающие, остальные - холоднокровные. Итак, согласимся: пчела - пойкилотермное животное.

Однако, “всё не так однозначно”. Например голый землекоп - холоднокровное млекопитающее. А в мае 2015 года нашли “полностью теплокровную рыбу”. Оказалось, правда, на мой взгляд, не полностью - она способна держать температуру всего на 5°С выше окружающей. Выделяют отдельную группу гетеротермных животных, куда относят как некоторых холоднокровных, так и некоторых теплокровных - они могут менять интенсивность собственной теплопродукции. К ним относят насекомоядных грызунов, летучих мышей, медведей. Гетеротермия свойственна также ряду мелких птиц с быстрым обменом веществ, с её помощью переживающих ночное время, а также периоды бескормицы. Так, стрижи в дождливую погоду способны голодать до 4-х дней, при этом температура их тела падает до 20°C. Цепенеют на ночь и колибри, температура их тела снижается при этом до 20-17°C. Среди холоднокровных гетеротермия встречается у некоторых летающих насекомых, рыб, питонов. В определённом состоянии температура их тела может значительно превышать температуру среды (например, у насекомых во время полёта).

Ещё гомойтермию делят на истинную и инерциальную. При инерциальной - температура тела, нагретого за день на солнце, не успевает упасть за ночь за счёт большой массы и размеров. Этим характеризуются крупные крокодилы, черепахи, вараны, питоны, удавы.

Медоносная пчела в отличие от многих холоднокровных не впадает в спячку в зимнее время, способна поднять свою температуру не сходя с места, а в полёте она у неё может быть на 15°С выше окружающей, имеет волосяной покров, что характерно именно для теплокровных. Что-то не очень похоже на холоднокровность…

Знаменитый Bernd Heinrich в 1993 году даже издал книгу под названием “Теплокровные насекомые. Стратегии и механизмы терморегуляции” The Hot-Blooded Insects. Strategies and Mechanisms of Thermoregulation.

Профессор Т. Цесельский более века назад (книга 1913 года второе издание перевода с польского) тоже усомнился в верности отнесения пчелы к холоднокровным и решил измерить температуру внутри пчелы своими руками:

Мы этого делать (размозжать в ступке - “O tempora, o mores!”) не будем и ограничимся уже имеющимися опубликованными данными. И, да, признаем, что сомнения профессора в холоднокровности пчелы обоснованы.

В общем, дело в терминологии. По мере накопления новых фактов возникает определённая кластеризация, и для её описания вводят термины. Однако, как видим, имеет место нечёткая логика. Поэтому не будем обращать внимание на категории и имеющиеся классификации - “хоть горшком назови, только в печку не ставь!” - а просто рассмотрим, как меняется температура и теплопродукция пчелы в зависимости от внешних условий.

В процессе метаболизма в организме пчелы из пищи (мёд и перга) извлекается энергия. Она расходуется на обеспечение жизнедеятельности организма, выработку необходимых ферментов и пр. и механическую работу мышц - мышц сердца для прокачки гемолимфы, мышц ног для перемещения по твёрдой поверхности, мышц крыльев для совершения полёта, а также мышц брюшка, мышц головы и органов головы и др. Энергия химических связей преобразуется в механическую с определённым коэффициентом (КПД), оставшаяся часть переходит в тепловую форму, повышая температуру тела пчелы и рассеиваясь в пространство. Скорость метаболизма и соответствующая ей мощность при этом разная для разных процессов - в покое, в полёте, в улье, в клубе. Разным будет и тепловыделение, называемое обычно термогенезом.

В покое. Итерация 0.

В начале своего развития от яйца к личинке и куколке пчела находится в инкубационных условиях при стабильной температуре, поддерживаемой семьёй с высокой точностью в районе 35-36°С. Видимо, эта температура оптимальна и для взрослой пчелы. Пчела может нормально существовать (жить) в интервале температур окружающего воздуха от 14 до 39°С. За пределами этого интервала, она тоже может жить, но недолго. В этом случае она стремится покинуть неблагоприятную среду или, объединяясь с другими пчёлами, предпринимает меры к нагреванию или охлаждению среды и друг друга до приемлемой температуры - создаёт локальный микроклимат.

Для создания математической модели нужны данные. Их оказалось не так много. В покое температура тела пчелы выше температуры окружающего воздуха на 9°С при 10°С и на 1°С при 34°[1]. Т.е. при 10°С температура пчелы 19°С, а при 34°С - 35°С. Вот и все данные. А что между этими точками или за пределами этого интервала? Ничего не остается, как предположить, что между ними - прямая линия, по двум точкам больше ничего не построишь.

Еще данные (опять две точки): при 30°С пчелы активно двигаются, потребление кислорода при этом составляет 1,13-1,15 мл/пчелу в час, при 20 °С большинство из них неподвижны, но потребление кислорода составляет 2,25-2,45 мл/пчелу в час [2]. Если перевести объем кислорода в массу, то получим, соответственно, 1,65 мг/пчелу в час при 30°С и 3,3 мг/пчелу в час при 20°С. Известно, что кислород расходуется в количестве 0.86 кг на каждый килограмм мёда, или 1.16 мг меда сжигается на 1 мг кислорода. Отсюда можно посчитать, сколько меда сжигает пчела в час при разных температурах, а зная калорийность меда, определить какая при этом выделяется энергия. Получится на 1 мг кислорода в час пчела генерирует 4.2 мВт. Соответственно, при 30°С мощность термогенеза составит около 7 мВт, а при 20°С – 14 мВт. По этим двум точкам строим зависимость мощности термогенеза пчелы от температуры в покое.

Таким образом, у пчелы есть “автономный подогреватель” никак не связанный с движителем полёта. Он работает постоянно, т.к. является продуктом основного обмена веществ, уровень которого меняется в зависимости от температуры окружающей среды. Вот эти два графика – и есть математическая модель пчелы в покое. Всё! Теперь мы можем для любой температуры воздуха (из рабочего диапазона) определить температуру пчелы и генерируемую ей тепловую мощность.

В полёте

В статье [3] приведены экспериментальные данные с измерениями температуры головы, торакса и брюшка в полёте в зависимости от температуры воздуха:

Регрессии, соответственно, следующие:

\left\{\begin{aligned}T_{th} = 0,181T_a + 33,35 \\T_{hd} = 0,328T_a + 23,02 \\T_{ab} = 0,566T_a + 12,04\end{aligned}\right.\tag{2}
охлаждение испарением

Стоит обратить внимание на тот факт, что при температуре 28°С температура брюшка, а при температуре 35°С и температура головы ниже температуры воздуха. Этого пчела достигает за счёт испарения влаги при обдуве набегающим в полёте воздухом. Влагу она подаёт каплей в хоботок, а также открывая дыхальца, раздвигая тергиты. Человек и другие животные в жару тоже потеют чтобы не перегреться.

По этим экспериментальным данным построим тепловую математическую модель пчелы в полёте.

Представим пчелу в виде трех частей тела - головы (hd), торакса (th) и брюшка (ab), считая их цилиндрами диаметром 4 мм и высотой, соответственно, 1,5 мм, 4,5 мм и 6 мм. Они разделены/соединены небольшими зазорами и соединительными каналами. Площадь конвективного охлаждения (“обдува”) каждого цилиндра можно посчитать: головы - площадь переднего круга s_r плюс площадь боковой поверхности головы s_{hd} , торакса - площадь боковой поверхности торакса s_{th} , брюшка - площадь боковой поверхности брюшка s_{ab} плюс площадь заднего круга s_r . Источник тепла находится в тораксе. Одна часть тепла рассеивается с поверхности торакса в воздух, другая - передаётся голове, третья - брюшку. В свою очередь голова и брюшко также рассеивают тепло со своей поверхности в воздух. Кроме того, голова и брюшко имеют возможность охлаждаться испарением воды через дыхальца и хоботок. Помимо контактного теплообмена (теплопроводность и конвекция) необходимо учесть теплообмен излучением. Система уравнений теплового баланса, таким образом, будет иметь вид:

Тепловые сопротивления переходов торакс-голова “th-hd” и торакс-брюшко “th-ab” прямо пропорциональны средней величине зазора l и обратно пропорциональны площади контакта с некоторыми коэффициентами пропорциональности k_{hd} и k_{ab} . Мощность, отводимая испарением, будем считать, определяется температурой торакса, т.к. именно его температуру пчеле нужно регулировать, именно там основной источник нагрева, т.е. она прямо пропорциональна температуре торакса с коэффициентами пропорциональности k_{e\_hd} и k_{e\_ab}.

Любое тело, имеющее температуру выше абсолютного нуля, излучает энергию - светится. Энергетическая светимость (Вт/м²) определяется формулой:

При температуре 12°С (285К) для абсолютно чёрного тела (\epsilon = 1) она составляет 375 Вт/м², а при 39°С - 538 Вт/м². Если умножить на площадь поверхности пчелы (2 см²), то получится, соответственно, 75 и 108 мВт. Однако пчела не абсолютно чёрное тело и не может излучать больше мощности метаболизма, коэффициент 0 < \epsilon < 1 определяет реальный уровень излучения. Кроме того, пчёлы находятся в окружении других предметов, они также имеют температуру выше абсолютного нуля и излучают. Пчела поглощает это излучение с таким же коэффициентом \epsilon . Поэтому тепловое излучение обычно считают, как разность отдаваемой и поглощаемой мощности:

Как видно из этой формулы, при равенстве температур тела и среды теплообмена нет. Если температура тела выше температуры среды, то оно отдаёт тепло, если ниже - поглощает. Мощности теплового обмена излучением для принятой модели пчелы можно определить как:

Будем считать, что солнечный свет падает перпендикулярно продольной оси пчелы, тогда для принятых в модели размеров s_{n\_th} = 4,5\times4=18~мм², s_{n\_hd} = 1,5\times4=6~мм², s_{n\_ab}=6\times4=24~мм². Коэффициент поглощения полагаем одинаковым для торакса, головы и брюшка.

Значение коэффициента \epsilon для пчелы неизвестно. Ранее я упомянул, что температура пчелы на солнце на 4°С выше, чем в тени. Увеличение температуры на \Delta t=4°C вызовет увеличение конвекционных потерь, которые уравновесят тепло, полученное от прямых солнечных лучей:

Из (7) находим \epsilon \approx 0,22. Это существенно ниже, чем обычно принято считать.

Таким образом, задача создания модели, повторяющей данные экспериментов (уравнения (2)) сводится к подбору коэффициентов в системе уравнений(3). Их значения зависят от температуры воздуха. Для того, чтобы уменьшить размерность задачи начинаем с самой низкой температуры, при которой пчёлы начинают летать: 12°С. Полагаем, что при столь низкой температуре пчеле нет необходимости пользоваться механизмом испарения - она вряд ли будет потеть, поэтому можно коэффициенты k_{e\_hd} и k_{e\_ab} положить равными нулю. Также для начала положим, что прямого солнечного излучения на пчелу не падает - пасмурная погода, и I =0. Из этих условий подбираем в (3) коэффициенты k_{hd} и k_{ab} должны быть равны 0,065 и 0,042 - сопротивление к голове получилось больше, значит тепла туда передается меньше, чем брюшку. При этом средний зазор должен быть 0,68 мм. Точно так же (но уже учитывая возможность испарения и зафиксировав k_{hd} и k_{ab}) подбираем коэффициенты для других значений температуры воздуха: 15, 20, 25, 30 и 35°С. В итоге по этим точкам находим зависимости от температуры воздуха:

Подставляя полученные значения в модель теплового баланса, находим зависимости температуры торакса, головы и брюшка от температуры воздуха в модели и сравниваем с экспериментальными данными:

Как видим, совпадение неплохое. Напомню, эксперименты проводились в лабораторных условиях для трепещущего (машущего) полёта. Однако, для горизонтального свободного полёта требуемая мощность движителя примерно в два раза меньше, соответственно меньше будет и тепловая мощность. Посмотрим, что получится, если мощность термогенеза просто уменьшить вдвое:

Пчела так не полетит - при температуре воздуха до 19°С торакс не прогревается до минимально необходимых 27°С, т.е. термогенеза недостаточно. Вспоминаем, что у пчелы же есть “автономный подогреватель”, который мы обнаружили при рассмотрении термогенеза “в покое”! Давайте посмотрим, что будет, если добавить термогенеза мощностью 29,133 - 0,739×T мВт (формула на графике мощности от температуры):

Да, видимо из-за охлаждения в горизонтальном полете пчела действительно догревает себя, как и в покое, тогда как при “висячем” полете мощность метаболизма и так близка к максимальной. Полученный результат заслуживает внимания: пчела способна стабилизировать температуру торакса в полёте во всём рабочем диапазоне: при изменении температуры воздуха от 12 до 39°С температура торакса (красные точки) меняется чуть больше, чем на 1 градус. В полёте пчела - теплокровное животное! При этом, начиная примерно с 34°С, температура торакса ниже температуры воздуха, брюшка - с 24°С, головы - с 29°С.

эксперимент с реальными пчелами-фуражирами

Справедливости ради стоит отметить, что \epsilon \approx 0,22 - это приблизительная оценка для частного случая, и для разных пород и климатических условий коэффициент излучения может меняться в широких пределах, например, для темной пчелы он может быть, например, 0.9. Есть данные экспериментов 1985 года, проведенных в пустыне Сонора на реальных пчелах-фуражирах [4]:

На рисунке показаны зависимости температуры торакса, головы и брюшка от температуры воздуха; сплошные линии - при полете “туда”, точечные - “обратно”. Видно, что температура торакса при полете “туда” поддерживается около 39-40°С, что возможно, например, при максимальной освещенности 1400 Вт/м² и \epsilon \approx 0,5 или при освещенности 1200 Вт/м² и \epsilon \approx 0,9. Также на рисунке видно, что термостабилизация (теплокоровность) характерна лишь для полета “туда”, и пчела не заботится о ней при полете “оттуда”, пока температура торакса не опустится ниже 35°С.

Таким образом, можно считать математическую модель термогенеза пчелы в полете построенной. Что на ней можно посмотреть?

Эксперименты на модели “в полете”

Посмотрим на модели как распределяется рассеиваемая мощность по частям тела пчелы:

Из рисунка видно, что до 22°С основным “радиатором охлаждения” является торакс, но с ростом температуры воздуха величина рассеиваемой мощности снижается практически линейно от 26 мВт до нуля к 34°С, а затем становится отрицательной - т.е. нагревается воздухом. Тепло, отдаваемое брюшком остаётся практически постоянным в районе 12-14 мВт, головой - практически линейно растёт от 9 до 19 мВт. Общая рассеиваемая тепловая мощность снижается от 46 мВт при 12°С до 27 мВт при 39°С.

А вот как пчела излучает:

Видно, что вклад излучения пчелы в общий тепловой баланс незначительный, но до 29°С пчела излучением теряет, а после - поглощает тепло.

Посмотрим как распределяется охлаждение на конвекцию, испарение и излучение:

Как и ожидалось, с ростом температуры (после 18°С) основную роль в охлаждении играет испарение. Обдув после 24°С для брюшка и 29°С - для головы уже не охлаждает, а нагревает.

Рассмотрим теперь солнечный день (положим I = 700 Вт/м²).

Видим, что температура торакса также стабильна, поднялась примерно на 2°С и составила 35-36°С, что, видимо, является наиболее типичным (пчёлы чаще всего работают в солнечную погоду) и комфортным для пчелы состоянием. Уровень теплообмена, несмотря на повышение температуры тела, остался примерно таким же, что и в пасмурную погоду:

Это довольно неожиданно, но всё становится понятным, если посмотреть составляющие теплообмена:

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

Излучение отрицательное:

Это означает, что пчела в полёте подпитывается от солнца с мощностью от 4,5 до 9 мВт.

Можно, наверное, провести и другие модельные эксперименты.

Но давайте вернёмся на шаг назад. А работает ли предложенная модель для пчелы в состоянии покоя? Там мы представляли пчелу как единое тело. Что если и здесь рассмотреть усложнённую модель из торакса, головы и брюшка?

В покое. Итерация 1.

Положим в системе (3) P =29,133-0,739\times T , мВт, что соответствует состоянию “в покое”.

Видно, что модель не подошла - на “одноэлементной” модели температура росла (по формуле (1)), а тут - падает. Но падает-то она от охлаждения испарением, а без полёта оно не эффективно - нет потока воздуха, “отрывающего” молекулы воды. Положим k_{e\_hd} и k_{e\_ab} равными нулю и вместо экспериментальных прямых нарисуем исходный график по формуле (1):

Действительно, при нулевом испарении наклон средней температуры в точности соответствует исходному по формуле (1) и испарению нужно снять всего 1°С, значит оно имеет постоянное значение и не зависит от температуры воздуха. Если задать k_{e\_hd} и k_{e\_ab} равными 0,03 мВт/°С, то получим

хорошее совпадение с исходными данными. Принципиально можно констатировать, что разработанная модель теплового баланса пчелы в полёте оказалась пригодна и для моделирования температуры пчелы “в покое”.

Эксперименты на модели “в покое”

Общий теплообмен:

Видим, что в покое торакс также является основным радиатором, но выше 23°С больше отводит брюшко, а выше 31°С - и голова; после 36°С больше всего рассеивает голова. Замечаем также, что после 37°С торакс нагревается от воздуха. Общий уровень теплообмена примерно на 20 мВт меньше, чем в полете во всем рабочем диапазоне температур.

Излучение:

В покое в тени пчела отдаёт тепло излучением до температуры воздуха 36,5°С, а выше - получает; его уровень не превышает 10% от общего теплообмена.

Посмотрим, что в солнечную погоду.

Температура:

Видим, что, действительно, температура на 4°С выше, чем в тени.

Теплообмен:

Как и в полёте, солнце практически не меняет скорость метаболизма.

Излучение:

В покое, также как и в полёте, пчела с удовольствием подпитывается теплом от солнца с мощностью от 4,8 до 6,8 мВт.

Результаты экспериментов выглядят вполне адекватными.

Python-скрипт модели термогенеза
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve

# Параметры
m_th, m_hd, m_ab = 32.5e-6, 10.25e-6, 57.0e-6   # масса торакса, головы и брюшка, кг
m = m_th + m_hd + m_ab                          # масса пчелы
sigma = 5.67e-8                                 # постоянная Стефана-Больцмана, Вт/(м²K^4)
t0 = -273.15                                    # температура абсолютного нуля, °С
l_th, l_hd, l_ab = 4.5e-3, 1.5e-3, 6e-3         # длина торакса, головы, брюшка, м

k_hd = 0.065                                    # Вт/(м°С)
k_ab = 0.042                                    # Вт/(м°С)
ke0 = 3e-5                                      # коэффициент испарения в покое, Вт/°C
efficiency = 0.044                              # КПД
r = 2e-3                                        # радиус цилиндра тела пчелы, м
sr = np.pi * r ** 2                             # площадь торца цилиндра
lr = 2 * np.pi * r                              # длина окружности цилиндра
s_th, s_hd, s_ab = l_th * lr, sr + l_hd * lr, sr + l_ab * lr    # площади обдува торакса, головы и брюшка

sun = True                                      # солнечно
# sun = False                                   # пасмурно
eps_th, eps_hd, eps_ab = 0.22, 0.22, 0.22       # коэффициент поглощения излучения
#eps_th, eps_hd, eps_ab = 0.5, 0.5, 0.5
Isolar = 700

flight = True                                   # в полете
# flight = False                                # в покое
if flight:
    h_fl = 20.8                                 # конвекция в полете, Вт/(м²·°C)
else:
    h_fl = 11                                   # конвекция в покое, Вт/(м²·°C)
# тепловые сопротивления
r_th_air = 1 / (h_fl * s_th)
r_hd_air = 1 / (h_fl * s_hd)
r_ab_air = 1 / (h_fl * s_ab)


def model(t_air):
    """ Температура торакса, головы и брюшка в зависимости от температуры окружающего воздуха """
    if flight:
        p_fl = 0.055 * (1. - efficiency) / 2 + (29.133 - 0.739 * t_air) * 1e-3  # тепловая мощность, Вт
        k_evap_hd = (0.0261 * t_air - 0.3116) * 1e-3    # коэффициенты испарения, Вт/°С
        k_evap_ab = (0.0326 * t_air - 0.3833) * 1e-3
    else:
        p_fl = (29.133 - 0.739 * t_air) * 1e-3
        k_evap_hd = ke0
        k_evap_ab = ke0
    l = 1.3493 * np.exp(-0.058 * t_air) * 1e-3  # средний зазор
    r_th_hd = l / (k_hd * sr)   # тепловое сопротивление между тораксом и головой
    r_th_ab = l / (k_ab * sr)   # тепловое сопротивление между тораксом и брюшком

    def equations(vars):
        t_th, t_hd, t_ab = vars         # искомые температуры торакса, головы и брюшка
        q_evap_hd = k_evap_hd * t_th    # мощность испарения с головы
        q_evap_ab = k_evap_ab * t_th    # мощность испарения с брюшка
        # мощности излучения
        if sun:
            p_s_th = eps_th * (Isolar * l_th * 2 * r - sigma * ((t_th - t0) ** 4 - (t_air - t0) ** 4) * s_th)
            p_s_hd = eps_hd * (Isolar * l_hd * 2 * r - sigma * ((t_hd - t0) ** 4 - (t_air - t0) ** 4) * s_hd)
            p_s_ab = eps_ab * (Isolar * l_ab * 2 * r - sigma * ((t_ab - t0) ** 4 - (t_air - t0) ** 4) * s_ab)
        else:
            p_s_th = - eps_th * sigma * ((t_th - t0) ** 4 - (t_air - t0) ** 4) * s_th
            p_s_hd = - eps_hd * sigma * ((t_hd - t0) ** 4 - (t_air - t0) ** 4) * s_hd
            p_s_ab = - eps_ab * sigma * ((t_ab - t0) ** 4 - (t_air - t0) ** 4) * s_ab
        # балансы мощностей
        eq1 = p_fl + p_s_th - (t_th - t_hd) / r_th_hd - (t_th - t_ab) / r_th_ab - (t_th - t_air) / r_th_air
        eq2 = p_s_hd + (t_th - t_hd) / r_th_hd - (t_hd - t_air) / r_hd_air - q_evap_hd
        eq3 = p_s_ab + (t_th - t_ab) / r_th_ab - (t_ab - t_air) / r_ab_air - q_evap_ab
        return [eq1, eq2, eq3]

    # Начальное приближение (экспериментальные регрессии)
    t_init = [0.181 * t_air + 33.35, 0.328 * t_air + 23.02, 0.566 * t_air + 12.04]
    solution = fsolve(equations, t_init)
    return solution


t_air_range = np.arange(12, 40, 1)  # задаем диапазон температур моделирования
results = []
# основной цикл моделирования
for t_a in t_air_range:
    t_th, t_hd, t_ab = model(t_a)
    t_mo = (t_th * m_th + t_hd * m_hd + t_ab * m_ab) / m
    if flight:
        k_evap_hd = (0.0261 * t_a - 0.3116) * 1e-3
        k_evap_ab = (0.0326 * t_a - 0.3833) * 1e-3
    else:
        k_evap_hd = ke0
        k_evap_ab = ke0
    if sun:
        p_s_th = eps_th * (Isolar * l_th * 2 * r - sigma * ((t_th - t0) ** 4 - (t_a - t0) ** 4) * s_th)
        p_s_hd = eps_hd * (Isolar * l_hd * 2 * r - sigma * ((t_hd - t0) ** 4 - (t_a - t0) ** 4) * s_hd)
        p_s_ab = eps_ab * (Isolar * l_ab * 2 * r - sigma * ((t_ab - t0) ** 4 - (t_a - t0) ** 4) * s_ab)
    else:
        p_s_th = - eps_th * sigma * ((t_th - t0) ** 4 - (t_a - t0) ** 4) * s_th
        p_s_hd = - eps_hd * sigma * ((t_hd - t0) ** 4 - (t_a - t0) ** 4) * s_hd
        p_s_ab = - eps_ab * sigma * ((t_ab - t0) ** 4 - (t_a - t0) ** 4) * s_ab
    q_evap_hd = k_evap_hd * t_th * 1e3
    q_evap_ab = k_evap_ab * t_th * 1e3
    p_th = (t_th - t_a) / r_th_air * 1e3
    p_hd = (t_hd - t_a) / r_hd_air * 1e3
    p_ab = (t_ab - t_a) / r_ab_air * 1e3
    pr_th = p_s_th * 1e3
    pr_hd = p_s_hd * 1e3
    pr_ab = p_s_ab * 1e3
    results.append({
        "t_air": t_a,
        "t_th_mo": t_th,
        "t_th_ex": 0.181 * t_a + 33.35,
        "t_hd_mo": t_hd,
        "t_hd_ex": 0.328 * t_a + 23.02,
        "t_ab_mo": t_ab,
        "t_ab_ex": 0.566 * t_a + 12.04,
        "t_t": 0.6667 * t_a + 12.333,
        "p_th": p_th,
        "p_hd": p_hd,
        'p_ab': p_ab,
        "p_sum": p_th + p_hd + p_ab,
        "q_e_hd": q_evap_hd,
        "q_e_ab": q_evap_ab,
        "q_e_sum": q_evap_hd + q_evap_ab,
        "pr_th": - pr_th,
        "pr_hd": - pr_hd,
        "pr_ab": - pr_ab,
        "pr_sum": - pr_th - pr_hd - pr_ab,
        "t_mo": t_mo,
        "t_ex": ((0.181 * t_a + 33.35) * m_th + (0.328 * t_a + 23.02) * m_hd + (0.566 * t_a + 12.04) * m_ab) / m
    })


# Графики
def draw1(string):
    plt.figure(figsize=(8, 4))
    plt.plot(t_air_range, [res["t_th_mo"] for res in results], 'r.', label='Торакс (модель)')
    plt.plot(t_air_range, [res["t_th_ex"] for res in results], 'r-', linewidth=0.5, label='Торакс (эксп.)')
    plt.plot(t_air_range, [res["t_hd_mo"] for res in results], 'b.', label='Голова (модель)')
    plt.plot(t_air_range, [res["t_hd_ex"] for res in results], 'b-', linewidth=0.5, label='Голова (эксп.)')
    plt.plot(t_air_range, [res["t_ab_mo"] for res in results], 'g.', label='Брюшко (модель)')
    plt.plot(t_air_range, [res["t_ab_ex"] for res in results], 'g-', linewidth=0.5, label='Брюшко (эксп.)')
    plt.xlabel('Температура воздуха (°C)')
    plt.ylabel('Температура тела (°C)')
    plt.title('Сравнение модели с экспериментальными данными' + string)
    plt.legend()
    plt.grid()
    plt.minorticks_on(), plt.grid(which='minor', linestyle=':'), plt.tight_layout()
    plt.show()


def draw_model_only(string):
    plt.figure(figsize=(8, 4))
    plt.plot(t_air_range, [res["t_th_mo"] for res in results], 'r.', label='Торакс')
    plt.plot(t_air_range, [res["t_hd_mo"] for res in results], 'b.', label='Голова')
    plt.plot(t_air_range, [res["t_ab_mo"] for res in results], 'g.', label='Брюшко')
    plt.xlabel('Температура воздуха (°C)')
    plt.ylabel('Температура тела (°C)')
    plt.title('Модельные данные при ' + string + 'Вт/м²')
    plt.legend()
    plt.grid()
    plt.minorticks_on(), plt.grid(which='minor', linestyle=':'), plt.tight_layout()
    plt.show()


def draw2(string):
    plt.figure(figsize=(8, 4))
    plt.plot(t_air_range, [res["t_th_mo"] for res in results], 'r.', label='Торакс (модель)')
    plt.plot(t_air_range, [res["t_hd_mo"] for res in results], 'b.', label='Голова (модель)')
    plt.plot(t_air_range, [res["t_ab_mo"] for res in results], 'g.', label='Брюшко (модель)')
    plt.plot(t_air_range, [res["t_mo"] for res in results], 'b-', label='Средняя (весовое суммирование)')
    plt.plot(t_air_range, [res["t_t"] for res in results], 'bx', label='Исходная - по формуле (1)')
    # plt.plot(t_air_range, [res["t_ex"] for res in results], 'b-.', label='Средняя (эксперимент)')
    plt.xlabel('Температура воздуха (°C)')
    plt.ylabel('Температура тела (°C)')
    plt.title('Сравнение модели с исходными данными' + string)
    plt.legend()
    plt.grid()
    plt.minorticks_on(), plt.grid(which='minor', linestyle=':'), plt.tight_layout()
    plt.show()


def draw3(string):
    plt.figure(figsize=(8, 4))
    plt.plot(t_air_range, [res["p_th"] + res["pr_th"] for res in results], 'r.', label='Торакс')
    plt.plot(t_air_range, [res["p_hd"] + res["pr_hd"] + res["q_e_hd"] for res in results], 'b.', label='Голова')
    plt.plot(t_air_range, [res["p_ab"] + res["pr_ab"] + res["q_e_ab"] for res in results], 'g.', label='Брюшко')
    plt.plot(t_air_range, [res["p_sum"] + res["pr_sum"] + res["q_e_sum"] for res in results], 'b-', label='Сумма')
    plt.xlabel('Температура воздуха (°C)')
    plt.ylabel('Мощность (мВт)')
    plt.title('Теплообмен' + string)
    plt.legend()
    plt.grid()
    plt.minorticks_on(), plt.grid(which='minor', linestyle=':'), plt.tight_layout()
    plt.show()


def draw4(string):
    fig, ax = plt.subplots(1, 3, figsize=(10, 5))
    fig.suptitle('Теплообмен конвекцией, испарением и излучением' + string)
    ax[0].set_title('Торакс')
    ax[0].grid()
    ax[0].plot(t_air_range, [res["p_th"] for res in results], 'r-')
    ax[0].plot(t_air_range, [res["pr_th"] for res in results], 'r.')
    ax[0].set_ylim(-20, 35)
    ax[0].set_xlabel('Температура воздуха (°C)')
    ax[0].set_ylabel('Мощность (мВт)')
    ax[1].set_title('Голова')
    ax[1].grid()
    ax[1].plot(t_air_range, [res["p_hd"] for res in results], 'b-')
    ax[1].plot(t_air_range, [res["pr_hd"] for res in results], 'b.')
    ax[1].plot(t_air_range, [res["q_e_hd"] for res in results], 'b--')
    ax[1].set_ylim(-20, 35)
    ax[1].set_xlabel('Температура воздуха (°C)')
    ax[2].set_title('Брюшко')
    ax[2].grid()
    ax[2].plot(t_air_range, [res["p_ab"] for res in results], 'g-', label='Конвекция')
    ax[2].plot(t_air_range, [res["pr_ab"] for res in results], 'g.', label='Излучение')
    ax[2].plot(t_air_range, [res["q_e_ab"] for res in results], 'g--', label='Испарение')
    ax[2].set_ylim(-20, 35)
    ax[2].set_xlabel('Температура воздуха (°C)')
    ax[2].legend()
    plt.show()


def draw_r(string, epsilon):
    plt.figure(figsize=(8, 4))
    plt.plot(t_air_range, [res["pr_th"] for res in results], 'r.', label='Торакс')
    plt.plot(t_air_range, [res["pr_hd"] for res in results], 'b.', label='Голова')
    plt.plot(t_air_range, [res["pr_ab"] for res in results], 'g.', label='Брюшко')
    plt.plot(t_air_range, [res["pr_sum"] for res in results], 'b-', label='Сумма')
    plt.xlabel('Температура воздуха (°C)')
    plt.ylabel('Мощность (мВт)')
    plt.title('Излучение' + string + ' (' + '$\epsilon =$' + str(epsilon) + ')')
    plt.legend()
    plt.grid()
    plt.minorticks_on(), plt.grid(which='minor', linestyle=':'), plt.tight_layout()
    plt.show()


if flight:
    st = ' в полёте'
    if sun:
        st += ', солнечно'
    else:
        st += ', пасмурно'
    draw1(st)
    draw4(st)
    st = 'I = ' + str(Isolar)
    draw_model_only(st)
else:
    st = ' в покое'
    if sun:
        st += ', солнечно'
    else:
        st += ', пасмурно'
    draw2(st)
draw3(st)
draw_r(st, epsilon=eps_th)

Режим печки

Пчеле для полёта необходима температура торакса не ниже 27°C. Однако, если мы посмотрим на график температуры пчелы в покое, то увидим, что это условие обеспечивается только при температуре воздуха выше 17°C в пасмурную погоду, а на солнце - выше 10°С. Но первые очистительные облёты пчёлы делают и в пасмурную погоду уже при температуре 10-12°C. Для того, чтобы взлететь пчела разогревает торакс до рабочей температуры путем изометрического сокращения летательных мышц. При этом махания крыльями не происходит. Такой режим можно назвать режимом печки. Это уже не стационарный (установившийся) режим - при разогреве температура изменяется во времени, поэтому уравнения теплового баланса будут выглядеть следующим образом:

де С_ - теплоёмкости соответствующих частей тела пчелы, а остальные обозначения те же, что и в системе (3). По ней же и вычисляются начальные условия - исходные температуры торакса, головы и брюшка при заданной температуре воздуха. Зададим температуру 12°C. Тогда исходные температуры будут, соответственно, торакса 25.47°C, головы 21.76°C, брюшка 17.28°C. Напомню, при этом P =29,133-0,739\times T_{air} , мВт - это зависящая от температуры воздуха мощность основного обмена - обычного метаболизма (автономного подогревателя). Если теперь добавить к этой мощности 45 мВт (мощность, близкая к максимальной для летательных мышц) , то переходной процесс будет выглядеть следующим образом:

За две минуты температура торакса поднялась от 26 до 30°С, т.е. на 2°С в минуту, что соответствует известным экспериментальным данным.

Таким образом, в режиме печки пчела включает мощность близкую к максимальной - около 45 мВт. Этот же режим печки пчела включает, например, для обогрева расплода, или во время зимовки, когда надо поддержать температуру - мы к нему ещё вернёмся в следующей статье, которая будет о тепловом взаимодействии ячеек в пчелином соте. До ее публикации основные идеи можно посмотреть в моем блоге по пчеломоделированию.

Python-скрипт режима печки
import numpy as np
import matplotlib.pyplot as plt
import math
from scipy.optimize import fsolve

# Параметры (как ранее)
d_bee = 0.004
a = math.pi * (d_bee / 2) ** 2
h_head, h_thorax, h_ab = 0.0015, 0.0045, 0.006
A_head = math.pi * d_bee * h_head + a
A_thorax = math.pi * d_bee * h_thorax
A_ab = math.pi * d_bee * h_ab + a
k_hd, k_ab = 0.065, 0.042
L_wall = 0.0001
d_cell = 0.0052
A_wall = math.pi * d_cell * (h_head + h_thorax + h_ab)
sigma = 5.67e-8
t0 = -273.1
eps = 0.22

# Теплоемкости
m_head, m_thorax, m_ab = 10.25e-6, 32.5e-6, 57e-6
c = 3500
C_head, C_thorax, C_ab = m_head * c, m_thorax * c, m_ab * c
ρ_wax, c_wax = 960, 2000
V_wall = A_wall * L_wall * 0.3  # Активный слой
C_wall = ρ_wax * V_wall * c_wax  # ≈ 0.015 Дж/°C

# Внутренние сопротивления тела
T_air = 12.
l = (1.3493 * np.exp(-0.058 * T_air)) * 1e-3  # средний зазор от торакса до головы и брюшка
ke0 = 3e-5  # Вт/°C коэффициент испарения в покое
R_th_hd = l / (k_hd * a)
R_th_ab = l / (k_ab * a)
# Параметры для открытого пространства
h_open = 11  # Коэффициент конвекции [Вт/(м²·°C)]
R_head_air_open = 1 / (h_open * A_head)
R_thorax_air_open = 1 / (h_open * A_thorax)
R_ab_air_open = 1 / (h_open * A_ab)


# Функция термогенеза
def metabolic_power(T_air):
    power = (29.133 - 0.739 * T_air) * 1e-3
    return max(power, 0)


def calculate_initial_temperatures(T_air):
    """ Вычисление равновесных температур тела пчелы на открытом воздухе """
    l = (1.3493 * np.exp(-0.058 * T_air)) * 1e-3  # средний зазор от торакса до головы и брюшка
    R_th_hd = l / (k_hd * a)
    R_th_ab = l / (k_ab * a)
    # print(R_th_hd, R_th_ab)

    def equations(vars):
        Thd, Tth, Tab = vars
        q_evap_hd = ke0 * Tth
        q_evap_ab = ke0 * Tth
        P_rest = metabolic_power(T_air)  # Стартовое тепловыделение
        p_s_th = - eps * sigma * ((Tth - t0) ** 4 - (T_air - t0) ** 4) * A_thorax
        p_s_hd = - eps * sigma * ((Thd - t0) ** 4 - (T_air - t0) ** 4) * A_head
        p_s_ab = - eps * sigma * ((Tab - t0) ** 4 - (T_air - t0) ** 4) * A_ab

        eq1 = p_s_hd + (Tth - Thd) / R_th_hd - (Thd - T_air) / R_head_air_open - q_evap_hd
        eq2 = P_rest + p_s_th - (Tth - Thd) / R_th_hd - (Tth - Tab) / R_th_ab - (Tth - T_air) / R_thorax_air_open
        eq3 = p_s_ab + (Tth - Tab) / R_th_ab - (Tab - T_air) / R_ab_air_open - q_evap_ab
        return [eq1, eq2, eq3]

    # Решение системы
    sol = fsolve(equations, [T_air, T_air, T_air])
    return sol


# Рассчитываем начальные температуры
T_head_init, T_thorax_init, T_ab_init = calculate_initial_temperatures(T_air)

print(f"Начальные температуры при T_air = {T_air}°C:")
print(f"Торакс: {T_thorax_init:.2f}°C")
print(f"Голова: {T_head_init:.2f}°C")
print(f"Брюшко: {T_ab_init:.2f}°C")

p_plus = 45e-3  # мощность печки


def model_plus_6_5(time_total):
    dt = 1
    steps = int(time_total / dt)
    # Начальные условия из Этапа 1
    T_head, T_thorax, T_ab = T_head_init, T_thorax_init, T_ab_init
    # Массивы для результатов
    T_head_arr, T_thorax_arr, T_ab_arr = [T_head], [T_thorax], [T_ab]
    P_rest_arr = [metabolic_power(T_air)]

    for t in range(steps):
        def equations(vars):
            Thd, Tth, Tab = vars
            q_evap_hd = ke0 * Tth
            q_evap_ab = ke0 * Tth
            P_rest_current = metabolic_power(T_air)  # Стартовое тепловыделение
            p_s_th = - eps * sigma * ((Tth - t0) ** 4 - (T_air - t0) ** 4) * A_thorax
            p_s_hd = - eps * sigma * ((Thd - t0) ** 4 - (T_air - t0) ** 4) * A_head
            p_s_ab = - eps * sigma * ((Tab - t0) ** 4 - (T_air - t0) ** 4) * A_ab
            # Уравнение для головы:
            eq1 = C_head * (Thd - T_head_arr[-1]) - dt * (
                    p_s_hd
                    + (Tth - Thd) / R_th_hd
                    - (Thd - T_air) / R_head_air_open
                    - q_evap_hd
            )
            # Уравнение для торакса:
            eq2 = C_thorax * (Tth - T_thorax_arr[-1]) - dt * (
                    P_rest_current + p_s_th + p_plus    # + 44e-3
                    - (Tth - Thd) / R_th_hd
                    - (Tth - Tab) / R_th_ab
                    - (Tth - T_air) / R_thorax_air_open
            )
            # Уравнение для брюшка:
            eq3 = C_ab * (Tab - T_ab_arr[-1]) - dt * (
                    p_s_ab
                    + (Tth - Tab) / R_th_ab
                    - (Tab - T_air) / R_ab_air_open
                    - q_evap_ab
            )
            return [eq1, eq2, eq3]
        sol = fsolve(equations, [
            T_head, T_thorax, T_ab,
        ])
        T_head, T_thorax, T_ab = sol
        if t % 10 == 0:
            T_head_arr.append(T_head)
            T_thorax_arr.append(T_thorax)
            T_ab_arr.append(T_ab)
            P_rest_arr.append(metabolic_power(T_air))
    return T_head_arr, T_thorax_arr, T_ab_arr, P_rest_arr


# Запуск модели
time_total = 300  # секунд
results = model_plus_6_5(time_total)
T_head, T_thorax, T_ab, P_rest = results

# Временная шкала
t = np.linspace(0, time_total, len(T_thorax))

# График температур
plt.figure(figsize=(7, 4))
plt.plot(t, T_thorax, 'r-', label='Торакс')
plt.plot(t, T_head, 'b-', label='Голова')
plt.plot(t, T_ab, 'g-', label='Брюшко')
plt.axhline(T_air, color='k', linestyle='--', label='Температура воздуха')
plt.xlabel('Время (с)')
plt.ylabel('Температура (°C)')
plt.title('Переходной процесс при включении режима "печки" '
          '\nс дополнительной мощностью ' + str(p_plus*1e3) + ' мВт')
plt.legend(loc='upper right')
plt.grid(True)
plt.show()

# Стационарные значения
print(f"Температура торакса: {T_thorax[-1]:.2f}°C")
print(f"Тепловыделение: {P_rest[-1] * 1000:.2f} мВт")

Заключение: Разработана математическая модель физики теплообменных процессов в организме пчелы. Она основана на экспериментальных данных и не противоречит им.

Пчела имеет существенно разные температуры головы, торакса и брюшка; разница между температурой торакса и брюшка может доходить до 15°С, а торакса и головы - до 10°С при низких температурах; при высоких температурах разница меньше.

Для поддержания жизнедеятельности пчела расходует больше энергии метаболизма при низких температурах, и меньше - при высоких. Соответственно, при низких температурах она больше расходует корма.

Перед полётом в прохладную погоду пчела прогревает “двигатель”, включая режим печки мощностью около 45 мВт.

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

В полёте температура торакса слабо зависит от температуры окружающего воздуха, пчеле важно обеспечить стабильные условия работы своего движителя. В солнечную погоду - на уровне 35-36°С (что, видимо, является типичным и комфортным для пчелы режимом), в пасмурную - 32-33°С.

Разработанная модель позволяет оценить раздельно вклад различных механизмов - конвекции, испарения и излучения - в общий процесс теплообмена.

Литература

  1. Еськов Е.К. Микроклимат пчелиного улья и его регулирование. М.: Россельхозиздат, 1978г., 79с.

  2. Линдауэр М. Процессы регулирования в сообществах насекомых // Процессы регулирования в биологии: Перевод с немецкого.- М. Изд-во иностр. лит., I960.- С.178-195.

  3. William A. Woods, Jr, Bernd Heinrich, Robert D. Stevenson: Honeybee flight metabolic rate: does it depend upon air temperature? - J Exp Biol (2005) 208 (6): 1161–1173.

  4. Cooper, P. D., Schaffer, W. M. and Buchmann, S. L. (1985). Temperature regulation of honey bees (Apis mellifera) foraging in the Sonoran desert. J. Exp. Biol. 114, 1-15.