W domu mam nawilżacz, który jest podłączony do najprostszego analogowego programatora czasowego (taki za 10zł). Chciałbym wiedzieć czy dało by się przy pomocy któregoś z czujników z TME ...
Problem tylko w tym, że te czujniki nie są zbyt dobrej jakości (po czasie są niestabilne).
No co Ty nie powiesz, to masz jakieś pechowe.
Porad udzielam wyłącznie na forum, nie pomagam na PW
Zanim zadasz pytanie, wiedz, że zostało już omówione tutaj, a 99% nie jest unikalne. Użyj wyszukiwania.
To masz pecha, mam te czujniki od chińczyka i pracują od roku.
Nie zauważyłem niestabilności.
Porad udzielam wyłącznie na forum, nie pomagam na PW
Zanim zadasz pytanie, wiedz, że zostało już omówione tutaj, a 99% nie jest unikalne. Użyj wyszukiwania.
A w jaki sposób to jest zasilane? Gdzie są wejścia i wyjścia? Bo widzę że oprócz 3 zacisków są jeszcze 2 goldpiny między czujnikiem a czerwoną diodą oznaczone Vcc i GND? To osobno jeszcze zasilacz trzeba?
A w jaki sposób to jest zasilane? Gdzie są wejścia i wyjścia? Bo widzę że oprócz 3 zacisków są jeszcze 2 goldpiny między czujnikiem a czerwoną diodą oznaczone Vcc i GND? To osobno jeszcze zasilacz trzeba?
Zwykle taki przekaźnik ma 3 wyprowadzenia:
-C - common (wspólny zacisk)
-NO - normally open (standardowo otwarty styk)
-NC - normally closed (standardowo zamkniety styk)
Załączanie i otwieranie odbywa się miedzy stykami:
C i NC
oraz
C - NO
Omomierz lub bateryjka i żaróweczka pozwolą Ci ustalić kóre styki sa otwarte i zamkniete.
Minął rok i zaczyna się sezon grzewczy więc problem powraca. Nie zdecydowałem się na ten gotowy moduł higrometru z przekaźnikiem bo obawiałem się że będzie mi zbyt często "cykał" przekaźnikiem na ustalonym poziomie wilgotności (brak histerezy). Potrzebuję raczej czegoś działającego w przedziale zadanych wilgotności. Czyli aby np. włączało się gdy wilgotność spada poniżej 40% a wyłącza gdy wzrasta powyżej 60%. Gotowe rozwiązania są stosunkowo drogie a nie umiem programować mikrokontrolerów. Wpadłem więc na pomysł że najlepszym kompromisem między taniością i łatwością produkcji będzie arduino. Znalazłem tutorial o Arduino MINI Pro + czujnik DHT 11
Nie wydaje się trudny, programować umiem więc jedyne co może nastręczyć problemów to pierwsza konfiguracja (instalacja i konfiguracja programatora z programem do skryptów).
Jednak ja jeszcze myślałem o pójściu o krok dalej - bezprzewodowości. Żeby czujnik umieścić z dala od samego nawilżacza aby nie było przekłamań oraz żeby umieścić go w miejscu gdzie utrzymanie wilgotności będzie najbardziej istotne (przy łóżku dziecka). Okazało się że również i w tym przypadku są bardzo tanie i proste rozwiązania.
Kupiłem już wszystko. Zmontowałem część odbiorczą czyli odbiornik + przekaźnik + zasilacz (wymontowałem płytkę z zasilacza 5V 350mA Nokii) + wtyczka i gniazdko.
Pozostaje jeszcze część nadawcza. Zaprogramowanie MINI Pro i połączenie go z czujnikiem, nadajnikiem i oczywiście zasilaczem (stary zasilacz Sony 5V 500A).
Główna pętla będzie sprawdzać wilgotność i jeżeli trzeba włączy HIGH na odpowiedni analogowy pin podłączony do nadajnika. Odbiornik odbierze sygnał, wyśle napięcie na przekaźnik i ten zewrze obwód 230V.
Chciałem opisać już działające rozwiązanie ale może koledzy wyłapią jakieś luki w całej koncepcji lub przestrzegą przed czymś zanim wszystko uruchomię?
Bo długich bojach w końcu złożyłem urządzenie. Niestety moduł bezprzewodowy jest trudniejszy w aplikacji niż to co pokazuje autor filmiku. Ktoś poradził mi przerobienie bezprzewodowego dzwonka do drzwi. Ale również on się nie sprawdził ze względu na arcymały prąd wychodzący z pinu aktywującego melodyjki (za mały by np. zamknąć przekaźnik 3V). W końcu zamiast kombinować dalej z mało wymagającymi tranzystorami kupiłem gniazdko na pilota. Gniazdko było już ustawione na pierwszy rząd przycisków pilota.
Schemat ideowy.
Wylutowałem mikrostyki ON i OFF p i zamiast nich wstawiłem po stronie masy 2x BUZ11. Dziwne bo każdy mikrostyk zwierał 2 obwody więc obok tranzystorów musiałem też dolutować zwory. Baza każdego tranzystorów jest dołączona do wyjść Arduino, do którego też dołączony jest czujnik DHT11. Samo arduino jest zasilane z płytki wymontowanej z ładowarki samochodowej (przetwornica 12V->5V). Zasilanie płytki jest połączone z zasilaniem pilota gdzie zamiast blaszek na baterie dolutowałem standardowe gniazdo 2.1/5.5 żeby móc podpinać typowe zasilacze 12V. Po drodze stosowałem antenowy ale mi się zepsuł (liche kabelki przy trafo).
Po stronie odbiornika (gniazda) nic nie musiałem robić. Jego bistabilność (osobny włącznik na włączenie i wyłączenie) ma szereg zalet. Oszczędność to jedna z nich (choć i tak mizerna bo mamy zasilacz a nie baterie) natomiast najważniejsza to znikoma podatność na zakłócenia - impuls wł/wył trwa tylko 1s a nie stale.
Arduino zaprogramowałem tak że przy włączeniu testowo włącza przekaźnik na 10s (żeby się upewnić że wszystko działa) i później robi co minutę pomiar. Histerezę zmniejszyłem na 45-55% wilgotności. I tak w praktyce to duża różnica.
#include <idDHT11.h>
int idDHT11pin = 3; //Digital pin for comunications
int idDHT11intNumber = 1; //interrupt number (must be the one that use the previus defined pin (see table above)
//declaration
void dht11_wrapper(); // must be declared before the lib initialization
// Lib instantiate
idDHT11 DHT11(idDHT11pin,idDHT11intNumber,dht11_wrapper);
int stan = 0;
int start = 1;
void setup()
{
Serial.begin(9600);
Serial.println("idDHT11 Example program");
Serial.print("LIB version: ");
Serial.println(IDDHT11LIB_VERSION);
Serial.println("---------------");
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
}
// This wrapper is in charge of calling
// mus be defined like this for the lib work
void dht11_wrapper() {
DHT11.isrCallback();
}
void loop()
{
//wlaczenie kontrolne
if(start==1){
digitalWrite(13, HIGH);
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(10000);
digitalWrite(6, HIGH);
delay(1000);
digitalWrite(6, LOW);
digitalWrite(13, LOW);
start=0;
}
Serial.print("nRetrieving information from sensor: ");
Serial.print("Read sensor: ");
//delay(100);
DHT11.acquire();
while (DHT11.acquiring())
;
int result = DHT11.getStatus();
switch (result)
{
case IDDHTLIB_OK:
Serial.println("OK");
break;
case IDDHTLIB_ERROR_CHECKSUM:
Serial.println("ErrornrtChecksum error");
break;
case IDDHTLIB_ERROR_ISR_TIMEOUT:
Serial.println("ErrornrtISR Time out error");
break;
case IDDHTLIB_ERROR_RESPONSE_TIMEOUT:
Serial.println("ErrornrtResponse time out error");
break;
case IDDHTLIB_ERROR_DATA_TIMEOUT:
Serial.println("ErrornrtData time out error");
break;
case IDDHTLIB_ERROR_ACQUIRING:
Serial.println("ErrornrtAcquiring");
break;
case IDDHTLIB_ERROR_DELTA:
Serial.println("ErrornrtDelta time to small");
break;
case IDDHTLIB_ERROR_NOTSTARTED:
Serial.println("ErrornrtNot started");
break;
default:
Serial.println("Unknown error");
break;
}
Serial.print("Wilg: (%): ");
Serial.println(DHT11.getHumidity(), 2);
Serial.print("Temp (oC): ");
Serial.println(DHT11.getCelsius(), 2);
if (DHT11.getHumidity()>55){
digitalWrite(6, HIGH);
delay(1000);
digitalWrite(6, LOW);
}
if (DHT11.getHumidity()<45){
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
}
if (DHT11.getHumidity()>45 && DHT11.getHumidity()<55 ){
Serial.println("Wilgotnosc OK");
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
delay(60000);
}
Jest to prototyp więc samo wykonanie nie jest jakieś super, nawet diody zasilania nie są wyprowadzone na zewnątrz. Nie mówiąc o samym kodzie który zdecydowanie przydałoby się zoptymalizować.
Jest szereg innych rzeczy które można by wrzucić, np. wskaźnik diodowy albo ekranik LCD z przyciskami nastawy, żeby nie musieć zmieniać ustawień urządzenia przez programowanie całości na komputerze. Można też poszukać bardziej zaawansowanych algorytmów które uwzględniają wpływ zmian temperatury na wilgotność. Ale to już ekstrawagancja. Zastanawiam się też czy nie wyrzucić tego zasilacza 12V->5V i nie podłączyć Arduino bezpośrednio pod 12V przez złącza RAW. Cały czas też myślę nad wykorzystaniem tych modułów 433Mhz które mi zostały tylko muszę się podszkolić z wiedzy na temat przesyłania i kodowania sygnałów. Kolega piotr411 nawet zasugerował wykorzystanie modułu Wifi ESP8266 do projektu - fajnie byłoby odczytywać i zmieniać ustawienia np. z komórki
Ogólnie jestem zadowolony. Żałuję tylko że od początku nie zastosowałem tych gniazdek na pilota. Owszem myślałem o nich ale chciałem zaoszczędzić, a koniec końców wyszło drożej (i dłużej). Ale tak nie jest źle. Z tego co widziałem najtańsze regulatory wilgotności z histerezą (przedziałem a nie wartością graniczną) kosztują od 230zł wzwyż.