Page 1 of 1

help with multisensor and pressure water mysensors.org

Posted: Wednesday 01 May 2019 0:30
by WarLion
Hi guys i building a multi sensor node with mysensor.org , but i have one problem with a water pressure it keeps giving me a weather pressure , any one know what im doing wrong

Image

Code: Select all

#define MY_NODE_ID 1
#define MY_DEBUG
#define MY_RADIO_NRF24

#include <SPI.h>
#include <MySensors.h>  


#define CHILD_ID_VOLT_1 1
#define CHILD_ID_VOLT_2 2
#define CHILD_ID_VOLT_3 3

#define CHILD_ID_CURRENT_1 4
#define CHILD_ID_CURRENT_2 5
#define CHILD_ID_CURRENT_3 6

#define CHILD_ID_PRESION 7

#define VOLT_SENSOR_ANALOG_PIN_1 0
#define VOLT_SENSOR_ANALOG_PIN_2 1
#define VOLT_SENSOR_ANALOG_PIN_3 2

#define CURRENT_SENSOR_ANALOG_PIN_1 3
#define CURRENT_SENSOR_ANALOG_PIN_2 4
#define CURRENT_SENSOR_ANALOG_PIN_3 5


#define PressPin      A6 



unsigned long SLEEP_TIME = 20000; // Sleep time between reads (in milliseconds)

MyMessage msg(CHILD_ID_VOLT_1, V_VOLTAGE);
MyMessage msg2(CHILD_ID_VOLT_2, V_VOLTAGE);
MyMessage msg3(CHILD_ID_VOLT_3, V_VOLTAGE);

MyMessage msg4(CHILD_ID_CURRENT_1, V_CURRENT);
MyMessage msg5(CHILD_ID_CURRENT_2, V_CURRENT);
MyMessage msg6(CHILD_ID_CURRENT_3, V_CURRENT);

MyMessage pressureMsg(CHILD_ID_PRESION, V_PRESSURE);

float lastVolt1;
float lastVolt2;
float lastVolt3;

float lastCurrent1;
float lastCurrent2;
float lastCurrent3;

float lastPresion;


int pressure = 0;
float PSI = 0;
float PSI_CAL = 2.0;            // Calibration of sensor
int PSImsb = 0;
int PSIr = 0;



void before() {

}


void presentation()
{
  sendSketchInfo("Pozo multi sensor", "1.0");  // Send the sketch version information to the gateway and Controller
  present(CHILD_ID_VOLT_1, S_MULTIMETER);   // Register this device as power sensor
  present(CHILD_ID_VOLT_2, S_MULTIMETER);   // Register this device as power sensor
  present(CHILD_ID_VOLT_3, S_MULTIMETER);   // Register this device as power sensor

  present(CHILD_ID_CURRENT_1, S_MULTIMETER);   // Register this device as power sensor
  present(CHILD_ID_CURRENT_2, S_MULTIMETER);   // Register this device as power sensor
  present(CHILD_ID_CURRENT_3, S_MULTIMETER);   // Register this device as power sensor

  present(CHILD_ID_PRESION, S_WATER);   // Register this device as power sensor
  
}


void setup()  
{ 

}

void loop()      
{     
  int Voltaje1 = analogRead(A0);
  int Voltaje2 = analogRead(A1);
  int Voltaje3 = analogRead(A2);

  int Corriente1 = analogRead(A3);
  int Corriente2 = analogRead(A4);
  int Corriente3 = analogRead(A5);

  
  
  float VoltLevel1 = map(Voltaje1,0,1023,0,500);
  float VoltLevel2 = map(Voltaje2,0,1023,0,500);
  float VoltLevel3 = map(Voltaje3,0,1023,0,500);

  float CorrienteLevel1 = map(Corriente1,0,1023,0,200);
  float CorrienteLevel2 = map(Corriente2,0,1023,0,200);
  float CorrienteLevel3 = map(Corriente3,0,1023,0,200);

  
  Serial.print("Voltaje L1: ");
  Serial.println(VoltLevel1);
  Serial.print("Voltaje L2: ");
  Serial.println(VoltLevel2);
  Serial.print("Voltaje L3: ");
  Serial.println(VoltLevel3);


  Serial.print("Corriente L1: ");
  Serial.println(CorrienteLevel1);
  Serial.print("Corriente L2: ");
  Serial.println(CorrienteLevel2);
  Serial.print("Corriente L3: ");
  Serial.println(CorrienteLevel3);

  //sensor de voltaje
  if (VoltLevel1 != lastVolt1) {
      send(msg.set(VoltLevel1, 1));
      lastVolt1 = VoltLevel1;
  }

    if (VoltLevel2 != lastVolt2) {
      send(msg2.set(VoltLevel2, 1));
      lastVolt2 = VoltLevel2;
  }
    if (VoltLevel3 != lastVolt3) {
      send(msg3.set(VoltLevel3, 1));
      lastVolt3 = VoltLevel3;
  }


//sensor de corriente
    if (CorrienteLevel1 != lastCurrent1) {
      send(msg4.set(CorrienteLevel1, 1));
      lastCurrent1 = CorrienteLevel1;
  }
      if (CorrienteLevel2 != lastCurrent2) {
      send(msg5.set(CorrienteLevel2, 1));
      lastCurrent2 = CorrienteLevel2;
  }
      if (CorrienteLevel3 != lastCurrent3) {
      send(msg6.set(CorrienteLevel3, 1));
      lastCurrent3 = CorrienteLevel3;
  }

/* ************************************************ */
    pressure  = analogRead    (PressPin) ;        // junk read
    wait(25);
    
/* • Output: 0.5V – 4.5V linear voltage output. 0 psi outputs 0.5V, 50 psi outputs 2.5V, 100 psi outputs 4.5V 
    0   psi = .33v after scalling 5.0v to 3.3v
    50  psi = 1.65v
    100 psi = 2.97v

    3.3v/1024 = .0032266 volt per bit
 */
    pressure  = analogRead    (PressPin) ;

    if (pressure < 106) pressure = 106;         // this is minimum of .5v
    PSI = (pressure - 106 ) * .1246;            // where did we get this?? was .119904
    PSI = PSI + PSI_CAL;                        // adjustment
    
    PSImsb = PSI * 100;
    PSIr = PSImsb % 100;
    

    send(pressureMsg.set(PSI, 2));            // Send water pressure to gateway

    Serial.print("Presion: ");
    Serial.println(PSI);
    
    wait(200);
    
     // end of if (SLEEP_MODE || (cu

  
  sleep(SLEEP_TIME);
}
Image

Image

any help will be very appreciated

Re: help with multisensor and pressure water mysensors.org

Posted: Wednesday 01 May 2019 8:40
by peerkersezuuker
Hi,
V_PRESSURE variabele has type S_BARO, so Domoticz picks this up as indeed weather pressure.
S_WATER type has V_FLOW, V_VOLUME variabeles, so you have to work with them.
Or you can maybe make a work around with S_CUSTOM.

https://www.mysensors.org/download/serial_api_20

With Regards
Peer