sobota, 31 grudnia 2016

Budowa i programowanie Lixbot Racer - część I

Dzisiaj opiszę jak zmontować i zaprogramować robota na Arduino, jaki pojawił się w ofercie sklepu Propox pod nazwą Lixbot Racer -> Link

Lixbot Racer to robot oparty na Arduino Uno na podwoziu z 4 silnikami.

Zestaw otrzymujemy w dużym plastikowym pudełku.


Po wyciągnięciu z pudełka mamy, takie elementy.




Pierwszą czynnością jaką należy wykonać, to dolutować przewody zasilające do silników.

Silnik, to popularny silniczek do zabawek na zasilanie 6V, przewód czerwony (+) i masę GND - czarny (-) należy przylutować zgodnie z rysunkiem.


Silniki z dolutowanymi przewodami.


Proponuję założyć koszulki termokurczliwe na łączenia przewodów do silnika, niestety koszulek nie ma w zestawie.

Płyty podwozia posiadają założony ochronny papier na pleksi z obu stron, niestety trudno się go ściąga, proponuję więc zanurzyć płyty podwozia w wodzie na co najmniej 10 minut, aby rozmiękczyć papier, wtedy lepiej się go zdejmuje. Po ściągnięciu dobrze jest umyć płyty podwozia w wodzie z mydłem i wytrzeć suchym ręcznikiem.

Po przygotowaniu płyt podwozia przystępujemy do montażu silników, w zestawie otrzymujemy 8 szt. mocowań silników i 8 szt. śrubek z nakrętkami. Silniki montujemy zakładając mocowania z obu stron, jedno przekładamy przez szczelinę w podwoziu, a drugie zakładamy z boku, przekładamy śrubki od zewnętrznej strony zaczynając od dolnej śrubki, ponieważ jak włożymy górną śrubkę, to trudniej jest dokręcić nakrętkę dolnej śrubki. Od wewnętrznej strony na wał napędowy nakładamy czarne kółeczka.

Zamontowane silniki na podwoziu.


Teraz przystępujemy do montażu sterownika silników L298N na dolnej płycie podwozia, proponuję wykorzystać istniejącą szczelinę do przełożenia śrubek, niestety 2 pozostałe otwory musimy sobie nawiercić sami, przykładamy więc płytkę sterownika silnika i zaznaczamy miejsca wiercenia otworów.


Zamontowany sterownik silników.


Teraz przystępujemy do montażu koszyczka akumulatorków na górnej płycie podwozia, w tym celu przykładamy koszyczek zaznaczamy miejsca wiercenia otworów i nawiercamy otwory.


Zamontowany koszyczek na baterie.


Teraz montujemy Arduino Uno, ja zamontowałem go na środku górnej płyty podwozia, tak aby gniazdo zasilania i usb znajdowało się z boku pojazdu.

Zamontowane Arduino Uno.


Z najważniejszych części robota pozostał montaż wieżyczki z serwem i modułem HC-SR04.

Do podstawy wieżyczki przycinamy odpowiednio orczyk serwa, tak aby pasował do wycięcia podstawy wieżyczki.


Po odpowiednim przycięciu przykręcamy orczyk wkrętami do podstawy wieżyczki.


Montujemy serwo w pozostałym uchwycie oraz mocujemy moduł HC-SR04, ja uzyłem gumek recepturek, ale lepiej przymocować moduł opaskami zaciskowymi.

Zmontowana wieżyczka.


Pozostało nawiercić otwory i przykręcić podstawę wieżyczki do górnej płyty podwozia.


Teraz już wystarczy włożyć górną cześć wieżyczki głowicą serwa do orczyka, na razie nie przykręcamy wkrętu mocującego głowicę do orczyka, zrobimy, to po kalibracji serwa.

Zmontowany robot.


Nie przykręcamy jeszcze górnej części podwozia, bo musimy podłączyć przewody silników do sterownika L298N.

Łączymy razem przewody czerwone i czarne silników po lewej i prawej stronie.
Podłączamy w następujący sposób:
- czerwony przewód przedniego lewego silnika z czerwonym przewodem
tylnego lewego silnika do OUT1
- czarny przewód przedniego lewego silnika z czarnym przewodem
tylnego lewego silnika do OUT2
- czerwony przewód przedniego prawego silnika z czerwonym przewodem
tylnego prawego silnika do OUT3
- czarny przewód przedniego prawego silnika z czarnym przewodem
tylnego prawego silnika do OUT4

Schemat podłączenia silników do sterownika.


Zamontowane i podłączone silniki


Teraz krótko opiszę moduł sterownika L298N

Moduł posiada takie wejścia i wyjścia jak oznaczono na poniższym zdjęciu.


Wyjścia od OUT1 do OUT2 służą do podłączenia silników.

+12V tutaj podłączamy + z zasilania czyli czerwony przewód z koszyczka baterii
+5V jest to wyjście +5V ze stabilizatora, który znajduje się płytce sterownika i z tego pinu będziemy zasilać Arduino
GND tutaj łączymy masy z zasilania, czyli czarny przewód z koszyczka i masę GND do Arduino Uno.

IN1, IN2, IN3, IN4 są to wejścia sygnałów sterujących, które podłączamy do pinów Arduino.

ENA i ENB są to wejścia PWM, które sterują prędkością obrotową silników, normalnie są założone zworki, gdzie sygnały są podłączone do +5V i wtedy pracują z maksymalną prędkością, do działania robota ściągamy zworki z ENA i ENB, bo będziemy sobie definiować prędkość silników.

Zworkę zaznaczoną żółtym prostokątem zostawiamy założoną, ponieważ po ściągnięciu jej możemy zasilać moduł napięciem wyższym niż 12V, my będziemy używać napięcia do 12V więc zostawiamy ją założoną.

Proponuję zamontować włącznik na czerwonym przewodzie zasilania, ja wymieniłem przewody z koszyczka na baterie na grubsze przewody, bo te fabryczne były dosyć cienkie.

Zamontowany włącznik i podłączone zasilanie.


Teraz krótko o wyjściach Arduino Uno.

Opis wejść i wyjść Arduino Uno przedstawia poniższy schemat.


Do sterowania silnikami wykorzystujemy sygnały PWM, są to piny 3 i od 5 do 11, co to są sygnały PWM możemy szerzej poczytać na Forbocie -> Link

Do sterowania serwem, również wykorzystujemy sygnał PWM.

Proponuję pin 5 wykorzystać do sterowania serwem, a piny podłączenia sterownika silnika do Arduino tak:

ENA - pin 6 - włączający lewą stronę silników
IN1 - pin 7
IN2 - pin 8
IN3 - pin 9
IN4 - pin 10
ENB - pin 11 - włączający prawą stronę silników

Sterowanie robotem będzie wyglądało w następujący sposób:

- jeżeli na pin ENA i ENB podamy stan wysoki, to włączy silniki, aby silnik działały musi na nich być podany stan wysoki, stan niski wyhamuje silniki
- jeżeli na IN1 podamy stan niski, a na IN2 stan wysoki, to silnik będzie się kręcił do przodu, dla prawej strony silników IN3 stan wysoki, IN4 stan niski to prawa strona silników będzie kręcić się do przodu
- jeżeli na IN1 podamy stan wysoki, a na IN2 stan niski, to lewa strona silników będzie kręcić się do tyłu, dla prawej strony IN3 - stan niski, IN4 - stan wysoki, to silnik będzie kręcił się do tyłu
- skręcanie w lewo - lewe silniki do tyłu, prawe do przodu
- skręcanie w prawo - lewe silniki do przodu, prawe do tyłu
- hamowanie odbywa się poprzez podanie na wszystkie wejścia jednocześnie od IN1 do IN4 stanu wysokiego lub niskiego

Kierunki jazdy zależnie od stanów przedstawia poniższa tabela


Na Arduino Uno zakładamy Shield, niżej opis wejść/wyjśc


Schemat połączeń będzie taki.


Teraz już możemy przystąpić do wgrania pierwszego programu do Arduino Uno.

Najpierw musimy pobrać program Arduino -> Link i zainstalować go na Windows.

Na dzień dzisiejszy jest to wersja 1.8.0.

Po instalacji możemy podłączyć Arduino Uno do portu USB w komputerze, Windows wykryje nowe urządzenie na porcie com i zainstaluje sobie sterowniki.

Po uruchomieniu programu wybieramy w zakładce Narzędzia odpowiedni rodzaj Arduino, czyli Arduino/Genuino Uno i odpowiedni port Com.


Przykładowy kod programu, który przetestuje działanie silników pobieramy stąd -> Link

Wystarczy go rozpakować i kliknąć 2 razy w nazwę pliku, uruchomi się program Arduino i teraz wystarczy już tylko wgrać go Arduino Uno klikając u góry po lewej stronie w strzałkę Wgraj.


Po wgraniu uruchomi się program i robot pojedzie najpierw do przodu, później do tyłu, skręci w lewo i skręci w prawo, co widać na poniższym filmie.


Kod programu zawiera opisy, co robi dane polecenie.

Polecenie:
analogWrite (ENA, 100) ; definiuje prędkość obrotową silnika i możemy sobie ją regulować w zakresie 0 do 255

Dla łatwiejszego późniejszego pisania kodu programu, będzie łatwiej jak sobie zdefiniujemy osobno w pętlach kierunki jazdy i później wystarczy już tylko w nowej pętli wpisać:
nazwa_komendy();

Przykładowy program do pobrania jest tu -> Link

W kodzie programu zdefiniowałem dodatkowo prędkość silnika na początku poleceniem:
int predkosc = 150 ;

Możemy więc definiować prędkość jazdy na początku w zakresie od 0 do 255

Jeszcze jedną funkcją, która może się nam przydać w projektowaniu robotów, to płynne rozpędzanie i hamowanie, jest to szerzej opisane na kursach Arduino na Forbocie -> Link i jest realizowane funkcją:

for (int i = 0; i <= 255; i++) { analogWrite(6, i); //Spokojne rozpędzanie silnika delay(25);



Przykładowy kod programu do pobrania tu -> Link

Jak widać na poniższym filmie silnik jest powoli rozpędzany do maksymalnej prędkości i później powoli wyhamowywany.


Mam nadzieję, że ten krótki wstęp na temat sterowania silnikami wyjaśni i pozwoli w przyszłości budować roboty na Arduino.

Wkrótce dalsze opisy budowy robota.






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ą.