Raspberry Pi 2

Raspberry Pi 2

poniedziałek, 28 września 2015

Domoticz i obsługa kamerki USB

W Domoticz oraz w programach do zdalnej obsługi na telefonach lub tabletach z Android możemy mieć podgląd z podłączonej kamerki USB.

Lista obsługiwanych kamerek USB dostępna jest na stronie -> http://elinux.org/RPi_USB_Webcams

Ja użyłem kamerki firmy UBISOFT model Hercules WC04, akurat miałem taką w domu i używałem jej na konsoli WII.
Ten model kamerki ma szerokokątny podgląd, dosyć długi kabel i brak wbudowanego mikrofonu, więc akurat nadaje się do generowania podglądu w programie Domoticz. Taką kamerkę można kupić na Allegro za 12 zł, więc jest dosyć tania.


Kamerkę USB możemy obsługiwać za pomocą programu uvccapture, podłączamy więc kamerkę do wolnego portu USB i logujemy się do terminala.
Wpisujemy polecenie w terminalu, aby pobrać program uvccapture:
sudo apt-get install uvccapture

Przebieg instalacji wygląda tak


Teraz wchodzimy w panel Domoticz IP:8080 i klikamy
Ustawienia -> Więcej opcji -> Kamery


Klikamy Dodaj kamerę i ukaże nam się takie okienko:


Teraz wpisujemy:
Nazwa: wpisujemy dowolnie
IP Address: adres ip serwera domoticz
Port:8080
Login: zostawiamy puste
Hasło: zostawiamy puste
ImageURL: uvccapture.cgi

i klikamy Add

U mnie wygląda to tak:


Po dodaniu kamerki mamy ja na liście i przy kliknięciu symbolu kamerki


Mamy podgląd na żywo


Podgląd z kamerki możemy mieć zdalnie na urządzeniach z Android z odpowiednią aplikacją.
Na programie Dromotica, który opisałem tutaj -> Aplikacja Dromotica dla Android wygląda to tak:

niedziela, 27 września 2015

Domoitcz i alarm z czujnikiem PIR

Na Raspberry Pi możemy zbudować alarm z wykorzystaniem czujnika PIR i syreny alarmowej, ja użyłem do testów prostego małego buzera.


Czujnik może być zasilany w zakresie 4,5 V do 20 V. Czujnik posiada wyprowadzenia VCC, OUT, GND. Po wykryciu ruchu na wyjściu OUT pojawia się stan wysoki. Ja zasilam go z zewnętrznego zasilacza 5V.


Czujnik posiada 2 potencjometry, którymi możemy regulować

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


Ponieważ ja używam czujnika w pokoju T2 ustawiłem w połowie na średnią odległość, a T1 czyli czas reakcji maksymalnie w lewo.


W moim projekcie podłączyłem buzer pod pin 26 GPIO, a PIR pod pin 6 GPIO.

W programie napisanym w pythonie piny możemy sobie dowolnie zdefiniować na początku kodu:
#wpisz nr pinu GPIO czujnika PIR
PIR = 6
#wpisz nr pinu GPIO alarmu
ALARM = 26

Możemy również zdefiniować jak długo w sekundach alarm ma być włączony, definiujemy, to w tej linijce:
#wpisz czas w sekundach jak dlugo ma byc wlaczony alarm
DELAY = 5

Kod programu:

#!/usr/bin/python
import RPi.GPIO as GPIO
#import bibloetki GPIO
import time
GPIO.setmode(GPIO.BCM)
#wpisz nr pinu GPIO czujnika PIR
PIR = 6
#wpisz nr pinu GPIO alaramu
ALARM = 26
#wpisz czas w sekundach jak dlugo ma byc wlaczony alarm
DELAY = 5
#ustawienie pinu PIR jako wejscie
GPIO.setup(ALARM, GPIO.OUT)
# ustawienie pinu ALARM jako wyjscie
GPIO.setup(PIR, GPIO.IN)
GPIO.setup(PIR, GPIO.IN, pull_up_down=GPIO.PUD_UP)
try:
while True:
# wykrycie ruchu
GPIO.wait_for_edge(PIR, GPIO.RISING)
# alaram wlaczony
GPIO.output(ALARM, True)
time.sleep(DELAY)
GPIO.output(ALARM, False)
except KeyboardInterrupt:
GPIO.cleanup()

Program jest do pobrania stąd -> alarm.py

Program kopiujemy sobie do katalogu python.

Teraz możemy przeprowadzić test programu, więc w terminalu wpisujemy:
cd python
sudo python alarm.py

Po wykryciu ruchu włączy się alarm na 5 sekund, po wciśnięciu dowolnego klawisza program się zakończy.

Teraz tworzymy skrypt lua, który będzie włączał i wyłączał nasz alarm, czyli uruchamiał i zamykał program w pythonie.
Skrypt będzie wyglądał tak:
commandArray = {}

if (devicechanged['ALARM'] == 'On') then
os.execute ("sudo python /home/pi/python/alarm.py")
end
if (devicechanged['ALARM'] == 'Off') then
os.execute("sudo pkill -9 -f /home/pi/python/alarm.py")
end

return commandArray

W linijce:
if (devicechanged['ALARM'] == 'On') then i
if (devicechanged['ALARM'] == 'Off') then

wpisujemy nazwę naszego przycisku jaki dodamy w Domoticz, ja nazwałem sobie go ALARM.

Skrypt jest do pobrania stąd -> script_device_alarm.lua

Kopiujemy nasz skrypt do: /home/pi/domoticz/scripts/lua

Wchodzimy na nasz panel Domoticz IP:8080 i klikamy Utwórz wirtualne sensory


Jak utworzyć wirtualne sensory napisałem wcześnie w poście -> Domoticz i uruchamianie programów w Pythonie

Wybieramy przełącznik i klikamy OK


Wchodzimy w Ustawienia -> Urządzenia, szukamy nasz utworzony przycisk Wirtualny ALARM i klikamy w zieloną strzałkę.


Wpisujemy nazwę ALARM i klikamy OK.


Teraz nasz przełącznik mamy w zakładce Przełączniki, ponieważ nie jest, to włącznik światła zmienimy sobie jego ikonkę, klikamy edytuj i wybieramy dowolną ikonkę w Zamień ikonę. Ja wybrałem Alarm i klikamy Zapisz.


Ponieważ zdefiniowany wcześniej czas włączenia buzera lub alarmu jest zbyt krótki, zmienimy sobie czas DELAY w programie na 3 minuty, czyli 180 sekund, czyli w programie alarm.py wpisujemy DELAY = 5 i zapisujemy plik w /home/pi/python

Teraz, gdy alarm się aktywuje musimy go jakoś wyłączyć, w tym celu edytujemy plik domoticz.sh, czyli w terminalu wpisujemy:

sudo nano /etc/init.d/domoticz.sh

Przechodzimy na koniec linii i wpisujemy:

/usr/local/bin/gpio export 26 out


Wciskamy Ctrl+X, T i ENTER i robimy restart, czyli:

sudo reboot

Wpisaliśmy pin GPIO nr 26 jako out ponieważ, do tego pinu mamy podłączony buzer.

Wchodzimy do panelu Domoticz IP:8080

Teraz wchodzimy w zakładkę Przełączniki -> Ręczne ustawienia.
Sprzęt ma być ustawione GPIO, Nazwę wpisuję sobie Wyłącz ALARM, Typ przełącznika Push Off Button, Typ GPIO, GPIO: gpio26 i klikamy dodaj urządzenie


Teraz po włączeniu alarmu możemy go wyłączyć przyciskiem Wyłącz ALARM, ale wykrywanie ruchu i włączanie buzera będzie nadal aktywne, aby całkowicie dezaktywować alarm, klikamy przełącznik ALARM na OFF.

Aplikacja Dromotica dla Android

Do sterowania naszym Domoticzem i podłączonymi urzadzeniami dobrą aplikacja dla telefonów z Android jest Dromotica.
Oprogramowanie dostępne jest w sklepie Play -> Dromotica



Wystarczy zainstalować, wejść w Settings -> Domoticz, wpisać login, hasło, adres i port Domoticz i możemy zdalnie sterować naszym systemem z telefonu.

Domoticz i uruchamianie programów w Pythonie

W Domoticz możemy aktywować przyciskiem uruchomienie dowolnego programu napisanego w Pythonie.
Mamy dzięki temu duże możliwości wykorzystania, np. możemy napisać program, który po wykryciu ruchu na czujniku pir aktywuje alarm lub po wykryciu światła na czujniku światła podnosi nam żaluzje, mamy pełną dowolność wykorzystania.

Pokażę na przykładzie programu mis napisanego w pythonie, który powoduje ruch serwa i miganie diodami.

Najpierw tworzymy sobie katalogi python i lua w katalogu domoticz/scripts, uruchamiamy program Bitvise wchodzomy do domopticz/scripts i dodajemy katalogi, w m moim przypadku takie katalogi już były.


Program mis.py wygląda tak:
#/usr/bin/python
print"Mis rusza reka"
import time
import RPi.GPIO as GPIO
#import biblotek time i GPIO
GPIO.setmode(GPIO.BCM)
#ustawienie pinow wg numeracji BCM
GPIO.setwarnings(False)

GPIO.setup(18,GPIO.OUT)
GPIO.setup(17, GPIO.OUT)
#ustawienie pinow 18 i 17 jako wyjscia

p = GPIO.PWM(18, 50)
p.start(2.5)

while (True):
GPIO.output(17, True)
p.ChangeDutyCycle(2.5) #pozycja 0 stopni serwa
time.sleep(1)
GPIO.output(17, False)
p.ChangeDutyCycle(7.5) #pozycja 90 stopni serwa
time.sleep(1)

W programie wykorzystno piny GPIO 17, 18, ustawione są jako wyjścia i w pętli wykonywane jest miganie diodą i ruch serwa o 90 stopni co sekundę.

Skrypt lua będzie uruchamiał program po włączeniu przycisku i zabijał proces pythona poleceniem pkill po wyłączeniu przycisku.
Skrypt wygląda tak:
commandArray = {}

if (devicechanged['MIS'] == 'On') then
os.execute ("sudo python /home/pi/python/mis.py")
end
if (devicechanged['MIS'] == 'Off') then
os.execute("sudo pkill -9 -f /home/pi/python/mis.py")
end

return commandArray

Programy w pythonie umieściłem sobie w /home/pi/python i skrypt uruchamia program mis poleceniem:
sudo python /home/pi/python/mis.py

Teraz tworzymy skrypt lua i zapisujemy go w /home/pi/domoticz/scripts/lua.

W linijce:
if (devicechanged['MIS'] == 'On') then

wpisujemy nazwę naszego przycisku jaki dodamy w Domoticz, ja nazwałem sobie go MIS.

Do edycji plików tekstowych i napisanych programów używam program Notepad++, możemy go sobie pobrać stąd -> https://notepad-plus-plus.org/

Skypt i program możemy sobie pobrać stąd -> Link

Jak już mamy pliki umieszczone w odpowiednich katalogach, uruchamiamy nasz panel Domoticz.
Wchodzimy w Ustawienia -> Sprzęt i tworzymy wirtualny przycisk, z listy wybieramy Dummy


Wpisujemy nazwę, ja wpisałem Wirtualny i klikamy Dodaj, zobaczymy go na liście rekordów.
Teraz klikamy Utwórz wirtualne sensory


Wybieramy przełącznik i klikamy OK


Wchodzimy w Ustawienia -> Urządzenia, szukamy nasz utworzony przycisk Wirtualny i klikamy w zieloną strzałkę


Wpisujemy nazwę, ja wpisałem MIS i klikamy Dodaj urządzenie


Teraz w menu Przełączniki mamy nasz nowo dodany przycisk, po kliknięciu uruchomi się nasz program w pythonie, a po wyłączeniu, wykonywanie program zostanie zatrzymane.


Miś uruchamiany przyciskiem wygląda tak


Budowa misia

Domoticz i sterowanie oświetleniem

W programie Domoticz możemy sterować pinami GPIO w Raspberry Pi.
W swoim projekcie wykorzystam moduł przekaźnika zasilany napięciem 5V jak pokazano niżej.


Przekaźnik będzie podłączony do lampki biurkowej i w tym celu wykorzystałem stare gniazdko na kabel oraz wtyk 220V.
Jest to połączone jak na schemacie niżej.


Zmontowany układ wygląda tak.


Przekaźnik zasilam zewnętrznym zasilaczem 5V , wejście oznaczone na module przekaźnika jak IN podłączamy do GPIO w Rasberry Pi, DC+ do + zasilacza 5V, a DC- do GND zasilacza, jeżeli używamy zasilacza musimy połączyć masę z zasilacza z masą z Rasberry Pi, bo inaczej przekaźnik nie będzie przełączał.
W Raspberry Pi wybrałem pin GPIO nr 20 i do niego podłączyłem wejście IN z modułu przekaźnika.

Aby w Domoticz było możliwe sterowanie pinami GPIO należy najpierw zainstalować WiringPi, zgodnie z opisem jak na tej stronie -> http://wiringpi.com/download-and-install/

Więc zaczynamy, najpierw instalujemy pakiet do obsługi GIT, otwieramy terminal w Bitvise i wklejamy:

sudo apt-get install git-core

Pobieramy pakiet WiringPi:

git clone git://git.drogon.net/wiringPi

Wchodzimy do katalogu wiringPi i urchamiamy:

cd wiringPi
git pull origin
./build

Teraz testujemy działanie WiringPi i wpisujemy kolejno:

gpio -v
gpio readall

Jak wszystko działa poprawnie, teraz musimy dodać wpisy w pliku /etc/init.d/domoticz.sh

W terminalu przechodzimy do głównego katalogu poleceniem:

cd

Edytujemy plik domoticz.sh :

sudo nano /etc/init.d/domoticz.sh

Przechodzimy na koniec linii i wpisujemy:

/usr/local/bin/gpio export 20 out

Wciskamy Ctrl+X, T i ENTER i robimy restart, czyli:

sudo reboot

Wchodzimy do panelu Domoticz IP:8080
Teraz dodamy sobie nowy sprzęt, czyli wybieramy Ustawienia -> Sprzęt i szukamy na liście urządzeń Raspberry's GPIO port, wpisujemy sobie nazwę GPIO i klikamy Dodaj


Teraz klikamy Przełączniki i Ręczne ustawienia, Sprzęt ma być GPIO, Typ przełącznika ON/OFF i z rozwijalnej listy szukamy pinu 20, jak widać jest ustawiony na OUTPUT.


Wpisujemy nazwę naszego przełącznika, ja wpisałem sobie Lampka biurko i Dodaj urządzenie. Teraz mamy już nasz przełącznik i możemy włączać i wyłączać lampkę.







sobota, 26 września 2015

Domoticz i pomiar temperatury czujnikami DS18B20

W programie Domoticz możemy wykorzystać czujniki DS18B20 do pomiary temperatury.

Czujnik DS18B20 posiada 3 nóżki, które mają sygnały GND (masa), wyjście i zasilanie.


Aby czujnik działał prawidłowo będzie jeszcze potrzebny rezystor podciągający 4,7 K, łączymy go z nóżką od zasilania i wyjściem danych.

Podłączamy nasz czujnik lub więcej czujników zgodnie ze schematem do Raspberry Pi, jak wejście danych wykorzystamy PIN 4 GPIO.

Gdy podłaczamy wiećej czujników wystarczy tylko jeden rezystor podciaągający ponieważ jest to czujnik 1-wire.



Ja w swoim projekcie użyłem 2 czujników podłączonych do kabla telefonicznego, jeden krótki umieszczony w pokoju, a drugi dłuższy wystawiony za okno.



Ponieważ mam RPi 2 należy dopisać w plik konfiguracyjnym obsługę czujnika.
Gdy już mam podłączone czujnik logujemy się w terminalu i wpisujemy:

sudo nano /boot/config.txt

W pliku config.txt należy dopisać linijkę:

dtoverlay=w1-GPIO,gpiopin=4

Ponieważ wykorzystaliśmy PIN GPIO 4, to wpis tak powinien wyglądać.
Wciskamy Ctrl+x, wpisujemy t i ENTER.
Teraz restartujemy RPi, więc wpisujemy:

sudo reboot

Po restarcie wpisujemy w terminalu:

cd /sys/bus/w1/devices
ls

Wyświetlą nam się numery podłączonych czujników


Kopiujemy sobie nazwę czujnika, w moim przypadku, będzie to: 28-0215021ddaff i wpisujemy:

cd 28-0215021ddaff
ls
cat w1_slave

Jak widać czujnik działa i odczytuje prawidłowo temperaturę


Wchodzimy na stronę Domoticz i klikamy Ustawienia -> Sprzęt
Wybieramy jak TYP: 1-Wire (System) i wpisujemy sobie nazwę np. DS18B20 i klikamy Dodaj


Teraz wchodzimy w Ustawienia -> Urządzenia i zobaczymy nasze czujniki


Klikamy zieloną strzałkę przy wybranym czujniku, jako pierwszy wybiorę pierwszy od góry, który pokazuje temperaturę 14,1 st. C
Wpisuję sobie nazwę Zewnątrz i klikam Dodaj


Tak samo robię z drugim czujnikiem i wpisuję sobie pokój, teraz w zakładce Temperatura pokazuje temperaturę na zewnątrz i w pokoju.


Klikając Logi zobaczymy wykresy przebiegu temperatury.

Pierwsze uruchomienie i konfiguracja Domoticz

Gdy już mamy uruchomione Domoticz pozmieniamy sobie parę rzeczy.

Klikamy Setup i Settings

Pierwsze co robimy, to wpisujemy swoją lokalizację, klikamy w To find your location click Here

Wpisujemy nazwę naszej miejscowości i klikamy GetLatLong i OK.

Możemy sobie zmienić login i hasło do logowania

Zmieniamy język na polski.
Wybieramy Language:Polish i klikamy Apply Settings.

Teraz już mamy Domoticz po polsku.

Wchodzimy w ustawienia i dodajemy adres IP z * na końcu z puli naszych IP, w moim przypadku będzie, to 192.168.3.*

Teraz podczas logowania w sieci lokalnej nie będzie wymagane hasło i jest to wymagane do działania aplikacji na Android ImperiHome, o której napiszę później.

Wkrótce następny opis o konfiguracji GPIO i dodawaniu GPIO z RPi do Domoticz.