Things used in this project

Hardware components:
102110017%206
MediaTek Labs LinkIt Smart 7688 Duo
×1
Dps310 package
Infineon DPS310
×1
Mfr 25frf52 10k sml
Resistor 10k ohm
×6
Software apps and online services:
Vs2015logo
Microsoft Visual Studio 2015
Hand tools and fabrication machines:
09507 01
Soldering iron (generic)

Schematics

Schematic and Wiring Diagram
Schematic and wiring diagram xlarvb9xms

Code

Create Measurement TableSQL
SQL script
USE [DPS310]
GO

/****** Object:  Table [dbo].[Measurement]    Script Date: 9/30/2017 11:05:19 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Measurement](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[Temperature] [int] NULL,
	[Pressure] [int] NULL,
	[Time] [datetime] NULL,
	[DeviceId] [int] NULL,
	[PressureHigh] [int] NULL,
	[PressureLow] [int] NULL,
 CONSTRAINT [PK_Measurement] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Sketch to read DPS310 sensor and send to serverArduino
Run this on the LinkIt Duo to send sensor data
#include <ifx_dps310.h>
#include <Bridge.h>
#include <HttpClient.h>

void setup()
{
  Bridge.begin();
  SerialUSB.begin(9600);
  while (!SerialUSB); // wait for a serial connection
  //Serial.begin(9600);
  //while (!Serial);
  Wire.begin();


  //Call begin to initialize ifxDps310
  //The parameter 0x76 is the bus address. The default address is 0x77 and does not need to be given.
  ifxDps310.begin(Wire, 0x76);
  //Use the commented line below instead of the one above to use the default I2C address.
  //if you are using the Pressure 3 click Board, you need 0x76
  //ifxDps310.begin(&Wire);
  
  // IMPORTANT NOTE
  //If you face the issue that the DPS310 indicates a temperature around 60 C although it should be around 20 C (room temperature), you might have got an IC with a fuse bit problem
  //Call the following function directly after begin() to resolve this issue (needs only be called once after startup)
  ifxDps310.correctTemp();

  SerialUSB.println("Init complete!");
}


void loop()
{
  // Initialize the client library
  HttpClient client;
  int inPin10 = 10;
  int inPin11 = 11;
  int inPin12 = 12;
  int deviceId;
  
  pinMode(inPin10, INPUT);
  pinMode(inPin11, INPUT);
  pinMode(inPin12, INPUT);

  deviceId = digitalRead(inPin10) + digitalRead(inPin11)*2 + digitalRead(inPin12)*4;
  
  long int temperature;
  long int pressure;
  long int pressureHigh=0;
  long int pressureLow=1000000000;
  long int pressureEma;
  int oversampling = 7;
  int ret;
  SerialUSB.println();

  //lets the Dps310 perform a Single temperature measurement with the last (or standard) configuration
  //The result will be written to the paramerter temperature
  //ret = ifxDps310.measureTempOnce(temperature);
  //the commented line below does exactly the same as the one above, but you can also config the precision
  //oversampling can be a value from 0 to 7
  //the Dps 310 will perform 2^oversampling internal temperature measurements and combine them to one result with higher precision
  //measurements with higher precision take more time, consult datasheet for more information
  ret = ifxDps310.measureTempOnce(temperature, oversampling);

  if (ret != 0)
  {
    //Something went wrong.
    //Look at the library code for more information about return codes
    SerialUSB.print("FAIL! ret = ");
    SerialUSB.println(ret);
  }
  else
  {
//    SerialUSB.print("Temperature: ");
//    SerialUSB.print(temperature);
//    SerialUSB.println(" degrees of Celsius");
  }

  //Pressure measurement behaves like temperature measurement
  //ret = ifxDps310.measurePressureOnce(pressure);
  ret = ifxDps310.measurePressureOnce(pressure, oversampling);
  if (ret != 0)
  {
    //Something went wrong.
    //Look at the library code for more information about return codes
    SerialUSB.print("FAIL! ret = ");
    SerialUSB.println(ret);
  }
  else
  {


  //Monitor loop ===========================================================================================================================
  pressureEma = pressure;
  for (int i=0;i<4400;i++) //~15 seconds
  {

  ret = ifxDps310.measurePressureOnce(pressure, 0); //As fast as possible for sensing doors - no oversampling
  if (ret != 0)
  {
    //Something went wrong.
    //Look at the library code for more information about return codes
    SerialUSB.print("FAIL! ret = ");
    SerialUSB.println(ret);
  }
  else
  {
    if (pressure > pressureHigh)
    {
      pressureHigh = pressure;
    }
    if (pressure < pressureLow)
    {
      pressureLow = pressure;
    }
  }

    pressureEma = (pressure + pressureEma * 19)/20; //calculate moving average of pressure
    SerialUSB.print("EMA:");
    SerialUSB.print(pressureEma);
    SerialUSB.print(" DevId:");
    SerialUSB.print(deviceId);
    SerialUSB.print(" Pa:");
    SerialUSB.print(pressure);
    SerialUSB.print(" PaL:");
    SerialUSB.print(pressureLow);
    SerialUSB.print(" PaH:");
    SerialUSB.println(pressureHigh);
  }
  if ((pressure > pressureEma + 15)||(pressure < pressureEma - 15))
  {
    SerialUSB.println("Door Event");
    //Send a Door Event to the server to send an email
    String s = "http://192.168.1.78:5000/api/email/";
    s += deviceId;   
    client.get(s);

    delay(10000); //Pause because there could be multiple events that trigger a door event
    pressureEma = pressure; //Sync up pressure EMA
  }
  
  }//End of Monitor loop
  
  //Send the temperature and pressure to the server
  String s = "http://192.168.1.78:5000/api/values/dps310?temperature=";
  s += temperature;
  s += "&pressure=";
  s += pressure;
  s +="&deviceId=";
  s += deviceId;
  s += "&pressureHigh=";
  s += pressureHigh;
  s += "&pressureLow=";
  s += pressureLow; 
  client.get(s);

}
DPS APIC#
API to update database and send email alerts
No preview (download only).
MeasureAndSendDPS310-HighLow2.zipArduino
Arduino code to measure and send DPS 310 data
No preview (download only).
DPSCharts - ClickMap.zipC#
MVC .NET Charting code for DPS310 data
No preview (download only).

Credits

2875d352d3128ea993798cdfab57268b
claude garrett
3 projects • 8 followers
Contact

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Add projectSign up / Login