0,0
рейтинг
24 декабря 2012 в 17:00

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

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



Electric imp



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

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


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



Бабушка кормит импов, source: Wikipedia

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

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

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

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

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



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


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

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


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

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

Датчик CO2



    

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

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

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

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

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

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

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

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

Выводы


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

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

Подробнее
Реклама

Самое читаемое

Комментарии (33)

  • 0
    Извиняюсь, если ModBus — тяжёлый, что же тогда лёгкое?
    • +1
      Мне представляется, что в случае бытового датчика CO2 это лишние возможности и лишняя сложность.

      Ну вот например я подключал Dylos DC1100 тоже по RS-232. У него такой «протокол»: он сам периодически шлёт результаты измерений в виде строки с числами через запятую. При желании можно послать ему символ «D» и он тогда вышлет архив в виде тех же строк с метками времени. Всё!

      K30 позволяет делать сложные вещи — калиброваться, менять алгоритмы усреднения и т.п., но в идеале там должен быть тупой как пробка протокол для случаев, когда ничего из этих возможностей использовать не хочется.
      • 0
        Всё-таки не соглашусь.
        «Волшебные» строки в даташите есть, а добавление «простого» варианта может приводить к ошибкам при наличии помех.
    • 0
      Опасными считаются концентрации выше 10%. И то не сами по себе, а за счёт вымещения кислорода.
      4% СО2 содержатся в обычном выдохе человека.
      Кроме того у инфракрасного датчика селективность не очень…
      • 0
        Добрый день!
        Я описывал эффекты, основываясь на данных отсюда: www.dhs.wisconsin.gov/eh/chemfs/fs/carbondioxide.htm
        Возможно они ошибочны, было бы любопытно увидеть ваши источники.

        Про селективность — ещё интереснее. Можете развить мысль?
        • +1
          Источники — во-первых опыт, а во-вторых наши родимые ГОСТы, СанПиНы, гигиенические нормативы и прочая макулатура на их основе (не смотря на то что чёткого норматива там нет). В третьих военные ГОСТы. Цифр и названий привести не могу в силу очевидых причин.

          Выжимка из гражданской макулатуры достаточно хорошо приведена тут: www.abok.ru/for_spec/articles.php?nid=4046

          По поводу селективности — я видимо соврал… Прошу прощения.
          В моих прибрах есть и инфракрасные и электрохимические сенсоры. Вот как раз у электрохимических селективность оставляет желать лучшего.
          • 0
            Спасибо, познавательная статья. Там, кстати цитируется наш ГОСТ:

            В соответствии с ГОСТ 8050-85 [1] «При концентрациях более 5 % двуокись углерода оказывает вредное влияние на здоровье человека… При этом снижается объемная доля кислорода в воздухе, что может вызвать явление кислородной недостаточности и удушья». Т.е. речь всё-таки о 5, а не о 10%, что неплохо согласуется с 4% из американских источников.
            • 0
              Вы путаете «вредное» и «опасное», «ровно 5%» и «более 5%» :)
              • 0
                Ну, ок, буду рад, если дипломированный токсиколог прокомментирует детали, для меня лично тут особых вопросов не осталось.
  • 0
    В 11:27 у Вас было 0.54% концентрация, если не секрет, с чем это связано?
    p.s. А вообще, imp, как устройство, позволяющее автономно по WiFi отдавать данные в реальном времени (пускай и на единственный пока что сервис), шикарно.
    • 0
      Это я демонстрировал коллеге работоспособность прибора, подул прямо на датчик.
      Вообще, бывают резкие колебания сразу после включения (где-то на сайте co2sensors я прочитал, что 2 минуты надо дать ему на калибровку и т.п.) и данные ползут вверх, когда батарейка начинает садиться, но в этом случае плавно.
  • 0
    Про CO2 впечатлило, может можете посоветовать готовый к использованию в домашних условиях измерительный прибор?
    • 0
      Да, конечно, тот же производитель, что продает датчики, продаёт и готовые приборы: www.co2meter.com/collections/fixed-wall-mount
      • 0
        По-моему, есть варианты подешевле…
        • 0
          Ну вот например жестоко китайский химический (не NDIR) сенсор стоит 40 баксов (http://www.aliexpress.com/item/NEW-Original-MG811-CO2-Carbon-dioxide-sensor/657010038.html)

          Так что сильно дешевле вряд ли получится.
          • 0
            эту штуку калибровать надо
    • 0
      www.conrad.nl/ce/nl/product/101316
      Вот есть такое за $25. Там есть скриншоты софта на сайте. На самом датчике светодиод, показывающий угрозу.
      О точности ничего не сказано. Немцы продают вроде
  • +1
    Впервые узнал об ИМПе из этой статьи… выходит так, что все данные неизбежно проходят через создателей устройства?
    • 0
      Все данные, которые вы отправляете наружу, да.
      Если логика работы системы замкнута на ножки устройства, то данные не покидают локальную сеть.
      • +3
        И по-другому никак? Для многих это будет существенным минусом при разработке устройств
        • 0
          С другой стороны, wr703 никто не отменял. Кроме секьюрности, еще и дешевле получится.
          • 0
            Да, это вариант, но со своими недостатками — физический размер больше, электричества жрет больше, ножек свободных меньше и они все GPIO, если я правильно путаю.
        • 0
          По-другому — никак. Такая концепция авторов проекта, они много раз отвечали на подобный вопрос и каждый раз говорили одно и тоже.
          Наверное это не для всех применений подходит, я с трудом представляю промышленную автоматизацию или управление медицинской техникой, которое зависит от неизвестно где и как живущего сервиса. Но вот для домашнего применения в этой штуке есть большие преимущества, поскольку решены проклятые вопросы: как соединять свои железки в сеть, как ими управлять по единой логике, как апгрейдить прошивку на лету (over 9000 постов на эту тему про ардуину), что делать, если железка ломается и т.д.
          • 0
            Я всё-таки не до конца понял, как он может общаться. Передавать данные на свой сервер, еще на cosmo, еще делать произвольные HTTP-запросы (которые будут идти через их сервера)?
            • 0
              Все сетевые запросы от imp-a всегда идут через их сервер. Там эти запросы обрабатываются «вимпами», блоками кода, которые выполняют реальные запросы к другим серверам и пересылают результаты этих запросов imp-у.

              Кстати, последние новости — vimp-ы теперь называются «агентами» (agents)
  • 0
    Вау! Эффект 25 кадра в действии! :)
    • 0
      Действительно, «вау». А чо за кадры-то?
      • +1
        Думаю, он имею ввиду способ программирования.
        • 0
          О, точно, спасибо за разгадку.
  • 0
    Кстати, вот добрый человек на девелоперском форуме electricimp.com нарисовал диаграмму состояний потребляемой мощности для imp-a.

  • +1
    Занятный бесенёнок, но отправлять данные на сторонний сервис, как-то не кошерно.
    Чует моё сердце, что в действительности это православная китайская мелкосхема,
    с розничной ценой 60$ за 10штук, а маркетологи буржуинские её чёртом окрестили и продвигают в интернетах.
  • 0
    Уже несколько месяцев использую измеритель уровня co2 встроенный в wifi-весы за $150 (withings). Любопытно, какой датчик сочли практичным использовать они.

    По идее, данные с такого датчика должны идти не столько на производство красивых графиков, но прямиком в систему вентиляции — дабы та прибавила или убавила поток воздуха с улицы.
    • 0
      Да, мне тоже любопытно, если разберёте весы, сфотографируйте внутренности :)
      По идее, должно быть что-то дешёвое, вряд ли это ndir датчик.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.