I'm using a Arduino Uno to read pressure and I want to know if I have wired/coded the sensor correctly. I'm not sure I'm getting the correct readings (it could be the right readings - I just want to check I have done everything right). The sensor I am using is an OsiSense™ XMLP pressure sensor that reads between 0 and 100 bars and gives out a 0v (zero bars) to 10v (100 bars) charge. Due to the Arduino Uno only being capable of reading up to 5 volts, I've used a voltage divider to reduce the maximum voltage the Arduino receives to 5v.
I've attached a hand-written diagram. Let me know if you need any more information. I've attached the wiring and also the code.
/*
ReadAnalogVoltage from a OsiSense XMLP presure sensor
Reads an analog input on pin 0, converts it to voltage and then bar pressure, and prints the result to the Serial Monitor and also MQTT.
Graphical representation is available using Serial Plotter (Tools > Serial Plotter menu).
Todo
Static ip. set it to request IP from network
Work out best way to average readings
*/
#include <SPI.h> //Serial Peripheral Interface (SPI)
#include <Ethernet.h> // These libraries are designed to work with the Arduino Ethernet Shield (Ethernet.h)
#include <PubSubClient.h> // This library provides a client for doing simple publish/subscribe messaging with a server that supports MQTT
// sets the MAC address and IP address for the network
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192,34,98,221); // IP Address of the client
IPAddress server(192,34,98,201); // The IP address of the MQTT server
void callback(char* topic, byte* payload, unsigned int length) {
// handle message arrived
}
EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
void setup() {
Serial.println("Begin setup");
Ethernet.begin(mac, ip);
// Note - the default maximum packet size is 128 bytes. If the
// combined length of clientId, username and password exceed this,
// you will need to increase the value of MQTT_MAX_PACKET_SIZE in
// PubSubClient.h
// connects to MQTT and says hello world. Probably change this later on to something more appropriate
if (client.connect("ArdRigTest")) {
client.publish("outTopic","Ard Rig Test");
client.subscribe("inTopic");
}
// start serial port
Serial.begin(9600);
}
void loop() {
// Note - the default maximum packet size is 128 bytes. If the
// combined length of clientId, username and password exceed this,
// you will need to increase the value of MQTT_MAX_PACKET_SIZE in
// PubSubClient.h
// read the input on analog pin 0:
int sensorValue1 = analogRead(A0);
delay(2); // read twice with small delay to get accurate reading.
int sensorValue2 = analogRead(A0);
Serial.println(sensorValue2);
//Test code. using map function
int MapBarPressure;
MapBarPressure = map(sensorValue2, 0, 1023, 0, 100);
if (client.connect("ArdRigTest" )) {
client.publish("MapBarPressure",String(MapBarPressure).c_str()); //logs the pressure of the RigTest
client.subscribe("MapBarPressure");
}
delay(100); // Pauses the program for the amount of time (in miliseconds) specified as parameter. (There are 1000 milliseconds in a second.)
client.loop();
}
Thanks in advance.