Czujnik obecności samochodu w garażu z alarmem

Awatar użytkownika
Xoggo
Posty: 182
Rejestracja: ndz mar 29, 2020 10:03 pm
Lokalizacja: Zbąszynek

klew pisze: pn kwie 27, 2020 6:37 pm na razie workaround działa ;).
A więc po umieszczeniu w garażu podziemnym i testach sprawa wygląda następująco.

Czujnik dobrze przełącza sensor przy zadanej odległości (np. 2 metry) - warunek - jest przeszkoda czyli czujnik na suficie celuje w stronę podłogi (pokazywane są wtedy wskazania z czujnika.

Natomiast czujnik umieszczony na ścianie na wprost auta (gdy jego nie ma) nie mając przeszkody (w zakresie jego pomiaru oczywiście czyli tam ok. 5 m) pokazuje "----" a tym samym również załącza sensor.

Czy dałoby się modyfikować:

Kod: Zaznacz cały

distance->threshold1 = 2.00;
tak, ażeby przy braku wartości nie przełączał się, lub inaczej - żeby przełączał stan sensora gdy spełniony jest warunek obecności pojazdu w przedziale (np. od 1 m do 2 metrów)?
Awatar użytkownika
klew
Posty: 8293
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Xoggo pisze: czw kwie 30, 2020 9:58 am
klew pisze: pn kwie 27, 2020 6:37 pm na razie workaround działa ;).
Natomiast czujnik umieszczony na ścianie na wprost auta (gdy jego nie ma) nie mając przeszkody (w zakresie jego pomiaru oczywiście czyli tam ok. 5 m) pokazuje "----" a tym samym również załącza sensor.
Jaką wartość zwraca Tobie czujnik przy tych większych odległościach? Mój działa tak, że pokazuje maks ~2 m. I jak ma więcej przed sobą, to nadal pokazuje 2 m.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
Xoggo
Posty: 182
Rejestracja: ndz mar 29, 2020 10:03 pm
Lokalizacja: Zbąszynek

Mi różnie, czasami 2, czasami jak coś złapie to 4. Ale generalnie powyżej 2 m pokazuje mi "----" (czyli nic nie pokazuje).
Wtedy się robi problem.
Awatar użytkownika
klew
Posty: 8293
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Xoggo pisze: czw kwie 30, 2020 10:56 am Mi różnie, czasami 2, czasami jak coś złapie to 4. Ale generalnie powyżej 2 m pokazuje mi "----" (czyli nic nie pokazuje).
Wtedy się robi problem.
Chodziło mi o to, co fizycznie czujnik pokazuje. Zobacz w logach na Serialu.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
Xoggo
Posty: 182
Rejestracja: ndz mar 29, 2020 10:03 pm
Lokalizacja: Zbąszynek

klew pisze: czw kwie 30, 2020 12:08 pm Zobacz w logach na Serialu.
Na serialu przy braku wskazań (czujka nie ma przeszkody powyżej 2 metrów lub więcej) pokazuje:

Kod: Zaznacz cały

23:16:25.381 -> Channel(0) value changed to -1.000000
Przy odłączonej czujce również -1.000000 - i w tym miejscu pokazuje, że chyba ostatni stan czyli SET.
A powinien w obydwu przypadkach wywołać CLEAR.
Próbowałem pokombinować w getValue ale coś nie chce się posłuchać:

Kod: Zaznacz cały

  double getValue() {
    double value = Sensor::HC_SR04::getValue();
    if (value > DISTANCE_NOT_AVAILABLE) {
      if (value < threshold1) {
        runTrigger(ON_BELOW_THRESHOLD1);
      }
      if (value > threshold1) {
        runTrigger(ON_ABOVE_THRESHOLD1);
      }
      if (value < threshold2) {
        runTrigger(ON_BELOW_THRESHOLD2);
      }
      if (value > threshold2) {
        runTrigger(ON_ABOVE_THRESHOLD2);
 //             }
 //     if (value = -1.000000 ) {
 //      runTrigger(ON_ABOVE_THRESHOLD2);
    }
    }
// runTrigger(ON_ABOVE_THRESHOLD2);
 
    return value;
  }
NetAs
Posty: 136
Rejestracja: pn maja 28, 2018 7:06 am
Lokalizacja: Wrocław
Kontakt:

nie ma w źródłach już will_trigger co ją zastąpiło ?
krycha88
Posty: 5199
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

NetAs pisze: pt gru 25, 2020 11:34 am nie ma w źródłach już will_trigger co ją zastąpiło ?
teraz jest addAction
https://gui-generic-builder.supla.io/
NEW
Posty: 28
Rejestracja: czw kwie 15, 2021 5:28 pm

klew pisze: sob kwie 25, 2020 9:29 am Poniżej zamieszczam przykładowy program, który używa czujnika odległośc (HC SR04) do sprawdzania obecności samochodu w garażu, a także sygnalizuje zbyt małą odległość "samochodu" od czujnika.

Wrzucam to jako przykład użycia nowej wersji biblioteki SuplaDevice na Arduino IDE. Pokazuje on jak można samemu dołożyć sobie "zdarzenie", które wewnątrz urządzenia tworzy prostą logikę. Docelowo biblioteka będzie miała nieco inny mechanizm do tworzenia takich zależności ale @Xoggo nie mógł się już doczekać, więc zrobiłem taki przykład na szybko.

Jak na razie wymaga biblioteki z mojego githuba: https://github.com/klew/arduino

Kod: Zaznacz cały

#include <SuplaDevice.h>
#include <supla/sensor/HC_SR04.h>
#include <supla/will_trigger.h>
#include <supla/control/relay.h>
#include <supla/sensor/virtual_binary.h>
#include <supla/network/esp_wifi.h>
Supla::ESPWifi wifi("your_wifi_ssid", "your_wifi_password");

char SERVER[] = "svrX.supla.org";
char EMAIL[] = "mail@mail.com";

using namespace Supla;

// Definiujemy nazwy zdarzeń, których będziemy używać
enum {ON_BELOW_THRESHOLD1, ON_ABOVE_THRESHOLD1, ON_BELOW_THRESHOLD2, ON_ABOVE_THRESHOLD2};

// Tworzymy nową klasę, która dziedziczy po sensorze HC SR04 oraz po klasie WillTrigger, która pozwala na 
// tworzenie powiązań między różnymi elementami aplikacji
class DistanceWithAlarm : public Sensor::HC_SR04, public WillTrigger {
 public:
// Konstruktor - przekazujemy parametry do klasy bazowe HC_SR04 oraz ustawiamy thresholdX na zero.
  DistanceWithAlarm(int8_t trigPin, int8_t echoPin) : HC_SR04(trigPin, echoPin), threshold1(0), threshold2(0) {};

// Nadpisujemy metodę "getValue" - zawoła ona metodę getValue z klasy bazowej HC_SR04, po czym sprawdzi warunki
// czy pobrana wartość jest mniejsza lub większa od parametrów threshold 1 i 2 oraz wywoła odpowiednie zdarzenie
  double getValue() {
    double value = Sensor::HC_SR04::getValue();
    if (value > DISTANCE_NOT_AVAILABLE) {
      if (value < threshold1) {
        runTrigger(ON_BELOW_THRESHOLD1);
      }
      if (value > threshold1) {
        runTrigger(ON_ABOVE_THRESHOLD1);
      }
      if (value < threshold2) {
        runTrigger(ON_BELOW_THRESHOLD2);
      }
      if (value > threshold2) {
        runTrigger(ON_ABOVE_THRESHOLD2);
      }
    }
    return value;
  }

  double threshold1;
  double threshold2;
};

void setup() {

  Serial.begin(460800);

  // Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid
  char GUID[SUPLA_GUID_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

  // Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

// Tworzymy sensor dystansu - ustaw poprawne GPIO
  DistanceWithAlarm *distance = new DistanceWithAlarm(4, 5); // (trigger, echo)
// Tworzymy przekaźnik alarmu
  Control::Relay *alarmRelay = new Control::Relay(D8);
// Tworzymy wirtualny sensor binarny (on/off, jest/nie ma) 
  Sensor::VirtualBinary *carInGarage = new Sensor::VirtualBinary();

// Ustawiamy odległości powyżej/poniżej których mają wykonać się akcje
  distance->threshold1 = 0.30; // 30 cm
  distance->threshold2 = 1.50; // 150 cm
  
// Czujnik dystansu -> wywoła ( przekaźnik alarmu, gdy wartość będzie poniżej threshold1, włącz przekaźnik)
  distance->willTrigger(*alarmRelay, ON_BELOW_THRESHOLD1, TURN_ON);
// Czujnik dystansu -> wywoła ( przekaźnik alarmu, gdy wartość będzie powyżej threshold1, wyłącz przekaźnik)
  distance->willTrigger(*alarmRelay, ON_ABOVE_THRESHOLD1, TURN_OFF);
// Czujnik dystansu -> wywoła ( ustaw sensor obecności samochodu, gdy wartość będzie poniżej threshold2)
  distance->willTrigger(*carInGarage, ON_BELOW_THRESHOLD2, SET);
// Czujnik dystansu -> wywoła ( wyczyść sensor obecności samochodu, gdy wartość będzie powyżej threshold2)
  distance->willTrigger(*carInGarage, ON_ABOVE_THRESHOLD2, CLEAR);

  SuplaDevice.setName("CarInGarage");
  SuplaDevice.begin(GUID,     // Global Unique Identifier 
                    SERVER,   // SUPLA server address
                    EMAIL,    // Email address used to login to Supla Cloud
                    AUTHKEY); // Authorization key
    
}

void loop() {
  SuplaDevice.iterate();
}
Miłej zabawy ;)


można prosić bibliotekę dla <supla/will_trigger.h>
krycha88
Posty: 5199
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Ten przykład jest dość nieaktualny z początku powstania biblioteki. Tu masz aktualny:
https://github.com/SUPLA/supla-arduino/ ... tLight.ino
https://gui-generic-builder.supla.io/
ODPOWIEDZ

Wróć do „Projekty użytkowników”