DIY или Сделай Сам / Сенсоры от Yoctopuce — погода дома

в 16:38, , рубрики: arduino, yoctopuce, давление, сенсоры, температура, метки: , , , ,

DIY или Сделай Сам / Сенсоры от Yoctopuce — погода дома
Некоторое время назад я занимался поисками датчика давления для одного сайта. Требования были простыми — подключение по USB и минимум паяльника, т.к. опыт использования данного инструмента у меня только в криптоанализе. Оказывается, что в отличие от температуры и влажности, китайцы ещё не освоили этот рынок, и наиболее простой и дешёвый вариант: купить любой барометр, направить на него веб-камеру и анализировать показания.
Несмотря на бредовость данной затеи, она серьёзно рассматривалась, но в конце-концов была отметена по банальной причине — ночью нужна подсветка. Т.е. работать система ночью не будет, а если будет, то потребует дополнительных усилий по настройке.
Из других вариантов, наиболее подходящим была USB Meteo Board от Sparkfun на основе Arduino, или самодельная система на основе того же Arduino или Netduino.
Но совершенно случайно я наткнулся на Yoctopuce, и понял, что это оно. Их сенсоры и датчики настолько меня поразили в мелочах, что я могу молчать и хочу поделиться с хабра-сообществом про эти замечательные датчики.
О yoctopuce

Это швейцарская фирма, с симпатичным осьминогом на логотипе. Название как раз и образовано от осьминога (octopuce) и приставки йокто- (10-24). Все свои устройства и API они начинают с приставки Yocto. Тем не менее, для удобства я их называю ёктопуками, и мне этот вариант весьма нравится. :)
Как я понял там трудится совсем немного людей, которые занимаются всякими умными штуками, и бонусом решили организовать производство и магазин всяких сенсоров. При этом, они ориентируются на 2 важных критерия: качество изготовления и простота использования.
Датчики

Доступных датчиков не так уж и много:Сенсор, читающий показания 5 кнопок

Датчик освещённости

Температурный датчик

Метео-устройство (давление, температа, влажность)

Устройство с двумя трёхцветными диодами

Реле

Контроллер для сервомоторов

micro-USB хаб для удобства работы с множеством устройств

Коннекторы, проводки, крепёж

Демо-устройство с зелёным диодом

У меня сейчас в наличии 4 из них: Yocto-Meteo, Yocto-Temperature и Yocto-Light и Yocto-Demo.
Общее

Все датчики имеют общие свойства и построены на одной базе:Упакованы в антистатичные пакеты с названием и датой производства (!!!)

Все датчики цифровые. Не требуют калибровки и специальных алгоритмов обработки результатов

Подключаются по micro-USB (драйверов не требуют, COM-порт не эмулируют)

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

Дружно живут вместе с другими устройствами

Бескорпусные

Имеют крепёжные отверстия

Вместо micro-USB можно припаять провода напрямую

Во многих случаях плату можно разломать на 2 части

Прошивка устройств и API постоянно обновляется

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

У ёктопуков отличное API (помните я говорил про простоту): оно делится на высокоуровневое и низкоуровневое. Высокоуровневое: поднимается http-сервер на 4444-ом порту, и к нему можно обращаться через JavaScript или PHP. Низкоуровневое: тут всё классически: Objective-C, Delphi, C++, C#.
Есть версии под Windows, Mac и Linux.
У всех устройств есть стандартные функции (имя модуля, потребляемый ток, время работы, версия прошивки) и специфичные (узнать температуру, включить лампочку и прочее).
Можно подписываться на события подключения нового устройства или отключения. Собственно рассказывать про код как-то неправильно, лучше показать:

static void Main()
{
string errmsg = "";
//подключаемся к хабу
if (yAPI.RegisterHub("usb", ref errmsg) != yAPI.SUCCESS)
{
Console.WriteLine(errmsg);
return;
}
yAPI.DisableExceptions();
//берём первые попавшиеся устройства нужных типов
YPressure ypr = YPressure.FirstPressure();
YHumidity yhu = YHumidity.FirstHumidity();
YTemperature yte = YTemperature.FirstTemperature();

while(true)
{
//забираем текущие значения и логгируем
double pres = ypr.get_currentValue();
double hum = yhu.get_currentValue();
double temp = yte.get_currentValue();
Console.WriteLine("{0:0}t{1:00}t{2:0.0}", pres, hum, temp);
Thread.Sleep(5000);
}
}

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

Кроме API, всегда можно обратиться на http://127.0.0.1:4444/ и посмотреть список подключённых устройств, перепрошить их, посмотреть текущие данные, и возможные функции. Т.е. даже без программирования всё можно вполне удобно использовать.
Бонусы

Большинство устройств могут при отсутствии подключения к компьютеру самостоятельно логгировать данные. Естественно, чудес тут нет, и питание им надо выдать, но тем не менее, такая дополнительная симпатичная возможность. При этом, по утверждению разработчиков, в случае переполнения памяти (~500,000 показаний), логгирование не остановится, не будет всё переписываться по кругу, вместо этого старые данные постепенно будут проряжаться (раз в минуту, раз в час, раз в день). Так что возможностей хватит надолго.
Сами устройства (те, что у меня в наличии)

Yocto-Meteo

Меряет влажность, давление и температуру. Влажность от 0 до 100%, температуру от -40° до 125° (точность сенсора ±0.2°, показания с точность до 1/16 градуса, API округляет до 0.1), давление в миллибарах, в мм рт.ст. можно привести самостоятельно при желании.
Плату можно разломать на 2 части — база и отдельно датчики, соединив их 4-мя проводами для передачи информации. Ломать можно в двух местах — под коннекторы или прямую пайку.
Датчик влажности можно закрыть специальной крышкой (продаётся отдельно), чтобы защитить его от пыли. Т.к. датчик влажности не имеет смысла упаковывать герметично, в отличие от температуры и давления.
Yocto-Temperature

Упрощённая и более дешёвая версия Yocto-Meteo, меряет только температуру.
Температурные датчики от метео-платы и этой, положенные вместе, показывают почти идентичную температуру ±0.2-0.4° (в пределах декларируемой погрешности).
Плата была разрезана, припаяны проводки, получилось как-то так:
В дальнейшем, термоусадочная трубка на датчике была обработана феном и изолентой. Сама плата была упакована с целью изоляции, а датчик упакован в свой же антистатичный пакет. Фанальный результат:
Yocto-Light

Меряет освещённость в люксах, ломается только в одном месте (под коннекторы нет отверстий). Разработчики использовали для создания умного почтового ящика (светили лазером и по прерыванию сигнала определяли наличие письма).
Yocto-Demo

Самое бестолковое устройство для тестирования размером 2 на 2 см. Можно управлять одним зелёным диодом, менять ему яркость, включать/выключать, различным образом мигать. Цель устройства — демонстрация возможностей и функционала. Можно разобраться с API и решить, как использовать другие, более функциональные и полезные устройства.
Покупка

Тут всё просто. Оплата карточкой (PayPal не поддерживается), в долларах, евро или швейцарских франках. Доставка обычной почтой (трекинг предоставляют), заняла месяц (за сутки ушла из Швейцарии посылка, дальше всё на совести нашей почты). От 100 франков доставка бесплатна.
Стоят датчики не очень дешёво, например, Yocto-Meteo ~$67, но в принципе, удобство работы и простота того стоит.
Аналоги

Их не так уж и много:Arduino и аналоги. Позволяет сделать более дешёвые и функциональные устройства, но нужно потратить больше времени на изготовление и настройку. Как вариант, готовый комплект USB Meteo Board, уже собранный профессиональными людьми за вас.

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

USBTenki — на некоторых фотографиях не очень весёлое качество сборки, ограниченное API (хотя кому-то может понравится тем что OpenSource).

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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js