# Pressure sensor 40PC015G1A + Arduino Uno

Hello, recently I've acquired this type of pressure sensor, but do not know how to make the Arduino Uno to read data from it. Where should I start from?

Get a datasheet for the transducer. Study the data sheet. If there is something in the data sheet that you do not understand, post the data sheet, or a link to it, and ask for help.

Data sheet for 40PC015G1A

How can this data sheet help me? I've connected pressure sensor to Arduino, but I don't have ready library for this sensor (from Github, for example) and can't write it.

flamid:
Data sheet for 40PC015G1A

How can this data sheet help me? I've connected pressure sensor to Arduino, but I don't have ready library for this sensor (from Github, for example) and can't write it.

Do you understand the wiring diagram on the front page?
There's a pin labelled Vout. Have a guess as to what that could be.

Here is the data sheet from Honeywell (the manufacturer).

You have a 15PSI gage type transducer. Now look at the table on page 32. That page shows that the 15PSIG transducer will output 0.5V with 0 psig and a span of 4.00V giving a sensitivity of 266.6 mV/psi.

You don't need a library.

Measure the voltage.*
Subtract 0.5V.
Divide the result by 0.2666.
The result will be the measured value in PSIG.

From datasheet, zero pressure = 0.5 volts, 15 PSI = 4.5volts, 0.5V = ADC value of 102, 4.5V = ADC value of 921. So span (0 PSI ~ 15 PSI) = 921 - 102 = 819.
http://www.honeywellscportal.com//index.php?ci_id=138832

``````const byte sensorIn = A0;
const int zero = 102, span =  819;
float pressure;

void setup()
{
Serial.begin(9600);
}
void loop()
{
pressure = (analogRead(sensorIn) - zero)  * 15.0 / span;
Serial.println(pressure);
delay(1000);
}
``````

Connect sensor pin 1 to Arduino 5V pin, sensor pin 2 to Arduino GND, sensor pin 3 to Arduino pin A0. Compiles but untested.

JCA34F:
From datasheet, zero pressure = 0.5 volts, 15 PSI = 4.5volts, 0.5V = ADC value of 102, 4.5V = ADC value of 921. So span (0 PSI ~ 15 PSI) = 921 - 102 = 819.
http://www.honeywellscportal.com//index.php?ci_id=138832

``````const byte sensorIn = A0;
``````

const int zero = 102, span =  819;
float pressure;

void setup()
{
Serial.begin(9600);
}
void loop()
{
pressure = (analogRead(sensorIn) - zero)  * 15.0 / span;
Serial.println(pressure);
delay(1000);
}

``````

Connect sensor pin 1 to Arduino 5V pin, sensor pin 2 to Arduino GND, sensor pin 3 to Arduino pin A0. Compiles but untested.
``````

Try this edit, what do you get for "ADCval"?

``````const byte sensorIn = A0;
const int zero = 102, span =  819;
float pressure;

void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("\t");
pressure = (analogRead(sensorIn) - zero)  * 15.0 / span;
Serial.print("Pressure  ");
Serial.print(pressure);
Serial.println(" PSI");
delay(1000);
}
``````

What pressure are you putting on the sensor?

JCA34F:
Try this edit, what do you get for "ADCval"?

``````const byte sensorIn = A0;
``````

const int zero = 102, span =  819;
float pressure;

void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("\t");
pressure = (analogRead(sensorIn) - zero)  * 15.0 / span;
Serial.print("Pressure  ");
Serial.print(pressure);
Serial.println(" PSI");
delay(1000);
}

``````

What pressure are you putting on the sensor?
``````

ADC accepts integer values: 106 and seldom 107. I am not putting any pressure on it right now, but later I hope to measure pressure that is 50-600 Pa less than atmospheric one. Can we increase voltage measurement precision till 3 decimal places?

You can change this:

``````Serial.print(pressure);
``````

To:

``````Serial.print(pressure,3);
``````

But it will not improve resolution, you still only get about 819 increments across 0 ~ 15 PSI. If you need higher resolution you will need an external ADC with 12 or 16 bit resolution, but it must be a ratiometric type like Arduino.

``````const int zero = 102, span =  819;
``````

To:

``````const int zero = 106, span =  819;
``````

If you want readout in kPa, change this:

``````pressure = (analogRead(sensorIn) - zero)  * 15.0 / span;
``````

To:

``````pressure = (analogRead(sensorIn) - zero)  * 103.42 / span;
``````

And:

``````Serial.println(" PSI");
``````

To:

``````Serial.println(" kPa");
``````

JCA34F, thanks a lot for your help. I will definitely try later to find an external ADC compatible with Arduino.

Start with the data sheet: https://sensing.honeywell.com/index.php?ci_id=138832, you will find that it has an output from about 0.5 Volts to 4.5 Volts. It states it is ratiometric output so that it is dependent on the supply voltage. Use the A/D and treat it like a pot with CW and CCW resistors. You can simply read it with the A/D and use the map function to remove the range limits in your calculations. You can map 0.5 to 4.5 to 0 to 1023 counts. To improve accuracy you can use the Vref as the supply voltage for it but do not connect directly you will have to buffer it. To buffer get a rail to rail output capable op-amp. Connect the - input of the op-amp to the output of the op-amp which is also the feed for the sensor. Connect the + to the Aref pin. The sensor is going to need 10mA so be sure the op-amp can supply that with some room. The other is to measure the 5V of the sensor with the arduino and use that in your calculation, it will be the same as Vref - wire drop. This response is to help you get started in solving your problem, not solve it for you.
Good Luck & Have Fun!
Gil

Hello, I've decided not to create new topic and ask a new question right here. I encountered another obstacle in my attempt to improve precision of voltmeter. I bought 16-bit ADC but don't know how to connect Arduino, external ADC (model ADS1115) and pressure sensor. Where can I find a scheme or something like that? Happy holidays and best wishes for the New Year!

The ADS1115 is fine for a voltmeter (voltage source), but basically unsuitable for a ratiometric pressure sensor.

You can use it for a ratiometric source, but then you also must measure/include the exact supply voltage of the sensor in your calculations.

I doubt you will 'improve' much (if any) with a higher resolution absolute/voltage A/D.
With a bit of oversampling and Arduino's 10-bit A/D you should just be able to get two decimal places with 15 psi.
Three is impossible with sensors like this.
Leo..