Домашняя метеостанция на GY-BMP280-3.3 и Ds18b20

Модуль bmp280 i2c датчик давления и температуры module Pressure Новинка! SPI

Домашняя метеостанция на GY-BMP280-3.3 и Ds18b20

библиотека примеры

https://github.com/adafruit/Adafruit_BMP280_Library

https://github.com/BoschSensortec/BMP280_driver

источник avislab.com

BMP085 и BMP180 очень похожи между собой, даже библиотека от BMP085 подходит к BMP180. BMP280 на их фоне – это довольно заметный шаг вперед.

Первое, что сразу замечаешь, – размер корпуса датчика. Он существенно уменьшился. Его 8-контактный корпус имеет размеры 2×2.5мм и высоту 0.95мм. Это требует аккуратности и некоторого опыта при монтаже.

Датчик имеет интерфейсы I2C и SPI. (BMP085 имеет только I2C, BMP180 были модели с I2C или SPI). Я использовал только I2C.

Вообще, логика работы датчика осталась такой же, но претерпела некоторые долгожданные улучшения. Как и прежде, в начале работы надо считать с датчика коэффициенты (они уникальны для каждого экземпляра).

Затем считывать показатели АЦП для температуры и давления и вычислять реальные значения температуры и давления по формулам, которые представлены в документации к датчику.

У BMP280 существенно улучшили температурную стабильность и увеличили разрешение АЦП до 20 бит для температуры и давления.

BMP280 имеет три режима работы:

  • SLEEP – режим сна,
  • FORCED – режим аналогичен BMP085 и BMP180. То есть, дали команду на измерение, подождали, считали значения, датчик перешел в спящий режим.
  • NORMAL – этот режим наиболее интересен и загоняет датчик в циклическую работу. То есть, он самостоятельно через определенное время, которое можно задать, выходит из режима сна и выполняет измерения, сохраняет данные в регистры памяти и вновь засыпает на указанное время.

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

Таким образом, для ваших конкретных задач, можно настроить программный фильтр и точность измерений с помощью следующих параметров:

  • OVERSAMPLING для температуры (16,17,18,19,20 бит)
  • OVERSAMPLING для давления (16,17,18,19,20 бит)
  • TSB – время ожидания датчика между измерениями (0.5,62.5,125,250,500,1000,2000,4000 мс)
  • FILTER_COEFFICIENT – коэффициент фильтра

Все эти изменения привели к таким улучшениям характеристик:

пример кода

#include
#include
#include
#include

#define BMP_SCK 13

#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10

Adafruit_BMP280 bme; //  работаем по шине I2C

//Adafruit_BMP280 bme(BMP_CS); // работаем по шине  hardware SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);
 
void setup() {
  Serial.begin(9600);
  Serial.println(F(“BMP280 test”));
 
  if (!bme.begin()) {  
    Serial.println(“Could not find a valid BMP280 sensor, check wiring!”);
    while (1);
  }
}
 
void loop() {
    Serial.print(“Temperature = “);
    Serial.print(bme.readTemperature());
    Serial.println(” *C”);
    
    Serial.print(“Pressure = “);
    Serial.print(bme.readPressure());
    Serial.println(” Pa”);

    Serial.print(“Approx altitude = “);

    Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
    Serial.println(” m”);
    
    Serial.println();
    delay(2000);
}

результат работы библиотеки

librariesBMP280examplesBMP280Test_Drotek

Для перевода из pressure pa в наши привычные mmhg, необходимо Pressure/133.3 =>99541,66/133,3 = 746,7491372843

подключение

VCC +3.3v (питание)GND GND (минус)SDL SDL(i2c)SDA SDA(i2c)CSB(+3.3v) выбор работы по шине i2c

Внимание для работы по i2c интерфейсу читаем даташит 28 страница

т.е. необходимо подключить вывод CSB  на плюс(3.3в)

адрес 76!!(i2c_scan) BMP280 barometric pressure sensor, но не 77 как это прописано в библиотеке

например тут (#define BMP280_ADDRESS                (0x76) Adafruit_BMP280.h)

Interface selectionInterface selection is done automatically CSB (chip select) status. If CSB is connected  to  VDDIO ,  the  I²C interface  is  active.  If  CSB  is  pulled  down,  the  SPI  interface  is  activated. After CSB  has  been  pulled  down  once  (regardless  of  whether  any  clock cycle  occurred),  the  I²C  interface  is  disabled until  the  next  power

Имеет повышенную точность и расширенный диапазон измерений.Совместим с Arduino и другими микропроцессорными платформами.

Выполнен в исполнении для наружного применения

дополнительная информация для обновленных ревизий модулей содержащих универсальный датчик AM2320(работает по однопроводной и i2c шине)

Информация от внимательного покупателя.

Если замкнуть 4 ножку датчика am2320 на землю (как и шло изначально), то датчик работает по однопроводной шине
Но обязательный подтягивающий резистор 10к на 2 ножке датчика и блокирующего конденсатора 0.1мк между + и – питания (на платке есть место под smd)

На плате есть посадочные места под подтягивающие резисторы для режима I2Cпо умолчанию он принудительно переведен  режим однопроводной линии, замыканием на землю 4 ножки датчика.

Сняв перемычку, распаяв подтягивающие резисторы, реализуется подключение по шине I2С Загрузив такую программу с источника http://arduino-projekte.webnode.

at/projekte/luftfeuchtesensor-am2320/ выводим результат в отладочный  монитор

#include

#include
MyAM2320I2C MyAM(0xB8 >> 1);
void setup()
{
  Serial.begin(9600);
  if(MyAM.isReady()) Serial.println(“AM2323 OK”);
  else Serial.println(“AM2323 ERROR”);

void loop()

{
  MyAM.readRaw(); //чтение данных с датчика
  Serial.println(MyAM.readHumidity());//выводим влажность
  Serial.println(MyAM.readTemp()); //выводим температуру
  delay(5000); //пауза 5 секунд
}

Распиновка:

  • Напряжение питания: 3.1 ~ 5.5VDC
  • Температурный диапазон: -40 ~ 80 ℃
  • Диапазон влажности: 0 ~ 99.9% RH
  • Погрешность: ± 0.5 ℃ ± 2% RH
  • Разрешение: 0.1 ℃ 0.1% RH

Габариты:

  • 9,99 грн
  • 49,00 грн
  • 33,00 грн
  • 103,55 грн -5% 109,00 грн
  • 75,00 грн
  • 12,00 грн
  • 69,30 грн -10% 77,00 грн
  • 67,85 грн
  • 59,00 грн
  • 51,25 грн
  • 19,00 грн
  • 119,00 грн
  • 40,00 грн
  • 65,25 грн
  • 7,40 грн
  • 119,00 грн
  • 48,00 грн
  • 40,00 грн
  • 145,00 грн
  • 49,00 грн
  • 44,72 грн
  • 95,00 грн
  • 59,10 грн
  • 54,00 грн
  • 47,00 грн
  • 89,00 грн
  • 89,00 грн
  • 145,00 грн
  • 82,00 грн
  • 379,00 грн

Page 3

Артикул dht22

Характеристики:Напряжение питания: 3,5-5,5 В.Диапазон измерения относительной влажности воздуха: 0 -100%Погрешность измерения влажности: +-2 %.Диапазон измерения температуры: -40~+80 °C.

Погрешность измерения температуры: +-0.5 °C.

комплектация датчик dht22-1шт

Подробнее

Нет в наличии товара

Будет доступен:

БЕСПЛАТНАЯ ДОСТАВКА НОВОЙ ПОЧТОЙ(отделение-отделение)
В ЗАКАЗАХ от 999 грн.В случае доставки наложенным платежом, доставка оплачивается только до покупателя, расходы по переводу средств, покупатель оплачивает самостоятельно.

За этот товар не начисляются бонусные баллы, т.к. по нему уже имеется скидка.

DHT22/AM2302 датчик температуры и влажности для Arduino, STM, AVR, PICИмеет повышенную точность и расширенный диапазон измерений.Совместим с Arduino и другими микропроцессорными платформами.Выполнен в исполнении для наружного применения

  • 9,99 грн
  • 49,00 грн
  • 33,00 грн
  • 129,00 грн
  • 75,00 грн
  • 12,00 грн
  • 69,30 грн -10% 77,00 грн
  • 67,85 грн
  • 59,00 грн
  • 51,25 грн
  • 19,00 грн
  • 119,00 грн
  • 40,00 грн
  • 65,25 грн
  • 7,40 грн
  • 119,00 грн
  • 48,00 грн
  • 40,00 грн
  • 145,00 грн
  • 49,00 грн
  • 44,72 грн
  • 95,00 грн
  • 59,10 грн
  • 54,00 грн
  • 47,00 грн
  • 89,00 грн
  • 89,00 грн
  • 145,00 грн
  • 82,00 грн
  • 379,00 грн

Даташит на датчик AM2302 dht22

Скачать (596.27k)

Источник: http://ardu.net/ru/datchiki-i-sensory/363-modul-bmp280-i2c-datchik-davleniya-i-temperatury-module-pressure-novinka-spi-120768573.html

Подключаем датчик давления BMP280 к ардуино

Домашняя метеостанция на GY-BMP280-3.3 и Ds18b20

Собираете квадрокоптер ? Или домашнюю метеостанцию ? Сегодня мы рассмотрим подключение датчика давления BMP280 к Arduino.

Датчики абсолютного атмосферного давления могут быть использованы для определения высоты над уровнем моря. Возможность такого измерения основана на физической модели атмосферного давления.

Принято считать, что давление на поверхность Земли, или произвольного предмета, зависит от высоты воздушного столба. Чем больше этот столб, тем значительнее давление.

Соответственно в низменностях высота столба и давление будут иметь большие значения, чем например, на горных вершинах. Примеры значений давления приведены в таблице:

Высота над уровнем моря (м)Давление (кПа)
Уровень моря0101,3
Уровень Мертвого моря-396106
Вершина Эвереста1005833

Зависимость давления от высоты выражена экспоненциальной функцией.

Для расчета высоты в метрах эта формула преобразуется в:

Где P0- давление на уровне моря. По умолчанию принимается равным 101.3кПа

Ph – давление на искомой высоте в кПа.

библиотека примеры

https://github.com/adafruit/Adafruit_BMP280_Library

https://github.com/BoschSensortec/BMP280_driver

BMP085 и BMP180 довольно схожи, в том числе и  библиотека от BMP085 может использоваться с BMP180. BMP280 по сравнению с ними – имеет огромное количество преимуществ по сравнению с ними.

Взяв в руки – сразу бросается в глаза размеры модуля которые стали существенно меньше. Они составляют  всего 2х2.5х0,1см (Д/Ш/В) , что несколько усложняет монтаж и требует аккуратности.

Датчик имеет интерфейсы I2C и SPI. (BMP085 имеет только I2C, BMP180 были модели с I2C или SPI). Я использовал только I2C.

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

  Затем считывать показатели АЦП для температуры и давления и вычислять реальные значения температуры и давления по формулам, которые представлены в документации к датчику.

У BMP280 существенно улучшили температурную стабильность и увеличили разрешение АЦП до 20 бит для температуры и давления.

BMP280 имеет три режима работы:

    SLEEP – режим сна,
    FORCED – режим аналогичен BMP085 и BMP180. То есть, дали команду на измерение, подождали, считали значения, датчик перешел в спящий режим.

    NORMAL – этот режим наиболее интересен и загоняет датчик в циклическую работу.

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

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

bmp280_filter

Таким образом, для ваших конкретных задач, можно настроить программный фильтр и точность измерений с помощью следующих параметров:

    OVERSAMPLING для температуры (16,17,18,19,20 бит)
    OVERSAMPLING для давления (16,17,18,19,20 бит)
    TSB – время ожидания датчика между измерениями (0.5,62.5,125,250,500,1000,2000,4000 мс)
    FILTER_COEFFICIENT – коэффициент фильтра

Все эти изменения привели к таким улучшениям характеристик:

пример кода

#include #include #include #include #define BMP_SCK 13 #define BMP_MISO 12 #define BMP_MOSI 11 #define BMP_CS 10 Adafruit_BMP280 bme; // работаем по шине I2C //Adafruit_BMP280 bme(BMP_CS); // работаем по шине hardware SPI //Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); void setup() { Serial.begin(9600); Serial.println(F(“BMP280 test”)); if (!bme.begin()) { Serial.println(“Could not find a valid BMP280 sensor, check wiring!”); while (1); } } void loop() { Serial.print(“Temperature = “); Serial.print(bme.readTemperature()); Serial.println(” *C”); Serial.print(“Pressure = “); Serial.print(bme.readPressure()); Serial.println(” Pa”); Serial.print(“Approx altitude = “); Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase Serial.println(” m”); Serial.println(); delay(2000); }

Источник: http://esial.ru/index.php/blog/stati/13-podklyuchaem-datchik-davleniya-bmp280-k-arduino

Сравнение барометров BMP085, BMP180 и MS5611

Домашняя метеостанция на GY-BMP280-3.3 и Ds18b20

МЭМС барометры часто используются в самодельных погодных станциях для измерения атмосферного давления и в беспилотных летательных аппаратах для определения высоты полета. И если для первого варианта с лихвой хватает точности даже устаревшего BMP085, то для стабилизации полета квадрокоптера нужен барометр как можно более точный.

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

Такая сборка размещается на универсальных полетных контроллерах, типа Ardupilot или MultiWii. Распространены и сборки на отдельной плате, которые еще называют — IMU с указанием степеней свободы.

Например, IMU 6DOF означает, что в устройстве есть два трехосевых датчика. На рисунке изображена типичная 10DOF сборка.

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

  • гиротахометр L3G4200D;
  • акселерометр ADXL345;
  • магнитометр HMC5883L;
  • барометр BMP085.

В принципе, такого набора вполне достаточно для уверенного полета в ручном режиме. Однако, этот беспилотник был создан не для управления с пульта, а прежде всего для автоматического полета. Включая автоматический взлет и посадку на базовую станцию. И как показала практика, именно для автоматических маневров по высоте барометр BMP085 совсем не годится. Его точность по паспорту — 0.5 метра.

В этой статье мы рассмотрим три популярных МЭМС барометра: BMP085, BMP180 и MS5611. Сравним их точность в различных условиях.

Барометр BMP085

На момент когда я собирал первую версию квадрокоптера был распространен именно этот датчик фирмы Bosch. Его характеристики:

  • измеряемое давление: от 300гПа до 1100 гПа (от 9000 до -500 метров над уровнем моря);
  • напряжение питания: от 1.8 до 3.6В;
  • рабочий ток: 5мкА при 1 опросе в секунду;
  • точность: 0.5м в самом быстром режиме и 0.25м в самом точном;
  • время измерения: до 3мс;
  • встроенный термометр;
  • интерфейс i2c.

Барометр BMP180

Барометр BMP180 является улучшенной версией BMP085. Его часто используют в современных полетных контроллерах. Основные характеристики этого датчика совпадают с BMP085, за исключением повышенной точности — до 0.17м.

Барометр MS5611

Самый продвинутый барометр, который не очень распространен из-за своей цены. Разработчиком датчика является компания MEAS Switzerland. Характеристики:

  • измеряемое давление: от 10гПа до 1200 гПа;
  • напряжение питания: от 1.8В до 3.6В;
  • рабочий ток: 1мкА при 1 опросе в секунду;
  • точность: до 0.1м в самом точном режиме;
  • время измерения: до 1мс;
  • встроенный термометр;
  • интерфейс i2c.

Как мы видим, заявленная точность составляет аж 10см, и это очень здорово. Время измерения 1мс в самом быстром режиме, и всего 9мс в самом точном. Еще и диапазон измеряемого давления больше, чем у BMP180 — можно летать в стратосферу

Источник: http://robotclass.ru/articles/barometer-test-bmp085-bmp180-ms5611/

Все в одном, BME280(BMP280). Датчик температуры, влажности и давления

Домашняя метеостанция на GY-BMP280-3.3 и Ds18b20

Очередная забавная штучка с АлиЭкспрес. Встречайте мега комбайн от BOSCH, цифровой датчик температуры,влажности,давления  BME280.

  По мнению некоторых один из самых точных датчиков по недорогой  цене. Имеет SPI (поддерживает 3-4-провода SPI) и I2C интерфейс.

Есть у него брат близнец BMP280 , единственное отличие в нем нету датчика влажности. Но давайте по порядку и подробней.

Характеристики :

  • Диапазон измерения давления: 300 – 1100 hPa (±1.0 hPa, 0 . . . 65 °C )
  • Диапазон измерения температуры: от -40  до 85 °C ( ±0.5 °C)
  • Диапазон измерения влажности: 0 — 100 % (20…80 %, 25 °C,  ± 3%) в BMP280 отсутствует!
  • Напряжение питания 3.3 В. Но в готовом модуле из Китая уже стоит стабилизатор и согласование уровней логики.
  • Пиковое потребление 714 µA, в режиме сна 0.3 µA
  • Время старта модуля: 2 ms

Датчик имеет три режима работы : Sleep mode, Forced mode, Normal mode.

  • SLEEP – режим сна,
  • FORCED – режим аналогичен BMP085 и BMP180. То есть, дали команду на измерение, подождали, считали значения, датчик перешел в спящий режим.
  • NORMAL – этот режим наиболее интересен и загоняет датчик в циклическую работу. То есть, он самостоятельно через определенное время, которое можно задать, выходит из режима сна и выполняет измерения, сохраняет данные в регистры памяти и вновь засыпает на указанное время.

Более подробно все это написано в Datasheet(BMP280) и Datasheet(BME280).

Подключение, библиотека, код

Мне совершенно не хочется разбираться во всех тонкостях работы с этим датчиком. По этому скачаем уже готовую библиотеку ( Adafruit_BMP280_Library )   GitHub или с нашего сайта и BME280 c GitHub , наш сайта.

Подключение к шине I2C (SCL и SDA контакты). 

Схема подключения достаточно проста:

  • VIN к контакту Arduino  3.3V или 5V
  • GND к контакту Arduino  GND
  • SCK к контакту Arduino Nano SCL (A5)
  • SDA к контакту Arduino Nano SDA (A4)

Тестовый скетч для BMP280 будет выглядеть так:

#include #include #define BMP_SCK (13)#define BMP_MISO (12)#define BMP_MOSI (11)#define BMP_CS (10) Adafruit_BMP280 bmp; // I2C void setup() {Serial.begin(9600);Serial.println(F(“BMP280 test”)); if (!bmp.begin()) {Serial.println(F(“Could not find a valid BMP280 sensor, check wiring!”));while (1);} /* Настройки по умолчанию */++bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Режим работы */Adafruit_BMP280::SAMPLING_X2, /* Температура передискретизация */Adafruit_BMP280::SAMPLING_X16, /* Давление передискретизация */Adafruit_BMP280::FILTER_X16, /* Фильрация. */Adafruit_BMP280::STANDBY_MS_500); /* Интервал включения. */} void loop() {Serial.print(F(“Temperature = “));Serial.print(bmp.readTemperature());Serial.println(” *C”); Serial.print(F(“Pressure = “));Serial.print(bmp.readPressure());Serial.println(” Pa”); Serial.print(F(“Приблизительная высота= “));Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */Serial.println(” m”); Serial.println();delay(2000);}

Возможные параметры :

/** Частота передискретизации датчика. *//** No over-sampling. */SAMPLING_NONE /** 1x over-sampling. */SAMPLING_X1 /** 2x over-sampling. */SAMPLING_X2 /** 4x over-sampling. */SAMPLING_X4  /** 8x over-sampling. */SAMPLING_X8  /** 16x over-sampling. */SAMPLING_X16   /** Режимы работы *//** Sleep mode. */MODE_SLEEP /** Forced mode. */MODE_FORCED /** Normal mode. */MODE_NORMAL /** Software reset. */MODE_SOFT_RESET_CODE  /** Уровень фильтрации данных датчиков. *//** No filtering. */FILTER_OFF /** 2x filtering. */FILTER_X2 /** 4x filtering. */FILTER_X4 /** 8x filtering. */FILTER_X8 /** 16x filtering. */FILTER_X16  /** Продолжительность ожидания в ms *//** 1 ms standby. */STANDBY_MS_1 /** 63 ms standby. */STANDBY_MS_63 /** 125 ms standby. */STANDBY_MS_125 /** 250 ms standby. */STANDBY_MS_250 /** 500 ms standby. */STANDBY_MS_500 /** 1000 ms standby. */STANDBY_MS_1000 /** 2000 ms standby. */STANDBY_MS_2000 /** 4000 ms standby. */STANDBY_MS_4000 /Максимальная задержка по datasheep

Для BME280 тестовый скетч будет таким :

#include #include #define SERIAL_BAUD 115200 BME280I2C bme; // Default : forced mode, standby time = 1000 ms // передискретизация = pressure Г—1, temperature Г—1, humidity Г—1, filter off, //Для примера настройки датчика не по дефолту BME280I2C::Settings settings(BME280::OSR_X1,BME280::OSR_X1,BME280::OSR_X1,BME280::Mode_Forced,BME280::StandbyTime_1000ms,BME280::Filter_Off,BME280::SpiEnable_False,BME280I2C::I2CAddr_0x76 // I2C address. I2C specific.); BME280I2C bme(settings); Возможные параметры

  • OSR_Off
  • OSR_X1
  • OSR_X2
  • OSR_X4
  • OSR_X8
  • OSR_X16
  • Mode_Sleep
  • Mode_Forced
  • Mode_Normal
  • StandbyTime_500us
  • StandbyTime_62500us
  • StandbyTime_125ms
  • StandbyTime_250ms
  • StandbyTime_50ms
  • StandbyTime_1000ms
  • StandbyTime_10ms
  • StandbyTime_20ms
  • Filter_Off
  • Filter_1
  • Filter_2
  • Filter_4
  • Filter_8
  • Filter_16

// void setup(){ Serial.begin(SERIAL_BAUD); while(!Serial) {} // Wait Wire.begin(); while(!bme.begin()) { Serial.println(“Could not find BME280 sensor!”); delay(1000); } switch(bme.chipModel()) { case BME280::ChipModel_BME280: Serial.println(“Found BME280 sensor! Success.”); break; case BME280::ChipModel_BMP280: Serial.println(“Found BMP280 sensor! No Humidity available.”); break; default: Serial.println(“Found UNKNOWN sensor! Error!”); }} //////////////////////////////////////////////////////////////////void loop(){ printBME280Data(&Serial); delay(500);} //////////////////////////////////////////////////////////////////void printBME280Data{ float temp(NAN), hum(NAN), pres(NAN); BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); BME280::PresUnit presUnit(BME280::PresUnit_Pa); //PresUnit_PaPresUnit_hPaPresUnit_inHgPresUnit_atmPresUnit_barPresUnit_torrPresUnit_psi// bme.read(pres, temp, hum, tempUnit, presUnit); print(“Temp: “); print(temp); print(“В°”+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F')); print(“\t\tHumidity: “); print(hum); print(“% RH”); print(“\t\tPressure: “); print(pres); println(“Pa”); delay(1000);}

Источник: https://xn--90aeniddllys.xn--p1ai/vse-v-odnom-bme280bmp280-datchik-temperatury-vlazhnosti-i-davleniya/

Датчики давления Arduino bmp280, bmp180, bme280

Домашняя метеостанция на GY-BMP280-3.3 и Ds18b20

Датчики атмосферного давления bmp180, bmp280, bme280 – частые гости в инженерных проектах. С их помощью можно предсказать погоду или измерить высоту над уровнем моря.

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

В этой статье мы расскажем принцип действия датчиков, схему подключения к различным платам Arduino и приведем примеры программирования скетчей.

Принцип действия барометра на BMP280, BMP180, BME280

Барометр – устройство, измеряющее атмосферное давление. Электронные барометры используются в робототехнике и различных электронных устройствах. Наиболее распространенными и доступными являются датчики давления от фирмы BOSH: это BMP085, BMP180, BMP280 и другие. Первые два очень похожи между собой, BMP280 – это более новый и усовершенствованный датчик.

Датчики давления работают на преобразовании давления в движение механической части. Состоит датчик давления из преобразователя с чувствительным элементом, корпуса, механических элементов (мембран, пружин) и электронной схемы.

Датчик BMP280 создан специально для приложений, где требуются малые размеры и пониженное потребление  энергии. К таким приложениям относятся навигационные системы, прогноз погоды, индикация вертикальной скорости и другие. Датчик обладает высокой точностью, хорошей стабильностью и линейностью. Технические характеристики датчика BMP280:

  • Габариты 2 х 2,5 х 0,95 мм.
  • Давление 300-1100гПа;
  • Температуры от 0С до 65 С;
  • Поддержка интерфейсов I2C и SPI;
  • Напряжение питания 1,7В – 3,6В;
  • Средний ток 2,7мкА;
  • 3 режима работы – режим сна, режим FORCED (проведение измерения, считывание значения, переход в спящий режим), режим NORMAL (перевод датчика в циклическую работу – то есть устройство самостоятельно через установленное время выходит из режима сна, проводит измерения, считывает показания, сохраняет измеренные значения и переходит снова в режим сна).

Датчик BMP180 – это дешевый и простой в применении сенсорный датчик, который измеряет атмосферное давление и температуру. Используется обычно для определения высоты и в метеостанциях. Состоит устройство из пьезо-резистивного датчика, термодатчика, АЦП, энергонезависимой памяти, ОЗУ и микроконтроллера.

Технические характеристики датчика BMP180:

  • Пределы измеряемого давления 225-825 мм рт. ст.
  • Напряжение питания 3,3 – 5В;
  • Ток 0,5мА;
  • Поддержка интерфейса I2C;
  • Время срабатывания 4,5мс;
  • Размеры 15 х 14 мм.

Датчик bme280 содержит в себе 3 устройства – для измерения давления, влажности и температуры. Разрабатывался для малого потребления тока, высокой надежности и долгосрочной стабильной работы.

Технические характеристики датчика bme280:

  • Размеры 2,5 х 2,5 х 0,93 мм;
  • Металлический LGA-корпус, оснащенный 8-ю выходами;
  • Напряжение питания 1,7 – 3,6В;
  • Наличие интерфейсов I2C и SPI;
  • Потребляемый ток в режиме ожидания 0,1 мкА.

Если сравнивать все устройства между собой, то датчики очень похожи. По сравнению со своим предшественником, к которым относится BMP180, более новый датчик BMP280 заметно меньше по размерам.

Его восьмиконтактный миниатюрный корпус требует аккуратности во время монтажа. Также устройство поддерживает интерфейсы I2C и SPI, в отличие от предшественников, которые поддерживали только I2C.

По логике работы датчика изменений практически нет, была только усовершенствована температурная стабильность и увеличено разрешение АЦП.  Датчик BME280, измеряющий температуру, влажность и давление, также похож на BMP280.

Отличие между ними заключается в размерах корпуса, так как BME280 имеет датчик влажности, который немного увеличивает габариты. Количество контактов и их расположение на корпусе совпадают.

Варианты подключения к Arduino

Подключение датчика BMP180 к Ардуино. Для подключения понадобятся сам датчик BMP180, плата Ардуино UNO, соединительные провода. Схема подключения показана на рисунке ниже.

Землю с Ардуино нужно соединить с землей на датчике, напряжение – на 3,3 В, SDA – к пину А4, SCL – к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C.  Сам датчик работает от напряжения 3,3 В, а Ардуино – от 5 В, поэтому на модуле с датчиком установлен стабилизатор напряжения.

Подключение BMP 280 к Ардуино. Распиновка и вид сверху платы изображены на рисунке.

Сам модуль датчика давления выглядит следующим образом:

Для соединения с Ардуино нужно подключить выходы следующим образом: соединить землю с Ардуино и на датчике, VCC – на 3,3В, SCL / SCK – к аналоговому контакту А5, SDA / SDI – к А4.

Подключение датчика BME280. Расположение контактов и распиновка у датчика BME280 такая же, как у BMP280.

Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами.

При подключении по I2C нужно соединить контакты SDA и SCL.

При подключении по SPI нужно соединить SCL с модуля и SCK (13й контакт на Ардуино), SDO с модуля к 12 выводу Ардуино, SDA – к 11 контакту, CSB (CS) – к любому цифровому пину, в данном случае к 10 контакту на Ардуино. В обоих случаях напряжение подключается к 3,3В на Ардуино.

Описание библиотеки для работы с датчиком. Пример скетча

Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080.  Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.

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

Код подойдет как для датчика BMP180 , так и для BMP280, нужно только подключить правильную библиотеку и указать верные контакты, к которым подключен модуль.

В первую очередь в коде нужно подключить все библиотеки и инициализировать работу датчика. Для определения давления нужно сначала узнать температуру. Для этого используется следующий элемент кода.

status = pressure.startTemperature();// Считываются данные с датчика о температуре if(status!=0){ delay(status); // Ожидание status = pressure.

getTemperature(T); // Сохранение полученных данных о температуре if(status!=0){ Serial.print(“Temperature: “); // Выведение на экран слова «Температура» Serial.print(T,2); // Вывод на экран значения температуры.

Serial.println(“deg C, “); //Печать символа градуса Цельсия.

status = pressure.startTemperature();// Считываются данные с датчика о температуреif(status!=0){delay(status); // Ожиданиеstatus = pressure.getTemperature(T); // Сохранение полученных данных о температуреif(status!=0){Serial.print(“Temperature: “); // Выведение на экран слова «Температура»Serial.print(T,2); // Вывод на экран значения температуры.Serial.println(“deg C, “); //Печать символа градуса Цельсия.

Затем нужно получить информацию об атмосферном давлении.

status = pressure.startPressure(3); // происходит считывание давления if(status!=0){ delay(status); // Ожидание status = pressure.getPressure(P,T); // получение давления, сохранение if(status!=0){ Serial.

print(“Absolute pressure: “); // Вывод на экран слов «Атмосферное давление» Serial.print(P,2); // Вывод на экран значения переменной mBar Serial.print(” mbar, “); // Вывод на экран текста “mBar” Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.) Serial.

println(” mmHg”);} // вывод на экран единицы измерения давления “mmHg” (мм. Рт.ст.).

12345678910111213141516171819status = pressure.startPressure(3); // происходит считывание давленияif(status!=0){delay(status); // Ожиданиеstatus = pressure.getPressure(P,T); // получение давления, сохранениеif(status!=0){Serial.print(“Absolute pressure: “); // Вывод на экран слов «Атмосферное давление»Serial.print(P,2); // Вывод на экран значения переменной mBarSerial.print(” mbar, “); // Вывод на экран текста “mBar”Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.)Serial.println(” mmHg”);} // вывод на экран единицы измерения давления “mmHg” (мм. Рт.ст.).

После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.

Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.

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

void printValues() { Serial.print(“Temperature = “); Serial.print(bme.readTemperature()); Serial.println(” C”); //определение температуры, вывод ее на экран в градусах Цельсия. Serial.print(“Pressure = “); Serial.print(bme.readPressure() / 100.

0F); Serial.println(” hPa”); //определение давления, вывод его на экран Serial.print(“Humidity = “); Serial.print(bme.readHumidity()); Serial.println(” %”); //определение влажности в процентах, вывод измеренного значения на экран. Serial.

println(); }

1234567891011121314151617181920212223void printValues() {Serial.print(“Temperature = “);Serial.print(bme.readTemperature());Serial.println(” C”); //определение температуры, вывод ее на экран в градусах Цельсия.Serial.print(“Pressure = “);Serial.print(bme.readPressure() / 100.0F);Serial.println(” hPa”); //определение давления, вывод его на экранSerial.print(“Humidity = “);Serial.print(bme.readHumidity());Serial.println(” %”); //определение влажности в процентах, вывод измеренного значения на экран.Serial.println();}

Возможные ошибки при подключении и устранение их

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

Также при использовании “китайских” датчиков можно столкнуться с нестандартными I2C или SPI адресами. В этом случае рекомендуется просканировать все присоединенные устройства с помощью одного из популярных скетчей и выяснить, по какому адресу откликается ваш датчик давления.

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

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

Заключение

Датчики атмосферного давления bmp180, bmp280- не самые дешевые виды сенсоров, но во многих случаев альтернативы таким сенсорам практически нет.

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

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

Подключение датчиков не представляет какой-либо сложности, т.к. используется стандартной i2C или SPI соединение. Для программирования можно использовать одну из готовых бесплатных библиотек.

Источник: https://ArduinoMaster.ru/datchiki-arduino/datchiki-atmosfernogo-davleniya-bmp280-bmp180-bme280/

Датчик атмосферного давления с гигрометром BME280

Домашняя метеостанция на GY-BMP280-3.3 и Ds18b20

Датчик идеален для домашней метеостанции, умеет измерять атмосферное давление, влажность и температуру воздуха.

Характеристики датчика:

Рабочий диапазон:

  • Температуры, -40…+85°C ±1.0
  • Влажности, 0…100 % ±3
  • Давления, 300…1100 hPa ±1.0
  • Напряжение питание: 1.71V — 3.6 V

Подробнее в даташите.

Также существует похожий и полностью совместимый модуль и датчик, BMP280, отличается от BME280 отсутствием возможности измерять влажности, внешне отличается прямоугольным корпусом (у BME280 корпус квадратный)

Подключение датчика к Arduino:

Напряжение питания датчика 3.

3 вольта и на данном модуле нет конвертера логических уровней и стабилизатора питания, соответственно для подключения к 5 вольтовой arduino желательно использовать отдельный конвертер логических уровней, либо модуль с распаянным конвертером и стабилизатором питания. Датчик поддерживает два интерфейса, привычный I2C и SPI, соответственно подключать модуль можно двумя способами.

В случаи I2C, соединяем выводы шины подписанные как SDA и SCL.

В случаи с SPI:

  • вывод SCL модуля подключается к SCK шины SPI (13 вывод arduino UNO),
  • вывод SDO модуля к MISO шины SPI (12 вывод arduino UNO),
  • вывод SDA модуля к MOSI шины SPI (11 вывод arduino UNO),
  • вывод CSB (CS) модуля к любому цифровом выходу (в коде задан 10 вывод arduino UNO),

В обоих случаях питание модуля 3,3 вольта. На других версиях arduino (leonardo, mega) SPI находится на разъеме ICSP.

Софт:

Библиотека от Adafruit https://github.com/adafruit/Adafruit_BME280_Library

Ниже стандартный пример из комплекта, пример по умолчанию настроен для работы по I2C, но просто так он не заработает,

/***************************************************************************  This is a library for the BME280 humidity, temperature & pressure sensor  Designed specifically to work with the Adafruit BME280 Breakout  —-> http://www.adafruit.com/products/2650  These sensors use I2C or SPI to communicate, 2 or 4 pins are required  to interface. The device's I2C address is either 0x76 or 0x77.  Adafruit invests time and resources providing this open source code,  please support Adafruit andopen-source hardware by purchasing products  from Adafruit!  Written by Limor Fried & Kevin Townsend for Adafruit Industries.  BSD license, all text above must be included in any redistribution ***************************************************************************/ #include #include #include #include #define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; // I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI unsigned long delayTime; void setup() {    Serial.begin(9600);    Serial.println(F(“BME280 test”));    bool status;        // default settings    status = bme.begin();    if (!status) {        Serial.println(“Could not find a valid BME280 sensor, check wiring!”);        while (1);    }        Serial.println(“– Default Test –“);    delayTime = 1000;    Serial.println();    delay(100); // let sensor boot up } void loop() {    printValues();    delay(delayTime); } void printValues() {    Serial.print(“Temperature = “);    Serial.print(bme.readTemperature());    Serial.println(” *C”);    Serial.print(“Pressure = “);    Serial.print(bme.readPressure() / 100.0F);    Serial.println(” hPa”);    Serial.print(“Approx. Altitude = “);    Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));    Serial.println(” m”);    Serial.print(“Humidity = “);    Serial.print(bme.readHumidity());    Serial.println(” %”);    Serial.println(); }

в коде указана сторонняя библиотека, #include её нужно либо установить дополнительно, либо закомментировать в примере и в файле библиотеки Adafruit_BME280.h, на работу её наличие не влияет.

Также модули могут иметь различные адреса на шине I2C, 0x76 или 0x77, указать адрес можно также в файле Adafruit_BME280.h а узнать адрес подключенного к шине устройства, можно при помощи I2C сканера, ссылка тут.

:

Источник: http://arduinolab.pw/index.php/2017/06/11/datchik-atmosfernogo-davleniya-s-gigrometrom-bme280/

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.