Czujniki w bibliotece SuplaDevice

User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

klew wrote: Mon Feb 24, 2020 11:06 am W bibliotece https://github.com/SUPLA/arduino/tree/develop pojawił się niedawno ultradźwiękowy sensor odległości HC-SR04. Obsługę sensora dostarczył @elmaya. Dorzuciłem też do niego obsługę błędów oraz zwiększyłem częstototliwość odczytów (teraz jest co pół sekundy - w przyszłości będzie można to sobie parametrem ustawić). Trzy błędne odczyty są ignorowane, następnie pojawią się w aplikacji "---" do czasu poprawnego odczytu.
Przykład jest dostępny tutaj:
https://github.com/SUPLA/arduino/blob/d ... sensor.ino

Poza tym od niedawna jest też dostępny następca "addSensorNO" - czyli sensor wykrywający stan wysoki/niski na danym GPIO. Do obsługi służy klasa Supla::Sensor::Binary oraz Supla::Sensor::NormallyOpen (można ich używać zamiennie w zależności od tego, która nazwa Wam bardziej pasuje).

Wkrótce zrobię BME*. Jeśli ktoś na coś bardzo czeka, to piszcie :)
Tak, BME :) zostało mi ostatnie urządzenie na "starej" bibliotece.
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
Duch__
Posts: 2199
Joined: Wed Aug 24, 2016 7:26 pm
Location: Opole
Been thanked: 6 times

Post

VEML6075
User avatar
Robert Błaszczak
Posts: 5222
Joined: Sat Dec 22, 2018 8:55 pm
Location: Zielona Góra
Has thanked: 37 times
Been thanked: 27 times

Post

Ciekawy ten czujnik. Nie znałem go wcześniej. Trzeba będzie pomyśleć i zastosować go w swojej stacji meteo.
Dzięki @Duch__ :)
Pozdrawiam
Robert Błaszczak


Moja prywatna strona: www.blaszczak.pl
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

forumowicze,

Potrzebuję wstawić analogowy odczyt z czujnika gazu. Jak utworzyć klasę dla takiego odczytu?
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

lukfud wrote: Mon Mar 02, 2020 8:44 pm forumowicze,

Potrzebuję wstawić analogowy odczyt z czujnika gazu. Jak utworzyć klasę dla takiego odczytu?
Tu masz przykład, resztę musisz już dopisać :)

viewtopic.php?p=60917#p60917
https://gui-generic-builder.supla.io/
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

krycha88 wrote: Mon Mar 02, 2020 9:05 pm
lukfud wrote: Mon Mar 02, 2020 8:44 pm forumowicze,

Potrzebuję wstawić analogowy odczyt z czujnika gazu. Jak utworzyć klasę dla takiego odczytu?
Tu masz przykład, resztę musisz już dopisać :)

viewtopic.php?p=60917#p60917
Próbuję na podstawie:

Code: Select all

class RssiChannel : public Supla::Sensor::Thermometer {
  public: RssiChannel() {}
  void onInit() { channel.setNewValue(getValue()); }
  double getValue() { return WiFi.RSSI(); }
};
ale niestety mi nie wychodzi. Chciałbym użyć ThermHygroMeter.
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

lukfud wrote: Mon Mar 02, 2020 9:22 pm Próbuję na podstawie:

Code: Select all

class RssiChannel : public Supla::Sensor::Thermometer {
  public: RssiChannel() {}
  void onInit() { channel.setNewValue(getValue()); }
  double getValue() { return WiFi.RSSI(); }
};
ale niestety mi nie wychodzi. Chciałbym użyć ThermHygroMeter.
To zamień Supla::Sensor::Thermometer na Supla::Sensor::ThermHygroMeter

I do pobierania wartości wykorzystaj metody getTemp() oraz getHumi()
https://gui-generic-builder.supla.io/
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

krycha88 wrote: Mon Mar 02, 2020 9:55 pm
To zamień Supla::Sensor::Thermometer na Supla::Sensor::ThermHygroMeter

I do pobierania wartości wykorzystaj metody getTemp() oraz getHumi()
Dzięki za podpowiedzi.
Kombinowałem z Supla::Sensor::ThermHygroMeter, ale baran jestem i nie doczytałem ze zrozumieniem. Sypało błędami bo nie wstawiłem

Code: Select all

#include <supla/sensor/therm_hygro_meter.h>
Udało się, działa :)

Code: Select all

class GasSensor : public Supla::Sensor::ThermHygroMeter {
  public: GasSensor() {}
  void onInit() { 
  	channel.setNewValue(getValue()); 
  }
  double getHumi() { 
  	return map(analogRead(A0), 0 ,1024, 0, 100);
  }
};
Kolejną zagadką jest wstawienie odczytu z DS'a do tej klasy..
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

lukfud wrote: Mon Mar 02, 2020 10:09 pm
Udało się, działa :)

Code: Select all

class GasSensor : public Supla::Sensor::ThermHygroMeter {
  public: GasSensor() {}
  void onInit() { 
  	channel.setNewValue(getValue()); 
  }
  double getHumi() { 
  	return map(analogRead(A0), 0 ,1024, 0, 100);
  }
};
Kolejną zagadką jest wstawienie odczytu z DS'a do tej klasy..
Czemu chcesz aby "Gas Sensor" czytał temperaturę z DSa?

We wstawionym przez Ciebie kodzie jest błąd. W "onInit" powinieneś używać "getHumi" a nie "getValue".
W tym typie sensora (temperatura + wilgotność) powinieneś używać metody setNewValue z dwoma argumentami:

Code: Select all

        channel.setNewValue(getTemp(), getHumi());
Także jeśli getHumi używasz do odczytu wyjścia analogowego, to getTemp możesz wykorzystać na odczyt drugiej wartości. Tylko czytanie tam DSa będzie bardzo nielogiczne ;). Do tego odczyt DSa nie jest rzeczą trywialną.
W onInit powinieneś też wstawić kod inicjalizujący GPIO do odczytu analogowego, a konstruktor powienien przyjmować nr GPIO do odczytu gazu - tak aby to A0 nie pojawiało się bezpośrednio w kodzie GasSensor'a.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

klew wrote: Mon Mar 02, 2020 10:59 pm Czemu chcesz aby "Gas Sensor" czytał temperaturę z DSa?

We wstawionym przez Ciebie kodzie jest błąd. W "onInit" powinieneś używać "getHumi" a nie "getValue".
W tym typie sensora (temperatura + wilgotność) powinieneś używać metody setNewValue z dwoma argumentami:
Jak już używam kanału z dwiema wartościami to czemu nie, przy okazji będzie czujnik temperatury w kuchni.
Ok, widzę błąd, ale odczyt jest poprawny. Zmienię
lukfud wrote: Mon Mar 02, 2020 10:09 pm W onInit powinieneś też wstawić kod inicjalizujący GPIO do odczytu analogowego, a konstruktor powienien przyjmować nr GPIO do odczytu gazu - tak aby to A0 nie pojawiało się bezpośrednio w kodzie GasSensor'a.
No dobrze, tylko nie wiem jak ;) mógłbyś podać przykład?
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl

Return to “Arduino IDE”