Czujnik obecności samochodu w garażu z alarmem

User avatar
Xoggo
Posts: 182
Joined: Sun Mar 29, 2020 10:03 pm
Location: Zbąszynek

Post

klew wrote: Mon Apr 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ć:

Code: Select all

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)?
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

Xoggo wrote: Thu Apr 30, 2020 9:58 am
klew wrote: Mon Apr 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.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
Xoggo
Posts: 182
Joined: Sun Mar 29, 2020 10:03 pm
Location: Zbąszynek

Post

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.
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

Xoggo wrote: Thu Apr 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.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
Xoggo
Posts: 182
Joined: Sun Mar 29, 2020 10:03 pm
Location: Zbąszynek

Post

klew wrote: Thu Apr 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:

Code: Select all

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ć:

Code: Select all

  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
Posts: 138
Joined: Mon May 28, 2018 7:06 am
Location: Wrocław

Post

nie ma w źródłach już will_trigger co ją zastąpiło ?
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

NetAs wrote: Fri Dec 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
Posts: 28
Joined: Thu Apr 15, 2021 5:28 pm

Post

klew wrote: Sat Apr 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

Code: Select all

#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[] = "[email protected]";

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
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

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/

Return to “Projekty użytkowników”