Połączenie 2 przekaźników w jeden przycisk w aplikacji

MatLow
Posts: 8
Joined: Wed Nov 21, 2018 9:42 am

Post

Cześć,
posiadam siłownik liniowy, który działa na zasadzie zmiennej polaryzacji dlatego też użyłem modułu esp-12f 2 relays, w którym 1 przekaźnik otwiera a drugi zamyka siłownik przez co w aplikacji Supla mam 2 osobne przyciski do 2 przekaźników. Czy jest możliwość scalić 2 przekaźniki w jeden przycisk na zasadzie przesunięcia w prawo - otwieranie- pierwszy przekaźnik, przesunięcia w lewo - zamykanie - drugi przekaźnik.
Pozdr.
kurus
Posts: 1312
Joined: Wed Jan 15, 2020 8:17 pm

Post

Niema takiej opcji, jedynie co możesz to ustawić moduł jako roleta i wtedy masz po przeciągnięciu otwórz i zamknij w drugą stronę..
Zibi
Posts: 646
Joined: Wed Jul 31, 2019 9:20 am
Location: Białogard

Post

Mógłbyś spróbować dołożyć scalak CD4017 i sterować z jednego przycisku, ale jeśli to ma być sterowanie z apki i przycisku to zostaje tylko napisanie logiki sterowania.
Sekwencja sterowania:
Przycisk siłownik otwiera,
Przycisk Stop
Przycisk siłownik zamyka
Przycisk Stop
Jeśli nie było stopu to wyłącza się po określonym czasie i program czeka na kolejne wciśnięcie i uruchamia siłownik w stronę przeciwną.
User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

MatLow wrote: Wed Jul 05, 2023 11:12 am Cześć,
posiadam siłownik liniowy, który działa na zasadzie zmiennej polaryzacji dlatego też użyłem modułu esp-12f 2 relays, w którym 1 przekaźnik otwiera a drugi zamyka siłownik przez co w aplikacji Supla mam 2 osobne przyciski do 2 przekaźników. Czy jest możliwość scalić 2 przekaźniki w jeden przycisk na zasadzie przesunięcia w prawo - otwieranie- pierwszy przekaźnik, przesunięcia w lewo - zamykanie - drugi przekaźnik.
Pozdr.
przekaźnik NC/NO - wyłączony leci w lewo, załączony leci w prawo (... chyba, że potrzebujesz jeszcze stop ale o tym nie pisałeś)
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
MatLow
Posts: 8
Joined: Wed Nov 21, 2018 9:42 am

Post

Funkcji "stop" nie potrzebuję. Siłownik ma się otworzyć i zamknąć całkowicie. Obecnie załączenie przekaźnika w supla cloud mam skonfigurowane na kilkadziesiąt sek. W tym czasie siłownik się otwiera/zamyka i jak dojdzie do końca to zasilanie na siłowniku jest odcinane przez krańcówki do pozostałego czasu działania przekaźników.
User avatar
YoMan
Posts: 3521
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa
Has thanked: 3 times
Been thanked: 3 times

Post

MatLow wrote: Wed Jul 05, 2023 2:06 pm Funkcji "stop" nie potrzebuję. Siłownik ma się otworzyć i zamknąć całkowicie. Obecnie załączenie przekaźnika w supla cloud mam skonfigurowane na kilkadziesiąt sek. W tym czasie siłownik się otwiera/zamyka i jak dojdzie do końca to zasilanie na siłowniku jest odcinane przez krańcówki do pozostałego czasu działania przekaźników.
Skoro mówisz o zmiennej polaryzacji to zakładam, że mówisz o prądzie stałym (przy zmiennym raczej by były 2 przewody fazowe i neutralny) zatem podłączyłbym dwa przekaźniki równolegle pod jeden pin i podłączył podobnie jak tutaj: viewtopic.php?p=146562#p146562 tylko przy którymś z przekaźników odwrócił polaryzację.
Niestety nie znam się na tyle na elektronice, żeby stwierdzić jednoznacznie czy można tak wprost podłączyć czy też nie trzeba użyć dodatkowego elementu typu tranzystor, optoizolator lub coś innego. Znając swoją naturę pewnie bym podłączył i sprawdził ale może koledzy bardziej obeznani się tutaj wypowiedzą
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
Zibi
Posts: 646
Joined: Wed Jul 31, 2019 9:20 am
Location: Białogard

Post

Code: Select all

#define PRZEKAZNIK  12
#define PRZEKAZNIK2 13
#define PRZYCISK 5

#include <SuplaDevice.h>
#include <supla/control/roller_shutter.h>
#include <supla/control/button.h>
#include <supla/control/pin_status_led.h>
#include <supla/control/action_trigger.h>
// Choose where Supla should store roller shutter data in persistant memory
// We recommend to use external FRAM memory
#define STORAGE_OFFSET 100
#include <supla/storage/eeprom.h>
Supla::Eeprom eeprom(STORAGE_OFFSET);
// #include <supla/storage/fram_spi.h>
// Supla::FramSpi fram(STORAGE_OFFSET);

#include <supla/network/esp_wifi.h>
Supla::ESPWifi wifi("XXXX", "XXXXXX");

byte redOn = 0;
byte greenOn = 0;
byte a = 0;
byte b = 0;
unsigned long lastTurnOnTimeStamp;
unsigned long time_shutter = 40000;   // Ustaw taki sam czas pracy jak w cloud dla rolet zeby wyzerowala sie zmienna.
bool flaga = false;

auto rs = new Supla::Control::RollerShutter(PRZEKAZNIK, PRZEKAZNIK2, false);

Supla::Control::Button *button_zam = nullptr; //{};

enum default_actions {MOJA_AKCJA};
class addedActionsClass : public Supla::ActionHandler, public Supla::Element {
  public: addedActionsClass() {}
    void handleAction(int event, int action) {

      if (action == MOJA_AKCJA) {
        flaga = true;
      }
    }
};
addedActionsClass *custAct = new addedActionsClass;

void Sterowanie_Rolet() {
  // Oba Przekazniki Wylaczone zaczynamy od pierwszego...
  if (flaga) {
    flaga = false;
    if (redOn == 0 && greenOn == 0) {
      Serial.println("Przycisk Zamknij");
      redOn = 1;
      greenOn = 0;

    } else if (redOn > 0) {
      if (redOn == 1 || redOn == 2) { 
        redOn = 3;

      } else { 
        Serial.println("Przycisk Otworz");
        redOn = 0;
        greenOn = 1;

      }
    } else if (greenOn > 0) {
      if (greenOn == 1 || greenOn == 2) {
        greenOn = 3;

      } else {
        greenOn = 0;
        redOn = 1;
      }
    }
  }
  if (redOn == 1) {
    redOn = 2;
    a = 0;
    Serial.println("Zamknij");
    rs->close();
    lastTurnOnTimeStamp = millis();

  } else if (greenOn == 1) {
    greenOn = 2;
    b = 0;
    Serial.println("Otworz");
    rs->open();
    lastTurnOnTimeStamp = millis();
  }
  // gdy minie czas od ostatniego włączenia, to wyłączmy przekazniki
  
  if (millis() - lastTurnOnTimeStamp > time_shutter) { 
    if (redOn == 2) {
      redOn = 3;
    }
    if (greenOn == 2) {
      greenOn = 3;
    }
  }

  if (redOn == 3 && a == 0) {
    a = 1;
    Serial.println("Zamykanie Stop");
    rs->stop();
  }
  if (greenOn == 3 && b == 0) {
    b = 1;
    Serial.println("Otwieranie Stop");
    rs->stop();
  }
}
void setup() {

  Serial.begin(115200);

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

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

  button_zam = new Supla::Control::Button(PRZYCISK, true, true);
  button_zam->setMulticlickTime(800, false);
  button_zam ->addAction(MOJA_AKCJA, custAct, Supla::ON_PRESS);



  SuplaDevice.begin(GUID,              // Global Unique Identifier
                    "svrX.supla.org",  // SUPLA server address
                    "@gmail.com",   // Email address used to login to Supla Cloud
                    AUTHKEY);          // Authorization key


}

void loop() {

  SuplaDevice.iterate();
  Sterowanie_Rolet();

}
Tak na szybko nie testowałem powinno zadziałać. Sterowanie z jednego przycisku jest z funkcją stopu. Sterowanie dziala z apki i z przycisku natomiast jesli chcialbyś sterować np apką włączasz, a przyciskiem wyłączasz i na odwrót to trzeba zmodernizować kod ale myślę że do sterowania siłownikiem wystarczy.

Return to “Pomoc”