...

суббота, 7 декабря 2019 г.

[Из песочницы] Что такое ЭЭГ и зачем она нужна

Ученые любят искать первое упоминание своей науки. К примеру, я видел статью, где всерьез утверждалось, что первые опыты по электрической стимуляции мозга были проведены в Древнем Риме, когда кого-то ударил током электрический угорь. Так или иначе, обычно, историю электрофизиологии принято отсчитывать примерно от опытов Луиджи Гальвани (XVIII век). В этом цикле статей мы попробуем рассказать небольшую часть того, что наука, узнала за последние 300 лет про электрическую активность мозга человека, про то, какие профиты из всего этого можно извлечь.


Откуда берется электрическая активность мозга

Мозг состоит из нейронов и глии. Нейроны проявляют электрическую активность, глия тоже может это делать, но по-другому [1], [2], и мы на нее сегодня обращать внимания не будем.

Электрическая активность нейронов заключается в перекачивании между клеткой и окружающей средой ионов натрия, калия и хлора. Между нейронами сигналы передаются с помощью химических медиаторов. Когда медиатор, выделяемый одним нейроном, попадает на подходящий рецептор другого нейрона, он может открыть химически активируемые ионные каналы, и впустить в клетку небольшое количество ионов. В результате клетка немного меняет свой заряд. Если в клетку вошло достаточно много ионов (например, сигнал пришел одновременно на несколько синапсов), открываются другие ионные каналы, зависимые от напряжения (их больше), и клетка за считанные миллисекунды активируется целиком по принципу “все или ничего”, после чего возвращается в прежнее состояние. Этот процесс называется потенциалом действия.

image


Как ее можно зарегистрировать

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

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


Выглядит впечатляюще, но в ближайшее время в каждую районную поликлинику, и, тем более, к здоровым людям, такие методы не придут. Во-первых, это очень дорого — стоимость процедуры для каждого пациента измеряется сотнями тысяч долларов. Во-вторых, имплантация электродов в кору — все-таки серьезная нейрохирургическая операция со всеми возможными осложнениями и поражением нервной ткани вокруг импланта. В-третьих, сама технология несовершенна — непонятно, что делать с тканевой совместимостью имплантов, и как предотвратить их обрастание глией, в результате чего нужный сигнал со временем перестает регистрироваться. Кроме того, обучение каждого пациента использованию импланта может занимать больше года ежедневных тренировок.

Можно не втыкать провода глубоко в кору, а аккуратно положить на нее — получится электрокортикограмма. Тут сигнал отдельных нейронов уже не зарегистрировать, но можно увидеть активность очень маленьких областей (общее правило — чем дальше от нейронов, тем хуже пространственное разрешение метода). Уровень инвазивности ниже, но все равно нужно вскрывать череп, поэтому этот метод используется в основном для контроля во время операций.

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

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

На картинке с потенциалом действия видно, что у кривой есть две основных части — собственно, потенциал действия (большой пик) и синаптический потенциал (маленькое изменение амплитуды перед большим пиком). Логично было бы предположить, что то, что мы регистрируем на поверхности головы, является суммой потенциалов действия отдельных нейронов. Однако, на деле все работает наоборот — потенциал действия занимает около 1 миллисекунды и, несмотря на высокую амплитуду, через череп и мягкие ткани не проходит, а вот синаптические потенциалы за счет большей длительности, хорошо суммируются и регистрируются на поверхности черепа. Это было доказано с помощью одновременной записи инвазивными и неинвазивными методами. Также важно, что активность не каждого нейрона может быть зарегистрирована с помощью ЭЭГ (подробнее тут).

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

Впервые идея померить напряжение на голове человека была реализована в 1924 году довольно интересной личностью. Первая запись ЭЭГ выглядела вот так:

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

Сейчас, конечно, ритмы ЭЭГ анализируются не на глаз, а математическими методами, среди которых самые простые из которых — спектральные.


Разбитый на полосы спектр Фурье электрэнцефалограммы (источник)

Всего есть несколько полос, в которых обычно анализируют ритмическую активность ЭЭГ, вот самые популярные:

8-14 Гц — Альфа-ритм. Представлен в основном в затылочных зонах. Сильно увеличивается при закрытии глаз, также подавляется при умственном напряжении и увеличивается при расслаблении. Этот ритм производится, когда возбуждение циркулирует между корой и таламусом. Таламус — своего рода маршрутизатор, который решает, как перенаправлять в кору потоки входящей информации. Когда человек закрывает глаза, ему становится нечего делать, он начинает генерировать фоновую активность, которая и вызывает альфа-ритм в коре. Кроме того, важную роль играет default mode network — сеть структур, которые активны во время спокойного бодрствования, но это уже тема для отдельной статьи.

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

14-30 Гц — Бета-ритм. Больше выражен в лобных долях мозга. Увеличивается при умственном напряжении.

30+ Гц — Гамма-ритм. Может быть, где-то внутри мозга он и есть, но большая часть того, что можно записать с поверхности, происходит от мышц. Выяснили это следующим образом:

Нужно каким-то образом убрать мышечную активность с головы, чтобы записать ЭЭГ с мышцами и без. К сожалению, нет простого способа отключить мышцы на голове, не отключив их во всем теле. Берем ученого (никто другой на такое бы не согласился), накачиваем его миорелаксантом, в результате чего у него отключаются все мышцы. Проблема — если отключить все мышцы, в том числе диафрагму и межреберные, то он не сможет дышать. Решение — кладем его на ИВЛ. Проблема — он еще и говорить без мышц не может. Решение — наложим ему на руку жгут, чтобы туда не попадал миорелаксант, тогда он может этой рукой подавать сигналы. Проблема — если затянуть эксперимент, то рука отвалится. Решение — прекращаем эксперимент когда ученый перестает чувствовать руку, и надеемся, что все закончится хорошо. Результат — доля в спектре частот ЭЭГ больше 20 Гц на фоне миорелаксанта становится меньше в 10-200 раз, чем выше частота, тем выше падение.

1-4 Гц — Дельта-ритм. Выражен во время фазы, внезапно, дельта-сна (самый глубокий сон), также повышается при стрессе.

Кроме ритмической активности, в ЭЭГ есть еще вызванная. Если мы точно знаем, в какой момент мы показываем человеку стимул (это может быть картинка, звук, тактильное ощущение и даже запах), мы можем посмотреть, какая была реакция именно на этот стимул. Соотношение сигнал-шум такого ответа по отношению к фоновой ЭЭГ довольно низкое, но если мы покажем стимул, к примеру, 10 раз, нарежем ЭЭГ относительно момента предъявления и усредним, то можно получить довольно подробные кривые, которые называют вызванными потенциалами (не путать с потенциалами действия).

Это вызванный потенциал на звук. Подробности оставим психофизиологам — тут нам достаточно понимать, что каждый экстремум что-то да означает. При достаточном усреднении будут видны ответы структур начиная от слухового нерва (I) и заканчивая ассоциативной корой (P2).


Что с ней можно сделать

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

Самое очевидное, что приходит в голову — сделать интерфейс на ритмической активности. Мы же помним, что альфа-ритма мало, когда человек напряжен, и много, когда он расслаблен? Вот и расслабляйтесь. Пишем ЭЭГ, делаем преобразование Фурье, когда мощность в окне вокруг 10 герц стала выше определенного порога, зажигаем лампочку — вот и контроль компьютера силой мысли. Тот же принцип может позволить управлять другими ритмами. За счет простоты и нетребовательности к оборудованию появилось достаточно много игрушек, работающих на этом принципе — Neurosky, Emotiv, тысячи их. В принципе, если хорошо постараться, человек может научиться приходить в нужное состояние, которое будет правильно классифицироваться. Проблема потребительских девайсов в том, что они часто пишут не очень качественный сигнал, и поголовно не умеют вычитать артефакты от движения глаз и мимических мышц. В результате появляется реальная возможность научиться управлять мышцами и глазами, а не мозгом (а подсознание работает так, что чем больше стараться этого не делать, тем хуже будет получаться). Кроме того, само соотношение сигнал-шум в ритмах довольно низкое, и интерфейс работает медленно и неточно (если получится правильно угадать состояние с точностью больше 70% — это уже достижение). Да и научная база по состояниям кроме расслабления и концентрации, мягко говоря, зыбкая. Тем не менее, при правильной реализации метод может иметь свое применение.

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

Другой класс ЭЭГ-нейроинтерфейсов основывается на использовании вызванной активности всех сортов. Эти интерфейсы отличаются очень высокой надежностью, при удачном стечении обстоятельств приближающейся к 100%.

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

К примеру, если вот тут пытаться посчитать, сколько раз загорится буква “А”, и при этом не обращать внимания на все остальные, то в ответ на этот стимул при усреднении мы увидим красную линию, а при усреднении всех остальных — синюю. Разница между ними заметна невооруженным взглядом, и обучить классификатор, который будет их различать, не составляет особого труда.

Такие интерфейсы обычно не очень красивые, и не очень быстрые (печать одной буквы займет около 10 секунд), но могут быть полезны полностью парализованным пациентам.

Кроме того, в ИМК-Р300 есть когнитивный компонент — мало просто смотреть на букву, надо активно обращать на нее внимание. Это позволяет, при выполнении определенных условий, делать на этой технологии довольно интересные игры (но это тема для другой статьи).

За счет того, что Р300 это когнитивный потенциал, для него не очень важно, что, собственно, показывают человеку, главное, чтобы он мог на это реагировать. В результате интерфейс будет работать, даже если буквы будут сменять друг друга в одной точке — это полезно для пациентов, которые не могут двигать глазами.

Есть и другие интересные вызванные потенциалы, в частности SSVEP (ЗВПУС) — потенциалы стабильного состояния. Если искать аналогии в области связи, то Р300 работает как рация — сигналы от разных стимулов разделяются по времени, а SSVEP это классический FDMA — разделение по несущей частоте, как в GSM-связи.


осторожно, эпилептические мигалки

Нужно показать человеку несколько стимулов, которые мигают с разными частотами. При выборе стимула, на него достаточно внимательно посмотреть, и через несколько секунд его частота магическим образом окажется в зрительной коре, откуда ее можно вытащить корреляционными или спектральными методами. Это быстрее и проще, чем считать буквы для Р300, но долго смотреть на такое мигание тяжело.

Там, где есть FDMA, там самое место CDMA:


осторожно, еще более эпилептические мигалки

Серое — бинарная последовательнсть, цветное — вызванная ей активность во всех каналах, карта — распределение выраженности потенциала в ЭЭГ. Видно, что максимум на затылке — в зрительных областях

Можно модулировать мигание стимулов не частотами и фазами, а ортогогнальными бинарными последовательностями, которые точно так же окажутся в зрительной коре и отклассифицируются с помощью корреляционного анализа. Это может помочь немного оптимизировать обучение классификатора и ускорить работу интерфейса — на одну букву может уходить меньше 2 секунд. За счет удачного выбора цветов можно сделать интерфейс чуть менее вырвиглазным, хотя полностью от мигания избавиться не получится. К сожалению, когнитивный компонент тут не так сильно выражен — отслеживание движений глаз дает сопоставимые результаты, но технически проще, дешевле и удобнее.

Когда я говорю о том, насколько хорошо могут работать те или иные типы интерфейсов, приходится постоянно оперировать соотношением сигнал-шум. Действительно, вызванные потенциалы имеют низкую амплитуду — около 5 микровольт, при том, что фоновый альфа-ритм запросто может иметь амплитуду в 20. Такой слабый сигнал кажется довольно сложным для классификации, но на самом деле все это довольно просто, если правильно поставить эксперимент и хорошо записать ЭЭГ. Сейчас большинство академических исследований сосредоточено в области придумывания новых классификаторов, в том числе применения нейросетей, но довольно хорошего уровеня можно достигнуть уже с самыми простыми линейными классификаторами из scikit-learn. К примеру, хороший датасет с Р300 и кодом лежит здесь.

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

Let's block ads! (Why?)

[Из песочницы] Полярные сияния на планетах Солнечной системы

Наверняка те, кто хоть раз в жизни видел своими глазами северное (или южное) полярное сияние, скажут, что это просто фантастическое зрелище. Чудо природы планетарного масштаба, грандиозное явление, которое человек может наблюдать на Земле невооруженным глазом. Свечение атмосферы на высотах в сотни и на удалении в тысячи километров настолько разноцветно и динамично, что производит впечатление чего-то живого, движущегося, дышащего…

Но только ли наша планета может похвастать этим грандиозным зрелищем? Могут ли, если не коренные жители, то будущие колонисты, к примеру Марса или спутников Юпитера, наблюдать что-либо подобное?

Что вообще нужно, чтобы на какой-либо планете возникли полярные сияния?

По определению, полярные сияния — это свечение (люминесценция) верхних слоёв атмосфер планет, обладающих магнитосферой, вследствие их взаимодействия с заряженными частицами солнечного ветра.

Итак, нам требуется:

1. Солнечный ветер, представляющий из себя поток заряженных частиц — протонов, электронов, ядер гелия и др. — Имеется всегда во всей Солнечной системе.

У планет или их спутников:

2. Атмосфера, с атомами которой будет взаимодействовать солнечный ветер.

3. Магнитное поле, направляющее заряженные частицы в определенную область планеты (не обязательно в полярную, — угол между магнитной осью и осью вращения планеты, может быть значительным.)

Посмотрим, как это работает на Земле.


Земля


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

А как ведут себя частицы солнечного ветра при взаимодействии с магнитосферой планеты? — В околоземном пространстве все происходит как со сверхзвуковым самолетом. — Поток солнечного ветра на сверхзвуковой скорости (400-700 км\сек) набегает на магнитосферу планеты, в результате чего образуется так называемая, головная ударная волна. — (Скорость солнечного ветра на орбите Земли примерно в 10 раз больше скорости звука в околоземной плазме.)
Головная ударная волна — это таким образом, магнитное препятствие, которое отклоняет заряженные частицы солнечного ветра по траекториям вокруг планеты. Налетая на нее, большинство заряженных частиц просто обтекает магнитосферу.

Некоторая часть солнечной плазмы попадает в магнитные ловушки радиационных поясов Земли,- заряженным частицам затруднительно двигаться поперек силовых линий и они просто наматываются на них и могут болтаться от полюса к полюсу десятилетиями.

А ещё часть беспрепятственно проникает в полярную ионосферу через полярные каспы — воронкообразные области, расширяющиеся от Земли до магнитопаузы, возникающие в результате взаимодействия солнечного ветра и магнитного поля Земли.
Через каспы частицы солнечного ветра «высыпаются» в верхние слои атмосферы планеты в двух областях в высоких широтах.


Магнитосфера Земли

Эти области представляют собой два овала (в северном и южном полушариях), удаленные от геомагнитных полюсов ночью приблизительно на 20°, а днем на 10°. Протяженность этих овальных областей по широте составляет всего несколько сот километров.

При интенсивной магнитной буре овал сильно смещается по направлению к экватору.

И если в периоды спокойного Солнца, интенсивность полярных сияний мягко говоря невелика, дело усугубляется во время солнечной активности. Выбросы корональной массы (плазмы из короны Солнца) многократно увеличивают интенсивность солнечного ветра.

Подливают масла в огонь магнитосферные суббури. Во время них в геомагнитном хвосте (на ночной стороне Земли) происходит пересоединение силовых линий межпланетного магнитного поля и геомагнитного поля Земли. В результате топология линий меняется, взрывообразно высвобожденная при этом энергия, преобразуется в новый ток, называемый «электроджетом». Электроджет среди прочего, разогревает и разгоняет заряженные частицы, превращая их в высокоэнергичный плазменный поток.

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

Электронные полярные сияния,


вызываемые потоками электронов и преобладающие на Земле.

Это всем привычные зеленые или фиолетово-малиновые дуги, лучистые полосы, ленты, занавесы и прочие образования, имеющие достаточно четко выраженную структуру.

Как образуются. — Электроны солнечной плазмы, прорвавшись в верхние слои атмосферы Земли, спускаются до высот 400—100 км над уровнем моря. Здесь под их действием происходит ионизация нейтральных атмосферных газов (кислорода и азота), а также возбуждение их атомов и молекул. В ответ на это молекулы, атомы и ионы кислорода и азота атмосферы излучают кванты света на строго определенной длине волны.

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

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

Редкие на Земле, но встречающиеся ещё только на Юпитере, — рентгеновские авроры.


Сильнейшее рентгеновское полярное сияние, зафиксированное 11 апреля 1997 года орбитальным спутником Polar.

На картинке видны рентгеновские лучи (в условных цветах), порожденные в верхней атмосфере и обусловленные потоками электронов высоких энергий.

Протонные полярные сияния


Тоже достаточно редкое явление на Земле и его вклад в свечение неба Земли относительно невелик.

Протоны, попадая в атмосферу Земли, также сталкивается с молекулами и атомами атмосферных газов, возбуждая и ионизуя их.

Но при этом, протон может захватит свободный электрон и произойдет процесс перезарядки. В результате образуется нейтрального атома водорода, который может испускать фотоны в видимом и УФ-диапазонах.

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


Красная протонная арка, штат Мичиган


Мощное протонное полярное сияние в УФ-диапазоне. Фото со спутника «IMAGE»

Теперь посмотрим, как обстоит дело с полярными сияниями на других планетах.

Меркурий


Всё плохо.

Несмотря на имеющееся магнитное поле, интенсивность которого, правда, в 100 раз меньше земного, атмосфера на планете фактически отсутствует. Она настолько разрежена, что сами частицы солнечного ветра и составляют атмосферу планеты, вкупе с атомами, выбитыми с поверхности. Атомы атмосферы чаще сталкиваются с планетой, чем друг с другом.

Венера


Не так все плохо, как могло бы показаться.

Ситуация противоположная Меркурию — густая и плотная атмосфера и отсутствие глобального магнитного поля. Но несмотря на это, слабая магнитосфера у Венеры имеется — она индуцирована самим солнечным ветром, а не планетой.

В 2000-х аппарат Venus Express обнаружил, что за Венерой тянется магнитосферный хвост, аналогичный земному. В нем, тоже происходит перезамыкание силовых линий магнитного поля. — Разнонаправленные линии движущейся солнечной плазмы оказываются слишком близко друг от друга и замыкаются.

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

Марс


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

Атмосфера у Марса тонкая и разряженная, в основном состоящая из углекислого газа. При взаимодействии с электронами солнечного ветра, которые ускоряется вдоль линий локальных магнитных полей, можно наблюдать редкие и кратковременные ультрафиолетовые электронные полярные сияния.

14 августа 2004 года, инструментом SPICAM на борту орбитальной станции Mars Express в районе Киммерийской земли было зафиксировано такое явление. Общий размер излучающей области составлял около 30 км в поперечнике, и примерно 8 км в высоту.


Локальные магнитные поля Марса

А вот протонные полярные сияния, впервые зафиксированные во время солнечной бури 12-13 сентября 2017 года орбитальным аппаратом MAVEN, не в пример более мощные и глобальные. Они могут охватывать практически всю планету.

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

Уровень радиации на поверхности Марса, зафиксированный во время этой солнечной бури марсоходом Curiosity, побил все ранние рекорды, превысив их показания почти вдвое.
(У Curiosity есть такой прибор — «Детектор оценки радиации» или RAD. Он собирает данные для оценки уровня радиационного фона, который будет воздействовать на участников будущих экспедиций к Марсу. Прибор установлен практически в самом «сердце» марсохода, имитируя человека, находящегося внутри космического корабля.)

Так что во время солнечных бурь колонистам на Марсе лучше куда-то прятаться.


Ультрафиолетовые данные наложены на снимок Марса на ночной стороне до (слева) и во время (справа) события. Авроральное излучение кажется наиболее ярким на краю снимка планеты вдоль линии светящегося слоя атмосферы.

Газовые гиганты


Четыре планеты-гиганта Солнечной системы имеют в наличии всё для появления полярных сияний — и мощные атмосферы, и сильные магнитные поля.

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

Однако полярные сияния в других электромагнитных диапазонах можно «засечь». — УФ-излучение от богатых водородом атмосфер гигантов фиксируется космическим телескопом «Хаббл». Рентгеновский диапазон ловит опять же космический телескоп «Чандра». А инфракрасный регистрирует даже наземный «Subaru».

Система Юпитера


Нужно ли говорить, что самая большая планета Солнечной системы имеет и самые мощные полярные сияния? К тому же, в отличие от Земли, авроры Юпитера имеют постоянный характер.
Также удивительной особенностью аврор Юпитера является то, что они возникают не только из-за солнечного ветра, но и из-за потоков частиц, выбрасываемых спутниками планеты: Ио, Ганимедом и Европой (на этих спутниках тоже наблюдаются полярные сияния).

Особенно сильно сказывается присутствие Ио, поскольку она вулканически активна и у нее есть своя ионосфера.


Северное полярное сияние Юпитера. Комбинированный снимок «Хаббла», видимый диапазон и ультрафиолет.

Маленькая Ио играет важную роль в формировании магнитного поля гиганта Юпитера. — Ее вулканы выбрасывают в атмосферу массу ионизированных и нейтральных серы, кислорода, хлора, атомарного натрия и калия, молекулярного диоксида серы, а также пыли хлорида натрия. Все это вещество вытягивается магнитосферой Юпитера из тонкой атмосферы Ио со скоростью 1 тонна в секунду.

При этом в зависимости от ионизации, эта материя улетучивается или в разреженное нейтральное облако вокруг спутника (желтое пятно на рисунке), или в плазменный тор, окружающий весь Юпитер (красная область там же).


Схема магнитосферы Юпитера и воздействия Ио: плазменный тор (красное), нейтральное облако (жёлтое), потоковая трубка (зелёное) и линии магнитного поля (голубые)

А как Ио влияет на полярные сияния Юпитера? Оказывается, что часть ионизированного газа, который планета «ворует» у своего спутника, направляется вдоль силовых линий магнитного поля к ее полюсам (зеленое вертикальное кольцо на рисунке выше). Получается как бы трубка, соединяющая Ио и приполярные области Юпитера, по которой заряженные частицы туда закачиваются. В результате в атмосфере Юпитера образуется «отпечаток» Ио: авроральное пятно, которое следует за вращением спутника с некоторым отставанием.


Анимация, созданная из снимков космического телескопа Хаббл, весна 2005 года. Справа виден след Ио

Подобным же образом, но в гораздо меньшей степени влияют на авроры Юпитера два других его спутника — Европа и Ганимед. Их горячие авроральные пятна образуется за счёт высокозаряженных ионов кислорода, серы и, возможно, углерода, которые активно обмениваются зарядами.


Авроральные или горячие пятна (в ультрафиолете) Ио, Ганимеда и Европы — следы магнитных силовых линий, соединяющих ионосферы спутников с ионосферой Юпитера.
Яркие пятна внутри основных колец, появляющиеся время от времени, как считается, связаны с взаимодействием магнитосферы и солнечного ветра.


Северное и южное полярные сияния Юпитера.
Фото планеты и фото полярных сияний, сделанные разными инструментами телескопа «Хаббл» (видимый диапазон и ультрафиолет).

Крайне интересны рентгеновские полярные сияния Юпитера. — Во-первых, Юпитер — это единственный газовый гигант в Солнечной системе, у которого обнаружены рентгеновские полярные сияния. Во-вторых, в отличие от Земли, где полярные сияния на северном и южном полюсах являются почти зеркальным отражением друг друга, излучение на полюсах Юпитера «несинхронизировано» — южные и северные авроры ведут себя независимо друг от друга и изменяют свою интенсивность вразнобой.

К тому же, рентгеновское излучение Юпитера пульсирует. На южном полюсе — каждые 11 минут, а вот на северном сияние неустойчиво и меняет свою активность независимо и с другой периодичностью – в разные периоды времени – от 12 до 26 и даже до 40–45 минут.
Причины таких рассинхронизации и пульсации пока неясны.


Рентгеновские полярные сияния в северном и южном полушарии Юпитера.
Данные с орбитальных спутников «XMM-Newton» и «Chandra X-ray»

И ещё вопрос, — как Юпитер наделяет частицы в своей магнитосфере огромными энергиями, необходимыми для создания постоянного потока рентгеновских лучей?

Есть предположение, что планета ускоряет ионы кислорода до невероятно высоких энергий, которые при столкновении с атмосферой на скорости в тысячу километров в секунду теряют все восемь электронов. Будущие наблюдения «Чандра», «XMM-Newton» и юпитерианской станции «Juno» должны раскрыть природу данного процесса.


Комбинированное фото телескопов «Хаббл» и «Chandra X-ray»


Фото + реконструкция полярного сияния в видимом диапазоне над северным полюсом Юпитера с аппарата «Juno».

Орбитальная юпитерианская станция позволила наблюдать темную сторону планеты. 18 декабря 2018 год.


Инфракрасное изображение полярного сияния на Южном полюсе Юпитера с телескопа «Subaru».

Взаимодействующие с солнечным ветром газы в верхних слоях атмосферы нагреваются, как и на Земле. Однако, нагрев юпитерианской атмосферы происходит в два или три раза глубже чем на Земле, достигая нижнего уровня стратосферы.

Ну и нельзя не отметить Ганимед — крупнейший спутник в Солнечной системе и единственный, имеющий собственную магнитосферу. Она очень мала и погружена в магнитосферу Юпитера. Однако, наличие у Ганимеда ещё и слабой кислородной атмосферы обуславливают и наличие ультрафиолетовых полярных сияний.

Наблюдая за аврорами Ганимеда (а они зависят от изменении магнитного поля Юпитера — при этом полярные сияния на Ганимеде как бы «покачиваются»), ученые пришли к удивительному выводу: под корой Ганимеда содержится большое количество солёной воды, и она влияет на его магнитное поле.

Присутствие солёного океана создаёт вторичное магнитное поле, которое позволяет противостоять влиянию Юпитера. Это «магнитное трение» некоторым образом подавляет раскачивание сияний. На практике качание сияний уменьшено до 2 градусов (вместо 6 градусов, которые бы наблюдались, если бы океана не существовало).

По расчётам учёных, глубина океана – 100 километров, то есть он примерно в 10 раз глубже, чем океаны Земли. Правда, океан Ганимеда похоронен под 150-170-километровым панцирем льда.


Комбинированное фото «Хаббла» в видимом и УФ-диапазонах + визуализация Ганимеда.

Система Сатурна


На Сатурне тоже имеются полярные сияния, куда ж они денутся.

Здесь «вулканически» активен Энцелад, южная полярная область которого активно извергает фонтаны водяного пара с частицами льда в окружающую спутник атмосферу. Эти выбросы достигают нескольких сотен километров и даже становятся частью кольца E, в котором вращается Энцелад.

Часть этого водяной пара ионизируется и со скоростью 100 кг в секунду, пополняет магнитосферу Сатурна различными гидро-, водородными, кислородными и пр. ионами и радикалами.

Однако их не хватает, чтобы раздуть магнитосферу гиганта до размеров юпитерианской. Поэтому полярные сияния на Сатурне зависят гораздо сильнее чем на Юпитере от интенсивности солнечного ветра. В этом они схожи с земными.


Северное полярное сияние Сатурна, снятое аппаратом «Кассини» в инфракрасном диапазоне (4 мкм, синим цветом).

Лежащие внизу облака — окрашены в условный красный (5 мкм). Прямо под сияниями видно обнаруженное ранее шестиугольное облако.

Полярные сияния на Сатурне, как и на Земле, образуют замкнутые или неполные кольца вокруг магнитных полюсов.

«Полярные сияния на Сатурне могут быть чрезвычайно изменчивыми. — Сейчас вы видите фейерверк вихрей, а через некоторое время не видите ничего. В 2013 г., например, мы видели невообразимое множество сияний на обоих полюсах планеты — от устойчивых ярких колец до сверхбыстрых вспышек света, проносящихся через полюс», — обращает внимание Джонатан Николс (Jonathan D. Nichols) из Лестерского университета в Англии.


Южный полюс Сатурна и совместная работа телескопа «Хаббл» в УФ-диапазоне и аппарата «Кассини» в видимом, ИК- и радиодиапазонах.

Три изображения Сатурна, полученные с промежутками в два дня.


И Сатурн в чистом ультрафиолете от «Хаббла».

Благодаря возможности «Кассини» наблюдать объекты в видимом свете, ученые смогли выяснить цвета полярных сияний на Сатурне. В то время авроры на Земле имеют зеленые цвета ближе к поверхности и красные наверху, камеры зонда показали, что полярные сияния на Сатурне имеют красные цвета ближе к центру планеты и фиолетовые — в верхних слоях атмосферы.

Особенно яркое полярное сияние на Сатурне, снятое с близкого расстояния миссией «Кассини» 29 ноября 2010 года. Сияние уходит вниз от поверхности планеты (занимающей верхнюю часть изображения) на 1400 км. Штриховыми линиями обозначены параллели и меридианы, черточки в нижней части фотографии — звёзды.

Уран и Нептун


С Ураном у нас тут всё не слава богу — и лежит на боку, и ось магнитного поля не проходит через геометрический центр планеты. Она «промахивается» на треть радиуса и наклонена на целых 59° от оси вращения.

БОльшая «промашистость» — только у Нептуна. Ось его диполя сдвинута на 14 тыс. км в сторону от центра планеты (это 0,57 ее радиусов), а центр диполя смещен на 6 тыс. км в южное полушарие. Поэтому напряженность магнитного поля у южного магнитного полюса в 10 раз выше, чем у северного. Но наклон поменьше — 47°.

Несмотря на такую «кривость и промашистость» осей, магнитные поля у ледяных гигантов не такие и слабые, — у Урана почти как у Земли, у Нептуна всего раза в 2-3 поменьше. Соответственно, имеются и магнитосферы, и головные ударные волны, а вкупе с мощными атмосферами должны быть и полярные сияния.

Трудности охоты за полярными сияниями на Уране и Нептуне заключаются в том, рассчитать «подлетное время» коронального выброса с Солнца непросто. Даже до Земли высокоэнергетические частицы летят сутки-двое-трое, и точно предсказать время не получается. Скорость выброса, конечно, известна — она обычно составляет сотые доли скорости света, то есть тысячи километров в секунду, — но на результат влияет еще и взаимодействие частиц с гравитационным и магнитным полем Солнца.

Легко подсчитать, что при скорости выброса в 3000 км/с и расстоянии до Урана почти 3 млрд. км, полярное сияние на планете произойдет приблизительно через 11 дней. Однако погрешность этих вычислений велика, а время работы на телескопе «Хаббл» расписано, так что невозможно смотреть несколько суток подряд только на Уран или Нептун.

И поскольку орбитальных миссий у ледяных гигантов не было, то в случае с Ураном, первую аврору удалось зафиксировать только в 2011 году.

Авроры на Нептуне пока не удалось изловить телескопами. «Вояджер-2» наблюдал полярные сияния, в атмосфере Нептуна, — они были разбросаны по всему пространству (а не только в овальных областях вокруг полюсов). Авроры наблюдались также и на Тритоне.


Полярные сияния Урана, пойманные УФ-спектрографом «Хаббла» в 2011, 2012 и 2014 годах.

Let's block ads! (Why?)

[Из песочницы] Агророботы наступают

Усилия ведущих разработчиков и производителей оборудования для животноводства сегодня направлены на то, чтобы максимально автоматизировать все процессы ухода за животными, в том числе — процессы приготовления и раздачи кормов. О том, как эта тенденция меняет отрасль, в чем проявляется ее позитивное и негативное влияние, а также о том, какие потенциальные возможности и риски несут новые технологии, пойдет речь в этой статье.

Современное животноводство — очень специфический бизнес. Главная его особенность заключается в том, что он связан с непрерывными биологическими циклами животных. Цена любой ошибки здесь чрезвычайно высока.
Сбалансированный и вовремя предложенный рацион — один из основных факторов, влияющих на увеличение надоев и прирост поголовья, а значит, и на рентабельность всего производства. От грамотного управления кормовым столом напрямую зависит эффективность кормления и здоровье животных. Это сложный технологический процесс, который подчиняется жестким нормативам. Так, крупный рогатый скот кормят 2-3 раза в сутки в зависимости от типа кормления и возраста животных. Раздача кормов поголовью, которое находится в одном помещении, не может продолжаться больше 20–30 минут. Нужно точно соблюдать дозировку: погрешность для стебельчатых кормов допускается в пределах ±15%, для концентратов — ±5%. Потери кормов, которые можно собрать после раздачи, не могут превышать 1% от их общего количества. Невозвратимые потери не допускаются.

Вот только на практике четко следовать нормативам не так просто: человеческий фактор ставит стабильную раздачу корма под большой вопрос. Рационы на кормовом столе зачастую не соответствуют рецептуре, составленной зоотехником. Бывает и так, что составленный, приготовленный и полученный животными — это три абсолютно разных рациона. График подачи корма также нарушается: человек не успел, где-то задержался, заболел, его некому было заменить и т.д. Это приводит к нарушению биологического ритма у животных и, как следствие, к снижению их продуктивности.

На процесс приготовления и раздачи корма приходится до 70% общих затрат труда: это один из самых трудоемких технологических процессов в животноводстве. Можно ли освободить человека от рутинной работы, гарантируя при этом, что животные будут обеспечены кормами точно по заданной рецептуре и строго в определенное время? Да, если доверить процесс кормления автоматике.

Рис. 1. Молочное скотоводство занимает лидирующие позиции по внедрению робототехники

image

Эволюция процесса кормления


Первым шагом к автоматизации кормления могут считаться стационарные смесители, которые измельчают и перемешивают грубые корма. Надежные и «работящие», они экономят массу времени и избавляют от тяжелого труда. Применяют стационарные смесители главным образом в небольших хозяйствах. Раздача из них может происходить либо вручную (полученная масса перегружается в тракторный прицеп и раздается с помощью вил и лопат), либо посредством раздающих корм механизмов.

Следующая ступень — более современные мобильные смесители-кормораздатчики. Они измельчают загружаемые из силосной траншеи объемистые корма, перемешивают его с концентратом и сами раздают животным полученную массу. Такие смесители могут быть прицепными или самоходными. Они могут использоваться как при полносмешанном и частично смешанном рационе, так и при раздельном кормлении концентратом. Встроенные электронные весы позволяют мобильным кормораздатчикам точно соблюдать дозировку.

Сегодня более 50% всех скотоводческих хозяйств в РФ используют мобильные смесители-кормораздатчики. Большинством предприятий предпочтение отдается прицепным моделям, которые на порядок дешевле самоходных: если прицепной кормораздатчик обходится в среднем в €20 тысяч, то за самоходный надо будет выложить около €250 тысяч.

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

Подвесные кормовагоны


К последнему поколению систем кормления относятся, например, системы подвесных кормовагонов. Лидирующие позиции в их разработке, производстве и внедрении занимают фирмы Pellon (Финляндия), DeLaval (Швеция) и Mullerup (Дания). В России такое оборудование впервые было установлено в 2012 году в молочном хозяйстве «Дашенька» в поселке Ротово Псковской области.

Подвесной кормовагон передвигается по смонтированному на потолке коровника монорельсу параллельно кормовому столу, рассчитывает компоненты кормовой смеси, дозирует их и раздает готовый корм в соответствии с указаниями программы. То есть выполняет действия, аналогичные действиям мобильного миксера-кормораздатчика, только обходится при этом без человека.

Единственное, что требуется здесь от человека — это обеспечить кормами складские помещения, откуда их будет отгружать автоматика. А еще человек нужен для того, чтобы запрограммировать систему: ввести в нее набор ингредиентов, состав, нормы, дозировку и т.д. Иначе говоря, ей нужно один раз подробно «объяснить», что от нее требуется, а далее весь процесс осуществлять и контролировать будет уже она сама.

Для того, чтобы раздавать в коровнике корма наземным транспортом — кормораздатчиком или трактором — нужен проход шириной 5-6 м. Подвесному кормовагону хватит 2,5 м. Таким образом экономится около 15% площади. Соответственно снижаются затраты при строительстве коровника. Кроме того, использование подвесных кормовагонов исключает попадание на кормовой стол грязи с колес техники.

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

Рис. 2. Автоматическая система для раздачи корма DeLaval

image

Автоматическая выпойка телят


Автоматические системы выпойки телят — еще один пример того, как с помощью высоких технологий решаются задачи оптимизации кормления сельскохозяйственных животных. Такое оборудование выпускается целым рядом производителей: в их числе Urban, Delaval, Milkline и многие другие. Голландская фирма Lely считается одним из первопроходцев в этой области, а самой передовой ее разработкой признана система Lely Calm.

Главное преимущество такой системы заключается в том, что она максимально приспособлена к естественному поведению телят и позволяет им пить молоко в любое время в течение всего дня — что называется, «по требованию». Молоко (или его заменитель) в системе сохраняет оптимальную температуру на протяжении 24-х часов в сутки: оно не остывает, как при выпойке вручную.

На каждого теленка надевается ошейник с транспондером. Система следит за тем, сколько раз он подходит к соске и сколько молока выпивает. Можно настроить автоматику так, чтобы она выдавала каждому животному определенный объем при каждом подходе. Теленок, который уже употребил свою норму, молока не получит. Если животное пропускает кормление, система сообщает об этом, чтобы оператор мог выяснить, в чем дело.

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

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

Кстати, сама же автоматика и помогает и «отлучить» от нее теленка. По достижению 2-х месячного возраста она перестает его кормить, давая вместо корма обычную воду. Сделав несколько попыток, теленок перестает подходить к соске, после чего быстро переходит на грубые и концентрированные корма.

Рис. 3. Система автоматической выпойки телят Urban

image

Автоматическая система выпаса


Выпас коров на обычном пастбище часто ведет к низкой эффективности использования кормовых ресурсов из-за вытаптывания угодий и загрязнения их фекалиями. Намного целесообразнее показывают себя так называемые «фронтальные» пастбища, на которых участок со свежей порцией растительного корма под скармливание его животным ограничивается электроизгородями. Это, с одной стороны, позволяет значительно повысить эффективность использования кормовых ресурсов пастбища. С другой — существенно увеличивает трудозатраты, так как переставлять электроизгородь на новый участок пастбища приходится вручную.

Для того, чтобы минимизировать затраты ручного труда при выпасе скота на «фронтальном» пастбище, фирмой Lely разработана автоматическая система выпаса Voyager. Это два мобильных робота, которые соединены между собой токопроводящей проволокой, ограничивающей участок для выпаса животных.

Роботы перемещаются на определенные расстояния через заданные промежутки времени, при этом каждый раз освобождая новый участок. Режим их движения (расстояние и интервалы между перемещениями) устанавливается оператором и зависит от величины стада, размера «фронтального» пастбища и используемого кормового рациона.

Рис. 4. Автоматическая система выпаса Voyager

image

Обратная сторона автоматизации


По прогнозам экспертов, объем рынка сельскохозяйственных роботов к 2024 году достигнет $74,1 млрд. Их производство вырастет почти в 20 раз: до 600 тысяч единиц техники. Ожидается, что в ближайшее время станут доступными ряд инноваций в автоматизации кормления, которые сегодня находятся на этапе испытаний или на стадии разработки прототипов.

Рис. 5. Процесс перехода сельского хозяйства на робототехнику будет стремительным

image

Однако, как и любые высокотехнологичные решения, роботизированные системы кормления имеют свои недостатки. Самый главный из них — это высокая цена: так, для фермы на 200 коров инвестиции в автоматизацию процесса кормления составят не менее €450–500 тыс. А ведь нужна еще техника для кормозаготовки, склад для кормов, силосные ямы, подъездные пути и коммуникации.

Автоматика нуждается в контроле со стороны человека, который будет наблюдать за ее работой, корректировать рационы и вовремя проводить техническое обслуживание. Использование роботизированных систем в хозяйстве со слабым менеджментом — напрасная трата денег. Ни одно чудо техники не дает результатов, если на установившей его ферме отсутствует грамотный персонал, способный управлять сложными технологическими процессами. К сожалению, статистика по нехватке квалифицированных специалистов для «цифрового» животноводства выглядит удручающе.

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

Еще одна проблема связана с необходимостью перепланировки старых коровников под работу новых автоматических систем. Причем даже после реконструкции многие фермы не могут на 100% соответствовать современным технологическим требованиям.

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

Let's block ads! (Why?)

[Из песочницы] ESP32 + Arduino Core + FreeRTOS + Blynk = дом с зачатками разума

Цели проекта

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

Прислушавшись к себе, я понял, что это жаба, которой не нравится, что пока меня нет дома (12-16 часов в сутки), отопление работает. А могло бы и не работатать, включаться только перед приходом, благо каркасник обладает небольшой инерционностью и позволяет быстро поднять температуру. Та же ситуация когда куда то надолго уехать из дома. Ну и вообще, бегать, крутить ручку котла при изменениях температуры на улице — как то не кошерно.

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

Собственно о требованиях:


  • управление температурой в доме по уставке
  • управление температурой теплоносителя в зависимости от температуры на улице или вручную
  • временные зоны с разными уставками, днём холоднее, ночью горячее
  • автоматический режим, с авто переходом день-ночь
  • ручной режим, без автопереходов, для выходных
  • режим без автоматики, где можно вручную задать любую температуру теплоносителя и включить/выключить котёл
  • управление отоплением локально, с кнопок и экрана и через сайт/мобильное приложение

Это было в начале, а потом меня понесло и добавились:


  • управление уличным фонарём (LED прожектором)
  • сигнализация на основе датчика движения, сирены и уличного фонаря
  • учёт энергии потреблённой котлом за день/месяц/год + за каждый месяц года
  • режим сигнализация только медленным миганием фонаря
  • режим сигнализации быстрым миганием фонаря и короткими гудками сирены
  • режим сигнализации быстрым миганием фонаря и постоянным воем сирены

Цель написания статьи — поделиться опытом, описать что то на русском, что я не смог найти в интернете. Думаю, статья будет полезна начинающим Arduino самодельщикам, которые уже немного знакомы с программированием, т.к. совсем уж базовые вещи я не описывал. Я старался писать код как можно более понятным, надеюсь это у меня получилось.


Что было в начале

Изначально проект был реализован на дикой связке Arduino Nano + ESP8266, но ESP не как шилд, а как отдельное устройство. Почему так? Да потому что это всё у меня уже было, а денег не было от слова совсем, поэтому покупать новое железо не хотелось принципиально. Почему ESP не как шилд? Сейчас уже даже и не вспомню.

Arduino рулила всеми процессами, потому что имела необходимое количество GPIO, а ESP отправляла все данные на сервер Blynk, потому что умела в интернет и не имела достаточно GPIO. Соединялись они собой через UART, и пересылали JSON с данными друг другу. Схема необычная, но проработала год почти без нареканий. Кому интересно могут посмотреть кодок.

Сразу оговорюсь, программировать я тогда не сильно умел (да и сейчас хотелось бы лучше), поэтому беременным и детям лучше не смотреть. К тому же писалось всё в Arduino IDE, не к ночи будет помянута, что сильно ограничивало в плане рефакторинга, очень уж там всё примитивно.


Железо

Итак, прошёл год, финансы позволили купить ESP32 devkit v1, которая имеет достаточно GPIO, умеет в интернет и вообще супер контроллер. Кроме шуток, по итогам работы она мне сильно понравилась.

Перечень железа:


  • ESP32 devkit v1 noname China
  • 3 датчика температуры DS18B20, температуры внутри дома, снаружи и температуры теплоносителя в трубах
  • блок из 4 реле
  • pir датчик HC-SR501

Схему рисовать не буду, думаю всё будет понятно из макросов с названиями пинов.


Почему FreeRTOS и Arduino Core

На Arduino написаны куча библиотек, в частности тот же самый Blynk, поэтому от Arduino Core особо то и не уйдёшь.

FreeRTOS потому что позволяет организовать работу маленькой железки похожей на работу полноценного промышленного контроллера. Каждую задачу можно вынести в свою таску, останавливать её, запускать, создавать когда надо, удалять — всё это намного гибче, чем написание длинной портянки Arduino кода, когда в итоге всё выполняется по очереди в функции loop.

При использовании FreeRTOS каждый таск выполнится в строго заданное время, лишь бы хватило мощности процессора. Напротив, в Arduino весь код выполняется в одной функции, в одном потоке, если что то притормозило — остальные задачи выполнятся с задержкой. Особенно это заметно при управлении быстрыми процессами, в этом проекте это мигание фонарём и гудки сиреной, будут рассмотрены ниже.


Про логику


Про FreeRTOS таски

Ссылка на весь кодок проекта.
Итак, при использовании FreeRTOS функция setup играет роль функции main, точки входа в приложение, в ней создаются FreeRTOS tasks (далее таски), функцию loop можно не использовать вообще.

Рассмотрим небольшой таск по вычислению температуры теплоносителя:

void calculate_water_temp(void *pvParameters)
{
   while (true)
        {
        if (heating_mode == 3) {}
        else
        {
            if (temp_outside > -20)
                max_water_temp = 60;
            if (temp_outside <= -20 && temp_outside > -25)
                max_water_temp = 65;
            if (temp_outside <= -25 && temp_outside > -30)
                max_water_temp = 70;
            if (temp_outside <= -30)
                max_water_temp = 85;
        }
        vTaskDelay(1000 / portTICK_RATE_MS);
    }
}

Объявляется как функция, которая должна принимать в себя _void pvParameters, внутри функции организуется бесконечный цикл, я использовал while (true).

Производится нехитрый расчёт температуры (если позволяет режим работы) и затем таск усыпляется vTaskDelay(1000 / portTICK_RATE_MS) на 1 секунду. В этом режиме он не потребляет процессорное время, переменные, с которыми работал таск, другими словами контекст, сохраняется в стек, что бы достать их оттуда, когда придёт время.

Далее таск необходимо создать в setup. Делается это вызовом метода xTaskCreate:
xTaskCreate(calculate_water_temp, "calculate_water_temp", 2048, NULL, 1, NULL);
Много аргументов, но для нас являются значимыми calculate_water_temp — имя функции, содержащей код таска и 2048 — размер стека в байтах.

Размер стека изначально ставил всем по 1024 байт, далее вычислял нужный методом тыка, если контроллер начинал падать с переполнением стека (что видно из вывод в uart), я просто увеличивал размер стека в 2 раза, если не помогало — ещё в 2 раза и так пока не заработает. Конечно это не слишком экономит память, но ESP32 имеет её достаточно, в моём случае можно было не заморачиваться с этим.

Также можно задать хендл для таска — ручка, с помощью которой таском можно управлять после создания, например — удалить. Это последний NULL в примере. Создаётся хендл так:
TaskHandle_t slow_blink_handle;
Далее, при создании таска в параметр xTaskCreate передаётся указатель на хендл:
xTaskCreate(outside_lamp_blinks, "outside_lamp_blynk", 10000, (void *)1000, 1, &slow_blink_handle);
И если мы хотим удалить таск, делаем так:
vTaskDelete(slow_blink_handle);
Как это используется можно можно посмотреть в коде таски panic_control.


Про FreeRTOS мьютексы

Мьютекс используется для исключения конфликтов между тасками при доступе к ресурсам типа uart, wifi и т.п. В моём случае понадобились мьютексы для wifi и доступа к флеш памяти.
Создаём ссылку на мьютекс:
SemaphoreHandle_t wifi_mutex;
В setup создаём мьютекс:
wifi_mutex = xSemaphoreCreateMutex();
Далее, когда нам нужен доступ к ресурсу таск берёт мьютекс, тем самым давая знать остальным таскам, что ресурс занят и не надо пытаться работать с ним:
xSemaphoreTake(wifi_mutex, portMAX_DELAY);
portMAX_DELAY — ждать бесконечно пока ресурс и мьютекс не освободятся другими тасками, всё это время таска будет спать.
После работы с ресурсом отдаём мьютекс что бы им могли пользоваться другие:
xSemaphoreGive(wifi_mutex);
Подробнее код можно поглядеть в таске send_data_to_blynk.

На практике неиспользование мьютексов не было заметно при работе контроллера, но при JTAG дебаге постоянно сыпались ошибки, которые исчезли после использования мьютексов.


Краткое описание тасок

get_temps — получение температуры с датчиков, раз в 30 сек, чаще не надо.
get_time_task — получение времени, с NTP серверов. Раньше время получалось из RTC модуля DS3231, но он стал глючить после года работы, поэтому я решил избавиться от него вовсе. Я решил что для меня это не несёт особых последствий, в основном время влияет на переключение временной зоны обогрева — день или ночь. Если интернет пропадёт во время работы контроллера, время просто застынет, временная зона просто останется прежней. Если контроллер выключиться и после включения не будет интернета, то время постоянно будет 0:00:00 — режим обогрева ночью.
calculate_water_temp — рассматривался выше.
detect_pir_move — получение сигнала движения с датчика HC-SR501. Датчик формирует логическую единицу +3.3В при обнаружении движения, что и обнаруживается с помощью digitalRead, кстати, пин для обнаружения для данного датчика должен быть подтянут к GND — pinMode(pir_pin, INPUT_PULLDOWN);
heating_control — переключение режимов отопления.
out_lamp_control — управление уличным фонарём.
panic_control — управление сиреной и прожектором при обнаружении движения. Для создания эффекта гудков сирены и мигания фонарём используются отдельные таски, outside_lamp_blinks и siren_beeps. При использовании FreeRTOS мигание и гудки работают просто идеально, ровно с теми интервалами что задано, на их работу не влияют другие таски, т.к. они живут в отдельных потоках. FreeRTOS гарантирует что код в таске выполнится в заданное время. При реализации этих функций в loop всё работало не так гладко, т.к. влияло выполнение другого кода.
guard_control — управление режимами охраны.
send_data_to_blynk — отправка данных в приложение Blynk.
run_blynk — таск для запуска Blynk.run() как того требует методичка по использованию Blynk. Насколько я понял это требуется для получения данных из приложения в контроллер. Вообще Blynk.run()должно быть в loop, но я принципиально не хотел туда ничего класть и сделал отдельным таском.
write_setting_to_pref — запись уставок и режимов работы для того что бы подхватить их после перезагрузки. О pref будет рассказано ниже.
count_heated_hours — подсчёт времени работы котла. Я сделал просто, если котёл включен в момента запуска таска(раз в 30 секунд), во флеш памяти значение по нужному ключу инкрементируется на единицу.
send_heated_hours_to_app — в этом таске значения извлекаются и умножаются на 0.00833 (1/120 часа), полученные часы работы котла отсылаются в приложение Blynk.
feed_watchdog — покормить Watchdog. Пришлось написать watchdog, т.к. раз в несколько дней контроллер мог зависнуть. С чем это связано — непонятно, может быть какие то помехи по питанию, но использование watchdog решает эту проблему. Таймер срабатывания watchdog 10 секунд, ничего страшного если контроллер не будет доступен в течение 10 секунд.
heart_beat — таск с пульсом. Когда я прохожу мимо контроллера, мне хочется знать что он работает нормально. Т.к. на моей плате нет встроенного светодиода, пришлось использовать светодиод UART — установить Serial.begin(9600); и писать в UART длинную строку. Работает неплохо.


ESP32 NVS wear leveling

Следующие описания довольно грубые, буквально на пальцах, только что бы передать суть вопроса. Более подробно
Для хранения данных в энергонезависимой памяти в Arduino используется EEPROM память. Это память небольшого объёма, в которой можно записывать и стирать каждый байт отдельно, в то время как flash память стирается только секторами.

В ESP32 нет EEPROM, но зато есть как правило 4 Mb flash памяти, в которой можно создавать разделы — для прошивки контроллера или для хранения пользовательских данных. Разделы для пользовательских данных бывают нескольких типов — NVS, FATFS, SPIFFS. Выбирать следует исходя из предполагаемого к записи типа данных.

Т.к. все записываемые данные в этом проекте типа Int, я выбрал NVS — Non-Volitile Storage. Этот тип разделов хорошо подходит для сохранения небольших по размеру, часто перезаписываемых данных. Что бы понять почему так, следует немного углубиться в организацию NVS.

Как и EEPROM, так и FLASH имеют ограничение на перезапись данных, байт в EEPROM может быть перезаписан от 100000 до 1 000 000 раз, сектор FLASH — так же. Если записывать данные раз в секунду, то получим 60сек х 60 мин х 24ч = 86 400 раз/сутки. То есть в таком режиме байт продержится 11 дней, что как бы немного. После чего байт станет недоступен для записи и чтения.

Для сглаживания этой проблемы, функции update() put() библиотеки EEPROM Arduino записывают данные только при изменении. То есть можно писать каждую секунду какие то уставки и коды режимов, которые изменяются довольно редко.

В NVS используется другой способ управления степенью износа (wear leveling). Как упоминалось выше, данные в сектор flash можно писать частями, но стереть можно только весь сектор. Поэтому запись данных в NVS осуществляется в своего рода журнал, этот журнал разделяется на страницы, которая помещается в одном секторе flash памяти. Запись данных осуществляется парами ключ: значение. По сути, это даже проще, чем с EEPROM, т.к. работать со значащим названием проще, чем с адресом в памяти.

Если сначала записать значение 1 по ключу somekey, а затем записать значение 2 по тому же ключу, то первое значение не удалится, только пометится как удалённое (Erased), а в журнал добавиться новая запись:

При попытке прочитать данные по ключу somekey будет возвращено последнее значение данного ключа. Т.к. журнал общий, то значения разных ключей хранятся рядом друг с другом по мере записи.

У страницы есть статус, Empty — пустая, без записей, Active — в неё в данный момент пишутся данные, Full — заполнена, писать в неё нельзя. Как только на странице кончается место, она из
Active переходит в Full, а следующая Empty страница становится Active.

Насколько я понял из документации на сайте Espressif и различных форумов, очищение страниц начинается когда свободные страницы подходят к концу. Если быть точнее, то согласно вот этому, стирание произойдёт когда останется только 1 свободная страница.

Если страницу нужно очистить, то актуальные записи (Non-Erased), перемещаются на другую страницу, и страница затирается.

Таким образом, операция запись-стирание для каждой конкретной страницы происходит довольно таки редко, чем больше страниц — тем реже. Исходя из этого, я увеличил размер NVS раздела до 1 MB, при моих темпах записи этого хватит лет на 170, чего в общем то достаточно. Об изменении размера NVS раздела будет далее.

Для удобной работы с NVS в ESP32 для Arduino Core написана удобная библиотечка Preferences, как с ней работать написано здесь.


Немного о VisualGDB

Как только я начал работать с Arduino IDE, меня сразу удивил убогий функционал по сравнению с Visual Studio. Говорят, что VS тоже не фонтан, хотя меня устраивает, но писать что то более 50 строк в Arduino IDE мучительно больно и мучительно долго. Таким образом встал вопрос о выборе IDE для разработки. Т.к. я знаком с VS, я остановился на VisualGDB.

После Arduino IDE, разработка для ESP32 становится просто раем. Чего только стоят переход к определению, поиск вызовов в проекте и возможность переименовать переменную.


Изменение таблицы разделов ESP32 при работе с VisualGDB

Как говорилось выше, таблицу разделом ESP32 можно менять, рассмотрим как это можно сделать.
Таблица редактируется в виде csv файла, по умолчанию VisualGDB пишет следующую таблицу:

Name,   Type, SubType, Offset,  Size, Flags  
nvs,      data, nvs,     0x9000,  0x5000,  
otadata,  data, ota,     0xe000,  0x2000,  
app0,     app,  ota_0,   0x10000, 0x140000,  
app1,     app,  ota_1,   0x150000,0x140000,  
spiffs,   data, spiffs,  0x290000,0x170000,

Здесь мы видим раздел под NVS, два раздела под приложения и ещё несколько разделов. Из нюансов можно отметить, что app0(ваше приложение), всегда должно быть записано по смещению 0x10000, начиная от нулевого адреса, иначе загрузчик его не обнаружит. Также, смещения должны быть подобраны так, что бы разделы не "налезали" друг на друга. Сама таблица разделов пишется по смещению 0x8000. Как видно, размер NVS в данном случае 0x5000 — 20KB, что не очень много.

Я модифицировал таблицу разделов следующим образом:

Name,   Type, SubType, Offset,  Size, Flags  
app0,     app,  ota_0,   0x10000, 0x140000,  
nvs,      data, nvs,     ,  1M,  
otadata,  data, ota,     ,  0x2000,  
spiffs,   data, spiffs,  ,  0x170000,

Не забудьте добавить решётку перед Name, если будете пользоваться этой таблицей, это нужно что бы эта строка считалась комментарием.

Как видно, размер NVS увеличен до 1 MB. Если не указывать смещения, то раздел будет начинаться сразу за предыдущим, таким образом, достаточно указать смещение только для app0. CSV файлы можно редактировать в блокноте как txt и потом у сохранённого файла поменять разрешение на csv.

Далее, таблицу разделов надо преобразовать в бинарник, т.к. в контроллер она попадает именно в таком виде. Для этого запускаем конвертер:
c:\Users\userName\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.3\tools\gen_esp32part.exe part_table_name.csv part_table_name.bin. Первый параметр — ваш CSV, второй параметр — выходной бинарник.
Полученный бинарник следует положить в c:\Users\userName\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.3\tools\partitions\part_table_name.csv, после чего необходимо указать что бы при сборке решения брался именно он, а не таблица разделов по умолчанию. Сделать это можно, прописав название вашей таблицы в файле c:\Users\userName\Documents\ArduinoData\packages\esp32\hardware\esp32\1.0.3\boards.txt. В моём случае это esp32doit-devkit-v1.build.partitions=part_table_name
После этих манипуляций, VisualGDB при сборке приложения будет брать именно вашу таблицу разделов и класть её в
~project_folder_path\Output\board_name\Debug\project_name.ino.partitions.bin, откуда она уже зальётся в плату.


JTAG отладчик CJMC-FT232H

Насколько я знаю, это самый дешёвый отладчик, которым можно работать с ESP32, мне обошёлся примерно в 600р, на Aliexpress их полно.

При подключении отладчика Windows устанавливает на него неподходящие драйвера, которые необходимо поменять с помощью программы Zadig, там всё просто, не буду описывать.

Подключается к ESP32 devkit-v1 по следующей схеме:
FT232H — ESP32
AD0 — GPIO13
AD1 — GPIO12
AD2 — GPIO15
AD3 — GPIO14
После чего в Project -> VisualGDB Project Properties необходимо сделать следующие настройки:

После чего нажать на Test. Иногда бывает что соединение устанавливается не с первого раза, процесс как бы подвисает, тогда надо прерваться и повторить Test. Если всё в порядке, процесс тестирования соединения занимает около 5 секунд.

Я обычно собирал проект и заливал его через USB самой ESP32(не через отладчик), после чего начинал отладку по Debug -> Attach to Running Embedded Firmware. В коде можно ставить точки останова, смотреть значения переменных в момент останова и в окне Debug -> Windows -> Threads можно смотреть в каком FreeRTOS таске остановился код, что бывает полезно, если во время отладки произошла ошибка. Этих функций отладчика мне хватило для комфортной работы.
Когда я начал работать с NVS, отладка стала постоянно прерываться непонятными ошибками. Насколько я понял, так происходит потому что отладчику необходимо создавать что то типа дампа в разделе NVS по умолчанию, но в это время NVS уже используется контроллером. Конечно, это можно было бы обойти, создав 2 раздела NVS, один с дефолтным именем — для отладки, а другой для своих нужд. Но там уже не было ничего сложного, в добавляемом коде, он заработал с первого раза, так что я не стал это проверять.


Глюки ESP32

Как всякое устройство с Aliexpress, моя ESP32 плата имела свой, нигде не описанный глюк. Когда она пришла, я запитывал от платы кое какую периферию, работавшую по I2C, но по прошествии какого то времени, плата стала перезагружаться, если к ноге +5V было прицеплено любое потребляющее оборудование или даже просто кондесатор. Почему так — совершенно непонятно.

Сейчас я запитываю плату от китайской зярядки 0.7A, датчики ds18b20 от ноги 3.3V платы, а реле и датчик движения — от другой зарядки на 2А. GND нога платы разумеется соединена с GND контактами остального железа. Дёшево и сердито — наш вариант.


О результатах проекта

Я получил возможность гибко управлять отоплением в доме, экономя заработанные потом и кровью деньги. На данный момент если отопление поддерживает весь день 23 градуса при -5 — -7 снаружи, это где то 11 часов работа котла. Если днём поддерживать 20 градусов и греть до 23 только вечером, то это уже 9 часов работы котла. Мощность котла 6КВт, с текущей ценой киловатта 2,2р, это около 26,4р в сутки. Продолжительность отопительного сезона в наших краях 200 суток, средняя температура в отопительный сезон как раз около -5 градусов. Таким образом получается около 5000р экономии за отопительный сезон.

Стоимость оборудования не превышает 2000р, то есть затраты отобьются за несколько месяцев, не говоря уже о том, готовая система подобной автоматики стоила бы не меньше 20000р. Другое дело, что я потратил около недели чистого рабочего времени на написание прошивки и отладку, но в ходе работы я, например, наконец то понял что такое указатели в C++ и получил много другого опыта (например опыт многочасового дебага непонятных глюков). А опыт, как известно, сложно переоценить.

Скриншоты мобильного приложения Blynk:

Конечно, код в проекте не шедевр, но я писал это в условиях недостатка времени и делал упор в основном на читаемость. Рефакторить просто нет времени. Вообще, у меня есть много отмазок, почему мой код такой страшный, но эта самая любимая, поэтому на ней и остановлюсь, не буду развивать тему дальше.

Если моя писанина кому то поможет, буду искренне рад. Буду рад любым замечаниям и предложениям.

Список использованной литературы:


  1. http://microsin.net/programming/ARM/freertos-part1.html
  2. https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/storage/nvs_flash.html
  3. https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/partition-tables.html
  4. https://docs.blynk.cc/

Let's block ads! (Why?)

[Из песочницы] Сравнение производительности инструментов обхода блокировок\VPN

По мере того, как нам все активнее закрывают доступ к различным ресурсам в сети, все актуальнее становится вопрос обхода блокировок, а значит все актуальнее становится вопрос «А как же быстрее обходить блокировки?».

Оставим тему эффективности, с точки зрения обхода DPI\вайтлистов\блеклистов для другого случая, и просто сравним производительность популярных инструментов обхода блокировок.

Внимание: В статье под спойлерами будет много картинок.
Дисклеймер: данная статья сравнивает производительность популярных впн\прокси решений, в условиях приближенных к «идеальным». Результаты полученные и описанные здесь, вовсе не обязательно совпадут с твоими результатами в полях. Потому что циферка в спидтесте зачастую будет зависеть не от того, как производителен инструмент обхода, а от того, как твой провайдер его троттлит\QoSит\блокирует.

Методология


У облачного провайдера (DO) куплены 3 VPS в разных странах мира. 2 в нидерландах, 1 в германии. Выбирались наиболее производительный ВПС (по кол-ву ядер) из доступных для аккаунта по предложению за купонные кредиты.

На первом нидерландском сервере развернут приватный iperf3-сервер.

На втором нидерландском сервере поочередно разворачиваются различные серверы инструментов обхода блокировки.

На германском ВПС развернут образ десктопного линукса (xubuntu) с VNC и виртуальным рабочим столом. Этот ВПС является условным клиентом, и на него поочередно ставятся\запускаются различные клиенты проксей\ВПНов.

Измерения скорости проводятся от трех раз, ориентируемся на среднее, пользуемся 3 инструментами: в хромиуме через веб-спидтест; в хромиуме через fast.com; из консоли через iperf3 через проксичейнс4 (там, где нужно засунуть трафик iperf3 в проксю).

Прямое соединение “клиент”-сервер iperf3 дает скорость 2 гбит\с, в iperf3, и немного меньше в фасте\спидтесте.

Пытливый читатель может спросить, «а почему ты не выбрал speedtest-cli?» и будет прав.

Спидтест-кли оказался ненадежным\неадекватным способом измерения пропускной способности, по неизвестным мне причинам. Три последовательных измерения могли дать три совершенно разных результата, или например показать пропускную способность гораздо выше, чем скорость портов у моих ВПС. Возможно проблема в моей косорукости, но проводить исследования таким инструментом мне показалось невозможно.

Что касается результатов по трем способам измерения (спидтест\фаст\iperf) я считаю показатели iperf самыми точными\надежными\достоверными, а фаст\спидтест — справочными. Но некоторые инструменты обхода не позволяли завершить 3 измерения через iperf3 и в таких случаях, можно ориентироваться на спидтест\фаст.

спидтест дает разные результаты
image

Инструментарий


Всего было протестировано 24 разных инструмента обхода и\или их комбинаций, к каждому из них я дам небольшие пояснения и свои впечатления от работы с ними. Но по сути, цель была сравнить скорости shadowsocks (и кучи разных обфускаторов к нему) openVPN и wireguard.

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

Результаты


Strongswan\ipsec


По моим впечатлениям — очень просто в настройке, работает достаточно стабильно. Из плюсов — действительно кроссплатформенный, без нужды искать клиенты под каждую платформу.
download - 993 mbit\s; upload - 770 mbit\s


SSH-туннель


Про использование SSH в качестве инструмента туннеля не писал наверное только ленивый. Из минусов — “костыльность” решения, т.е. разворачивать его из удобного красивого клиента на каждой платформе не получится. Из плюсов — хорошая производительность, нет необходимости вообще что-то устанавливать на сервере.
download - 1270 mbit\s; upload - 1140 mbit\s

OpenVPN


ОпенВПН тестировался в 4 режимах работы: tcp, tcp+sslh, tcp+stunnel, udp.

Серверы ОпенВПН были настроены автоматически, установкой streisand.

Насколько можно судить, на данный момент только режим работы через станнел является устойчивым к продвинутым DPI. Причина аномального повышения пропускной способности при заворачивании опенВПН-tcp в станнел мне не ясна, проверки делались в несколько заходов, в разное время и разные дни, результат был таким же. Возможно это связано с настройками сетевого стека устанавливаемыми при разворачивании стрейзанд, пишите если есть идеи почему так.

openvpn\tcp: download - 760 mbit\s; upload - 659 mbit\s


openvpn\tcp+sslh: download - 794 mbit\s; upload - 693 mbit\s


openvpn\tcp+stunnel: download - 619 mbit\s; upload - 943 mbit\s


openvpn\udp: download - 756 mbit\s; upload - 580 mbit\s


Openconnect


Не самый популярный инструмент обхода блокировок, входит в пакет стрейзанд, поэтому решено было потестить и его.
download - 895 mbit\s; upload 715 mbit\s


Wireguard


Хайповый инструмент, пользующийся популярностью у западных пользователей, разработчики протокола даже получили какие-то гранты на развитие от фондов защиты. Работает как модуль ядра линукс, через UDP. С недавних пор появились клиенты для windows\ios.

Задумывался создателем как простой быстрый способ смотреть нетфликс находясь не в штатах.

Отсюда плюсы и минусы. Плюсы — очень быстрый протокол, относительная простота установки\настройки. Минусы — разработчик изначально не создавал его с целью обхода серьезных блокировок, и потому ваергард запросто детектится простейшими инструментами, в т.ч. wireshark.

протокол wireguard в wireshark

download - 1681 mbit\s; upload 1638 mbit\s


Что интересно, ваергард-протокл используется в стороннем клиенте tunsafe, который при использовании с тем же сервером ваергард, дает гораздо более худшие результаты. Вполне вероятно, что и windows-клиент ваергарда будет показывать такие же результаты:
tunsafe\client: download - 1007 mbit\s; upload - 1366 mbit\s


OutlineVPN


Аутлайн это имплементация шэдоусокс сервера и клиента с красивым и удобным гуем от гугловского jigsaw. В windows, клиент аутлайн представляет собой просто набор оберток для бинарников shadowsocks-local (клиент shadowsocks-libev) и badvpn (tun2socks бинарник, направляющий весь трафик машины в локальный socks-прокси).

Когда-то шэдоусокс был устойчив к великому китайскому фаерволлу, но судя по последним отзывам, сейчас это уже не так. В отличе от шэдоусокс, «из коробки» не поддерживает подключение обфускации через плагины, но это можно сделать ручками, повозившись с сервером и клиентом.

download - 939 mbit\s; upload - 930 mbit\s


ShadowsocksR


ShadowsocksR это форк оригинального шэдоусокс, написанного на питоне. По сути представляет собой шэдоусокс к которому намертво приколотили несколько способов обфускации трафика.

Существуют форки ssR на libev и чем-то еще. Низкая пропускная способность вероятно обусловлена кодом\языком. Оригинальный шэдоусокс на питоне не сильно быстрее.

shadowsocksR: download 582 mbit\s; upload 541 mbit\s.


Shadowsocks


Китайский инструмент обхода блокировок, рандомизирующий трафик и прочими замечательными способами мешающий автоматическому анализу. До недавнего времени не блочился GFW, говорят, что сейчас блочится, только если включать UDP-реле.

Кроссплатформенный (есть клиенты под любую платформу), поддерживает работу с PT по типу торовских обфускаторов, есть несколько своих или адаптированных к нему обфускаторов, быстрый.

Есть куча имплементаций клиентов и серверов шэдоусокс, на разных языках. В тестировании в качестве сервера выступал shadowsocks-libev, клиенты — разные. Самым быстрым линукс-клиентом оказался shadowsocks2 на go, распространяемый в качестве дефолтного клиента в streisand, насколько производительнее shadowsocks-windows сказать не могу. В большинстве дальнейших тестов в качестве клиента использовался именно shadowsocks2. Скрины с тестированием чистого shadowsocks-libev не делались, из-за очевидного отставания данной реализации.

shadowsocks2: download - 1876 mbit\s; upload - 1981 mbit\s.


shadowsocks-rust: download - 1605 mbit\s; upload - 1895 mbit\s.


Shadowsocks-libev: download — 1584 mbit\s; upload — 1265 mbit\s.

Simple-obfs


Плагин к шэдоусокс, сейчас в статусе “depreciated” но все еще работает (хотя и не всегда хорошо). Во многом вытеснен плагином v2ray-plugin. Обфусцирует трафик или под хттп-вебсокет (и позволяет спуфать хедеры\хост назначения, делая вид что ты идешь смотреть не порнхаб, а например, сайт конституции рф) или под псевдо-tls (псевдо, потому что не использует никаких сертификатов, простейшие DPI типа бесплатного nDPI детектят как “tls no cert”. В tls-режиме спуфать хедеры уже не получается).

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

shadowsocks\s-obfs-tls: download - 1618 mbit\s; upload 1971 mbit\s.


shadowsocks\s-obfs-http: download - 1582 mbit\s; upload - 1965 mbit\s.


Симпл-обфс в хттп режиме также может работать через реверс-прокси CDN (например, cloudflare), таким образом для нашего провайдера трафик будет выглядеть как хттп-плейнтекст трафик до cloudflare, это позволяет чуть лучше спрятать наш туннель, а заодно разделить точку входа и выхода трафика — провайдер видит что твой трафик идет в сторону ip-адреса CDN, а экстремистские лайки на картинках проставляются в этот момент c ip-адреса VPS. Надо сказать что именно с-обфс через CF работает неоднозначно, периодически неоткрывая некоторые хттп-ресурсы например. Так, потестить аплоад используя iperf через shadowsocks\s-obfs+CF не удалось, но судя по результатам спидтеста, пропускная способность на уровне shadowsocks\v2ray-plugin-tls+CF. Скринов с iperf3 не прикладываю, т.к. на них ориентироваться не стоит.
download (speedtest) - 887; upload (speedtest) - 1154.


Download (iperf3) — 1625; upload (iperf3) — N\A.

v2ray-plugin


V2ray-plugin пришел на замену симпл-обфс в качестве основного “официального” обфускатора для сс-либев. В отличие от симпл-обфс его пока нет в репозиториях, и нужно или качать заранее собранный бинарник, или компилять самому.

Поддерживает 3 режима работы: дефолтный, хттп-вебсокет (с поддержкой спуфинга хедеров хоста назначения); tls-вебсокет (в отличие от с-обфс это полноценный tls-трафик, который распознается любым вебсервером\реверспрокси и например позволяет настроить терминацию tls на серверах клаудфлер или в nginx); quic — работает через udp, но к сожалению производительность квика в в2рей очень низкая.

Из преимуществ по сравнению с симпл-обфс: в2рей-плагин без проблем работает через CF в хттп-вебсокет режиме с любым трафиком, в тлс-режиме представляет собой полноценный tls-трафик, требует для работы сертификаты (например от let’s encrypt или самоподписанный).

shadowsocks\v2ray-plugin-http: download - 1404 mbit\s; upload 1938 mbit\s.


shadowsocks\v2ray-plugin-tls: download - 1214 mbit\s; upload 1898 mbit\s.


shadowsocks\v2ray-plugin-quic: download - 183 mbit\s; upload 384 mbit\s.


Как я уже сказал, в2рей умеет ставить хедеры, и таким образом с ним можно работать через реверс-прокси\CDN (клаудфлер например). С одной стороны это усложняет обнаружение туннеля, с другой — может немного увеличить (а иногда снизить) лаг — тут все зависит от расположения вас и серверов. На данный момент CF тестирует работу с quic, но пока этот режим недоступен (по крайней мере для бесплатных аккаунтов).
shadowsocks\v2ray-plugin-http+CF: download - 1284 mbit\s; upload 1785 mbit\s.


shadowsocks\v2ray-plugin-tls+CF: download - 1261 mbit\s; upload 1881 mbit\s.


Cloak


Клок это результат дальнейшей разработки обфускатора GoQuiet. Симулирует TLS трафик, работает соответственно через TCP. На данный момент автор выпустил вторую версию плагина, cloak-2, которая существенно отличается от оригинального клока.

По информации разработчика, первая версия плагина использовала механизм tls 1.2 resume session, чтобы спуфать адрес назначения для tls. После выпуска новой версии (клок-2) все страницы вики на гитхабе, описывающие этот механизм были удалены, в текущем описании шифрования\обфускации упоминания этого отсутствуют. По описанию автора первая версия клок не используется из-за наличия “критических уязвимостей в крипто”. На момент проведения тестов была только первая версия клоак, бинарники ее все еще лежат на гитхабе, а кроме всего прочего, критические уязвимости не сильно важны, т.к. шэдоусокс точно так же шифрует трафик, как и без клока, и на крипто шэдоусокса влияния клоак не оказывает.

shadowsocks\cloak: download - 1533; upload - 1970 mbit\s


Kcptun


kcptun использует в качестве транспорта протокол KCP и в некоторых особых случаях позволяет достичь повышения пропускной способности. К сожалению (или к счастью) это во многом актуально для пользователей из КНР, часть мобильных операторов которой усиленно троттлит TCP и не трогает UDP.

Kcptun чертовски прожорлив, и запросто загружает на 100% 4 зионоядра при тестировании 1 клиентом. Кроме того, плагин “медленный”, а так же при работе через iperf3 не заканчивает тесты до конца. Ориентируемся по спидтесту в браузере.

shadowsocks\kcptun: download (speedtest) - 546 mbit\s; upload (speedtest) 854 mbit\s.


Заключение


Нужен простой быстрый ВПН, чтобы завернуть трафик всей машины? Тогда ваш выбор — ваергард. Хотите проксей (для избирательного туннелирования или разделения потоков\виртуальных персон) или вам важнее обфусцировать трафик от серьезных блокировок? Тогда смотрите на шэдоусокс с tls\http обфускацией. Хотите быть уверены, что ваш интернет будет работать, пока работает интернет вообще? Выбирайте проксирование трафика через важные CDN, блокировка которых приведет к отвалу половины интернета в стране.
сводная таблица, сортировка по скачиванию

Let's block ads! (Why?)