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

piątek, 18 listopada 2016

Nowa wersja oprogramowania RFLink z obsługą MySensors

Pojawiła się nowa wersja oprogramowania dla RFLink R44 z obsługą MySensors, do pobrania tu -> Link

Dla dobrego zasięgu najlepiej zamontowac moduł NRF24L01 z zewnętrzną antenką.


Po ściągnięciu rozpakowujemy archiwum i programujemy tak jak opisałem we wcześniejszym wpisie na blogu -> Link

Uruchamiamy plik RFLinkLoader.exe i w Select file wybieramy plik RFLink.cpp.hex z rozpakowanego archiwum, odpowiedni port com w Serial Port i klikamy Upload/Program Firmware to device.

Po wgraniu oprogramowania klikamy Serial Port Logging i najlepiej włączyć wszystkie opcje dla modułu NRF, czyli NodoNRF:ON, MiLight:ON, BLE:ON, MySensors:ON.


Po włączeniu tych opcji powinniśmy zobaczyć wykryte urządzenia w logu jak wyżej.

Teraz już wystarczy podłączyć i dodać RFLink jak opisałem we wcześniejszym wpisie na blogu -> Link

Po jakimś czasie w Konfiguracja -> Urządzenia powinniśmy zobaczyć wykryte urządzenia MySensors przez RFLink.


Dodajemy je klikając w zieloną strzałkę i wpisując nazwę.

Z tego co zauważyłem RFLink nie pokazuje poprawnych wartości dla niektórych odbiorników MySensors i nie wykrywa wszystkich rodzaji czujników MySensors, nie wykrywa mi np. czujnika jakości powietrza z czym bramka MySensors nie ma problemu.

piątek, 11 listopada 2016

Instalacja starych i nowych bibliotek MySensors i opis przesyłania danych MySensors 2.0

Ponieważ po wprowadzeniu nowych bibliotek MySensors 2.0 pojawiają się problemy z kompilacją starych i nowych kodów programów MySensors napiszę jak poprawnie wszystko zainstalować.

Na dzień dzisiejszy najnowsza wersja programu Arduino, to 1.6.12, do pobrania z strony Arduino.cc -> Link

Po ściągnięciu i instalacji programu Arduino, proponuję wypakować i skopiować do folderu:
Program Files -> Arduino -> libriares ten zestaw bibliotek -> Link
Do folderu Moje Dokumenty -> Arduino -> libraries wypakować i skopiować ten zestaw plików -> Link

W katalogu Moje Dokumenty -> Arduino -> libriares -> MySensors-master -> examples mamy większość kodów programów do obsługi czujników MySensors.


W nowych bibliotekach i kodach programów MySensors zmienił się sposób zapisu i przesyłania danych.

Na początku kodu programu definiujemy rodzaj użytego modułu radiowego, dla NRF24L01 jest to:
#define MY_RADIO_NRF24

Dla innych rodzajów modułów radiowych:
#define MY_RADIO_RFM69
#define MY_RS485

Jeżeli chcemy śledzić przesyłanie i odbieranie danych na porcie szeregowym w monitorze portu szeregowego w programie Arduino, to dodajemy wpis:
#define MY_DEBUG

Wtedy po włączeniu monitora portu szeregowego w programie Arduino -> Narzędzia -> Monitor portu szeregowego, widzimy dane jakie są przesyłane. Konwerter TTL musi być podłączony do Arduino.


Prędkość portu ustawiamy zazwyczaj na 115200 lub 9600

W dalszej części kodu MySensors dodajemy wpis importu potrzebnych bibliotek, dla MySensors są to wpisy:


Jeżeli używamy różnych czujników importujemy również biblioteki dla danego czujnika.

Dalej znajduje się wpis identyfikujący podłączony czujnik, ma on formę:
#define child_id_nazwa 0

Jeżeli mamy do przesłania kilka rodzajów danych definiujemy je kolejno, po nazwie dodając kolejny numer, czyli:
#define child_id_nazwa1 0
#define child_id_nazwa2 1
#define child_id_nazwa3 2

Dalej znajduje wpis inicjalizacji przesyłania danych, który ma formę:
MyMessage msg_nazwa1(child_id_nazwa1, rodzaj-zmiennej);

Rodzaje zmiennych są określone na stronie MySensors w trzeciej tabeli od góry w czwartej kolumnie -> Link

Przykładowo dla temperatury będzie to V_TEMP, dla wilgotności V_HUM, dla ciśnienia V_PRESSURE itd...

Więc, jeżeli chcielibyśmy przesyłać te dane muszą się znaleźć wpisy, dla każdej wartości w takiej formie:
MyMessage msg_nazwa1(child_id_nazwa1, V_TEMP);
MyMessage msg_nazwa2(child_id_nazwa2, V_HUM);
MyMessage msg_nazwa3(child_id_nazwa3, V_PRESSURE);

Dalej umieszczamy wpis prezentacji danych do kontrolera, dla MySensors 2.0, wpis jest w takiej formie:
void presentation() {
// Wyslij informacje o nazwie do bramki
sendSketchInfo("Nazwa programu, "1.0");

// Rejestracja czujnikow
present(child_id_nazwa1, S_TEMP);
present(child_id_nazwa2, S_HUM);
present(child_id_nazwa3, S_BARO);
}

W nawiasie jest określony typ czujnika, dla odpowiadającej mu rodzaju zmiennej.
Jest określone na stronie MySensors w trzeciej tabeli w pierwszej kolumnie -> Link

Dla V_TEMP jest to S_TEMP, dla V_HUM jest to S_HUM itd...

Dalej możemy dodać blok danych void setup, które zostaną wysłane tylko raz:
void setup() {
}

W pętli void loop umieszczamy kod do odczytu danych z czujników oraz kod przesyłania danych, czyli:
void loop()
{
send(msg_nazwa1.set(temperatura, 1));
send(msg_nazwa2.set(wilgotnosc, 1));
send(msg_nazwa3.set(cisnienie, 1));

delay(10000); // czas w milisekundach pomiędzy kolejnymi odczytami
}

temperatura, wilgotnosc i cisnienie są to wartości odczytane z czujników, które są przesyłane do Domoticz.

Do pobrania jest tu -> Link przykładowy kod programu do czujnika poziomu węgla dla MySensors 2.0, którego budowę opisałem w tym wpisie -> Link

czwartek, 10 listopada 2016

Test czujnika jakości powietrza GP2Y1010AU0F na MySensors

Dzisiaj opiszę działanie czujnika pyłu i jakości powietrza Sharp GP2Y1010AU0F na odbiorniku MySensors.

Czujnik można kupić za około 30 zł w tym sklepie -> Link

Czujnik GP2Y1010AU0F wygląda, jak na zdjęciu niżej i w zestawie otrzymujemy rezystor 150 ohm i kondensator 220 uF.


Czujnik GP2Y1010AU0F posiada następujące parametry techniczne:

napięcie zasilania: DC5 ± 2 V
pobór Prądu: 20mA (szczyt)
czułość: 0.5 V/(0.1 mg/m3)
minimalny poziom wykrywanych cząstek: 0.8 μm
temperatura pracy:-10 ~ 65
wymiary: 46mm x 30mm x 17.6mm

Schemat podłączenia do odbiornika MySensors wygląda następująco.


Czujnik GP2Y1010AU0F posiada przewody, które podłączamy następująco:

1. Biały podłączamy przez rezystor 150 ohm do zasilania 5V
2. Niebieski do GND
3. Zielony do pinu 3 Arduino
4. Żółty do GND
5. Czarny do pinu analogowego A1 Arduino
6. Czerwony do zasilania 5V

Między białym (plus) przed rezystorem 150 ohm, a masą GND (minus) na niebieskim, dajemy kondensator 220 uF.

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

Na końcu kodu w delay(10000); określamy sobie czas w milisekundach między kolejnymi odczytami.
Ja ustawiłem na 10000 milisekund, czyli 10 sekund.

Po wgraniu kodu do Arduino w logach Domoticz (Konfiguracja -> Logi) pojawi się log z nazwą programu.


Teraz już tylko wystarczy wejść w Konfiguracja -> Urządzenia i kliknąć w zieloną strzałkę, aby dodać urządzenie.


Czujnik będzie widoczny w zakładce użytkowe.


Działanie czujnika widać na poniższym filmie.


Jak widać po zapaleniu papierosa, wzrosło stężenie cząstek.

Normalnie w pomieszczeniu pokazuje stężenie 10 ug/m3, po wystawieniu za okno wzrosło do około 42 ug/m3, co w okresie grzewczym na wsi mieści się w zakresie dopuszczalnym.

Zmodyfikowany i ulepszony kod programu, do pobrania -> Link

środa, 9 listopada 2016

Automatyczne nawadnianie szklarni na Arduino

Dzisiaj opiszę jak wykonać sterownik na Arduino do automatycznego podlewania małej szklarni.

Do swojego projektu wykorzystałem:

Sterownik:

1. Arduino Mini Pro 5V 16 MHz - koszt 9,90 zł -> Link
2. Wyświetlacz LCD 16x2 niebieski - koszt 9,90 zł -> Link
3. Czujnik wilgotności gleby - koszt 9,90 zł -> Link
4. Czujnik temperatury DS18B20 - koszt 4,50 zł -> Link
5. Potencjometr obrotowy 10k - koszt 2,50 zł -> Link
6. Płytka uniwersalna do zmontowania układu, ja wykorzystałem 2 płytki uniwersalne jakie miałem w domu, ale taka płytka powinna być dobra -> Link - koszt 3,50 zł
7. Obudowa czarna z okienkiem - koszt 5,70 zł -> Link

Będą jeszcze potrzebne 3 diody led, ja wykorzystałem jedną czerwoną, zieloną i żółtą oraz 3 rezystory 200 ohm do podłączenia diod i jeden rezystor podciągający 4,7k do czujnika DS18B20.

Koszt sterownika razem z obudową powinien się zamknąć w kwocie około 45 zł.

Pozostałe elementy:

Do włączania pompki wykorzystałem moduł przekaźnika 5v - koszt 6,40 zł -> Link

Woda będzie pobierana z beczki w ogrodzie, do pompowania wody wykorzystałem pompkę wymontowaną z starej uszkodzonej zmywarki.


Do zasilania Arduino wykorzystałem zasilacz 5v - koszt na Allegro około 5 zł.

Schemat połączeń wygląda jak niżej.


Do wyświetlacza LCD zostały podłączone następujące piny Arduino:
VSS - GND
VDD - VCC
V0 - środkowa nóżka potencjometru 10K
RS - pin 12
RW - GND
E - pin 11
D4 - pin 5
D5 - pin 4
D6 - pin 3
D7 - pin 2
A - VCC
K - GND

Czujnik temperatury DS18B20 został podłączony do pinu 13 Arduino

Czujnik wilgotności gleby:
pin A0 czujnika do A0 Arduino
VCC czujnika do pinu 6 Arduino
GND czujnika do GND Arduino

Diody led:
Czerwona przez rezystor 200 ohm - pin 7 Arduino
Żółta przez rezystor 200 ohm - pin 8 Arduino
Zielona przez rezystor 200 ohm - pin 9 Arduino

Przekaźnik został podłączony do pinu 10 Arduino

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

W kodzie programu wilgotność została ustawiona na 55 %, jeżeli wartości wilgotności będzie mniejsza niż 55% to włącza się pompa, zapala się czerwona dioda led informująca o włączeniu pompy oraz żółta dioda led informująca, że jest sucho.

Określono to w 74 linijce kodu:
if(moistureLevel < 55)


Jeżeli wilgotność będzie większa lub równa 55% wyłącza się pompa, czerwona i żółta dioda led i zapala się zielona dioda led informująca, że jest mokro.

Określono to 53 linijce kodu:
if(moistureLevel >= 55)

Na wyświetlaczu jest pokazywana aktualna wilgotność gleby oraz temperatura.

Działanie widać na poniższym filmie.


Działanie z podłączoną pompą.