Skocz do zawartości

Sterownik światła z aplikacją Android


dab1994

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
Link do komentarza
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 😉

Link do komentarza
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
Link do komentarza
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 😉

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

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

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.