Официальный сайт компании Arduino по адресу arduino.cc
унифицированный драйвер для датчиков давления
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 23/05/2020 - 00:01
Пробую баловаться с разными датчиками давления BMP085/BMP180, BMP280, MS5611
в разных скетчах разные датчики, разные библиотеки. Но в общем-то почти одно и то же.
Сначала инициализация, считывание констант.
Потом по мере необходимости считываем давление, температуру.
Используя их вычисляем высоту над уровнем моря. И даже скорость изменения высоты.
замумукался подгонять скетчи для другого датчика.
Встречались ли кому унифицированные драйвера? Существееное здесь - одинаковые методы для разных моделей.
Тогда можно попробовать определить тип датчика, создать объект и далее уже по тексту использовать одни и те же методы для разных датчиков.
Adafruit Unified Sensor Driver https://github.com/adafruit/Adafruit_Sensor
Датчиков давления там всего два+ BME280.
Явно не универсальное решение.
У BMP180 и BMP280 разные способы вычислений метрик. MS5611 вообще отличается от бошевских, полагаю. Сомневаюсь, что кому-то специально вперлось писать библиотеку для того, чтобы их однотипно обрабатывать. Потому как в одной системе эти датчики наврядли встретятся и смысла лепить всё в кучу - ноль целых ноль десятых.
Пробую баловаться с разными датчиками давления BMP085/BMP180, BMP280, MS5611 . В разных скетчах разные датчики, разные библиотеки. Но в общем-то почти одно и то же. Сначала инициализация, считывание констант. Потом по мере необходимости считываем давление, температуру. Используя их вычисляем высоту над уровнем моря. И даже скорость изменения высоты.
Тогда можно попробовать определить тип датчика, создать объект и далее уже по тексту использовать одни и те же методы для разных датчиков.
Мне кажется, что вам самое милое дело написать подобный драйвер самому. Судя по написанному выше вы уже половину пути прошли, делайте базоавый класс "датчик давления" и потом производные для каждого типа.
Да, это так. Но на "выхлопе" нужны около 3х:
Init
GetPressure
GetTemperature
GetAltitude
Крайний, возможно, вычисляется по общей для всех типов формуле.
В разных библиотеках разных датчиков - разные:
порядок и типы входных параметров, разное их количество,
некоторые еще и используют глобальные переменные с разными типами
Пока что от самосборки останавливает недостаток СПОКОЙНОГО времени, чтоб все это "зарисовать", сравнить, решить к какому общему интерфейсу привести. Но придется. )))
А при использовании - определяем что за датчик и делаем привязку этих публичных процедур(методов) к конкретным для нужного типа датчика.
Что-то похожее из искомого делается (или делалось) в проекте полетного контроллера baseflight (и его клонов)
Uni - библиотеку от фруктов Ада смотрел, но там не нашел всех этих манипуляций с чтением констант и вычислениями давления.
Если зачать все классы от одного родителя, у которого будет виртуальный метод, допустим, Read(), который и будет отвечать за реальное чтение железа разных даччиков, то получение вот этого
GetPressure
GetTemperature
GetAltitude
получится автоматом. Желательно, виртуалить и Init()
живой пример, давно так сделал, наследую все сенсоры от этого класса, от фоторезистора до DS18B20, горя не знаю
вот например, унаследованный от него D18B20
зато потом в loop() я могу невозбранно писать
чтение железа будет происходить не чаще, чем ReadInterval у каждого сенсора, а если значение какого-то из них изменилось, он положит соощение в очередь, которое будет обработано функцией Dispatch(const TMessage &);
За очередь сапщений - см. на моём гитхабе. Там, правда устаревшая версия, но идея та же.
Хотя, правда, чо это я...
)))) Есть что "прикинуть"