czwartek, 20 kwietnia 2017

Ściemniacz pasków led na odbiorniku MySensors

Dzisiaj krótki wpis o ściemniaczu pasków led sterowanym z odbiornika MySensors.

Opis, schemat połączeń i kod programu jest na stronie MySensors -> Link

Do budowy zakupiłem jedynie tranzystor mofset IRLZ44N za około 3 zł na Allegro.

Ja dodatkowo do zasilania odbiornika MySensors zastosowałem stabilizator napięcia 7805 5V zgodnie z schematem.


Kod programu do wgrania do Arduino znajduje się na stronie MySensors lub do pobrania tu -> Link

Po wgraniu do Arduino zobaczymy w logach Domoticz nowe urządzenie i bedzie widoczne w Urządzeniach jako zwykły włącznik, zmieniamy go na Dimmer.


Krótki filmik z działania ściemniacza.

poniedziałek, 17 kwietnia 2017

Bramka Ethernet MySensors

Jeżeli nie mamy możliwości podłączenia bramki MySensors do portu USB w Rasberry Pi, możemy zbudować bramkę Ethernet podłączaną do domowej sieci lan za pomocą skrętki.

Budowa bramki MySensors Ethernet opisana jest na stronie MySensors -> Link

Ja do budowy bramki wykorzystałem Arduino Uno i Ethernet Shield z czytnikiem kart microSD, widoczny niżej.


Schemat podłączenia modułu NRF24L01 do Ethernet Shield.


Do Arduino Uno wgrywamy kod -> Link

W 35 linijce kodu wpisujemy adres ip bramki, ja akurat mam Ip z zakresi 192.168.3.1 do 200, więc wpisałem sobie:

#define MY_IP_ADDRESS 192,168,3,160 // wpisz adres ip bramki

W 39 linijce kodu wpisujemy numer portu bramki, ja wpisałem sobie:

#define MY_PORT 9003 //wpisz numer portu bramki, wcześniej zdefiniowany w kodzie programu.

Po wgraniu dodajemy bramkę w Domoticz -> Konfiguracja -> Sprzęt jak niżej, wpisując adres Ip i port bramki.


W logach Domoticz -> Konfiguracja -> Logi powinno się pojawić:

MySensors: connected to: 192.168.3.160:9003
MySensors: Gateway Ready...
MySensors: Gateway Version: 2.1.1

Jeżeli mamy jakieś odbiorniki MySensors powinny wkrótce pojawić się w logach i pokazać w Urządzeniach, dodajemy je klikając w zieloną strzałkę.

niedziela, 16 kwietnia 2017

MySensors - komunikacja przewodowa RS485

Jeżeli nie chcemy korzystać z komunikacji bezprzewodowej za pomocą modułów NRF24L01 pomiędzy bramką MySensors, a odbiornikami MySensors możemy wykorzystać bramkę np. na Arduino Uno z podłączonym modułem RS485 i przekazywać i odbierać dane do kolejnych Arduino z modułami RS485.

Moduł RS485 wygląda i posiada takie sygnały jak pokazano niżej.


Więcej o komunikacji RS485 można poczytać tu -> Link

Moduły do komunikacji używają gniazd oznaczonych jako A i B, łączymy je ze sobą, od pierwszego modułu do drugiego, od drugiego do trzeciego itd...

Moduły RS485 wymagają zasilania 5V, pin RO łączymy do pinu 8 Arduino, DI do pinu 9, a RE i DE łączymy razem do pinu 2 Arduino.

Ja bramkę zbudowałem na Arduino Uno, a odbiornik na Arduino Mini Pro 5V i schemat połączenia wygląda tak.


Zgodnie z tym, co napisali na stronie Mysensors -> Link, do poprawnego działania wymagana jest biblioteka AltSoftSerial, do pobrania tu -> Link, wypakowujemy ją do: Moje dokumenty\Arduino\libraries.

Do bramki wgrywamy kod -> Link

Do odbiornika przykładowy kod ze strony MySensors na czujnik ruchu PIR -> Link

Czujnik ruchu PIR podłączamy do pinu 3 Arduino w odbiorniku i VCC oraz GND do Arduino.

Po wgraniu kodu do bramki podłączamy ją do Raspberry Pi do portu USB i dodajemy bramkę Mysensors jak niżej.


U mnie bramka działa na porcie ACM0.

Po dodaniu bramki i połączeniu odbiornika zgłosi się nam w logach Domoticz (Konfiguracja -> Logi) bramka i czujnik ruchu PIR.


Dodajemy go w Konfiguracja -> Urządzenia klikając w zieloną strzałkę, pojawi się w menu Przełączniki.

Zmieniamy jeszcze rodzaj na Motion Sensor i już powinno działać wykrywanie ruchu.




Inne kody programów do odbiorników z RS485.

Kod programu do odbiornika na przekażnik -> Link


Kod programu dla czujnika temperatury i wilgotności DHT11 lub DHT22 -> Link

Budowa miernika jakości połączenia odbiornika MySensors

Dzisiaj opiszę budowę miernika jakości połączenia odbiornika MySensors z wyświetlaczem LCD 16x2.

Pomysł został zaczerpnięty z forum MySensors, gdzie opisano budowę takiego miernika -> Link

Do budowy miernika będą potrzebne:

- wyświetlacz LCD 2x16 - koszt około 10 zł -> Link
- konwerter LCD I2C - koszt około 7 zł -> Link
- Arduino Pro Mini 5V - koszt około 14 zł -> Link
- moduł NRF24L01 - koszt około 5 zł -> Link lub moduł NRF24L01 z antenką -> Link

Do budowy miernika wykorzystałem gotowe płytki pod odbiornik MySensors.

Wykonałem prowizoryczną obudowę z małego kartonu, a zasilanie pobieram z powerbanku, wygląda, to tak.


Do płytki odbiornika MySensors wlutowałem gniazda pod goldpiny, aby wymieniać moduł NRF.


Podłączony wyświetlacz.


Ogólny schemat połączenia.


Po przylutowaniu konwertera LCD do wyświetlacza, mamy 4 wyjścia:
GND - podłaczamy do masy GND
Vcc - podłączamy do zasilania 5V
SDA - do pinu A4 Arduino
SCL - do pinu A5 Arduino

Należy pamiętać, że moduł NRF24L01 wymaga zasilania 3,3V i należy do modułu NRF na VCC i GND zamontować kondensator 4,7 uF.

Jeżeli nie mamy stabilizatora 3,3V możemy wykorzystać Arduino Nano, które posiada takie wyjście, tak jak na forum MySensors.

Konwertery LCD I2C są opisane tu -> Link

Ja akurat trafiłem na konwerter LCD z oznaczeniem MH i wtedy przy definicji adresu wyświetlacza wpisujemy adres 0x3F, a pozostałych przypadkach 0x27.

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

W 87 linijce kodu, dla mojego konwertera z oznaczeniem MH musiałem uzyć zapisu:
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Dla pozostałych konwerterów używamy adresu 0x27 lub wpisu:
LiquidCrystal_I2C lcd(0x27, 16, 2);

Do działania kodu programu wymagana będzie biblioteka LiquidCrystal, jeżeli jej nie mamy to dodajemy ja w programie Arduino, klikajac Szkic -> Dołacz bibliotekę -> Zarzadzaj bibliotekami.


Wpisujemy sobie w wyszukiwarce liqu i instalujemy bibliotekę jak niżej.


Po wgraniu kodu programu do Arduino, w Domoticz powinien zostać wykryty włącznik, zmieniamy go na Dimmer.


Arduino z wgranym kodem programu wysyła do bramki wartości zmienne w zakresie od 0 do 99, an wyświetlaczu pokazywane są dane:
p0 Fail - dane, które w ogóle nie docierają do bramki i d0 Miss, dane które nie powróciły.

Dla modułu NRF24L01 z antenką, w pomieszczeniu oddzielonym 2 ścianami od bramki, między bramką, a miernikiem, znajduje się kuchnia, a miernik znajduje się w drugim pokoju, wynik wyniósł Fail = 0 i Miss = 0, czyli praktycznie wszystkie dane docierają do bramki i nie gubi żadnych danych.

Dla modułu NRF jak pokazano niżej, dla tego samego pomieszczenia, wyniki są takie same.


Dla modułu jak pokazano niżej, nie posiada on białych obwódek wokół elementów i jest wykonany mniej starannie, wyniki już są gorsze, a niektóre z tych modułów nie działają w ogóle.


Wyniki dla tego modułu.


Dla modułu NRF z antenką w pomieszczeniu piwnicy (bramka na pietrze) wyniki wynosiły Fail 23% i Miss 21%, na parterze praktycznie nie gubiło żadnych danych.

Porównanie modułów NRF24L01.

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.