wtorek, 9 maja 2017

TightVNC - czyli pulpit Raspberry Pi na ekranie komputera.

Dzisiaj opiszę jak możemy wyświetlać pulpit Raspberry Pi na ekranie komputera bez potrzeby podłączania Raspberry Pi do telewizora lub monitora poprzez przewód HDMI i będziemy mogli operować na pulpicie Rasberry Pi myszką i klawiaturą z komputera.

Raspberry Pi 3 posiada Wifi, więc wystarczy później tylko podłączyć je do zasilania, bez potrzeby używania dodatkowej myszki i klawiatury podłączonej do Rasberry Pi.

Dzięki programowi TightVNC będziemy mieli pulpit Raspberry Pi na ekranie komputera jak pokazano niżej.



Opiszę jak, to zrobić od samego początku instalując Raspbian Jessie With Pixel na Raspberry Pi 3, jeżeli ktoś ma już zainstalowany, może przejść dalej.

Na samym początku będą potrzebne:

Raspberry Pi 3
Karta Micro SD o pojemności co najmniej 8 GB
Czytnik kart SD na USB
Myszka i klawiatura USB
Przewód HDMI
Przewód sieciowy LAN
Zasilacz 5V np. z telefonu z końcówką micro USB.

Pierwszym krokiem jest ściągnięcie obrazu Raspbian Jessie With Pixel z oficjalnej strony Rasberry Pi -> Link

Na dzień dzisiejszy najnowsza wersja to 4.4 z dnia 10 kwietnia 2017 r.



Po zainstalowaniu programu, wkładamy czytnik kart USB z włożoną kartą Micro SD do komputera.

Uruchamiamy program Win32 Disk Imager.

Klikamy niebieską ikonkę i wskazujemy nasz plik obrazu i klikamy Zapisz i YES.



Program Win32 Disk Imager powinien zacząć zapisywać obraz na karcie SD.



Po zakończeniu zapisu powinien wyświetlić się Zapis pomyślny, klikamy OK i wkładamy kartę SD do Raspberry Pi.

Podłączamy tymczasowo myszkę i klawiaturę do Raspberry Pi oraz łączymy przewodem HDMI do telewizora lub monitora i podłączamy zasilanie.

Po chwili powinien pokazać się pulpit Raspbian Jessie With Pixel.

Pierwszą rzeczą jaką zrobimy, to połączmy się po Wifi z domową siecią, jeżeli ktoś chce, to może używać połączenia lan.

U góry po prawej stronie znajduje się ikonka połączeń sieciowych, klikamy Turn On Wi-Fi, aby włączyć Wifi w Raspberry Pi.

Powinno wykryć naszą domową sieć Wifi, wpisujemy hasło i powinniśmy mieć połączenie z Wifi.



Po najechaniu na ikonkę sieci wyświetli się nam numer Ip jakie zostało przydzielone Raspberry Pi.



Proponuję przydzielić adres Ip na stałe, jeżeli ktoś chce może zostawić na automatyczne przydzielanie adresu DHCP.

Po kliknięciu prawym klawiszem myszki na ikonkę sieci wyświetli się nam takie menu, wybieramy pierwsze od góry.



Aby sprawdzić jakie mamy adresy DNS wpisujemy w Terminalu:

cat /etc/resolv.conf

Terminal znajduje się góry po lewej stronie.



Wpisujemy więc polecenie jak wyżej i wyświetlą się nam adresy DNS.



Klikamy prawym klawiszem na ikonkę sieci i wybieramy pierwsze od góry.

Wybieramy interface wlan 0 i wpisujemy adresy Ip i DNS.



Ja mam akurat adres routera 192.168.3.1 i przydziela mi adresy Ip z zakresu: 192.168.3.2 do 192.168.3.255, ale adres routera, to zazwyczaj 192.168.1.1

Klikamy Apply i mamy już ustawione połączenie sieciowe.

Teraz jeszcze włączymy sobie SSH, aby można było się dostać do terminala i łączyć się zdalnie do Rasberry Pi na porcie 22.

Wybieramy Preferences -> Raspberry Pi Configuration.


Wybieramy z górnej zakładki Interfaces i zanaczamy SSH na Enabled i klikamy OK.


Teraz restartujemy Raspberry Pi wppisując w Terminalu:

sudo reboot

i wciskamy Enter


Gdy mamy już ustawione Ip i połączenie sieciowe z Raspberry Pi wygodnie jest operować w terminalu z poziomu komputera, dobrą aplikacją jest program Bitvise, ściągamy i instalujemy go stąd -> Link

Po zainstalowaniu i uruchomieniu Bitvise wpisujemy adres Ip Raspberry Pi w Host, port 22.

Username: Pi
Password: Raspberry

Klikamy Login i zatwierdzamy Accept and Save.


Teraz mamy dostęp do Terminala i menadżer plików.

Aby zainstalować Tight VNC wpisujemy w terminalu:

sudo apt-get install tightvncserver

zatwierdzamy wpisując y



Gdy wszystko przebiegnie prawidłowo, będzie to wyglądać tak


Teraz uruchamiamy TightVNC serwer wpisując w Terminalu:

tightvncserver

Zostaniemy poproszeni o wpisanie hasła 2 razy, wpisujemy jakieś dłuższe wciskając Enter i na końcu n.



Jak widać pulpit Rasberry Pi będzie na Rasberry:1

Teraz jeszcze dodamy sobie wpis, aby TghtVNC uruchamiał się przy stracie.

Wpisujemy kolejno:

cd /home/pi
cd .config



Tworzymy katalog autostart poleceniem:

mkdir autostart

Poleceniem ls sprawdzamy czy został utworzony i wchodzimy do katalogu autostart wpisując:

cd autostart

Tworzymy plik tightvnc.desktop wpisując:

nano tightvnc.desktop



Kopiujemy tam:

[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false



Wciskamy Ctrl+X i y aby zapisać plik.

Teraz po restarcie program TightVNC powinien uruchamiać się automatycznie.

Ściągamy program TightVNC dla Windows stąd -> Link

Mamy do wyboru wersję 32 lub 64-bit, ściągamy więc odpowiednią dla naszego systemu.



Nie jest nam potrzebny TightVNC serwer, więc zaznaczmy jak niżej.



Zaznaczamy więc i klikamy Next.



Odznaczamy dolną opcję jak niżej i klikamy Next.



Po zainstalowaniu szukamy pliku tvnviewer, w Windows 10 jest on na dysku C w katalogu Program Files/TightVNC



Uruchamiamy program i w Remote host wpisujemy adres Ip Rasberry Pi i po dwukropku 1, czyli w moim przypadku to będzie 192.168.3.1:1 i klikamy Connect.



Wpisujemy hasło, które zdefiniowaliśmy wcześniej i klikamy OK.


Powinien pokazać się pulpit Rasberry Pi i możemy teraz używać myszki i klawiatury z komputera, a Raspberry Pi wystarczy jak będzie podłączone tylko do zasilania.



































poniedziałek, 8 maja 2017

Budowa i programowanie Lixbot Racer - część II

Dzisiaj opiszę jak dodać kolejne elementy do robota: serwo oraz ultradźwiękowy czujnik odległości HC-SR04 i w końcu napisać pierwszy program, który uruchomi robota Lixbot Racer.

Pierwszą czynnością jaką zrobimy, to wycentrujemy sobie położenie serwa i przykręcimy wkręt mocujący na trwale serwo.

Do sterowania serwem wykorzystujemy bibliotekę Servo, którą musimy najpierw dodać do programu Arduino.

Wymagane biblioteki przy niektórych projektach dodajemy wybierając w górnym menu programu Arduino: Szkic -> Dołącz bibliotekę -> Zarządzaj bibliotekami.


W filtrze wyszukiwania wpisujemy Servo i instalujemy wyszukaną bibliotekę Servo.


Serwo posiada 3 przewody:
- brązowy - GND - masa (-)
- czerwony - zasilanie (+)
- pomarańczowy - sygnał

Podłączamy je do pinu 5 zgodnie ze schematem jak niżej, podłączając:
- brązowy - G
- czerwony - V
- pomarańczowy - S


Teraz już możemy wgrać program, który ustawi serwo w pozycji środkowej, do pobrania tu -> Link

Po wgraniu do Arduino Uno serwo ustawi się w pozycji centralnej i możemy przykręcić wkręt mocujący trwale serwo do podstawy.


Kod programu jest z komentarzami objaśniającymi komendy.
int servoPin = 5;
- definiuje nam numer pinu podłączenia do Arduino
servo.write(90);
- ustawia serwo w zadanej pozycji, możemy wpisać wartości 0 do 180 stopni

Przykładowy program, który będzie obracał serwem w zakresie 0 do 90 do 180 z powrotem do 90 i znowu do 0 stopni, jest do pobrania tu -> Link

Widać to na poniższym filmie.


Lepszym rozwiązaniem do robot, będzie zastosowanie pętli:

for(pozycja = 0; pozycja < 180; pozycja++)


gdzie serwo będzie przesuwane o jeden stopień w zakresie od 0 do 180 stopni

W pętli loop podajemy czas w milisekundach przesuwu serwa do zadanej pozycji

delay(15);

Prędkość obrotu będzie zależeć od zdefiniowanego czasu, im czas krótszy, to serwo będzie się obracać szybciej.

Przykładowy kod programu jest do pobrania tu -> Link

Po wgraniu serwo będzie się płynnie przesuwało w zakresie od 0 do 180 stopni i z powrotem, co widać na poniższym filmie.


Teraz możemy zająć się ultradźwiękowym czujnikiem pomiaru odległości HC-SR04.

Czujnik HC-SR04 posiada, takie wejścia/wyjścia:


Czujnik HC-SR04 działa w zakresie 2 do 200 cm i wymaga zasilania 5V, działa on na zasadzie, takiej, że po podaniu sygnału wysokiego na pin Trig wysyłana jest fala dźwiękowa o częstotliwości 40 kHz, odbija się od przeszkody i jest odczytywana przez odbiornik, a odczyt przesyłany jest na pin Echo.

Więcej o czujniku HC-SR04 można poczytać na kursie Forbota -> Link

Czujnik HC-SR04 podłączamy do w następujący sposób:

Trig - pin 3
Echo - pin 4
Vcc - zasilanie +5V
GND - masa

Schemat podłączenia czujnika HC-SR04


Po podłączeniu czujnika HC-SR04 możemy wgrać prosty kod programu, który zmierzy odległość od czujnika od przeszkody, do pobrania tu -> Link

Po wgraniu do Arduino Uno, włączamy monitor portu szeregowego -> Narzędzia -> Monitor portu szeregowego i ustawiamy prędkość na 9600, jak pokazano niżej.


W monitorze portu szeregowego wyświetli się odległość w cm od czujnika HC-SR04 do przeszkody.

Ciąg dalszy nastąpi, gdy znajdę czas na kontynuowanie projektu.





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.