Как понять, чем сейчас дышит Киев: тернистый хардварный путь ЛУН
Привет! Мы команды «ЛУН Місто» и факультета радиофизики, электроники и компьютерных систем КНУ им. Шевченко (ФРЕКС). Полтора года назад мы решили ответить на вопрос «Чем в данный момент дышат Киев и пригород?». Для этого пришлось разработать свои станции качества воздуха — «ЛУН Місто Air». Всего в создание нашей системы мониторинга воздуха было вовлечено около 10 человек. Костяк команды — шесть человек.
Качество воздуха — это очень важно. По данным ВОЗ, ежегодно от загрязнения воздуха в мире умирают несколько миллионов человек. Девять из десяти человек на земле дышат плохим или умеренно плохим воздухом. И каждый житель большого города наверняка сталкивается с проблемой загрязнения лично.
В этой статье расскажем веселые и серьезные истории о том, как мы прошли путь разработки от громоздкого аппарата до компактной outdoor-станции измерения качества воздуха, передающей данные в real-time.
Какая задача была изначально
Разработать портативную outdoor-станцию оценки качества воздуха, покрыть Киев сетью таких приборов и открыть доступ к данным о состоянии воздуха для всех желающих.
Определившись с задачей, мы столкнулись с рядом вопросов, которые предстояло решить. Вот некоторые из них:
- Что будем измерять?
- Как именно будут производиться замеры?
- Как будет выглядеть станция?
- Должна ли станция питаться от сети или работать автономно?
- Подключаться к Wi-Fi или использовать мобильную связь?
Измерять решили мелкодисперсную пыль (PM1, PM2.5, PM10) — очень мелкие частички, которые не видны невооруженным глазом. Из-за своего малого размера они могут проникать через природные барьеры организма в кровь. Высокая концентрация этих частичек плохо влияет на работу сердечно-сосудистой системы, легких, мозга. Именно концентрацию PM2.5 измеряют многие indoor-станции Китая, где проблема качества воздуха актуальна давно.
Начав сравнивать разные сенсоры измерения мелкодисперсной пыли, мы остановили выбор на конфигурациях сенсора Plantower PMS — 3003/5003/7003/A003. Он работает на основе рассеивания лазерного излучения, как в профессиональных калиброванных сенсорах. Плюс PMS используется в устройствах, прошедших тестирование американской программы оценки эффективности работы датчиков качества воздуха AQ-SPEC.
Вначале мы рассматривали также сенсор SDS, но он не давал «сырые данные» по частицам, чтобы можно было самостоятельно вычислить концентрации. И в некоторых случаях этот сенсор занижал показатели.
Как разрабатывали прототип
Спустя месяц работы, который мы начали с рисерча научных статей по теме, у нас был первый прототип станции. Мы назвали его просто «Станция в коробке»:
Сенсор, помещенный в квадратный пластиковый корпус с отверстиями для вентиляции, передавал данные по GSM. Коробка была неплоха, но не соответствовала нормам ЕС оценки качества воздуха. Прежде всего пункту о том, что сенсор должен крепиться на расстоянии 50 см от стены здания, чтобы обеспечить чистоту замеров. Наш эксперимент тоже показал, что размещение на стене нежелательно — пыль с нее дает пики.
Мало того, такая конструкция ограничивала воздухозабор, что искажало показатели. Нам нужна была конструкция, которая, с одной стороны, не мешала бы замерам, а с другой — защищала от осадков сенсоры и мини-компьютер, принимающий данные с них.
Так мы перешли ко второму прототипу. Назвали его «Танк да Винчи»:
Танком он стал из-за колпака на конце метровой пластиковой трубы. Форма колпака напоминала чертежи да Винчи. На самом же деле и трубу, и колпак для прототипа мы купили в обычном строительном супермаркете. С покупкой труб проблем не возникло, а за колпаками пришлось поохотиться — объехать пару супермаркетов и скупить там все.
В трубе располагались power bank и провод. В колпак втиснули сенсоры и мини-копьютер. Люди, видя нас с этой странной конструкцией, озирались. Но нам нужно было протестировать влияние высоты на показатели сенсоров, поэтому мы установили несколько станций на общих балконах одной из многоэтажек Киева. Чтобы станции находились четко одна под другой.
Чтобы отпугнуть не знающих физики хулиганов, наклеили на станции таблички «Осторожно! Под гравитацией!». Первой же ночью одну станцию сломали — украли сенсоры (видимо вор интересовался наукой). Вторую станцию увели полностью. Мы шутим, что провели тогда не столько технический, сколько социальный эксперимент.
Так мы поняли, что размещать станции нужно не на открытой общественной территории, а на частных балконах или за окнами квартир. Пришло осознание, что в будущем сеть датчиков будет работать благодаря тестировщикам-волонтерам, в жилье которых будут располагаться станции проверки качества воздуха.
Это дало новый виток разработки. Громоздкую странную трубу вряд ли кто-то захочет вешать на окно своей квартиры, ее сложно крепить, она перекрывает вид. Пришлось работать над более элегантным решением.
Третий вариант станции получил кодовое название «Селфи-палка».
Помогла случайность. В лаборатории под руку попалась алюминиевая трубка. Легкая, прочная, приятная на вид — идеальное решение для конструкции.
Отдельным вызовом было крепление к оконной раме. Мы печатали на 3D-принтере разные виды крепежа, тестировали их на универсальность. В итоге пришли к варианту из того же легкого и прочного алюминия.
Параллельно все время тестировали сами сенсоры. К примеру, проводили эксперимент по влиянию электромагнитного излучения на показатели датчиков (при близком расположении источника оно давало наводки). Еще один эксперимент был проведен для оценки идентичности показаний
Еще нужна была калибровка. Сначала мы проверяли, одинаковые ли показатели дают станции в равных условиях. Затем калибровали с нашим эталоном — профессиональной финской станцией, внесенной в реестр утвержденных типов средств измерительной техники Украины.
В ходе экспериментов третий прототип станции менялся несколько раз. Он становился все компактнее. Быстро менять корпусы позволяло то, что все пластиковые детали мы печатали на 3D-принтере. Несколько часов — и готово.
Исследования подсказали и то, что сенсоры от микрокомпьютера нужно отделять. Этот подход реализован в «Селфи-палке».
В итоге сенсоры находятся за окном на конце алюминиевой трубки, под тарелкой, прикрывающей их от дождя. А микрокомпьютер располагается в квартире: так его излучение не влияет на датчики, а на него не влияет погода.
Это принципиально отличает станции «ЛУН Міcто Air» от других, где сенсор и микрокомпьютер находятся рядом. Такая конструкция станции — наше ноу-хау, оно позволяет получать более точные показатели и сделать станцию более долговечной.
Но сенсоры на улице тоже хотелось защитить. Как это сделать? Покрыть лаком. Забежали в первый попавшийся супермаркет — купили прозрачный лак для ногтей с витамином Е. Он очень вонял. И еще сильнее воняла жидкость для снятия лака. Рады были перейти на профессиональный лак для микросхем :)
Также в процессе экспериментов мы отказались от передачи данных по GSM — используем Wi-Fi. GSM давала наводки — влияла на показания сенсоров.
Итак, путем научного подхода и месяцев экспериментов мы разработали эффективную конструкцию станции, а также пережили множество забавных историй. Станция получилась интересной на вид, легкой, максимально, как для бета-этапа, точной и надежной. Это не финал, но хороший старт.
А теперь о программной части
При создании станции были следующие требования:
- Сохранение данных при отсутствии интернет-соединения.
- Сжатие данных.
- Модульность для сравнительно легкого добавления новых датчиков без вмешательства.
- Возможность независимой работы датчиков для предотвращения потери данных.
- Автораспознавание сенсоров и подключение в режиме Plug and Play.
Все это реализовано на Python. Дополнительно рассматривали Lua, но в нашем случае была более актуальна читаемость кода и простота отладки всеми участниками команды, нежели скорость. Из-за этого не использовали и C/C++/Golang, пока попросту не встретились с блоками, которые требуют относительно высокой производительности.
Также была нужна кроссплатформенность без лишних усилий, чтобы не привязываться к аппаратной платформе. Она была особенно важна на этапе выбора платформы, поскольку мы тестировали разные чипы на стабильность без необходимости адаптации софта под каждую новую аппаратную платформу.
Во время тестирования часто сталкивались с нестабильным Wi-Fi — так появилось сохранение данных с архивацией и возможностью выгрузки после восстановления. Одна с тестовых станций таким образом сохранила данные за последние три дня, которые удалось успешно выгрузить.
На серверной части API реализован на Go, хотя первая версия была на JavaScript. По мере возрастания нагрузки и усложнения логики обработки перешли на Go. Рассматривали также Rust, но для наших задач возможностей Go целиком хватает.
В качестве балансировщика используется Nginx. База данных — InfluxDB. Остановились на ней из-за сравнительно высокого сжатия данных, поскольку данные у нас на станциях снимаются каждую секунду.
Выводы
Если подсуммировать весь опыт в нескольких тезисах, получим:
- создать прибор с нуля сложно, но интересно;
- для точности показаний нужны эксперименты и научный подход;
- ЗD-принтер удобен для прототипирования: можно легко и быстро усовершенствовать конструкцию;
- готовые сенсоры мало просто купить — нужно изучить их работу и откалибровать;
- список того, что может влиять на показатели, длинный — нужно постараться выявить каждый фактор и учесть его.
В планах — установить в Киеве и пригороде 200 станций, работать над стабильностью и точностью, прокачать корпус. Также думаем над легкостью и скоростью масштабирования станций — сейчас надо очень много паять :)