Pressure Sensor Selection

I am eliminating  MPS20N0040D as a pressure sensor possibility.It is only specified for dry non-corrosive gases and the sensitivity might be a problem ,it has no on-chip data conditioning and a stable difference amplifier is needed to amplify its analogue output. Its construction  4  resistors in a wheatstone bridge configuration. Trying out Bosch BMP280  temperature and pressure sensor which has SPI and I2C.
Beware there are knock-off breakout  boards cloning Adafruit's superior breakout boards  that advertise the superior Bosch BME280 temperature,pressure and humidity which actually have the inferior Bosch BMP280. See https://goughlui.com/2018/08/05/note-bosch-sensortec-bmp280-vs-bme280-sensor-confusion/   
the BMP280 boards also have to have the Adafruit BMP280test example program in Arduino has to be changed to
/***************************************************************************
  This is a library for the BMP280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BMP280 Breakout
  ----> http://www.adafruit.com/products/2651

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required
  to interface.

  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 <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>

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

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(0x76)) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);
  }

  /* Default settings from datasheet. */
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}

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)); /* Adjusted to local forecast! */
    Serial.println(" m");

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

The line 
if (!bmp.begin()) { 
was changed to 
if (!bmp.begin(0x76)) {  
because these boards have a different default I2C address. The BMP280 datasheet 
indicates that the BMP280 has 2 addresses implying 2 could be put on the same bus .
The 7-bit device address is 111011x. The 6 MSB bits are fixed. The last bit is changeable by SDO value and can be changed during operation. Connecting SDO to GND results in slave address 1110110(0x76); connection it to VDDIOresults in slave address 1110111(0x77)


  

Comments

Popular posts from this blog

Ventilator induced injury

Medtronics released the schematics ,manufacturing jigs and cad files for their PB560 ventilator system

OP-Vent