Albert1972 Napisano Lipiec 4, 2019 Udostępnij Napisano Lipiec 4, 2019 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. Link do komentarza Share on other sites More sharing options...
msalamon Lipiec 5, 2019 Udostępnij Lipiec 5, 2019 Jakie masz napięcie odniesienia dla ADC? Te kilo-paskale to jakie są surowe wartości? Link do komentarza Share on other sites More sharing options...
Albert1972 Lipiec 5, 2019 Autor tematu Udostępnij Lipiec 5, 2019 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? Link do komentarza Share on other sites More sharing options...
Albert1972 Lipiec 6, 2019 Autor tematu Udostępnij Lipiec 6, 2019 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 -> Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
msalamon Lipiec 6, 2019 Udostępnij Lipiec 6, 2019 No dobra a kalibrowałeś go wefług instrukcji z komentarza? Link do komentarza Share on other sites More sharing options...
Albert1972 Lipiec 6, 2019 Autor tematu Udostępnij Lipiec 6, 2019 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 Link do komentarza Share on other sites More sharing options...
msalamon Lipiec 6, 2019 Udostępnij Lipiec 6, 2019 Dokumentacja w dłoń i dostosowujesz obliczenia 🙂 Link do komentarza Share on other sites More sharing options...
ethanak Lipiec 6, 2019 Udostępnij Lipiec 6, 2019 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... Link do komentarza Share on other sites More sharing options...
Albert1972 Lipiec 6, 2019 Autor tematu Udostępnij Lipiec 6, 2019 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 Link do komentarza Share on other sites More sharing options...
PiotrekEl Lipiec 6, 2019 Udostępnij Lipiec 6, 2019 A co masz podpiętę pod AVCC i AREF mikrokontrolera? Może tu jest problem. Link do komentarza Share on other sites More sharing options...
Albert1972 Lipiec 6, 2019 Autor tematu Udostępnij Lipiec 6, 2019 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ę. Link do komentarza Share on other sites More sharing options...
Albert1972 Lipiec 6, 2019 Autor tematu Udostępnij Lipiec 6, 2019 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*/ } } Link do komentarza Share on other sites More sharing options...
msalamon Lipiec 6, 2019 Udostępnij Lipiec 6, 2019 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? Link do komentarza Share on other sites More sharing options...
Albert1972 Lipiec 6, 2019 Autor tematu Udostępnij Lipiec 6, 2019 zwyczajnie i 5V z arduino i masa z arduino Link do komentarza Share on other sites More sharing options...
msalamon Lipiec 6, 2019 Udostępnij Lipiec 6, 2019 Nie wiem jak to jest zwyczajnie... Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »