Sterownik wentylatora na ESP8266

Projekty użytkowników forum zarówno sprzętowe, jak i związane z programowaniem w dowolnym języku.
Awatar użytkownika
squeez
User
User
Posty: 211
Rejestracja: czwartek 04 lut 2016, 10:13

Sterownik wentylatora na ESP8266

Postautor: squeez » wtorek 04 lip 2017, 09:49

Dzień dobry :)

Jak pisałem w swoich wypocinach w tym temacie viewtopic.php?f=27&t=843 prezentuję coś "praktycznego" na ESP8266.

Zacznę od idei. W domu mam problem z wentylacją, usytuowanie szybu wentylacyjnego jest dość pechowe dość często zdarza się odwrócony obieg tzn zamiast wyciągać powietrze z pomieszczenia jest ono wtłaczane do środka. Jest to szczególnie upierdliwe zimą gdy powietrze o temp. niższej o 20- 25 stopni jest wpychane do łazienki a rano trzeba się umyć :)

Pierwszym rozwiązaniem było wstawieni klapy zwrotnej (tak się to chyba nazywa) co zapobiega wtłaczaniu powietrza do środka ale jeśli warunki nie są korzystne to klapa taka jest zamknięta i brakuje wentylacji.

Więc wymyśliłem że mszę wymusić ruch powietrza, zakupiłem wentylator kanałowy i wstawiłem go do kanału na strychu by mniej go słyszeć w pomieszczeniu.
Miałem już zrobiony sterownik do tego na Attiny24 tylko miałem problem z komunikacją, wymyśliłem sobie do sterowania poza programem automatycznym sterowanie pilotem na tanich modułach 433MHz, odbiornik łapie mnóstwo śmieci z otoczenia i kombinowałem z ramką danych. Generalnie projekt był na ukończeniu tylko pilot został do zrobienia. Jednak w między czasie zainteresowałem się ESP8266 i zrobić jakiś użyteczny projekt na tym module, padło na łazienkę :)

W starych zapasach chyba jeszcze sprzed 1,5 roku kupiłem dwa moduły ESP-03
Obrazek

Flasch na nich to 512k ale bez problemu na takie pierdoły jak potrzebuję starcza :)

Teraz założenia projektu.
1) pomiar temp i wilgotności na DHT11
2) czujnik ruchu wykrywający obecność w pomieszczeniu
3) sterowanie fazowe wentylatorem (w nocy mniejszy ciąg i mniejszy hałas).
4) zdalna komunikacja z modułem
5) wymuszanie otwierania klapy

Mam jeszcze kilka ESP-07 ale ten mniejszy wybrałem bo do mniej wymagającego zadania wystarczy :)
Schemat prezentuje się tak:
Lazienka_sterownik.gif


Wytrawione i złożone do kupy:
A_0156.jpg
A_0155.jpg
A_0154.jpg


Wzór PCB:
Lazienka_PCB.gif


A teraz co poszło nie tak :)
Generalnie wszystkie założenia poza 1 spełnione. Choć komunikację z DHT zrobiłem na płytce NodeMCU to tu z powodu małego doświadczenia i przeoczenia był babol.
GPIO jakie wybrałem do DHT (GPIO16) jest dość specyficzny i nie ma funkcji zwykłego GPIO (jak wykrywanie przerwania), można do co prawda go załączyć wyłączyć i sprawdzać jego tan jednak do do poprawnego odczytu ramki muszę mieć przerwanie od zbocza.

Mógłbym zrobić drugą płytkę i przenieść tę funkcję na inny pin ale zwyczajnie to olałem i pomiar temp. i wilgotności zrobię jako dodatkowy czujnik z wyświetlaczem w łazience (mobilny), który będzie mógł załączać wentylator zdalnie.

Teraz co do samego programowania bo pewnie to najbardziej interesuje.
Moduły te są świetne jak widać może działać sam robić masę funkcji bez dodatkowego uC. W sumie jak już pisałem to śmiesznie do takiej siekiery 80MHz podłączać np. Atmege8 i katować ją parsowaniem komend AT :)

Programuję w NONOS SDK dostępny niby tylko jeden timer sprzętowy ale za to programowych mnogość.
Sprzętowy timer wykorzystuję do sterowania fazowego (wyliczania czasu po przejściu przez zero).
Jeśli już przy tym temacie to polecam taki układ detekcji jak tu. Rezystory 1/8W nic się nie grzeje minimalne straty mocy a zbocza strome. Fakt wymaga nieco więcej elementów ale cenowo to i tak śmieszna sprawa a komfort o niebo lepszy niż 2 rezystory 2W w roli grzałek.

Moduł na starcie konfiguruje ustanawia połączenie z moim AP, po 30 sekundach (tyle zrobiłem dla pewności że się ładnie połączy) pobierany jest czas z serwera NTP (polskiego), potem co 4 godziny czas jest aktualizowany.
Jest jeden główny timer sprzętowy zliczający co 1s, w nim wykonywane jest wyliczanie czasu (minut, godzin) oraz sprawdzanie stanu na czujniku ruchu (HC-SR501).

Do sterowana serwem wykorzystuję drugi timer programowy do generowania przebiegu 50Hz i wypełnieniu w zależności od potrzeb wychylenia ramienia, które za pomocą dodatkowego "drutu" podnosi klapę zwrotną.

Po nawiązaniu połączenia z AP tworzony jest gniazdo TCP na którym moduł słucha, jak przydzie komenda (ciąg znaków) wykonywana jest odpowiednia funkcja.
Np. wysłanie do modułu frazy "S1" powoduje uchylenie o około 50% klapy S2 - całkowite otwarcie a S0 zamknięcie klapy.
Podobnie jest ze sterowanie silnikiem, podaje się moc i czas w sekundach czyli np. P360.
P - sterownie silnikiem
3 - moc 100% (nie robiłem "płynnej regulacji" bo to bez sensu, są za to przedefiniowane tryby 0 - OFF, 1 - 50%, 2-75%, 3 - 100%
60 - czas w sekundach ile ma pracować silnik.

Pracę silnika zrobiłem też tak że czas jego załączania wyliczany jest na podstawie przebiegu sinusa w sieci tzn w funkcji sterującej silnikiem zliczane są w duł zaplanowane przejścia przez zero.

Generalnie jestem zadowolony i bardzo mnie raduje praca z tymi modułami :) oraz że można wykorzystać TCP z dobrodziejstwem inwentarza (korekcja błędów, informacja że pakiet nie dotarł itp.) czego nie ma w tak lansowanym przez niektórych UDP.

Acha jest jeszcze załączanie o zdefiniowanych godzinach w tablicy trzymam dane np.

Kod: Zaznacz cały

{
10, 5, 60, 3
18, 30, 120, 2
}


Co odpowiada dwóm załączeniom wentylatora o 10:5 na czas 60 sekund i mocy 100% (parametr 3), drugie to 18:30 czas 120s i 75% mocy.

Jak "zegar" wylicza nową minutę to sprawdzam w pętli tablicę czy aktualny czas pokrywa się z jakimś zapisanym.

Dziś idę na strych zamontować moduł w skrzynce i zobaczymy jak się będzie sprawdzał.
Być może w przyszłości dodam możliwość zapisywaniu do FLASH-a predefinowanych czasów załączania na razie są na sztywno wpisane we FLASH. ale nie jest to must have bo jak dorobię czujnik o którym pisałem wcześniej albo aplikację na smartfona to będzie możliwość dowolnego wysterowania.

Jest jeszcze jeden babol jaki wyszedł po czasie. Serwo podpięte jest pod GPIO2 a się okazuje że wewnętrzny sterownik serwa na pinie do sterowania ma chyba pulldown. I po podłączeniu serwa miałem problem z programowaniem układu. na płytce uniwersalnej zrobiłem na dwóch tranzystorach "separację" na dwóch bo sygnał sterujący to 3,3V a jak bym zrobił układ wtórnika emiterowego żeby nie odwracać fazy zeszło by poniżej 2,7V co mogło by być średnio rozpoznawane przez elektronikę serwa.

Na płytce widać też "ramkę z masy na około części z 230V to feler przy naświetlaniu nie zasłoniłem tego i zostało, ale przed zamontowaniem "rozłączę" to do masy by nie mieć w przyszłości podatności.

Jak ktoś ma jakieś pytania chętnie odpowiem.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
phill2k
User
User
Posty: 272
Rejestracja: niedziela 18 paź 2015, 00:12

Re: Sterownik wentylatora na ESP8266

Postautor: phill2k » wtorek 04 lip 2017, 14:51

Fajny projekcik, zastanawia mnie tylko jeden fakt po co zrobiłeś w ogóle sterowanie klapą, w twoim przypadku klapa ma przeciwdziałać wprowadzeniu zimnego powietrza w zimie do łazienki, jak jest ciąg wsteczny to powinna się samoistnie zamykać, a w przypadku włączenia wentylatora lub ciągu naturalnego (wywiewczego) powinna się samoistnie otwierać - kąt otwarcia jest zależny od siły ciągu, więc po co takie rozwiązanie ?

Awatar użytkownika
squeez
User
User
Posty: 211
Rejestracja: czwartek 04 lut 2016, 10:13

Re: Sterownik wentylatora na ESP8266

Postautor: squeez » wtorek 04 lip 2017, 16:13

Generalnie masz rację ale wymyśliłem sobie że latem zamiast tylko wymuszać przepływ będę mógł uchylać klapę, nawet jak obieg będzie odwrotny to zawsze to jakiś ruch powietrza :) ... z komina, przez łazienkę do uchylonego latem okna w którymś z pokoi.


Wróć do „DIY”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości