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

OP-Vent

Testing phase

FACTORY FOR 100,000 IMPROVISED COVID19 VENTILATORS DESIGN BUILD TEST