DFRobot Gravity - czujnik poziomu cieczy FS-IR02

elmaya
Posts: 1485
Joined: Wed Jun 27, 2018 5:48 pm
Location: El Saucejo - Sevilla

Post

The easiest solution would be to connect the sensors to the analog input through a resistive divider.
jaku2k
Posts: 920
Joined: Sun May 24, 2020 8:40 pm
Has thanked: 1 time

Post

sliwkawsieci wrote: Mon May 09, 2022 4:57 pm raczej programuje w wysoko poziomowych językach, ale kiedyś się bawiłem w programowanie STM więc może się podejmę, zawsze to coś nowego. Zobaczę może zrobię jakiś autorski program pomiędzy gui a krańcówkami i tam będę wyliczał procenty na podstawie czujników a potem przekazywał je do gui.
Witam,
nie prościej będzie zastosować gotowe rozwiązanie w postaci odczytu analogowego za pomocą GUI Generica z wykorzystaniem czujnika z serii MPX5XXX?

@elmaya zrobił nawet projekt płytki dla "gołego" ESP takiego jak ESP12, tutaj zdjęcia: viewtopic.php?p=95213#p95213
Pozdrawiam
Jakub
sliwkawsieci
Posts: 18
Joined: Tue Jun 16, 2020 8:55 pm

Post

jaku2k wrote: Mon May 09, 2022 8:48 pm
sliwkawsieci wrote: Mon May 09, 2022 4:57 pm raczej programuje w wysoko poziomowych językach, ale kiedyś się bawiłem w programowanie STM więc może się podejmę, zawsze to coś nowego. Zobaczę może zrobię jakiś autorski program pomiędzy gui a krańcówkami i tam będę wyliczał procenty na podstawie czujników a potem przekazywał je do gui.
Witam,
nie prościej będzie zastosować gotowe rozwiązanie w postaci odczytu analogowego za pomocą GUI Generica z wykorzystaniem czujnika z serii MPX5XXX?

@elmaya zrobił nawet projekt płytki dla "gołego" ESP takiego jak ESP12, tutaj zdjęcia: viewtopic.php?p=95213#p95213
Dzięki, czegoś takiego w sumie szukałem.

A co myślicie o rozwiązaniu, które by wykorzystywało ultradźwiękowy czujnik na przykład HC-SR04 ? Prosty do zaprogramowania i ponoć działa do 4 m. Podejrzewam, że taka odległość jest mocno przesadzona, ale mnie wystarczyłyby 2m i dokładność jakaś wielka też nie jest potrzebna by sprawdzić poziom wody w zbiorniku.
jaku2k
Posts: 920
Joined: Sun May 24, 2020 8:40 pm
Has thanked: 1 time

Post

sliwkawsieci wrote: Mon May 30, 2022 8:03 pm
jaku2k wrote: Mon May 09, 2022 8:48 pm
sliwkawsieci wrote: Mon May 09, 2022 4:57 pm raczej programuje w wysoko poziomowych językach, ale kiedyś się bawiłem w programowanie STM więc może się podejmę, zawsze to coś nowego. Zobaczę może zrobię jakiś autorski program pomiędzy gui a krańcówkami i tam będę wyliczał procenty na podstawie czujników a potem przekazywał je do gui.
Witam,
nie prościej będzie zastosować gotowe rozwiązanie w postaci odczytu analogowego za pomocą GUI Generica z wykorzystaniem czujnika z serii MPX5XXX?

@elmaya zrobił nawet projekt płytki dla "gołego" ESP takiego jak ESP12, tutaj zdjęcia: viewtopic.php?p=95213#p95213
Dzięki, czegoś takiego w sumie szukałem.

A co myślicie o rozwiązaniu, które by wykorzystywało ultradźwiękowy czujnik na przykład HC-SR04 ? Prosty do zaprogramowania i ponoć działa do 4 m. Podejrzewam, że taka odległość jest mocno przesadzona, ale mnie wystarczyłyby 2m i dokładność jakaś wielka też nie jest potrzebna by sprawdzić poziom wody w zbiorniku.
Pomysł był już poruszany wiele razy na Forum. Zdaje się, że @dobo zaprojektował nawet obudowę ze skraplaczem dla tego czujnika. Instalacja czujnika ultradźwiękowego jest prostsza. Decydując się na taki sposób pomiaru, należy pamiętać, że urządzenie jest bardziej awaryjne (w porównaniu do wariantu z czujnikiem różnicy ciśnień) ze względu na "otwartą konstrukcję".
Pozdrawiam
Jakub
sliwkawsieci
Posts: 18
Joined: Tue Jun 16, 2020 8:55 pm

Post

Przemyślałem sprawę i do deszczówki nie potrzebuje mega dokładnych pomiarów i chciałbym z wykorzystaniem wemosa D1mini i 4 czujników pływakowych(lub innych) określić procenty napełnienia (0.25,50,100) .
Czy ktoś mógłby mi poradzić jak zacząć prace nad takim firmware? Tych różnych rozwiązań jest od groma, ale chciałbym by moje było dosyć proste i wygodne do użycia.
Próbowałem za pomocą paczki SuplaDevice, ale niestety nie wiem jak ruszyć.
Idealnie by było gdybym mógł sobie skonfigurować płytkę w GG i zmodyfikować kod, ale niestety wygenerowany kod jest w bin więc nic nie zrobię.
Pytanie moje, czy macie jakiś projekt, na którym mógłbym sobie oprzeć moje rozwiązanie, czy lepiej będzie jak poczytam i zrobie wszystko w oparciu o SuplaDevice ( minus taki, że wszystko tam trzeba zahardkodować, czyli wifi, klucze itd a nie jak w GG że można potem połączyć się online i zmienić konfigurację)
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Większość moich projektów jest oparta o GUI Generic , kolega Krycha88 tworzy to dzieło w Platformiio mi wystarczy Arduino IDE trochę trzeba po kombinować aby to zagrało ale daje radę 😁. Używam go jako podstawę aby mieć interface webowy i OTA. Aby zrealizować twój pomysł należało by stworzyć kanał do wyświetlenia takich wartości ,np na podstawie kanału temperatury - będziesz mieć historie pomiarów , lub wilgotności - w aplikacji będziesz miał procenty bez historii .Trochę trzeba poklikac ale da się to zrobić , wartałoby by również zrobić zabezpieczenie na wypadek zablokowania się pływaka Mój sposób na softy to taki , biorę podstawowy przykład z biblioteki supladevice i tworze , jak zadziała przerzucam do GUI generic , to tak w skrócie 😁
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Po weekendzie będzie wydana nowa wersja SuplaDevice, gdzie będzie gotowe wsparcie dla interfejsu webowego i trybu konfiguracyjnego. Takie rzeczy jak wifi itp bez problemu sam ustawisz.
Najlepsze suple dla Twojego domu :mrgreen:
sliwkawsieci
Posts: 18
Joined: Tue Jun 16, 2020 8:55 pm

Post

shimano73 wrote: Sat Jun 18, 2022 6:24 am Większość moich projektów jest oparta o GUI Generic , kolega Krycha88 tworzy to dzieło w Platformiio mi wystarczy Arduino IDE trochę trzeba po kombinować aby to zagrało ale daje radę 😁. Używam go jako podstawę aby mieć interface webowy i OTA. Aby zrealizować twój pomysł należało by stworzyć kanał do wyświetlenia takich wartości ,np na podstawie kanału temperatury - będziesz mieć historie pomiarów , lub wilgotności - w aplikacji będziesz miał procenty bez historii .Trochę trzeba poklikac ale da się to zrobić , wartałoby by również zrobić zabezpieczenie na wypadek zablokowania się pływaka Mój sposób na softy to taki , biorę podstawowy przykład z biblioteki supladevice i tworze , jak zadziała przerzucam do GUI generic , to tak w skrócie 😁
Dzięki za konkretną odpowiedź. A zdradzisz jak przerzucasz to do gui generic ? przykładowo gdybyś zmodyfikował kod do DHT to co podmieniasz w GG ? Bo rozumiem, że w moim przypadku albo byś modyfikował jakąś istniejącą bibliotekę do sensora, albo robiłbyś kopie takiej i dodawał nowy sensor?

@klew dzięki za informację. Chętnie sprawdzę nowe rozwiązanie.
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

W twoim przypadku na podstawie kanału wilgotności (aby wyświetlali się %) , stworzyłbym nową bibliotekę, której parametrami były by 4 gpio.
W tej bibliotece zmodyfikowałbym metodę getValue w której umieściłbym cała logikę wykrywania stanów i przypisałbym jej wartości liczbowe
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
sliwkawsieci
Posts: 18
Joined: Tue Jun 16, 2020 8:55 pm

Post

shimano73 wrote: Sun Jun 19, 2022 9:15 am W twoim przypadku na podstawie kanału wilgotności (aby wyświetlali się %) , stworzyłbym nową bibliotekę, której parametrami były by 4 gpio.
W tej bibliotece zmodyfikowałbym metodę getValue w której umieściłbym cała logikę wykrywania stanów i przypisałbym jej wartości liczbowe
zgodnie z Twoimi sugestiami dorobiłem sensor na bazie kanału czujnika wilgoci.
Mógłbyś zerknąć czy miałbyś jakieś uwagi? myślałem jeszcze o przyjmowaniu jakiejś tablicy jako parametr konstruktora ale z drugiej strony czy rzeczywiście ktoś by chciał montować więcej niż 4 czujki? chyba nie, więc uznałem, że to będzie przerost formy nad treścią.

tutaj kod do mojej klasy z nowym sensorem

Code: Select all

/*
 Copyright (C) AC SOFTWARE SP. Z O.O.

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#ifndef SRC_SUPLA_SENSOR_DHT_H_
#define SRC_SUPLA_SENSOR_DHT_H_
#include "hygro_meter.h"
#include <supla/time.h>
#include "../io.h"

namespace Supla {
namespace Sensor {
class Poziom_wody : HygroMeter {

 public:
 Poziom_wody(int czujka100, int czujka75, int czujka50, int czujka25) {
    _czujka100 = czujka100;
    _czujka75 = czujka75;
    _czujka50 = czujka50;
    _czujka25 = czujka25;
    channel.setType(SUPLA_CHANNELTYPE_HUMIDITYSENSOR);
 }
  double getVal() {
    double value = HUMIDITY_NOT_AVAILABLE;
    int stanOK = 1;
    setPinResetStatus();
    
    int pinValue100 = Supla::Io::digitalRead(_czujka100) ;
    
    value = 0,00;
    
    if (Supla::Io::digitalRead(_czujka25) == stanOK){
        value = 25,00;
    }
    if (Supla::Io::digitalRead(_czujka50) == stanOK){
        value = 50,00;
    }
    if (Supla::Io::digitalRead(_czujka75) == stanOK){
        value = 75,00;
    }    
    if (pinValue100 == 1){
        value = 100,00;
    }

    poprzedniaWartosc = value;

    return value;
  }

  void iterateAlways() {
    if (lastReadTime + 1000 < millis()) {
      lastReadTime = millis();
      channel.setNewValue(HUMIDITY_NOT_AVAILABLE, getVal());
    }
  }

 protected:
  double poprzedniaWartosc;
  int _czujka100;
  int _czujka75;
  int _czujka50;
  int _czujka25;
  int stanReset = 1 ;
  private:

  void setPinResetStatus() {
     Supla::Io::analogWrite(_czujka100,stanReset);
     Supla::Io::analogWrite(_czujka75,stanReset);
     Supla::Io::analogWrite(_czujka50,stanReset);
     Supla::Io::analogWrite(_czujka25,stanReset);
    
  }
};

};  // namespace Sensor
};  // namespace Supla

#endif  // SRC_SUPLA_SENSOR_DHT_H_

Nie rozumiem tylko, dlaczego jak w metodzie setPinResetStatus ustawiałem stan wysoki za pomocą Supla::Io::digitalWrite to stan ten sie nie zmieniał tylko zapamiętywał stary. Dopiero po podłączeniu równolegle diody działało poprawnie, a dla analogWrite działa poprawnie.

Return to “GUI Generic”