Skocz do zawartości

Albert1972

Użytkownicy
  • Zawartość

    69
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O Albert1972

  • Ranga
    4/10
  • Urodziny 27.09.1972

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Wiedeń

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Sprawa taka . w sklepie Botland zamówiłem sobie dwa takie moduły. https://botland.com.pl/pl/seria-gravity/10830-dfrobot-gravity-analogowy-czujnik-tds-czystosci-wody-dla-arduino.html Jeśli chodzi o sklep to wszystko w najlepszym porządku. Jest jednak maleńki problem. Podają tam link do strony producenta a tenże producent podaje kod który się nie kompiluje. Lekko mnie to skonsternowało dlatego zwracam się o pomoc w znalezieniu odpowiedzi na pytanie - co jest z tym kodem nie tak. Tu link do kodu: https://wiki.dfrobot.com/Gravity__Analog_TDS_Sensor___Meter_For_Arduino_SKU__SEN0244 /*************************************************** DFRobot Gravity: Analog TDS Sensor / Meter For Arduino <https://www.dfrobot.com/wiki/index.php/Gravity:_Analog_TDS_Sensor_/_Meter_For_Arduino_SKU:_SEN0244> Created 2017-8-22 By Jason <jason.ling@dfrobot.com@dfrobot.com> GNU Lesser General Public License. See <http://www.gnu.org/licenses/> for details. All above must be included in any redistribution /***********Notice and Trouble shooting*************** 1. This code is tested on Arduino Uno and Leonardo with Arduino IDE 1.0.5 r2 and 1.8.2. 2. More details, please click this link: <https://www.dfrobot.com/wiki/index.php/Gravity:_Analog_TDS_Sensor_/_Meter_For_Arduino_SKU:_SEN0244> ****************************************************/ #define TdsSensorPin A1 #define VREF 5.0 // analog reference voltage(Volt) of the ADC #define SCOUNT 30 // sum of sample point int analogBuffer[SCOUNT]; // store the analog value in the array, read from ADC int analogBufferTemp[SCOUNT]; int analogBufferIndex = 0,copyIndex = 0; float averageVoltage = 0,tdsValue = 0,temperature = 25; void setup() { Serial.begin(115200); pinMode(TdsSensorPin,INPUT); } void loop() { static unsigned long analogSampleTimepoint = millis(); if(millis()-analogSampleTimepoint > 40U) //every 40 milliseconds,read the analog value from the ADC { analogSampleTimepoint = millis(); analogBuffer[analogBufferIndex] = analogRead(TdsSensorPin); //read the analog value and store into the buffer analogBufferIndex++; if(analogBufferIndex == SCOUNT) analogBufferIndex = 0; } static unsigned long printTimepoint = millis(); if(millis()-printTimepoint > 800U) { printTimepoint = millis(); for(copyIndex=0;copyIndex<SCOUNT;copyIndex++) analogBufferTemp[copyIndex]= analogBuffer[copyIndex]; averageVoltage = getMedianNum(analogBufferTemp,SCOUNT) * (float)VREF / 1024.0; // read the analog value more stable by the median filtering algorithm, and convert to voltage value float compensationCoefficient=1.0+0.02*(temperature-25.0); //temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0)); float compensationVolatge=averageVoltage/compensationCoefficient; //temperature compensation tdsValue=(133.42*compensationVolatge*compensationVolatge*compensationVolatge - 255.86*compensationVolatge*compensationVolatge + 857.39*compensationVolatge)*0.5; //convert voltage value to tds value //Serial.print("voltage:"); //Serial.print(averageVoltage,2); //Serial.print("V "); Serial.print("TDS Value:"); Serial.print(tdsValue,0); Serial.println("ppm"); } } int getMedianNum(int bArray[], int iFilterLen) { int bTab[iFilterLen]; for (byte i = 0; i<iFilterLen; i++) bTab[i] = bArray[i]; int i, j, bTemp; for (j = 0; j < iFilterLen - 1; j++) { for (i = 0; i < iFilterLen - j - 1; i++) { if (bTab[i] > bTab[i++ 1]) { bTemp = bTab[i]; bTab[i] = bTab[i++ 1]; bTab[i+1] = bTemp; } } } if ((iFilterLen & 1) > 0) bTemp = bTab[(iFilterLen - 1) / 2]; else bTemp = (bTab[iFilterLen / 2] + bTab[iFilterLen / 2 - 1]) / 2; return bTemp; } to ten pierwszy.
  2. To może dobrze byłoby stworzyć jakiś dział projektów otwartych. 1. Jest mnóstwo ciekawych pomysłów i można by je nawzajem dzielić między projektami. 2. Forumowicze znając powody i cele budowy projektu mogliby pomóc własnymi pomysłami i rozwiązaniami. 3. Każdy na bazie opisanego projektu mógłby odtworzyć go dla siebie. Myślę że to znacznie cenniejsze niż 50 zł
  3. No to tak. Projekt robię już od 10 lat - mechanicznie. Teraz próbuje go zautomatyzować za pomocą arduino -yun. W automatyzacji pomaga mi kilka osób z tego forum. Projekt to urządzenie do uzyskania czystej wody(a pomocą odwróconej osmozy) z jakiegokolwiek źródła (no może poza radioaktywnym). Czystej oznacza zbliżonej do chemicznego H2O. Kontrolowana mineralizacja tej wody. (prawdziwa - mierzalna) Mineralizacja wedle zapotrzebowania - magnez , wapń, potas itp. Kontrola nad odpowiednim proporcjonowaniem - przyswajalność w odpowiednich konfiguracjach Zrobienie lekarstwa z tej wody. (Woda magnezowa z kontrolą zawartości magnezu w litrze wody) Nasycenie wody dwutlenkiem węgla do poziomu zgodnego z osobistymi preferencjami użytkownika. Wszystko w warunkach domowych i z wykorzystaniem dostępnych finansowo rozwiązań. Jest to projekt w trakcie realizacji i chyba do końca mojego życia takim pozostanie. Głównie dlatego że wpływ wody magnezowej na różne schorzenia testuję głównie na sobie. W kilku bardzo pomaga więc i jest motywacja do dalszej pracy. Kwalifikuje się zatem?
  4. Jako świeżak dziękuję z ten odcinek kursu. Nieśmiało zadam jednak pytanie . Dlaczego zamiast listw rgb nie pociągnięto dalej o odczyt drugiego , piątego i dziesiątego DS18B20. Nie omówiono jaki sposób podłączenia jest w jakiej sytuacji najlepszy i daje najdokładniejszy odczyt. Czy szeregowo czy w gwiazdę? Jakie są plusy i minusy takich połączeń?. Ten przewodnik doprowadza do podpięcie po adresie jednego czujnika. Drugi już u mnie nie działa, podobnie jak trzeci i reszta w szeregu czy gwieździe. Byłbym pewien że coś popieprzyłem z kabelkami gdyby fabryczny program nie identyfikował każdego z osobna i na każdym nie czytał poprawnych temperatur. Bardzo prosiłbym o rozwinięcie tej części kursu o dwa lub trzy dodatkowe DS18B20 bez dodatkowych fajerwerków a za to z dokładnym omówieniem sposobów podłaczenia i zalet lub wad takich podłączeń.
  5. Myślisz o 64 do każdych 10 mS? Tzn. 64 x 200?
  6. Jeśli spojrzysz do kodu to zobaczysz tam wzór oparty na ponad dwustu pomiarach opisanych wyżej.
  7. wyjście cyfrowe do tego modułu a zasilanie modułu z zasilacza https://www.amazon.de/gp/product/B07C5R8ZHZ/ref=ppx_yo_dt_b_asin_image_o03_s00?ie=UTF8&psc=1
  8. Trochę nad tym posiedziałem dzisiaj i znalazłem kilka kolejnych błędów. Część udało się rozwiązać. Różnica w obliczeniach sięga 10 do 20mS między tym co mierzyłem w Excelu a a tym co pokazuje Arduino. Będę musiał chyba zrobić ponowną kalibrację już na gotowej instalacji. Pozostaje problem falowania napięcia na wyjściach czujników analogowych. Co ciekawe kiedy mierzę to napięcie miernikiem to jest stabilne a Arduino chyba mierzy punktowo i nie uśrednia. Da się jakoś to obejść?
  9. Ok trochę to trwało bo w miedzy czasie odkryłem kilka dodatkowych problemów z innymi czujnikami. DHT wywaliłem i zastąpiłem DS 18B20 - problemy znikły. Z wzorem jest jednak coś nie tak bo odczyty jakie daje są mocno błędne. /*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(A2)); Serial.print(M, 3); Serial.print(" μS "); Serial.print("-("); Serial.print(X, 3); Serial.print("V"); Serial.println(")"); Na szczęście odczyty napięć są podobne jak na mierniku Zauważyłem tu podobny problem jak przy mierniku ciśnienia opisany w tym poście https://forbot.pl/forum/topic/16471-czujnik-cisnienia-nieagresywnych-plynow-i-gazow/?tab=comments#comment-132612 Napięcie samoistnie skacze . Być może to wada Arduino. Zamówiłem już drugie by porównać.
  10. Ależ ja przekopiowałem dokładnie kod demo do własnego kodu
×
×
  • Utwórz nowe...