logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Termostat ze sterowaniem pompą oparty na ESP8266

kolgreen 05 Lis 2018 09:50 8559 28
REKLAMA
  • Termostat ze sterowaniem pompą oparty na ESP8266

    Do stworzenia termostatu opartego o ESP8266 nakłonił mnie znajomy. Potrzebował urządzenia sterującego grzałką i łatwo zdalnie konfigurowalnego. Zaraz pomyślałem o płytce NodeMCU którą miałem pod ręką...

    Oprogramowanie nie powstało w języku LUA (co mogłaby sugerować płytka) a w języku C++ w środowisku programistycznym Arduino.

    Choć urządzenie nie doczekało się działania w docelowej lokalizacji, to po publikacji projektu w Internecie otrzymałem sugestię by dodać obsługę pompy.
    W chwili obecnej program umożliwia ustawienie temperatury utrzymywanej przez grzałkę (oraz definicję histerezy), możliwa jest również definicja temperatur przy których uruchamiana jest pompka obiegu wody. Na chwilę obecną projekt zawiera jedynie samo oprogramowanie, brak natomiast projektu płytki. By uruchomić urządzenie wystarczy do płytki NodeMcu podłączyć transoptor sterujący triakiem, który z kolei uruchamia np. grzałkę. Odczyt temperatury dokonywany jest za pomocą DS18B20.

    Po wgraniu oprogramowania do układu należy nawiązać z nim połączenie za pośrednictwem portu UART (prędkość: 115200 baud).
    Ważnym jest by jako zakończenie linii wybrać "nowa linia", czyli znak "n" - informuje on ESP o zakończeniu wysyłania instrukcji, bądź ciągu znaków.
    Wysyłając znak "h" wyświetlane jest menu z poziomu którego dokonujemy konfiguracji sieci WiFi (wyświetlamy dostępne sieci, łączymy z wybraną, wpisujemy hasło).
    Po uzyskaniu adresu IP możliwa jest w następnej kolejności konfiguracja urządzenia za pośrednictwem przeglądarki stron internetowych.

    Termostat ze sterowaniem pompą oparty na ESP8266 Termostat ze sterowaniem pompą oparty na ESP8266

    Szczegółowy opis urządzenia oraz odnośniki do najnowszych "wsadów" dla ESP8266 opublikowałem w artykule ESP8266 - Termostat

    Fajne? Ranking DIY
    O autorze
    kolgreen
    Poziom 16  
    Offline 
    kolgreen napisał 269 postów o ocenie 240, pomógł 11 razy. Jest z nami od 2007 roku.
  • REKLAMA
  • #2 17541616
    Linoge
    Poziom 27  
    Posty: 1093
    Pomógł: 54
    Ocena: 44
    Może i się czepiam ale tą samą funkcjonalność można otrzymać przy pomocy esp easy i pewnie temu podobnych w ciągu kilku sekund bez środowiska "programistycznego".
    No i pisanie, że program jest w C++ gdzie nie ma żadnej klasy jest dalekim nadużyciem.
  • #3 17541729
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    Linoge napisał:
    Może i się czepiam



    Chyba tak :D

    Linoge napisał:
    ale tą samą funkcjonalność można otrzymać przy pomocy esp easy i pewnie temu podobnych w ciągu kilku sekund bez środowiska "programistycznego".


    Oczywiście... Również można taką samą funkcjonalność uzyskać używając zakupionego w sklepie sprzętu. Ot, moje rozwiązanie jest takie jak zaprezentowałem... Co nie znaczy, że jedyne i jedynie słuszne. Jeśli ktoś chce skorzystać, miło mi - udostępniam wsad (nie ma potrzeby używania "środowiska programistycznego"). Jeśli natomiast ktoś chce sobie coś zmienić w programie i bardziej dostosować - udostępniam źródła.


    Linoge napisał:
    No i pisanie, że program jest w C++ gdzie nie ma żadnej klasy jest dalekim nadużyciem.


    Czy przejrzałeś wszystkie pliki linkowane przez kompilator w tym programie? :D
    Generalnie jest to kompilator języka C++ a nie C.
  • #4 17543618
    Galareta
    Poziom 23  
    Posty: 696
    Pomógł: 14
    Ocena: 182
    Pewno mu chodziło o zgubne skutki zawieszenia sie;) ale realnie patrząc dobrze zbudowany układ powinien przewidywać zespawanie się styków wiec zawieszenie tez nie zaszkodzi;) A czy esp się aż tak bardzo wiesza, mam prawie 3 lata w akwarium do sterowania oświetleniem i działa.
    Częściej wynalazki fabryczne w bojlerach padają np dość często.
  • #5 17543692
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    Galareta napisał:
    Pewno mu chodziło o zgubne skutki zawieszenia sie;) ale realnie patrząc dobrze zbudowany układ powinien przewidywać zespawanie się styków wiec zawieszenie tez nie zaszkodzi;)


    Jak napisałem w pierwszym poście, bardziej myślałem o triaku... Przekaźniki półprzewodnikowe również są... Może jestem w błędzie ale nie używam przekaźników opartych o elektromagnes.
    Po za tym co złego się może stać w przypadku zawieszenia się? Większy rachunek za prąd i wodę? Trzeba być szaleńcem żeby mieć instalację CO bez zabezpieczenia (całkowicie zamknięty obieg).

    Galareta napisał:
    A czy esp się aż tak bardzo wiesza, mam prawie 3 lata w akwarium do sterowania oświetleniem i działa. Częściej wynalazki fabryczne w bojlerach padają np dość często.


    Również jestem tego zdania. No ale może kolega sam wyjaśni co miał na myśli.
  • #6 17543789
    Konto nie istnieje
    Poziom 1  
  • #7 17545153
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #8 17545364
    Konto nie istnieje
    Poziom 1  
  • #9 17545396
    Konto nie istnieje
    Poziom 1  
  • #10 17545574
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    khoam napisał:
    Mam jedną uwagę do tego fragmentu kodu programu:
    Dobra praktyka nakazuje, aby w C/C++ nie używać operatorów porównania (==) dla wartości typu float. Takie porównywanie wcale nie musi zwracać prawidłowej wartości logicznej. Akurat w tej części programu jest to niezwykle istotne.
    Gdybyś trochę więcej czasu spędził na przetestowaniu tego kodu, to byś się o tym przekonał.


    Prawdę mówiąc z powodzeniem testuję niemalże od 10 lat. :D
    Do tego projektu zaczerpnąłem to rozwiązanie z CCS C dla mikrokontrolerów PIC, jednak widzę, że to rozwiązanie jest również stosowane w wielu innych bibliotekach...
    Po wpisaniu w google "while (temp == 85.0 || temp == (-127.0));" zwracana jest cała masa stron, co oczywiście nie znaczy, że musi to być prawidłowe.
    Zapoznam się z linkiem jaki dostarczyłeś, zakładam, że rzutowanie na int powinno rozwiązać sprawę. Dzięki za zwrócenie uwagi - nie znałem tego problemu.

    Dodano po 10 [minuty]:

    AGrodecki napisał:
    Zawór bezpieczeństwa się nie zatnie. Przy zagotowaniu wody puści i jak to z nimi zazwyczaj bywa, już się nie zamknie :).


    No i wszystko prawidłowo.

    AGrodecki napisał:
    Powtarzam, tak odpowiedzialnych zadań takiej padlinie jak ten moduł się nie powierza.


    Jaki układ zatem kolega poleca?

    Przypominam, że znajdujemy się w dziale DIY i mamy tu do czynienia z konstrukcjami amatorskimi, które wykonujemy dla własnej satysfakcji i na własną odpowiedzialność. Nie są to konstrukcje komercyjne, choć i w takich ESP8266 znajduje zastosowanie (przykład pierwszy z brzegu - Sonoff Smart Home). Wniosek jaki wyciągam z narzekań forumowiczów jest taki, że powinienem w artykule zaznaczyć fakt iż ingerencja w układ CO rodzi pewne ryzyko, z którego być może nie wszyscy zdają sobie sprawę.
  • REKLAMA
  • #11 17545617
    pitron
    Poziom 24  
    Posty: 811
    Pomógł: 51
    Ocena: 99
    Ja już widziałem układy STM32 w poważnych komercyjnych produktach.
    Sam mam sterownik CO na arduino mini pro już 3 lata i działa OK choć długo poprawiałem błędy w trakcie życia systemu.
    Dodam tylko że zabezpieczenia pozostały seryjne i działają niezależnie.
  • #12 17545662
    Konto nie istnieje
    Poziom 1  
  • #13 17545724
    hindoos
    Poziom 36  
    Posty: 3655
    Pomógł: 286
    Ocena: 653
    Myślę, że rozumie, ale chodzi mu o coś innego.
    Każde urządzenie należy produkować z myślą o jego awarii i konsekwencjach jakie z niej wynikną.
    Awaria urządzenia do podlewania kwiatków może doprowadzić do
    a) utopienia kwiatków
    b) ususzenia kwiatków
    Awaria rozrusznika serca może doprowadzić do
    a) śmierci pacjenta
    b) poważnych problemów zdrowotnych
    Awaria sterownika CO może doprowadzić do
    a) ... i tu wpisujemy nasze propozycje

    Teraz jakie są konsekwencje awarii urządzenia do kwiatków? Niewielkie. Czy potrzebujemy zabezpieczenia? Raczej nie - w najgorszym wypadku stracimy kwiatki, ewentualnie zaleje nam podłogę. Warto zabezpieczyć? W ograniczonym zakresie, tak - np. dodać watchdog sprzętowy, dodatkowe programowe funkcje które przerwą program jeśli np. czujnik wilgotności przestanie odpowiadać albo będą dozować średnią dawkę.
    Jakie są konsekwencje dla rozrusznika serca? Chyba nie muszę opowiadać... Błędy oprogramowania się zdarzają, problemy sprzętowe również.
    A co z piecem CO? I na ten problem zwraca uwagę AGrodecki. Trzeba brać pod uwagę możliwości awarii i liczyć się z konsekwencjami. Czasem wystarczy zmienić program, czasem dodać sprzętowe zabezpieczenie, a czasem totalnie zrezygnować ze stosowania rozwiązania.
  • #14 17545736
    Konto nie istnieje
    Poziom 1  
  • #15 17545751
    Konto nie istnieje
    Poziom 1  
  • #16 17545857
    Konto nie istnieje
    Poziom 1  
  • #17 17545914
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    khoam napisał:
    kolgreen napisał:
    Prawdę mówiąc z powodzeniem testuję niemalże od 10 lat.

    Na płytce stykowej ?!


    Nie. Dlaczego? Jeśli zerkniesz na moją skromną stronę zauważysz, że żadne z urządzeń nie jest zbudowane na płytce stykowej. Jestem daleki od tego typu rozwiązań. ESP8266 można oczywiście wstawić jako "moduł" do zaprojektowanej przez siebie płytki (na gold pinach), ale o wiele lepiej zwyczajnie wlutować. Na przykład będący w takiej postaci:

    Termostat ze sterowaniem pompą oparty na ESP8266
  • #18 17545918
    hindoos
    Poziom 36  
    Posty: 3655
    Pomógł: 286
    Ocena: 653
    kolgreen napisał:
    Dlaczego?

    Pewnie dlatego, że w pierwszym poście dałeś obrazek z płytki stykowej ;)
  • REKLAMA
  • #19 17549621
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2203
    Moderowany przez tmf:

    Koledzy, proszę trzymać się tematu. Dyskusje nie na temat, można prowadzić w HydeParku lub odpowiednich działach Po godzinach.

  • #20 17550769
    kuba2509
    Poziom 14  
    Posty: 100
    Pomógł: 1
    Ocena: 12
    Witam
    tak dla testu chciałem kompilować kod który zamieściłeś ale niestety się nie da wywala błędy.
  • #21 17550831
    Konto nie istnieje
    Poziom 1  
  • #22 17551615
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    kuba2509 napisał:
    Witam
    tak dla testu chciałem kompilować kod który zamieściłeś ale niestety się nie da wywala błędy.


    Jak tu kolega powyżej napisał - sprawdź czy wybrałeś dobrą płytkę lub pokaż błędy.

    Dodano po 4 [minuty]:

    khoam napisał:

    Dobra praktyka nakazuje, aby w C/C++ nie używać operatorów porównania (==) dla wartości typu float.


    Zagłębiłem się trochę w temat i jestem chyba bogatszy o jakąś wiedzę.

    Została dodana funkcja porównująca floaty czy są sobie równe, z dokładnością przesadną przy pomiarze temperatury:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I teraz odczyt wygląda następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Co zatem wiąże się z powyższym, kod jak i binarka zostały zaktualizowane.
    Jest też innych kilka aktualizacji, jak np. pokazanie w przeglądarce czy pompa i grzałka są włączone.
  • #23 17553228
    Konto nie istnieje
    Poziom 1  
  • #24 17620226
    kamaz8
    Poziom 11  
    Posty: 16
    Ocena: 25
    koledzy a mi po wgraniu do nodemcu prawdopodobnie nie działa
    niby połączono do sieci, adres nadany a w przeglądarce cisza

    w konsoli mam

    SSID:Ela
    Haslo:xxxxxxx
    Temperatura: ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮Ela
    Histereza: ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮Ela
    Pompa ON: ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮Ela
    Pompa OFF: ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮Ela
    Connecting to Ela
    ****
    Connected
    IP address:
    192.168.0.105
    s - skanuj sieci
    c - konfiguruj siec
    o - czytaj konfiguracje
    j - polacz z siecia
    h - wyswietl to menu

    a po wpisaniu w przeglądarce adresu 192.168.0.105 nic nie wyświetla, sprawdziłem na 3 przeglądarkach, czy muszę dodatkowo coś uruchomić, wgrać?
    proszę o wskazówkę
    pozdrawiam
  • #25 17631584
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    Zastanawiające są te znaki zapytania.
    Nie, nie musisz nic dodatkowo wgrywać i uruchamiać.
    Wyczyść całą pamięć przed wgraniem.
    Proponuję dokonać kompilacji z dostarczonych źródeł i wgranie ze środowiska Arduino IDE.
  • #26 17634347
    kamaz8
    Poziom 11  
    Posty: 16
    Ocena: 25
    czyszczę moduł FLASH_DOWNLOAD_TOOLS_V3.6.4
    ściągam projekt, otwieram w Arduino 1.8.7, wybieram nodemcu 1.0 , wgrywam
    odpalam monitor portu szeregowego i wpisuje dane sieci
    plik config i wifi muszę gdzieś skopiować?
  • #27 17637494
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    kamaz8 napisał:
    czyszczę moduł FLASH_DOWNLOAD_TOOLS_V3.6.4
    ściągam projekt, otwieram w Arduino 1.8.7, wybieram nodemcu 1.0 , wgrywam
    odpalam monitor portu szeregowego i wpisuje dane sieci
    plik config i wifi muszę gdzieś skopiować?


    Specjalnie jeszcze skompilowałem ze źródeł i wgrałem. Wszystko jest ok.
    Plik config.cpp i wifi.cpp w katalogu include to jedynie biblioteki potrzebne przy kompilacji. Ale nie musisz nic kompilować. Pobierz termostat.bin i ten plik wrzucasz do esp.
  • #28 17637755
    kamaz8
    Poziom 11  
    Posty: 16
    Ocena: 25
    udało się uruchomić :-)
    Mam kilka pytań (może dla kogoś są oczywiste ale jestem początkujący )
    co oznaczają wartości 11,32,11,5,100
    char pompoff[11] = ""; //wyłączenie pompy
    char ssid[32] = ""; //nazwa sieci wifi
    clear_array(data.pompon,11);
    pn.toCharArray(data.pompon,5);
    EEPROM.put(100,data);
    Czy jeśli dołożę kilka dodatkowych zmiennych i chciałbym je zapisać w eeprom to czy wystarczy że analogicznie wpiszę "char nowa_zmienna[11]"
    będą to zmienne typu int (czas załączenia, czas wyłączenia przekaźnika) ?
    jeśli można to prosił bym o wyjaśnienie
    pozdrawiam
  • #29 17641654
    kolgreen
    Poziom 16  
    Posty: 269
    Pomógł: 11
    Ocena: 240
    kamaz8 napisał:
    udało się uruchomić :-)


    Świetnie! Co powodowało problem?

    kamaz8 napisał:

    char ssid[32] = ""; //nazwa sieci wifi


    32 oznacza wielkość tablicy, czyli ile znaków może mieć SSID (nazwa sieci)

    kamaz8 napisał:

    clear_array(data.pompon,11);


    Musisz zerknąć jak zbudowana jest funkcja clear_array() i jakie parametry przyjmuje.
    Jeśli dobrze pamiętam to 11 jest wielkością tablicy, funkcja po prostu czyści tyle znaków w tablicy ile tam podasz. W tym przypadku - całą tablicę.

Podsumowanie tematu

✨ Dyskusja dotyczy stworzenia termostatu opartego na module ESP8266, który ma za zadanie sterować grzałką oraz pompą obiegu wody. Użytkownik wykorzystał płytkę NodeMCU i napisał oprogramowanie w języku C++ w środowisku Arduino. W projekcie uwzględniono możliwość ustawienia temperatury grzania oraz histerezy, a także temperatury uruchamiającej pompę. Forumowicze podnoszą kwestie dotyczące stabilności działania ESP8266, porównując go z innymi rozwiązaniami, oraz zwracają uwagę na praktyki programistyczne, takie jak unikanie porównań wartości typu float. Pojawiają się również pytania dotyczące kompilacji kodu oraz problemów z jego uruchomieniem, które są rozwiązywane przez użytkowników.
Wygenerowane przez model językowy.
REKLAMA