Skocz do zawartości

Pomocna odpowiedź

Dzień dobry,

 W swoim pierwszym wpisie, chciałbym przedstawić własną wersję sterownika światła sterowanego za pomocą aplikacji na androida.

Sam sterownik składa się z:

  • NodeMCU

  • MODUŁ 2 PRZEKAŹNIKÓW 5V

  • Dwóch przycisków

 

light_bb.thumb.jpg.488b80850dd36d336524ce25890d91ca.jpg

 

Wspomagając się powyższym rysunkiem, zmontowałem całość korzystając z płytki uniwersalnej. NodeMCU łączy się z lokalną siecią WiFi. Do sterowania wykorzystuje bibliotekę aREST udostępniając funkcje on, off i get przyjmujące jako parametr numer przekaźnika. Kod w wersji skróconej i zdjęcia urządzenia do podejrzenia poniżej.

// Rest and esp library
#include <ESP8266WiFi.h>
#include <aREST.h>
// WiFi parameters
const char* ssid = "ssid";
const char* password = "password";
const int SWITCH1 = 5;
const int SWITCH2 = 16;
const int RELAY1 =  12;
const int RELAY2 =  14;
const unsigned long INTERVAL = 500;
bool relay1State = LOW;
bool relay2State = LOW;
bool switch1State = LOW;
bool switch2State = LOW;
unsigned long currentMillis = 0;
unsigned long switch1Millis = 0;
unsigned long switch2Millis = 0;

aREST rest = aREST();
const int LISTEN_PORT = 80;
WiFiServer server(LISTEN_PORT);
int onControl(String value);
int offControl(String value);
int getControl(String value);

void setup(void)
{
  rest.set_id("10");
  rest.set_name("Light Switches");
  Serial.begin(115200);
  pinMode(SWITCH1, INPUT);
  pinMode(SWITCH2, INPUT);
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  digitalWrite(RELAY1, !relay1State);
  digitalWrite(RELAY2, !relay2State);
  rest.variable("light1", &relay1State);
  rest.variable("light2", &relay2State);
  rest.function("on", onControl);
  rest.function("off", offControl);
  rest.function("get", getControl);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Light Switches connected");
  server.begin();
  Serial.println("Light Switches address");
  Serial.println(WiFi.localIP());
}

void loop() {
  currentMillis = millis();
  if (currentMillis - switch1Millis >= INTERVAL && digitalRead(SWITCH1)) {
    switch1State = !switch1State;
        if(switch1State==HIGH){
         digitalWrite(RELAY1, LOW);
         relay1State = !LOW;
    }
        if(switch1State==LOW){
         digitalWrite(RELAY1,HIGH );
         relay1State = !HIGH;
    }
    switch1Millis = currentMillis;
  }
  if (currentMillis - switch2Millis >= INTERVAL && digitalRead(SWITCH2)) {
    switch2State = !switch2State;
    if(switch2State==HIGH){
         digitalWrite(RELAY2, LOW);
         relay2State = !LOW;
    }
        if(switch2State==LOW){
         digitalWrite(RELAY2,HIGH);
         relay2State = !HIGH;
    }
    switch2Millis = currentMillis;
  }
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  while (!client.available()) {
    delay(10);
  }
  rest.handle(client);
}
int onControl(String value) {
  if (value=="0") {
    digitalWrite(RELAY1, LOW);
    relay1State = !LOW;
    switch1State = HIGH;
    return 0;
  }
  if (value=="1") {
    digitalWrite(RELAY2, LOW);
    relay2State = !LOW;
    switch2State = HIGH;
    return 0;
  }
  return -100;
}
int offControl(String value) {
  if (value=="0") {
    digitalWrite(RELAY1, HIGH);
    relay1State = !HIGH;
    switch1State = LOW;
    return 0;
  }
  if (value=="1") {
    digitalWrite(RELAY2, HIGH);
    relay2State = !HIGH;
    switch2State = LOW;
    return 0;
  }
  return -100;
}
int getControl(String value) {
    if (value=="0") {
    return relay1State;
  }
  if (value=="1") {
    return relay2State;
  }
  return -100;
}

 

1360832983_IMG_20190809_1001234861.thumb.jpg.98b3baa430cfa3f3d2d60096679368ac.jpg 407357842_IMG_20190809_1004089852.thumb.jpg.8ec719ad05cfeee67ead2092599a73a6.jpg

 

Aplikacja składa się z czterech ekranów. Pierwszy to przełączanie żarówki przez przytrzymanie odpowiadającego jej pola na ekranie. Dwa kolejne odpowiadają za włącznie i wyłączenie wszystkich żarówek jednocześnie. Ostatni odpowiada za dodawanie i usuwanie połączeń, czyli wprowadzamy nazwę, adres urządzenia i numer przełącznika.

 

a5.thumb.jpg.c30a517a2fa834dce74a9ab6873cc49f.jpg a3.thumb.jpg.5a3becdd3d3eae56d6626904dfe15b6a.jpg a2.thumb.jpg.61502546682a1c2c9f13242fe5d7bf45.jpg a1.thumb.jpg.2b4cb66f996b8f9c2a68e4b980a7d9d3.jpga4.thumb.jpg.3729f535f09b92dcfa7165cb7166a687.jpg

 

Problemy i dalszy rozwój 

Jestem zadowolony z działania sterownika jedyny problem, jaki zaobserwowałem to przełączanie się przekaźników podczas podłączania innych urządzeń do przedłużacza, do którego jest wpięty.

W aplikacji do bieżącej funkcjonalności chcę dodać włącznie wcześniej zdefiniowanych grup żarówek. I dodać nową funkcjonalności w postaci sterowania taśmami led, możliwość włączenia komputera, a także zakładkę gromadzącą wartości z czujników.

Cały kod i aplikacja znajduje się w moim repozytorium

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

@dab1994, witam na forum! Gratuluje ciekawego projektu. Jakie dokładnie czujniki planujesz dodać później do tego systemu? Nie chciałbyś skupić się na rozwiązaniu problemu ze "strzelającymi przekaźnikami"? To niezbyt dobry objaw 😉

Udostępnij ten post


Link to post
Share on other sites

Jeśli, chodzi o czujniki to sam pomysł jest taki żeby udostępniać odczyty z czujnika jako liczbę z dwoma miejscami po przecinku i w samej aplikacji tak samo wprowadzić nazwę, adres i jego numer, dodatkowo wybierając przy tym, czy mam być wyświetla w formacie liczbowym, czy procentowym.

Nie mam pomysłu jak rozwiązać problem z przekaźnikami nie wiem, czy problem dotyczy przekaźników czy przycisków, po prostu stan żarówki zmienia się na przeciwny i tak zostaje, ale nie jest jakoś szczególnie uciążliwe.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
9 godzin temu, dab1994 napisał:

Nie mam pomysłu jak rozwiązać problem z przekaźnikami nie wiem, czy problem dotyczy przekaźników czy przycisków, po prostu stan żarówki zmienia się na przeciwny i tak zostaje, ale nie jest jakoś szczególnie uciążliwe.

Jeśli wpływ na działanie układu ma podłączanie innych urządzeń do tej samej listwy zasilającej to warto zacząć od sprawdzenia czy Twoje urządzenie jest cały czas odpowiednio zasilane. Może przydałoby się więcej kondensatorów (lub ogólnie lepsze źródło zasilania)? Jeśli podejrzewasz też same przyciski to może warto dla testu odpiąć je od układu (zastąpić rezystorem) zobaczysz wtedy czy to faktycznie one 😉

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...