Подключение bmp280 к arduino uno

Temperature Accuracy

Though primarily interested in humidity, I present a brief comparison of the temperature measurements. I made no attempt here to establish an absolute temperature calibration and simply compare each sensor to the ensemble average of all nine sensors. A separate document covers absolute temperature calibration of the BME280 and also demonstrates that though the results here are strictly only relative, within a couple of tenths of a degree they are also good representations of the absolute accuracy.


Figure 10. Plots show temperature returned by each device compared to the average of all nine. The black line is just ‘sensor == ensemble mean’ as a visual guide, not a fit.


Figure 11. Plots showing deviation of each device’s own temperature from the average of all nine, plotted as a function of temperature.

All agree within about 0.5°C. The Bosch sensors consistently gave the highest values and looking at show the largest scatter, suggesting poorer repeatability. However, investigating in more detail, the Bosch thermometers are very weakly humidity sensitive. shows an apparent scatter but replotting temperature errors as a function of humidity () shows a tight correlation with very little dispersion. Repeatability at a fixed humidity is very good. The difference is small (0.1°C) and well within the manufacturer’s specification (1.0°C).

In contrast, the AM2320 (device G) shows little error as a function of humidity () but has the largest error as a function of temperature ().


Figure 12. Plots showing deviation of each device’s own temperature from the average of all nine, plotted as a function of humidity. Only for the BME280 is there a convincing detection of the thermometer being slightly humidity sensitive.

Установка библиотек

Для работы с датчиком BMP280 существуют различные библиотеки, упрощающие работу. К ним относятся BMP280_DEV, Adafruit_BMP280_Library. Для датчика BMP280 будет используется библиотека от Adafruit.

Adafruit Unified Sensor Driver — общий драйвер

  1. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…
  2. В строке поиска вводим «Adafruit Unified Sensor», выбираем последнюю версию и кликаем Установить
  3. Библиотека установлена (INSTALLED)

Библиотека Arduino для датчиков BMP280

Чтобы начать считывать данные с датчиков, вам необходимо установить библиотеку Adafruit_BMP280 (код в репозитории github). Она доступна в менеджере библиотек Arduino, поэтому рекомендуется его использовать.

  1. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…
  2. В строке поиска вводим «Adafruit BMP280», выбираем библиотеку от Adafruit, но можете использовать любую.
  3. Выбираем последнюю версию и кликаем Установить
  4. Выбираем пример: Файл->Примеры->Adafruit BMP280 Library->bmp280test
  5. Компилируем этот пример. Если получаем ошибку , нужно установить Adafruit Unified Sensor (смотрите выше)

    …\Documents\Arduino\bmp280-i2c\bmp280-i2c.ino:1:30: fatal error: Adafruit_Sensor.h: No such file or directory

    #include <Adafruit_Sensor.h>

    ^
    compilation terminated.

    exit status 1
    Ошибка компиляции для платы Arduino Pro or Pro Mini.

    1
    2
    3
    4
    5
    6
    7
    8
    9

    …\Documents\Arduino\bmp280-i2c\bmp280-i2c.ino130fatal errorAdafruit_Sensor.hNo such file ordirectory

    #include <Adafruit_Sensor.h>

    ^

    compilation terminated.

    exit status1

    ОшибкакомпиляциидляплатыArduino Pro orPro Mini.

Example Code

  • BMP280_I2C_Normal.ino : I2C Interface, Normal Mode, Standard I2C Address (0x77)

  • BMP280_I2C_Alt_Normal.ino : 2C Interface, Normal Mode, Alternative I2C Address (0x76)

  • BMP280_I2C_Forced.ino : I2C Interface, Forced Mode, Standard I2C Address (0x77)

  • BMP280_SPI_Normal.ino : SPI Interface, Normal Mode

  • BMP280_SPI_Forced.ino : SPI Interface, Forced Mode

  • BMP280_ESP32_HSPI_Normal.ino : ESP32 HSPI Interface, Normal Mode

  • BMP280_SPI_Normal_Multiple.ino : SPI Interface, Normal Mode, Multiple BMP280 Devices

  • BMP280_ESP8266_I2C_Normal_DefinedPins.ino : ESP8266 I2C Interface, Normal Mode, User-Defined Pins

Software Driver — Example Usage

Once installed, confirm the I2C address (see prerequisites, it will most
likely be 0x76 or 0x77) and port.

Then in a python script or REPL:

import smbus2
import bme280

port = 1
address = 0x76
bus = smbus2.SMBus(port)

calibration_params = bme280.load_calibration_params(bus, address)

# the sample method will take a single reading and return a
# compensated_reading object
data = bme280.sample(bus, address, calibration_params)

# the compensated_reading class has the following attributes
print(data.id)
print(data.timestamp)
print(data.temperature)
print(data.pressure)
print(data.humidity)

# there is a handy string representation too
print(data)

This then should print something like:

ee50df9c-3aa3-4772-8767-73b6bb74f30f
2016-11-18 17:33:28.937863
20.563
980.91
48.41
compensated_reading(id=ee50df9c-3aa3-4772-8767-73b6bb74f30f,
    timestamp=2016-11-18 17:33:28.937863, temp=20.563 °C,
    pressure=980.91 hPa, humidity=48.41 % rH)

For a data-logger like application, periodically call bme2.sample(bus, address, calibration_params) to
get time-based readings.

Library

The cactus_io_BME280_I2C library provides the following functions:

  • BME280_I2C() Creates an object using default address of 0x77
  • or BME280_I2C(int address) Creates an object using alternative address. For example BME280_I2C(0x76)
  • begin() Called to initialise the sensor after the object is created
  • setTempCal(float) Allows you to define a temp calibration offset if it reads high
  • readSensor() Called to read data from the sensor
  • getTemperature_C() Returns a float value in degrees celsius
  • getTemperature_F() Returns a float value in degrees fahrenheit
  • getHumidity() Returns a float as a percentage humidity
  • getPressure_MB() Returns a float in millibars
  • getPressure_HP() Returns a float in hectapascals

Overview

The BME280 from Bosch Sensortec is a integrated environmental sensor designed for the mobile market. It a low power consumption design that combines high linearity and high
accuracy sensors for pressure, humidity and temperature.

The BME280 supports either SPI or I2C interface to communicate with the micro controller.

Because of the small size of the sensor, the best way to use this sensor is with a breakout board. The Adafruit breakout board is used here.

In this hookup we are only connecting one device to the Arduino using the I2C bus. We can use either address (0x77 or 0x76). It reads the barometric pressure, humidity and
temperature and displays it on the console.

How to connect BMP 280 pressure sensor module with arduino –

Connect the sensor with Arduino UNO as shown below.

Wiring – sensor and Arduino:

VCC–> 3.3v
GND–> GND
SCL/SCK –> A5(Analog pin 5)
SDA/SDI  –> A4(Analog pin 4)

First of all, get the BMP 280 Library from Github at https://github.com/adafruit/Adafruit_BMP280_Library

Put it in to arduino library folder. Now you have to do one change in Adafruit_BMP280.h file. Change the IIC address of the sensor to 0x76.

Copy the following sketch and upload to UNO board.


/***************************************************************************
This is a library for the BMP280 humidity, temperature &amp;amp;amp; pressure sensor

Written by Limor Fried &amp;amp;amp; Kevin Townsend for Adafruit Industries.
BSD license, all text above must be included in any redistribution

sketch adopted &amp;amp;amp; modified by Jayprakash Shet , www.iknowvations.in
***************************************************************************/

#include &amp;amp;lt;Wire.h&amp;amp;gt;
#include &amp;amp;lt;SPI.h&amp;amp;gt;
#include &amp;amp;lt;Adafruit_Sensor.h&amp;amp;gt;
#include &amp;amp;lt;Adafruit_BMP280.h&amp;amp;gt;

// only used if we are using SPI to communicate with sensor

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

// Here we are using IIC

Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
//Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

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);
}
}

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("Approx altitude = "));
Serial.print(bmp.readAltitude(1013.25)); // this should be adjusted to your local forcase
Serial.println(" m");

Serial.println();
delay(2000);
}

BMP 280 pressure sensor test arduino sketch-

Once you upload the sketch, open the serial monitor where you will get the parameters displayed as under –

That is it, as you have seen, it is very easy to use BMP-280 pressure sensor with Arduino. If you have any problems, do let us know, we will help you out. You can contact us at support@iknowvations.in.

Happy pressurizing !

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

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

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

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

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

Specifications¶

Parameter Value
Input voltage 3.3V or 5V
I/O voltage 3.3V or 5V
Operating current 0.4mA
Operating temperature -40 — 85 ℃
Atmospheric pressure sensor measurement range 300 — 1100 hPa (1 hPa= one hundred Pa) with ±1.0 hPa accuracy
Temperature sensor measurement range -40 — 85 ℃, with ±1.0°C accuracy
Humidity sensor measurements range 0% — 100% relative humidity , with ±3% accuracy
Measurement modes Piezo & Temperature, forced or periodic
Chip BME280(datasheet)
Interface Bus SPI, I2C (use either one of them)
Weight 3.2 g (for breakout board), 9.3 g for whole package each piece
Dimensions 40 (length) × 20 (width) mm
I2C 0x76(default) or 0x77

Note

  1. We will show/describe how to select interface bus soon.
  2. The altitude is calculated by a combination of temperature and atmospheric pressure. No specialized components for altitude.

Platforms Supported

Arduino Raspberry Pi

Caution

The platforms mentioned above as supported is/are an indication of the module’s software or theoritical compatibility. We only provide software library or code examples for Arduino platform in most cases. It is not possible to provide software library / demo code for all possible MCU platforms. Hence, users have to write their own software library.

Arduino Code – Reading Temperature, Relative Humidity & Barometric Pressure

The following sketch will give you complete understanding on how to read temperature, relative humidity & barometric pressure from BME280 module and can serve as the basis for more practical experiments and projects.

Here’s how the output looks like in the serial monitor.

Code Explanation:

The sketch starts with including four libraries viz. Wire.h, SPI.h, Adafruit_Sensor.h and Adafruit_BME280.h.

Next, we define variable needed to calculate the altitude and create an object of Adafruit_BME280 library so that we can access functions related to it.

In setup section of code we initialize the serial communication with PC and call the function.

The function takes the I2C address of the module as parameter. If your module has different I2C address or , you need to specify it correctly. This function initializes I2C interface with given I2C Address and checks if the chip ID is correct. It then resets the chip using soft-reset & waits for the sensor for calibration after wake-up.

In looping section of the code, we use following functions to read temperature, relative humidity & barometric pressure from the BME280 module.

readTemperature() function returns the temperature from the sensor.

readPressure() function returns the barometric pressure from the sensor.

readAltitude(SEALEVELPRESSURE_HPA) function calculates the altitude (in meters) from the specified atmospheric pressure (in hPa), and sea-level pressure (in hPa).

readHumidity() function returns the relative humidity from the sensor.

I2C Interface

The module features a simple two-wire I2C interface which can be easily interfaced with any microcontroller of your choice.

The default I2C address of the BME280 module is 0x76HEX and can be changed to 0x77HEX easily with the solder jumper besides chip.

Procedure to Change I2C Address

  • Locate the solder jumper besides chip. By default the middle copper pad is connected to the left pad.
  • Scratch the connection between the middle and the left copper pad to disconnect those using a sharp knife.
  • Add a solder blob between the middle and the right copper pad to join them. It allows you to set the I2C address 0x77HEX.

Response Speed

All respond to changes faster than humidity is likely to change naturally, but speed may occaisionally by an issue of interest, for example when measuring a forced flow of air.

shows the response of the devices as they are all exposed simultaneously to a sudden, upwards step-change in humidity and does the same for a downwards step. Readings were taken once every six seconds. For this test the BME280’s internal smoothing filter was switched off. For all other data on this page the filter was enabled. It is a feature of all the AM23xx devices that they return a cached value from memory meaning they will always appear to respond to a change one reading (6 seconds) later than the others. For this reason I plot both the raw data where the AM23xx devices can all be seen to lag by one reading and also a version where that offset has been artifically removed. The left panel shows the actual results you would get when using the device and the right panel more directly compares the intrinsic physical response of the sensor elements.


Figure 13. Time response of the devices when exposed to a sudden upwards change in humidity. Left panel shows data directly from the sensors. Since the AM23xx devices return a previously cached value, they show the step change with a lag of one data point. In the right hand panel the lag has been arbitrarily removed and the values normalised in order to compare the intrinsic response speed of the sensor elements.


Figure 14. Time response of the devices when exposed to a sudden downwards change in humidity. Left panel shows data directly from the sensors. Since the AM23xx devices return a previously cached value, they show the step change with a lag of one data point. In the right hand panel the lag has been arbitrarily removed and the values normalised in order to compare the intrinsic response speed of the sensor elements.

The HTU21D and SHT71 show the fastest response. Most of the others seem comparable to each other except the Si7021 which is the one major outlier. This is the device with a protective cover over the sensor and though it may seem reasonable that the membrane would slow the response, tests performed elsewhere showed it has almost no effect, slowing the devices readings by only about 1sec. The Si7021 is a lot slow slower than all the others, which I assume to be a deliberate design choice by the manufacturer to make the sensor insensitive to insignificant, rapid fluctuations in humidity and to better represent the wider prevailing conditions. For example, with the highly responsive HTU21D, I often see spikes and wobbles in the readings as I move around the room, stiring the air.

Example

d=require("bme280")

alt=320 -- altitude of the measurement place

d:init()

-- calculate coefficient to get air pressure converted to sea level (QNH)
d:altCal(alt)
print("h="..string.format("%9X", d.hH)..string.format("%9X", d.hL).." *2^"..d.hE)

-- read sensor
adc_T = d:readAdc(1)
adc_P = d:readAdc(2)
adc_H = d:readAdc(3)
if not adc_T or not adc_P then return end
print(string.format("adc_T=%X\tadc_P=%X\tadc_H=%X", adc_T, adc_P, adc_H))

-- calculate temperature
T, t_fine = d:compensateT(adc_T)
print((string.gsub(string.format("T=%d.%2d", T100, T%100), " ", "0")), "t_fine="..t_fine)

-- calculate aire pressure
P = d:compensateP(adc_P, t_fine)
print((string.gsub(string.format("QFE=%d.%3d", P1000, P%1000), " ", "0")))

-- convert measure air pressure to sea level pressure
QNH = d:qfe2qnh(P, alt)
print((string.gsub(string.format("QNH=%d.%3d", QNH1000, QNH%1000), " ", "0")))

H = d:compensateH(adc_H, t_fine)
print((string.gsub(string.format("humidity=%d.%3d%%", H1000, H%1000), " ", "0")))

-- altimeter function - calculate altitude based on current sea level pressure (QNH) and measure pressure
adc_T = d:readAdc(1)
adc_P = d:readAdc(2)
T, t_fine = d:compensateT(adc_T)
P = d:compensateP(adc_P, t_fine)
curAlt=d:altitude(P, QNH)
print(string.gsub(string.format("altitude=%d.%2d", curAlt100, curAlt%100), " ", "0"), "adc_T="..string.format("%X", adc_T), "adc_P="..string.format("%X", adc_P))

d=nil;package.loaded=nil;

Варианты подключения к 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В на Ардуино.

Version

  • Version 1.0.14 — Fix uninitialised structures, thanks to David Jade investigating and flagging up this issue
  • Version 1.0.12 — Allow sea level pressure calibration using setSeaLevelPressure() function
  • Version 1.0.10 — Modification to allow user-defined pins for I2C operation on the ESP8266
  • Version 1.0.9 — Moved writeMask to Device class and improved measurement detection code
  • Version 1.0.8 — Use default arguments for begin() member function and
    add example using multiple BMP280 devices with SPI comms in NORMAL mode
  • Version 1.0.6 — Merged multiple instances and initialisation pull requests by sensslen
  • Version 1.0.5 — Fixed bug in BMP280_DEV::getTemperature() function, thanks to Jon M.
  • Version 1.0.3 — Change library name in the library.properties file
  • Version 1.0.2 — Modification to allow external creation of a HSPI object on the ESP32
  • Version 1.0.1 — Added ESP32 HSPI support and changed library name for Arduino compatibility
  • Version 1.0.0 — Intial version

License

The MIT License (MIT)

Copyright (c) 2016 Richard Hull

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

Подключение BMP280 к Arduino по SPI (программный)

Под программным SPI понимается использование драйвера Arduino SPI для эмуляции аппаратного SPI с использованием «битовой синхронизации». Это позволяет подключить SPI-устройство к любым контактам Arduino.

Схема подключения BMP280 к Arduino

Подключение по SPI BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK и SDI(MOSI) к Arduino.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
5V 5V Vin Красный
52 (SCK) 13 (SCK) SCL/SCK Зелёный
50 (MISO) 12 (MISO) SDO Оранжевый
51 (MOSI) 11 (MOSI) SDA/SDI Жёлтый
48 (SS/CS) 10 (SS/CS) CS/CSB Синий

Примеры скетча

Вы можете создать объект BMP280 с любым программным SPI (где все четыре контакта могут быть любыми входами / выходами Arduino), используя:

Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

1 Adafruit_BMP280bmp(BMP_CS,BMP_MOSI,BMP_MISO,BMP_SCK);

Полный код примера:

#include <Adafruit_BMP280.h>

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

Adafruit_BMP280 bmp280SoftSPI(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

void setup() {
Serial.begin(9600);
Serial.println(F(«BMP280 SPI (программный)»));

while (!bmp280SoftSPI.begin()) {
Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));
delay(2000);
}
}

void loop() {
float temperature = bmp280SoftSPI.readTemperature();
float pressure = bmp280SoftSPI.readPressure();
float altitude = bmp280SoftSPI.readAltitude(1013.25);

Serial.print(F(«Temperature = «));
Serial.print(temperature);
Serial.println(» *C»);

Serial.print(F(«Pressure = «));
Serial.print(pressure);
Serial.println(» Pa»);

Serial.print(F(«Altitude = «));
Serial.print(altitude);
Serial.println(» m»);

Serial.println();
delay(2000);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

#include <Adafruit_BMP280.h>
 
#define BMP_SCK   13
#define BMP_MISO  12
#define BMP_MOSI  11
#define BMP_CS    10
 

Adafruit_BMP280bmp280SoftSPI(BMP_CS,BMP_MOSI,BMP_MISO,BMP_SCK);

voidsetup(){

Serial.begin(9600);

Serial.println(F(«BMP280 SPI (программный)»));

while(!bmp280SoftSPI.begin()){

Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));

delay(2000);

}

}
 

voidloop(){

floattemperature=bmp280SoftSPI.readTemperature();

floatpressure=bmp280SoftSPI.readPressure();

floataltitude=bmp280SoftSPI.readAltitude(1013.25);

Serial.print(F(«Temperature = «));

Serial.print(temperature);

Serial.println(» *C»);

Serial.print(F(«Pressure = «));

Serial.print(pressure);

Serial.println(» Pa»);

Serial.print(F(«Altitude = «));

Serial.print(altitude);

Serial.println(» m»);

Serial.println();

delay(2000);

}

Подключение датчика уровня воды с Arduino

Давайте подключим датчик уровня воды к Arduino.

Сначала вам нужно подать питание на датчик. Для этого вы можете подключить вывод +(VCC) на модуле к выводу 5V на Arduino, а вывод -(GND) модуля к выводу GND Arduino.

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

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

Самый простой способ сделать это – подключить вывод VCC к цифровому выводу Arduino и устанавливать на нем высокий или низкий логический уровень, когда это необходимо. Итак, давайте подключим вывод VCC модуля к цифровому выводу 7 Arduino.

Наконец, подключите вывод S (Signal) к выводу A0 аналого-цифрового преобразователя Arduino.

Схема соединений показана на следующем рисунке.

Рисунок 4 – Схема подключения датчика уровня воды к Arduino

Подключение BMP280 к Arduino по I2C/TWI

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

Схема подключения BMP280 к Arduino

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

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

Существуют несколько модулей с этим датчиком. Первый вариант — это модуль для работы в 3.3 В логике, данные модули будут подешевле; второй вариант — для работы в 5.0 В логике, на нём присутствуют: линейный стабилизатор напряжения на 3.3 В и преобразователи уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA. Первый подойдёт для ардуин работающих от 3.3 В и Raspberry Pi / Orange Pi / Banana Pi и т.д., а второй — для обычных ардуин на 5.0 В.

Подключение BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA к Arduino.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
5V 5V Vin Красный
20 (SDA) A4 SDA/SDI Зелёный
21 (SCL) A5 SCL/SCK Жёлтый

Подключение BMP280 без встроенного стабилизатора напряжения на 3.3 В к Arduino. В данном случае нужно использовать внешний преобразователь уровней на линиях SCK/SCL и SDI(MOSI)/SDA.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
3.3V 3.3V VCC/3.3V Красный
20 (SDA) A4 SDA/SDI Зелёный
21 (SCL) A5 SCL/SCK Жёлтый

Примеры скетча

После запуска вы можете инициализировать датчик с помощью:

if (!bmp.begin()) {
Serial.println(«Could not find a valid BMP280 sensor, check wiring!»);
while (1);
}

1
2
3
4

if(!bmp.begin()){

Serial.println(«Could not find a valid BMP280 sensor, check wiring!»);

while(1);

}

вернет True, если датчик был найден, и False, если нет. В случае с False, проверьте соединение датчика с платой Arduino!

Считать температуру и давление легко, просто вызовите функции:

bmp.readTemperature(); // Температура в градусах Цельсия.
bmp.readPressure(); // Атмосферное давление в гПа

1
2

bmp.readTemperature();// Температура в градусах Цельсия.

bmp.readPressure();// Атмосферное давление в гПа

Копируйте и скомпилируйте нижеприведённый скетч в Arduino IDE.

#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp280;

void setup() {
Serial.begin(9600);
Serial.println(F(«BMP280»));

while (!bmp280.begin(BMP280_ADDRESS — 1)) {
Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));
delay(2000);
}
}

void loop() {
float temperature = bmp280.readTemperature();
float pressure = bmp280.readPressure();
float altitude = bmp280.readAltitude(1013.25);

Serial.print(F(«Temperature = «));
Serial.print(temperature);
Serial.println(» *C»);

Serial.print(F(«Pressure = «));
Serial.print(pressure);
Serial.println(» Pa»);

Serial.print(F(«Altitude = «));
Serial.print(altitude);
Serial.println(» m»);

Serial.println();
delay(2000);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

#include <Adafruit_BMP280.h>
 

Adafruit_BMP280bmp280;

voidsetup(){

Serial.begin(9600);

Serial.println(F(«BMP280»));

while(!bmp280.begin(BMP280_ADDRESS-1)){

Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));

delay(2000);

}

}
 

voidloop(){

floattemperature=bmp280.readTemperature();

floatpressure=bmp280.readPressure();

floataltitude=bmp280.readAltitude(1013.25);

Serial.print(F(«Temperature = «));

Serial.print(temperature);

Serial.println(» *C»);

Serial.print(F(«Pressure = «));

Serial.print(pressure);

Serial.println(» Pa»);

Serial.print(F(«Altitude = «));

Serial.print(altitude);

Serial.println(» m»);

Serial.println();

delay(2000);

}

Результат

Температура рассчитывается в градусах Цельсия, вы можете преобразовать ее в градусы Фаренгейта, используя классическое уравнение F = C * 9/5 + 32.

Давление возвращается в единицах СИ Паскалей. 100 Паскалей = 1 гПа = 1 миллибар. Часто барометрическое давление сообщается в миллибарах или миллиметрах ртутного столба. Для дальнейшего использования 1 паскаль = 0,00750062 миллиметров ртутного столба или 1 миллиметр ртутного столба = 133,322 Паскаля. Таким образом, если вы возьмете значение паскаля, скажем, 100734 и разделите на 133,322, вы получите 755,57 миллиметров ртутного столба.

Также возможно превратить BMP280 в альтиметр. Если вы знаете давление на уровне моря, библиотека может рассчитать текущее атмосферное давление в высоту.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector