Skocz do zawartości
Albert1972

Czujnik ciśnienia nieagresywnych płynów i gazów

Pomocna odpowiedź

Mam do Was takie pytanie. Co sądzicie o tym czujniku (przetworniku) ciśnienia?

https://www.dfrobot.com/product-1675.html#comment-4088894098

Zakupiłem go i próbuję podłączyć do Arduino . Producent jednak zaleca wstępną kalibrację przy ciśnieniu atmosferycznym na poniższym kodzie.

/************************************************************
   Water pressure sensor demo(Computer serial port)
   - Obtain the water pressure through the output voltage
     of the sensor.
**************************************************************/

/************************************************************
  Water Sensor Key Parameter
  - Parts No.:KY-3-5
  - Sensing range: 0 - 1.6 MPa
  - Input Voltage: 5VDC
  - Output Voltage: 0.5 - 4.5 VDC
    (Linearly corresponding to 0 - 1.6 MPa)
  - Accuary: 0.5% - 1% FS
**************************************************************/

/************************************************************
  Water Sensor Calibration

  The output voltage offset of the sensor is 0.5V (norminal).
  However, due to the zero-drifting of the internal circuit, the
  no-load output voltage is not exactly 0.5V. Calibration needs to
  be carried out as follow.

  Calibration: connect the 3 pin wire to the Arduio UNO (VCC, GND and Signal)
  without connecting the sensor to the water pipe and run the program
  for once. Mark down the LOWEST voltage value through the serial
  monitor and revise the "OffSet" value to complete the calibration.

  After the calibration the sensor is ready for measuring!
**************************************************************/

const float  OffSet = 0.483 ;

float V, P;

void setup()
{
  Serial.begin(9600);        // open serial port, set the baud rate to 9600 bps
  Serial.println("/** Water pressure sensor demo **/");
}
void loop()
{
  //Connect sensor to Analog 0
  V = analogRead(0) * 5.00 / 1024;     //Sensor output voltage
  P = (V - OffSet) * 400;             //Calculate water pressure

  Serial.print("Voltage:");
  Serial.print(V, 3);
  Serial.println("V");

  Serial.print(" Pressure:");
  Serial.print(P, 1);
  Serial.println(" KPa");
  Serial.println();

  delay(500);
}

Wyniki które dostaje nie są jednak stabilne. Skaczą samoistnie o kilkadziesiąt kilo-paskali nawet. Sporo pomogła zmiana zasilania arduino ale nadal wynik nie jest stabilny.

Zauważyłem też że podobny produkt został wycofany ze sklepu z którym współpracuje to forum. Botland.com. Nie wiem czy to ten sam czujnik ale jeśli tak to może ktoś zna przyczynę wycofania? Tu więcej danych na temat tego czujnika.

https://wiki.dfrobot.com/Gravity__Water_Pressure_Sensor_SKU__SEN0257

Za wszelkie opinie, wskazówki, naprowadzenia lub sprostowania będę bardzo wdzięczny.

Udostępnij ten post


Link to post
Share on other sites

Jakie masz napięcie odniesienia dla ADC? Te kilo-paskale to jakie są surowe wartości?

Udostępnij ten post


Link to post
Share on other sites
11 godzin temu, msalamon napisał:

Jakie masz napięcie odniesienia dla ADC? Te kilo-paskale to jakie są surowe wartości?

Nie całkiem rozumiem o co mnie pytasz. Jestem raczej przedszkolak w tej dziedzinie więc dopytam. Co to jest ADC? Co to są surowe wartości kpaskali? Czy te bez ciśnienia na przetworniku?

 

Udostępnij ten post


Link to post
Share on other sites

Monitor pokazuje takie odczyty.

Cytat

:33.145 ->  Pressure:1.9 KPa
09:40:33.145 -> 
09:40:38.132 -> Voltage:0.444V
09:40:38.132 ->  Pressure:-9.9 KPa
09:40:38.132 -> 
09:40:43.143 -> Voltage:0.479V
09:40:43.143 ->  Pressure:3.8 KPa
09:40:43.143 -> 
09:40:48.145 -> Voltage:0.479V
09:40:48.145 ->  Pressure:3.8 KPa
09:40:48.145 -> 
09:40:53.139 -> Voltage:0.449V
09:40:53.139 ->  Pressure:-7.9 KPa
09:40:53.139 -> 
09:40:58.129 -> Voltage:0.454V
09:40:58.129 ->  Pressure:-6.0 KPa
09:40:58.129 -> 
09:41:03.134 -> Voltage:0.469V
09:41:03.134 ->  Pressure:-0.1 KPa
09:41:03.134 -> 
09:41:08.124 -> Voltage:0.479V
09:41:08.124 ->  Pressure:3.8 KPa
09:41:08.124 -> 
09:41:13.152 -> Voltage:0.479V
09:41:13.152 ->  Pressure:3.8 KPa
09:41:13.152 -> 
09:41:18.126 -> Voltage:0.464V
09:41:18.126 ->  Pressure:-2.1 KPa
09:41:18.126 -> 
09:41:23.132 -> Voltage:0.454V
09:41:23.132 ->  Pressure:-6.0 KPa
09:41:23.132 -> 
09:41:28.153 -> Voltage:0.474V
09:41:28.153 ->  Pressure:1.9 KPa
09:41:28.153 -> 
09:41:33.146 -> Voltage:0.469V
09:41:33.146 ->  Pressure:-0.1 KPa
09:41:33.146 -> 
09:41:38.137 -> Voltage:0.449V
09:41:38.137 ->  Pressure:-7.9 KPa
09:41:38.137 -> 
09:41:43.150 -> Voltage:0.479V
09:41:43.150 ->  Pressure:3.8 KPa
09:41:43.150 -> 
09:41:48.128 -> Voltage:0.474V
09:41:48.128 ->  Pressure:1.9 KPa
09:41:48.128 -> 
 

 

Udostępnij ten post


Link to post
Share on other sites

No dobra a kalibrowałeś go wefług instrukcji z komentarza?

Udostępnij ten post


Link to post
Share on other sites

 dokładnie

teraz podłączyłem go pod go pod instalację i na 5 barach pokazuje mi to:

Cytat


10:49:19.858 ->  - Zbiornik pełny
10:49:35.264 -> Temperatura wody: 4.38*C
10:49:35.264 -> Chłodzenie aktywne
10:49:35.264 -> Napięcie:2.695V
10:49:35.264 -> Ciśnienie:890.5 KPa
10:49:35.264 -> 
10:49:35.264 ->  - Zbiornik pełny
10:49:50.677 -> Temperatura wody: 4.38*C
10:49:50.677 -> Chłodzenie aktywne
10:49:50.677 -> Napięcie:2.700V
10:49:50.677 -> Ciśnienie:892.5 KPa
10:49:50.677 -> 
10:49:50.677 ->  - Zbiornik pełny
10:50:06.052 -> Temperatura wody: 4.38*C
10:50:06.052 -> Chłodzenie aktywne
10:50:06.052 -> Napięcie:2.686V
10:50:06.086 -> Ciśnienie:886.6 KPa
10:50:06.086 -> 
10:50:06.086 ->  - Zbiornik pełny
10:50:21.467 -> Temperatura wody: 4.38*C
10:50:21.467 -> Chłodzenie aktywne
10:50:21.467 -> Napięcie:2.700V
10:50:21.467 -> Ciśnienie:892.5 KPa
10:50:21.467 -> 
10:50:21.467 ->  - Zbiornik pełny
10:50:36.887 -> Temperatura wody: 4.38*C
10:50:36.887 -> Chłodzenie aktywne
10:50:36.887 -> Napięcie:2.690V
10:50:36.887 -> Ciśnienie:888.6 KPa
10:50:36.887 -> 
10:50:36.887 ->  - Zbiornik pełny
10:50:52.267 -> Temperatura wody: 4.38*C
10:50:52.267 -> Chłodzenie aktywne
10:50:52.267 -> Napięcie:2.686V
10:50:52.267 -> Ciśnienie:886.6 KPa
10:50:52.267 -> 
10:50:52.267 ->  - Zbiornik pełny
10:51:07.677 -> Temperatura wody: 4.38*C
10:51:07.677 -> Chłodzenie aktywne
10:51:07.677 -> Napięcie:2.686V
10:51:07.677 -> Ciśnienie:886.6 KPa
10:51:07.677 -> 
10:51:07.677 ->  - Zbiornik pełny
 

 

Udostępnij ten post


Link to post
Share on other sites

Dokumentacja w dłoń i dostosowujesz obliczenia 🙂

Udostępnij ten post


Link to post
Share on other sites

Zmieniłeś zasilanie Arduino - a skąd zasilasz czujnik? To może przypadek, ale jeśli zamiast 500 pokazuje 900 kPa, wygląda to jak różnica zasilania 5V i 9V...

 

Udostępnij ten post


Link to post
Share on other sites

Czujnik jest zasilany z tego samego zasilacza co arduino 5DCV 2A. Dla pewności odciąłem  zasilanie przez USB tzn. 5+  Gnd oczywiście zostało

Udostępnij ten post


Link to post
Share on other sites

A co masz podpiętę pod AVCC i AREF mikrokontrolera? Może tu jest problem.

Udostępnij ten post


Link to post
Share on other sites

Hmmm prawda jest taka że zasilanie podaję przez +5V i gnd bo na początku nie doczytałem że mój Yun nie ma regulatora napięcia jak inne Artki i podałem mu 12V. Usmażyło to zewnętrzne zasilanie i cholera wie co jeszcze. Teraz Ardek wstaje po podaniu napięcia przez micro usb oraz po podaniu  na +5V i GND. Kiedy podam tylko przez  USB brakuje mu prądu na obsługę przekaźników i czujników. Gdy podam na 5V i GND starcza prądu i pracuje stabilnie. Być może uwaliło się coś co jest odpowiedzialne za stabilność prądów na odczycie. Dziś zamówiłem podróbę ardka mega do testów. Zobaczymy czy będzie podobnie wariował.

Cytat

AVCC i AREF 

Kurde nie wiem o czym mówisz. Wyświetl to przedszkolakowi proszę.

Udostępnij ten post


Link to post
Share on other sites

Tak to wygląda na teraz:

Cytat

27.365 -> Trwa mineralizacja
20:48:27.365 -> Zbiornik pełny
20:48:42.792 -> Temperatura wody: 2.75*C
20:48:42.792 -> Chłodzenie aktywne
20:48:42.792 -> Ciśnienie:        888.6 KPa    -(2.690V)
20:48:42.792 -> Aktualny poziom mineralizacji:        analogRead:        41336.000 μS    -(2.017V)
20:48:42.792 -> Trwa mineralizacja
20:48:42.792 -> Zbiornik pełny
20:48:58.189 -> Temperatura wody: 2.75*C
20:48:58.189 -> Chłodzenie aktywne
20:48:58.189 -> Ciśnienie:        953.0 KPa    -(2.852V)
20:48:58.189 -> Aktualny poziom mineralizacji:        analogRead:        41536.000 μS    -(2.036V)
20:48:58.189 -> Trwa mineralizacja
20:48:58.189 -> Zbiornik pełny
20:49:13.612 -> Temperatura wody: 2.75*C
20:49:13.612 -> Chłodzenie aktywne
20:49:13.612 -> Ciśnienie:        882.7 KPa    -(2.676V)
20:49:13.612 -> Aktualny poziom mineralizacji:        analogRead:        42436.000 μS    -(2.085V)
20:49:13.612 -> Trwa mineralizacja
20:49:13.612 -> Zbiornik pełny
20:49:29.021 -> Temperatura wody: 2.75*C
20:49:29.021 -> Chłodzenie aktywne
20:49:29.021 -> Ciśnienie:        851.5 KPa    -(2.598V)
20:49:29.021 -> Aktualny poziom mineralizacji:        analogRead:        35436.000 μS    -(1.733V)
20:49:29.021 -> Trwa mineralizacja
20:49:29.021 -> Zbiornik pełny
20:49:44.453 -> Temperatura wody: 2.75*C
20:49:44.453 -> Chłodzenie aktywne
20:49:44.453 -> Ciśnienie:        861.2 KPa    -(2.622V)
20:49:44.453 -> Aktualny poziom mineralizacji:        analogRead:        38936.000 μS    -(1.929V)
20:49:44.453 -> Trwa mineralizacja
20:49:44.453 -> Zbiornik pełny
20:49:59.860 -> Temperatura wody: 2.75*C
20:49:59.860 -> Chłodzenie aktywne
20:49:59.860 -> Ciśnienie:        982.3 KPa    -(2.925V)
20:49:59.860 -> Aktualny poziom mineralizacji:        analogRead:        42836.000 μS    -(2.104V)
20:49:59.860 -> Trwa mineralizacja
20:49:59.860 -> Zbiornik pełny
20:50:15.269 -> Temperatura wody: 2.75*C
20:50:15.269 -> Chłodzenie aktywne
20:50:15.269 -> Ciśnienie:        956.9 KPa    -(2.861V)
20:50:15.269 -> Aktualny poziom mineralizacji:        analogRead:        34536.000 μS    -(1.704V)
20:50:15.269 -> Trwa mineralizacja
20:50:15.269 -> Zbiornik pełny
20:50:30.673 -> Temperatura wody: 2.81*C
20:50:30.673 -> Chłodzenie aktywne
20:50:30.673 -> Ciśnienie:        964.7 KPa    -(2.881V)
20:50:30.673 -> Aktualny poziom mineralizacji:        analogRead:        42836.000 μS    -(2.100V)
20:50:30.673 -> Trwa mineralizacja
20:50:30.673 -> Zbiornik pełny
20:50:46.098 -> Temperatura wody: 2.75*C
20:50:46.098 -> Chłodzenie aktywne
20:50:46.098 -> Ciśnienie:        927.6 KPa    -(2.788V)
20:50:46.098 -> Aktualny poziom mineralizacji:        analogRead:        40436.000 μS    -(1.992V)
20:50:46.098 -> Trwa mineralizacja
20:50:46.098 -> Zbiornik pełny
20:51:01.501 -> Temperatura wody: 2.75*C
20:51:01.501 -> Chłodzenie aktywne
20:51:01.501 -> Ciśnienie:        929.6 KPa    -(2.793V)
20:51:01.501 -> Aktualny poziom mineralizacji:        analogRead:        36636.000 μS    -(1.802V)
20:51:01.501 -> Trwa mineralizacja
20:51:01.501 -> Zbiornik pełny
20:51:16.905 -> Temperatura wody: 2.75*C
20:51:16.905 -> Chłodzenie aktywne
20:51:16.905 -> Ciśnienie:        915.9 KPa    -(2.759V)
20:51:16.905 -> Aktualny poziom mineralizacji:        analogRead:        36036.000 μS    -(1.753V)
20:51:16.939 -> Trwa mineralizacja
20:51:16.939 -> Zbiornik pełny
20:51:32.322 -> Temperatura wody: 2.81*C
20:51:32.322 -> Chłodzenie aktywne
20:51:32.322 -> Ciśnienie:        951.1 KPa    -(2.847V)
20:51:32.322 -> Aktualny poziom mineralizacji:        analogRead:        36536.000 μS    -(1.782V)
20:51:32.322 -> Trwa mineralizacja
20:51:32.322 -> Zbiornik pełny
20:51:47.737 -> Temperatura wody: 2.81*C
20:51:47.737 -> Chłodzenie aktywne
20:51:47.737 -> Ciśnienie:        956.9 KPa    -(2.861V)
20:51:47.737 -> Aktualny poziom mineralizacji:        analogRead:        42436.000 μS    -(2.075V)
20:51:47.737 -> Trwa mineralizacja
20:51:47.737 -> Zbiornik pełny
20:52:03.160 -> Temperatura wody: 2.75*C
20:52:03.160 -> Chłodzenie aktywne
20:52:03.160 -> Ciśnienie:        871.0 KPa    -(2.646V)
20:52:03.160 -> Aktualny poziom mineralizacji:        analogRead:        36336.000 μS    -(1.787V)
20:52:03.160 -> Trwa mineralizacja
20:52:03.160 -> Zbiornik pełny
20:52:18.565 -> Temperatura wody: 2.81*C
20:52:18.565 -> Chłodzenie aktywne
20:52:18.565 -> Ciśnienie:        976.5 KPa    -(2.910V)
20:52:18.565 -> Aktualny poziom mineralizacji:        analogRead:        37136.000 μS    -(1.826V)
20:52:18.565 -> Trwa mineralizacja
20:52:18.565 -> Zbiornik pełny
20:52:33.996 -> Temperatura wody: 2.81*C
20:52:33.996 -> Chłodzenie aktywne
20:52:33.996 -> Ciśnienie:        872.9 KPa    -(2.651V)
20:52:33.996 -> Aktualny poziom mineralizacji:        analogRead:        43536.000 μS    -(2.134V)
20:52:33.996 -> Trwa mineralizacja
20:52:33.996 -> Zbiornik pełny


#include <OneWire.h>
#include <DallasTemperature.h>

class
  msDelay {
  public:
    inline void
    delay(unsigned long del) {
      this->delay_cnt = del + millis();
    }
    inline bool
    expire(void) {
      if (this->delay_cnt > millis()) return false;
      else return true;
    }
  private:
    unsigned long delay_cnt;
};
OneWire oneWire(6); //Podłączenie do 6
DallasTemperature sensors(&oneWire);                    //Przekazania informacji do biblioteki
const int RELAY1 = 7;                                   // Pin miernika poziomu cieczy - wejście 7
const int POMPA = 8;                                    // Pin pompy napełniającej - wyjście 8
const int POMPA2 = 9;                                   // Pin pompy mieszającej - wyjście 9
const int POMPA3 = 13;                                  // Pin pompy mineralizującej - wyjście 10
const int WENTYLATOR = 11;                              // Wentylator lodówki - wyjście 11
const int CHLODZENIE = 12;                              // Lodówka - wyjście 12
int stanRELAY1 = LOW;
int stanPOMPY = LOW;
int stanPOMPY2 = LOW;
int stanPOMPY3 = LOW;
boolean stanCHLODZENIA = false;
boolean stanMINERALIZACJI = false;

float ZADANAtemperaturaWODY = 1;
float Histereza = 3;

float zadanyPOZIOMmineralizacjiWODY = 100;
float HisterezaMineralizacji = 50;

const float  OffSet = 0.469;
float V, P, M, X;


unsigned long opoznienie = 60000;


msDelay CzasPOMPY;
msDelay odczytDHT;  // utworzenie obiektów delay



void setup() {
  //otwarcie portu i ustawienie prędkości na 9600 bodów
  Serial.begin(9600);
  //dopóki serial monitor nie jest otwarty NIE rób nic
  //while (!Serial) ;



  sensors.begin(); //Inicjalizacja czujnikow
  pinMode(RELAY1, INPUT_PULLUP);
  pinMode(POMPA, OUTPUT);
  pinMode(POMPA2, OUTPUT);
  pinMode(POMPA3, OUTPUT);
  pinMode(WENTYLATOR, OUTPUT);
  pinMode(CHLODZENIE, OUTPUT);
  CzasPOMPY.delay(opoznienie);  // wstępna inicjalizacja delay
  odczytDHT.delay(15000);

}



void loop() {

  sensors.requestTemperatures();                             //Pobranie temperatury czujnika
  float TemperaturaWODY = (sensors.getTempCByIndex(0));

  /*Sterowanie pompami*/
  stanRELAY1 = digitalRead(RELAY1);                         // Odczyt stanu przekaźnika miernika poziomu cieczy:
  if (stanRELAY1 == LOW) {                                  // Sprawdź czy przekaźnik poziomu cieczy jest zwarty.
    // Jeśli tak  zbiornik nie jest pełny, więc ustaw stanRELAY1 na LOW:
    digitalWrite(POMPA, stanPOMPY);
    digitalWrite(POMPA2, !stanPOMPY);                       // Przemienna praca pomp


    if (CzasPOMPY.expire()) {                               // Kiedy cykl pompowania minie



      if (stanPOMPY  == LOW) stanPOMPY  = HIGH;             // Wyłącz pompę inaczej włącz pompę
      else stanPOMPY  = LOW;

      CzasPOMPY.delay(opoznienie);                          // odnów delaya na kolejny cykl
    }
  } else {

    digitalWrite(POMPA, HIGH);                              // lub jeśli stan stanRELAY1 jest HIGH wyłacz wszystkie pompy
    digitalWrite(POMPA2, HIGH);

  }

  if (odczytDHT.expire()) {                                 // Kiedy cykl odczytu czujnika temperatury minie


    {
      odczytDHT.delay(200);                                 // odczytaj ponownie za chwilkę
      Serial.print("Temperatura wody: ");
      Serial.print(TemperaturaWODY);                        //Wyswietlenie informacji
      Serial.println("*C");
    }
    /*Sterowanie chłodzeniem*/

    if (TemperaturaWODY <= ZADANAtemperaturaWODY)
    {
      stanCHLODZENIA = false;
    }

    if (TemperaturaWODY >= (ZADANAtemperaturaWODY + Histereza))
    {
      stanCHLODZENIA = true;
    }
    digitalWrite(11, !stanCHLODZENIA);
    digitalWrite(12, !stanCHLODZENIA);
    if (stanCHLODZENIA) {
      Serial.println("Chłodzenie aktywne");
    }
    /*Czujnik ciśnienia*/
    V = analogRead(5) * 5.00 / 1024;     //Sensor output voltage
    P = (V - OffSet) * 400;             //Calculate water pressure
    Serial.print("Ciśnienie:        ");
    Serial.print(P, 1);
    Serial.print(" KPa    ");
    Serial.print("-(");
    Serial.print(V, 3);
    Serial.print("V");
    Serial.println(")");

    /*Mineralizacja*/
    float X =  analogRead(2) * 5.00 / 1024;
    float M = (0, 57 * X - 463, 36);
    Serial.print("Aktualny poziom mineralizacji:        ");
    Serial.print("analogRead:        "); 
    Serial.print(analogRead(2));
    Serial.print(M, 3);
    Serial.print(" μS    ");
    Serial.print("-(");
    Serial.print(X, 3);
    Serial.print("V");
    Serial.println(")");


    if (M <= zadanyPOZIOMmineralizacjiWODY)
    {
      stanMINERALIZACJI = false;
    }

    if (M >= (zadanyPOZIOMmineralizacjiWODY + HisterezaMineralizacji))
    {
      stanCHLODZENIA = true;
    }
    digitalWrite(13, !stanCHLODZENIA);
    if (stanCHLODZENIA) {
      Serial.println("Trwa mineralizacja");
    }
    if (stanRELAY1 == HIGH && stanPOMPY == LOW)
      Serial.print("Zbiornik pełny");

    if (stanRELAY1 == LOW && stanPOMPY == LOW)
      Serial.print("Napełnianie");


    if (stanRELAY1 == LOW && stanPOMPY == HIGH)
      Serial.print("Mieszanie");
    Serial.println("");

    odczytDHT.delay(15000);  // odnowienie opóźnienia*/


  }
}

 

 

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, Albert1972 napisał:

Kiedy podam tylko przez  USB brakuje mu prądu na obsługę przekaźników i czujników.

Aż się boję wiedzieć jak sterujesz tymi przekaźnikami 🙂 Masz jakiś schemat urządzenia?

Udostępnij ten post


Link to post
Share on other sites

zwyczajnie i 5V z arduino i masa z arduino

 

Udostępnij ten post


Link to post
Share on other sites

Nie wiem jak to jest zwyczajnie...

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...