czwartek, 8 marca 2018

Sterowanie bramą wjazdową / garażową ver 2.0

Dawno dawno temu za siedmioma górami ... Wydaje się to tak dawno i odlegle ... A minęło zaledwie 1,5 roku od pierwszego pomysłu na otwieranie bramy garażowej telefonem za pomocą nieocenionego BLYNKa. Moje koncepcje rozwiązań problemów sterowania IoT mocno ewaluowały od tego czasu a i sam BLYNK znacznie się rozwinął. Dziś więc powrót do starego pomysłu w nowej odsłonie - czyli odgrzewane kotlety nie tylko w motoryzacji.

Poprzedni układ sterowania bramą - a w zasadzie dwoma przyciskami pilota bramy - wymagał aż dwu mikrokontrolerów. Jak widać nie tylko Chińczyki maja skłonność do elektronicznego baroku.

Oczywiście takie rozwiązanie wymusiła moja spora indolencja na temat  możliwości współczesnych mikrokontrolerów i dostępnych na rynku rozwiązań układów IoT. A zarazem niekłamany podziw dla twórców platformy ARDUINO i jej możliwości zastosowania nawet dla bardzo początkującego adepta mikroprocesorowej elektroniki.
Ówczesna klasyka - połączenie przyjaznego Arduino NANO i robiącego oszałamiającą karierę układu ESP8266 - wydawała się optymalnym rozwiązaniem. A przy okazji można było w tym samym projekcie wdrożyć wiele innych funkcji. Pomiar temperatury, sterowania światłami, regulacja pieca CO i sterowanie pompą obiegową zmieściły się w jednym układzie bez najmniejszego problemu. Układ pracuje nieprzerwanie do dziś i bez to bez żadnych zmian...

No właśnie - bez żadnych zmian. A potrzeba by tam wprowadzić ich sporo choćby z uwagi na zmiany w samym BLYNKu. Ale ruszenie jednej funkcji może zakończyć znowu wielodniowym ślęczeniem nad projektem by doprowadzić go do akceptowalnego stanu. Lepiej więc było pozostawić status quo.

Aż do dzisiaj.

Postanowiłem zrobić generalną rewolucję i rozbić poszczególne funkcje Smart Home na osobne moduły. Jeszcze nie wiem w jakim kierunku to pójdzie ale od czegoś trzeba zacząć. Na pierwszy więc ogień wybrałem funkcję sterowania bramą garażową. Funkcja ta ze swej natury stanowi odrębny system domowego sterowania. Inspiracją do pomysłu była dyskusja pod jednym z moich postów dotyczących opcji sterowania bramą wjazdową. Pokazała ona na mnogość możliwych rozwiązań tego prostego w istocie problemu. I tym sposobem temat wrócił ponownie do obróbki.

Jak zawsze podstawowym kryterium weryfikacji pomysłu jest moje lenistwo - ma być prosto szybko no i oczywiście tanio. Spróbujmy więc czy tak się da.

Obecne rozwiązanie oparte jest na tym samym pomyśle co poprzednie - sterowania bramą z wykorzystaniem oryginalnego pilota z kodem zmiennym. Taki sposób gwarantuje pełne bezpieczeństwo dostępu do istotnego przecież miejsca jakim jest garaż lub wjazd na posesję.
Ale do sterowania pilotem wykorzystałem zakupiony niedawno i opisywany tu inteligentny przekaźnik z mikrokontrolerem ESP-01. Schemat sterowania uległ niewielkiej modyfikacji


Styk przekaźnika połączony jest równolegle z przyciskiem na pilocie. A przekaźnik sterowany jest aplikacją BLYNK w telefonie. Ot i wszystko. Całość do złożenia i uruchomienia w niecałą godzinę a jak kto ma wprawę w elektronice i BLYNKu to zrobi to w 15 min. I o to chodzi!!! Koszty coś między 15 a 30 zł. I to raczej ze wskazaniem na cenowy dół. Jak zawsze ceną podbije obudowa - ale to już sprawa mocno indywidualna.

Mnie to zajmie trochę dłużej bo chcę to zapakować do mojej ulubionej obudowy po czujce PIR. No i trzeba dorobić do tego jakieś zasilanie 5 V. Całość więc będzie wyglądać mniej więcej tak




 Chwila przerwy na działania praktyczne .......


A po przerwie ....................

O elektronice nie ma co pisać - trzeba dolutować dwa kabelki do pilota i przyłączyć je na styki zwierne przekaźnika. Dodatkowo zasilić płytkę przekaźnika jego napięciem - u mnie akurat to 5V.



O programie też nie ma co pisać - to standardowy kod z przykładu BLYNKa dla ESP8266

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char ssid[] = "YourNetworkName";
char pass[] = "YourPassword";
void setup(){
  Blynk.begin(auth, ssid, pass);
}
void loop(){
  Blynk.run();
}

Wszystkiego 10 linijek. I ustawienie jednego widgetu BUTTON na port GPIO 0 w aplikacji telefonu



BUTTON ustawiony jest na funkcję PUSH dzięki czemu działa identycznie jak klawisz pilota - kiedy jest naciskany przekaźnik się załącza i powoduje nadawanie kodu przez pilota. Trzeba też odwrócić logikę załączania przycisku 1 / 0 gdyż aktywnym stanem portu GPIO 0 jest stan niski.
I koniec zabawy.
Mój rzeczywisty kod wgrany do przekaźnika jest nieco dłuższy. Dodałem sterowanie diodą w aplikacji by patrząc na ekran telefonu szybko stwierdzić czy system działa prawidłowo. Taką samą funkcję spełnia LED na module ESP-01 - sygnalizuje prawidłową pracę urządzenia. Przy braku połączenia z serwerem BLYNK LED przestanie mrugać.

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Timers.h> //  my favorite timer 
Timers <3> akcja; //
char auth[] = "aaaaaaaaaaaaaaaaaaaaaaaa";
char ssid[] = "kkkkkkkk";
char pass[] = "11111111111";
#define _karmin     "#FF0080"
#define led_wew   2
#define przek   0
WidgetLED led1(V0); // led w aplikacji wskazujący na połacenie mikroprocesor - aplikacja
int wskrunAr = 0;
void vLED_timer()//miganie vLED i LEDem dla kontroli połączenia
{
  wskrunAr = !wskrunAr ;
  if (wskrunAr == 0)led1.off(); else led1.on();
  digitalWrite(led_wew, wskrunAr );
}
void setup()
{
  pinMode(led_wew, OUTPUT); //LED na module
  digitalWrite(led_wew, HIGH);
  pinMode(przek, OUTPUT); //przekaźnik
  digitalWrite(przek, HIGH);
  akcja.attach(0, 2000, vLED_timer); //
  Blynk.begin(auth, ssid, pass);
  Blynk.setProperty(V0, "color", _karmin);
}
void loop()
{
  akcja.process(); // timer
  Blynk.run();
}


Czy można jakość wzbogać funkcje tego elementu domowego sterowania ? Oczywiście można ..... tylko po co? Układ dedykowany jest tylko do tej jedynej funkcji i nic ponad to. I tak ma zostać.

Pierwszy element rozproszonego systemu IoT dla mojego domu należy uznać za wykonany.

Z dalszym ciągiem przyjdzie nam poczekać na kolejne klocki IoT realizujące specyficzne funkcje. No to czekamy....
123

6 komentarzy:

  1. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
    Odpowiedzi
    1. Z jakiej strony można pobrać bibliotekę Timers.h?
      Biblioteka z linku https://github.com/nettigo/Timers
      nie chce się skompilować z esp-01s.

      Usuń
  2. to nie ta
    http://forum.arduinopolska.pl/watek-biblioteka-timers-koniec-z-uciążliwym-delay
    tu ją znajdziesz na końcu pierwszego wpisu

    OdpowiedzUsuń
    Odpowiedzi
    1. Dziękuję bardzo. Wszystko działa. Jak zniwelowałeś problem zaniku napięcia? Po zaniku i powrocie napięcia ESP-01 zwiera na kilka milisekund przekaźnik... nie otwiera w tym czasie bramy garażowej?

      Usuń
  3. masz płytkę opisaną we wpisie czy swoją własną?Jeśli własną to przełącz przekaźnik na Rx - na tym pinie nie pojawiają się żadne śmieci przy starcie ESP. Moja brama reaguje dopiero na naciśnięcie dłuższe niż 1 sek.

    OdpowiedzUsuń
    Odpowiedzi
    1. Posiadam przekaźnik z żółtym gniazdem i esp montowanym w poprzek. Taki jak w artykule.

      Usuń