- PVSM.RU - https://www.pvsm.ru -

Электрический бес и углекислый газ

На днях из Америки приехало два любопытных устройства: микрокомпьютер electric imp и оптический датчик уровня углекислого газа в воздухе K30. Каждый из них любопытен по-своему, расскажу немного о каждом из них и о их соединении.

Электрический бес и углекислый газ

Electric imp

Импы — это вид бесенят в немецком фольклёре. А также сокращение от Interface Message Processor, одного из проектов-предшественников Интернета [1]. Создатели системы признают обоих предшественников. В жизни эта штука оказалась довольно покладистой, хорошо документированной платформой для разработки embedded приложений.

Статью-обзор интернет анонсов можно почитать в статье на хабре [2], я постараюсь рассказать о конкретике, и тонкостях, которые выяснились в процессе работы.

Как всё устроено.

Электрический бес и углекислый газ
Бабушка кормит импов, source: Wikipedia

Система состоит из трёх частей:

1. Сам imp. Его все видели на фотках, эта та самая SD-карточка со светодиодами внутри и фотодиодом на «верхнем» (противоположном к контактам) торце, через который в него прописывается конфигурация wifi-ной сети.
Электрический бес и углекислый газ [3]   Электрический бес и углекислый газ [4]

Повторю основные характеристики начинки «SD-шки»:

Процессор: Cortex M3 32 bit
Wifi: b/g/n (!), WEP, WPA, WPA2, WPS, WPS-PIN.
I/O: 6 ножек, которые можно сконфигурировать для GPIO или встроенных RS-232, I2C, SPI, ШИМ и АЦП. Есть встроенные счетчик импульсов и обработка прерываний по событиям на первой ноге. Назначение ножек можно менять в процессе выполнения программы.

Напряжение питания — 3.3V, максимум — 3.6V, логика не 5V tolerant. На моей платке с разъемом стоит стабилизатор напряжения, поэтому питать её можно любым напряжением, но сигналы должны быть 3.3V.

Производительность импа — отдельная, любопытная тема. ARM обещает для Cortex-M3 12.5 DMIPS/mW, что бы это ни значило. Я хочу в ближайшие дни померять производительность процессора и wifi импа какими-нибудь тестами, буду благодарен читателям, которые подскажут мне где искать общепринятые speed тесты для embedded платформ. Ну или просто посоветуют, как это лучше сделать.

Программируется имп на языке squirrel [5], о котором я не могу сказать ничего плохого. Это такой «скриптовый C». Т.е. синтаксис — от С, динамические типы, автоматическое управление памятью — от скриптов. Интерпретатор и компилятор байткода имеют размер 7К строк на C++. Интерпретатор можно скачать в виде исходника под linux или установить из macport-ов на маке. Классы, относящиеся к самому imp-у описаны в девелоперской вики [6]

2. Impee, «импуемый». Это разъем, в который вставляется imp. Каждый разъем имеет чип-идентификатор импуемого (ATSHA204 [7]), который участвует в шифровании трафика от импа к Планировщику. В планировщике в виде прямоугольничков отображаются именно impee, а не импы. И ваш код, или как они его называют, «прошивка» (firmware), закачивается при включении impee с любым вставленным импом. То есть импы можно свободно переставлять местами, если сохранённая конфигурация wifi позволит им подключиться к сети. Сразу после включения и установления связи во вставленный имп зальют прошивку, которая в Планировщике связана с этим impee. После заливки прошивки связь с интернетом может отключаться, имп будет продолжать работать, но связи с внешним миром, соответственно, не будет. Закачки firmware из локальной сети нет и делать они её не будут.

3. Планировщик (Planner). Это тот самый облачный сервис, который упоминают все обзоры electric imp-a. Бесплатный для девелоперских импов, а других я в продаже пока не видел.
Выполняет две независимые функции: создание и редактирование прошивок для импов и объединение импов и вимпов (виртуальных импов). Виртуальные импы на текущий момент — это модули, исполняемые на сервере electricimp.com, написанные самими электрическими имповцами. Свой код загружать в качестве виртуального импа пока нельзя. Сейчас есть ровно 10 вимпов, из них практически полезных — три: отправка и приём HTTP запроса, а также публикация данных на сервисе cosm.com.

Электрический бес и углекислый газ [8]

Программирование imp-а

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

1. Импа надо commission, ввести в эксплуатацию. Для этого его надо вставить в разъем (impee), вспышками (blink up) передать в него конфигурацию wifi-ной сети. Живьем это выглядит примерно так:

2. После этого в Планировщике появится новый голубой прямоугольник, соответствующий impee. В менюшке можно будет выбрать прошивку, предназначенную для этого устройства.

3. Прошивку надо написать и отладить. Это можно делать прямо в соответствующем интерфейсе планировщика. Он разделен на две части, в верхней пишется код, в нижней выводятся сообщения об ошибках и логи работы импа.
Мой кодик для imp-a [9], получающий и публикующий на cosm.com данные от датчика CO2, а также скриншот редактора [10] в пларировщике с логом вывода imp-a. Обратите внимание, что в коде нет процедур, относящихся к общению с cosm-ом. Это общение происходит через интерфейс output, к которому в планировщике подключён виртуальный имп (vimp), на скриншоте выше он салатового цвета.

Датчик CO2

Электрический бес и углекислый газ [11]  Электрический бес и углекислый газ [12]  Электрический бес и углекислый газ [13]

Измерять уровень CO2 в помещении интересно по трём причинам.

Во-первых, сам по себе этот газ в повышенных концентрациях неполезен. Слабое превышение приводит к ощущению несвежей головы и спёртого воздуха. Существенное повышение уровня CO2 (до 0.2 — 0.5%) приводит к учащённому сердцебиению, потере концентрации и легкой тошноте. Уровни больше 0.5% считаются токсичными, свыше 4% — опасными для жизни.

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

В третьих, CO2 удобно измерять оптическим методом (NDIR), что даёт исключительно хорошую временную, температурную и селективную (т.е. нечувствительность по отношению к другим примесям) стабильность.

Датчик K30 [14] — это самый дешёвый (65$) измеритель уровня CO2, устроенный по принципу nondispersive infrared sensor (NDIR, en.wikipedia.org/wiki/Nondispersive_infrared_sensor [15]). Можно сказать, что NDIR-сенсор — это спектрометр, измеряющий поглощение света единственной длины волны в зависимости от концентрации измеряемого газа. Для CO2 используется инфракрасный светодиод с длиной волны 4 микрометра.

Помимо аналогового выхода датчик умеет общаться с внешним миром по протоколам I2C и RS-232. Я не сумел подключиться к нему по i2c, ни imp-ом, ни ардуиной уно. При этом код для ардуины я взял из даташитов производителя, но ни одного байта принять (и кажется даже успешно послать, что совсем удивительно) от датчика не удалось. У меня нет логического анализатора, поэтому точной диагностики я не получил, но больше всего похоже было на несоответствие реализаций протокола i2c датчиком и контроллерами. Документация интерфейса i2c импа дополнительно тоже врёт — метод write возвращал -2, хотя должен был -1 для неуспешной отправки, в общем я решил обратиться к старому доброму RS232.

К сожалению, общаться с датчиком надо по тяжёлому промышленному протоколу ModBus [16]. К счатью, даташит приводит волшебную строку байтов, которую надо послать, чтобы прочитать данные измерений CO2. Так что я не стал глубоко вникать в промышленные протоколы, послал волшебную строку и получил нормальный ответ!

Сейчас уровень углекислого газа в помещении, где лежат мои имп и датчик можно посмотреть тут [17]. Сейчас датчик периодически находится в состоянии «кишки наружу» и отключается от косма, но надеюсь, когда вы будете читать эту статью, он будет online.

Выводы

Мне electric imp очень понравился за оригинальность и продуманность концепции, а также безглючность. Его облачная часть, включая документацию, пока носит следы бурной доработки, но надеюсь, что дело у ребят пойдёт и мы сможем использовать импов там, где это уместно и удобно: в домашней автоматизации, роботах и системах мониторинга.

Датчик углекислого газа K30 удобен и надёжен, если общаться с ним по интерфейсу RS-232. I2C требует отладки, я не единственный, кто столкнулся с этой проблемой.

Автор: variomap

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/diy-ili-sdelaj-sam/23391

Ссылки в тексте:

[1] проектов-предшественников Интернета: http://en.wikipedia.org/wiki/Interface_Message_Processor

[2] статье на хабре: http://habrahabr.ru/post/148119/

[3] Image: http://imgur.com/3vnup

[4] Image: http://imgur.com/zl0mV

[5] squirrel: http://www.squirrel-lang.org/

[6] девелоперской вики: http://devwiki.electricimp.com/doku.php?id=electricimpapi

[7] ATSHA204: http://www.atmel.com/Images/doc8740.pdf

[8] Image: http://imgur.com/JMv2P

[9] Мой кодик для imp-a: https://gist.github.com/4360766

[10] скриншот редактора: http://i.imgur.com/C8w92.png

[11] Image: http://imgur.com/JkjK9

[12] Image: http://imgur.com/eBQSl

[13] Image: http://imgur.com/DGW6n

[14] Датчик K30: http://www.co2meter.com/products/k-30-co2-sensor-module

[15] en.wikipedia.org/wiki/Nondispersive_infrared_sensor: http://en.wikipedia.org/wiki/Nondispersive_infrared_sensor

[16] ModBus: http://ru.wikipedia.org/wiki/Modbus

[17] посмотреть тут: https://cosm.com/feeds/94395

[18] Источник: http://habrahabr.ru/post/163751/