niedziela, 27 listopada 2016

Testy i połączenie różnych czujników MySensors

Dzisiaj opiszę testy i kombinacje połączeń różnych czujników do odbiornika MySensors.

Test czujnika DHT 22

Czujnik DHT22 i DHT11 posiada cztery nóżki, które kolejno od lewej posiadają wejścia 1 - VCC, 2 - Data, 3 - nie używany, 4 - GND

Do nóżki numer 2 - Data należy podłączyć zasilanie poprzez rezystor podciągający 10K.

Schemat podłączenia do odbiornika MySensors


Do podłączenia czujnika DHT wykorzystano pin 3 odbiornika MySensors.

Kod programu do wgrania do Arduino jest do pobrania tu -> Link

W 14-stej linijce kodu, określono nr pinu do przesyłania danych:
#define DHT_DATA_PIN 3

W 21-szej linijce kodu określony jest czas w milisekundach pomiędzy kolejnymi odczytami i przesyłaniem danych do Domoticz:
static const uint64_t UPDATE_INTERVAL = 30000;

Możemy go dowolnie modyfikować pamiętając, że minimalny czas dla czujnika DHT22 to 1000 ms, czyli 1 sekunda, a dla DHT11 to 2000 ms, czyli 2 sekundy.

Po wgraniu do Arduino w logach Domoticz -> Konfiguracja -> Logi wyświetli się nazwa programu.


Po wejściu w Konfiguracja -> Urządzenia w Domoticz pojawi się czujnik.


Urządzenie dodajemy po kliknięciu w zieloną strzałkę i po wpisaniu nazwy odczyt temperatury i wilgotności będzie widoczny w zakładce Temperatura.


Test czujnika ruchu PIR HC-SR501

Do testów wykorzystałem czujnik PIR HC-SR501 niebieski.

Czujnik posiada 2 potencjometry T1 i T2, zworkę którą można ustawić w pozycji L lub H i wyjścia/wejścia VCC, OUT i GND.


Potencjometrami T1 i T2 regulujemy:
T1 - czas trwania stanu wysokiego po wykryciu obiektu
T2 - czułość czujnika (dystans, w którym wykrywa ruch obiektu)

Zworkę proponuję ustawić w pozycji H, co będzie skutkowało, tym że po wykryciu ruchu na pinie OUT pojawi się stan wysoki i będzie on utrzymywany dopóki trwa ruch, w pozycji L po wykryciu ruchu na wyjściu OUT pojawi się stan wysoki i zaraz przejdzie w stan niski.

Potencjometr T1, czyli czas reakcji proponuję ustawić maksymalnie w lewo, a T2 czyli odległość na jakiej będzie wykrywany ruch tak jak pokazano niżej.


Kod programu do wgrania do Arduino jest do pobrania tu -> Link

W kodzie programu w 41 linijce kodu określamy pin Arduino, do którego podłączamy wyjście OUT czujnika PIR.

Ja wykorzystałem pin 4, czyli:
#define DIGITAL_INPUT_SENSOR 4

W 40 linijce kodu ustawiamy czas w milisekundach, pomiędzy którym będzie wykrywany ruch, najlepiej ustawić go na jak najmniejszy ja ustawiłem 1 sekundę czyli 1000 ms:
unsigned long SLEEP_TIME = 1000;

Schemat podłączenia


Po wgraniu kodu do Arduino w logach Domoticz wyświetli się nazwa programu:


W urządzeniach pojawi się:


Po kliknięciu w zielona strzałkę czujnik pir pojawi się w Przełącznikach w menu Domoticz jak zwykły włącznik, musimy jeszcze kliknąc Edycja i zmienić go na Motion Sensor.


Tak wygląda dodany czujnik ruchu.


Po wykryciu ruchu czujnik podświetli się na czerwono.


Połączenie czujnika DHT22 i czujnika PIR HC-SR501

Kod wykorzystujący jednocześnie czujnik DHT22 i czujniku ruchu PIR HC-SR501 na jednym odbiorniku MySensors jest do pobrania tu -> Link

Podłączamy:

Pin 3 - czujnik DHT22
Pin 4 - czujnik PIR HC-SR501


Numery pinów zostały zdefiniowane w 13 i 14 linijce kodu programu:

#define DHT_DATA_PIN 3 // pin podlaczenia czujnika DHT
#define DIGITAL_INPUT_SENSOR 4 //pin podlaczenia czujnika ruchu PIR

Czas odczytu danych i przesyłania danych do Domoticz został określony w 21 linijce kodu i jest ustawiony na 1000 ms czyli 1 sekundę:

static const uint64_t UPDATE_INTERVAL = 1000;

Po dodaniu w Domoticz mamy:


Zmontowane czujniki na odbiorniku MySensors


Czujnik PIR możemy wykorzystać do włączania różnych urządzeń tworząc zdarzenia w Konfiguracja -> Więcej opcji -> Zdarzenia.

Przykładowe zdarzenie, które włącza lampkę przy biurku na 1 minutę.


Działanie czujnika PIR widać na poniższym filmie, po wykryciu ruchu zapala się lampka przy biurku.


Połączenie czujnika jakości powietrza GP2Y1010AU0F i DHT22

Czujnik jakości powietrza GP2Y1010AU0F opisałem w tym wpisie na blogu -> Link

Kod programu wykorzystujący jednocześnie czujnika jakości powietrza i czujnik DHT22 jest do pobrania tu -> Link

Czujnik jakości powietrza wykorzystuje piny A1 i 3, a czujnik DHT22 pin 4, jest to zdefiniowane w 15 do 17 linijce kodu programu:
#define DUST_SENSOR_ANALOG_PIN 1
#define DUST_SENSOR_DIGITAL_PIN 3
#define DHT_DATA_PIN 4 // Ustawienie pinu wyjsciowego DHT

Czas przesyłania danych i odczytów został ustawiony na 30 sekund w 26 linijce kodu programu:
unsigned long SLEEP_TIME = 30000; //czas miedzy kolejnymi odczytami

Po dodaniu do Domoticz mamy:


Zmontowane czujniki


Połączenie czujnika gazu MQ-2 i DHT22

Czujnik gazu MQ-2 opisałem w tym wpisie na blogu -> Link

Kod programu wykorzystujący czujnik MQ-2 i DHT22 jednocześnie na odbiorniku MySensors jest do pobrania tu -> Link

Podłączenie:

DHT22 - pin 3 Arduino
Czujnik MQ-2 - A0 - pin A1 Arduino
GND - masa
VCC - zasilanie +5V

Czujnik DHT22 podłączony do zasilania tak jak na początku wpisu na blogu, poprzez rezystor podciągający 10K.

W Domoticz mamy:


Zmontowane czujniki


Połączenie czujnika ciśnienia BMP180 i DHT22

Czujnik ciśnienia BMP180 wykorzystałem w budowie mojej stacji pogody, którą opisałem w tym wpisie na blogu -> Link

Czujnik BMP180 wymaga zasilania 3,3V i działa jedynie na pinach SCL i SDA Arduino, są to odpowiednio piny A5 i A4, na innych pinach czujnik nie będzie działać.

Czujnik BMP180 wygląda tak:


Podłączamy go tak:

VIN - zasilanie 3,3V
GND - GND
SCL - pin A5
SDA - pin A4

Czujnik DHT22 wykorzystuje pin 3 Arduino.

Kod programu do pobrania jest tu -> Link

W przeciwieństwie do kodu programu, który wykorzystałem w opisie budowy stacji pogody, kod ten wykorzystuje już biblioteki MySensors 2.0.

W kodzie programu w linijce 41 musimy wpisać wysokość nad poziomem morza w metrach swojej lokalizacji, możemy to sprawdzić na stronie -> Link
const float ALTITUDE = 312;

Po dodaniu w Domoticz mamy:


Połączenie czujnika ciśnienia BMP180, DHT22 i GP2Y1010AU0F

Podłączenie:

BMP180:
VIN - zasilanie 3,3V
GND - GND
SCL - pin A5
SDA - pin A4

DHT22 - pin 4

GP2Y1010AU0F - pin analogowy A1, pin cyfrowy - pin 3

Kod programu -> Link

Wysokość nad poziomem morza definiujemy w linijce 40 kodu.

Po wgraniu do Arduino w Domoticz mamy:


Zamontowane czujniki

20 komentarzy:

  1. Hej,
    znowu mnie zainspirowales :)
    Takie pytanie odnosnie szkicu "Dust_DHT.ino", mianowicie po podlaczeniu wszystkiego, odpaleniu wszystko wydaje sie dzialac (node <-> mysensors gateway <-> domoticz) ale...
    czujnik GP2Y1010AU0F pokazuje dosc absurdalne wartosci: 340 - 540 ug/m3 w pokoju.
    Zauwazylem, ze jak zmienie wartosc:

    const int numreadings = 60; na "30" to wskazania czujnika spadaja o polowe. Co to za parametr?
    Twoj szkic wysyla usrednione dane do bramki co 60sek. dales SLEEP_TIME 30sek czyli pobierasz dane z sensorow co 30?
    Jak zwiekszyc czestotliwosc wysylania danych, albo wysylac dane tylko gdy mamy zmane temp/hum/dust?

    BTW. Niezla robota!
    P.S. jakich plytek uzywasz to laczenia arduino z radiem? Gdzie dostac takie?

    pozdr.

    OdpowiedzUsuń
    Odpowiedzi
    1. Płytki są dostępne tutaj: https://oshpark.com/shared_projects/uXIff7XO

      Usuń
  2. Przy próbie wgrania jakiegokolwiek szkicu z DHT wyskakuje taki błąd: no matching function for call to 'DHT::readSensor(bool) i podświetla się linia 82. Jakieś rady? PIR działa, BMP180 działa a DHT ani sam ani w tandemie z wymienionymi nie funguje.

    OdpowiedzUsuń
    Odpowiedzi
    1. Hej,
      mi się szkic skompilował (sprawdzałem na GP2Y1010AU0F i DHT22). Temp i wilg wysyłał do Domoticza. Spróbuj wgrać inny szkic, tylko z DHT, najlepiej z mysensors.org i sprawdź czy skompiluje (Jeśli tak to biblioteka ok, w przeciwnym razie uaktualnij bibliotekę DHT).
      Pozdr.

      Usuń
    2. Sprawdzałem też szkic z mysensors, nie kompiluje, domyśliłem się, że to biblioteka, ale wszystko co znalazłem daje taki sam błąd. Jest szansa abyś podesłał mi swoją bibliotekę DHT? Na razie usunąłem ze szkicu całą linijkę 82 i poszło, ale temp i hum aktualizują się co kilka-kilkanaście minut. Nawet przeniesione do zaparowanej łazienki, w której temp mam ustawioną o 5 stopni wyżej niż w salonie.

      Usuń
    3. https://github.com/adafruit/DHT-sensor-library

      Usuń
    4. Poszło... i odświeża teraz jak należy. Serdeczne dzięki za pomoc!!! Mam jeszcze techniczne pytanko, W DHT11 częstotliwość próbkowania to raz na sekundę a w DHT22 to dwa razy na sekundę. Czemu więc w szkicu podane jest "Must be >1000ms for DHT22 and >2000ms for DHT11"? Mam DHT11 i ustawienie 1000ms działa identycznie jak ustawienie 2000ms. Wiem, że jest to skopiowane ze strony MySensors i wiem, że w warunkach domowych tak minimalne czasy nie mają żadnego znaczenia, ale być może jest na to wytłumaczenie a ja lubię wiedzieć z czego co się bierze ;-)

      Usuń
  3. Witam. Twoje projekty robia wrazenie. Mogłbys rozwinac temat jak polaczyc RPi z arduino i domoticz jako centrala automatyki domowej. Nigdzie nie moge znalezc pomocnych informacji a Ty swietnie publikujesz swoje pomysly.
    Pozdrawiam

    OdpowiedzUsuń
    Odpowiedzi
    1. Ja mam system zbudowany na RPi z Domoticz + bramka MySensors
      http://projektpimalina.blogspot.com/2015/10/domoticz-i-bramka-mysensors-arduino.html

      Usuń
  4. Witam, mam wersje mysensors 2.1.1 i w jak wgrywam program dht to wywala błędy. zainstalowałem jakąś inną starą wersje sprzed 2 lat i wszystko działa ale nie chce miec starej wersji bo wtedy nie działają mi inne rzeczy.

    OdpowiedzUsuń
  5. Czy da się jakoś zabezpieczyć hasłem wszystkie czujniki i inne rzeczy na nrf ? Bo nie chciałbym żeby sąsiad mi przełączał światło przez przypadek robiąc taki system u siebie.

    OdpowiedzUsuń
  6. Super strona będe polecał innym by ją przejeli

    OdpowiedzUsuń
  7. Ważne pytanie. Chce zbudować cały system opierając go na domoticzu ale z założeniem że wszystko ma być przewodowe i sterowane z jednego punktu system scentralizowany. Ale zastanawiam się jakie czujniki wykorzystać. Dokładniej jaka komunikację między nimi a centrala I2C podobno nie sprawdza się na większą odległość. Na 1-wire na razie znalazłem tylko czujniki temperatury. A mają być temperatura wilgotność i poziom natężenia światła. Macie jakieś sprawdzone rozwiązania?

    OdpowiedzUsuń
    Odpowiedzi
    1. To jak komunikacja przewodowa, to można wykorzystać RS485.
      Opisałem, to w tym wpisie:
      http://projektpimalina.blogspot.com/2017/04/mysensors-komunikacja-przewodowa-rs485.html

      Usuń
    2. Tylko to bardzo rozbudowane rozwiązanie ( przy około 12 pomieszczeniach generuję dodatkowe koszty) Dla tego szukam czujników które same w sobie maja protokół komunikacyjny który sprawdzi się na większą odległość.

      Usuń
  8. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  9. Abym tylko wiedział o co chodzi w tej elektronice to na pewno sam bym coś zmajstrował. Jak na razie mam tylko zamontowany czujnik ruchu https://interblue.pl/czujniki-ruchu,c,41 który steruje lampą zewnętrzną. Niby nic, ale dla mnie wielki sukces :)

    OdpowiedzUsuń
  10. jeśli chodzi o części do automatyki przemysłowej to tu http://www.gigaom.pl/czujniki_optyczne.html można znaleźć największy wybór. w ofercie są czujniki, zasilacze, systemy itd . , wszystko co niezbędne

    OdpowiedzUsuń