niedziela, 26 stycznia 2014

Raspberry PI - sterowanie serwomechanizmem

W sieci można znaleźć co najmniej kilka metod sterowania serwomechanizmem za pomocą Raspberry PI.

Według mnie najwygodniejsze jest wykorzystanie biblioteki Servoblaster.

Biblioteka jest częścią pakietu PiBits, hostowanego na GitHub'ie.

Aby pobrać kod na Raspberry PI wykonujemy polecenie:

git clone https://github.com/richardghirst/PiBits/

Następnie przechodzimy do katalogu Servoblaster poleceniem:

cd PiBits/ServoBlaster/

Są dwie metody wykorzystania biblioteki. Może ona działać jako moduł jądra Linuksa, lub jako demon w przestrzeni użytkownika. Druga opcja jest według mnie zdecydowanie wygodniejsza i prostsza do wykorzystania, zatem zajmiemy się nią.

Na początek należy skompilować bibliotekę:

cd  user/
make

Po chwili będziemy mieli wykonywalny plik servod, którego opcje możemy wyświetlić poleceniem:

./servod --help

Możemy teraz przetestować działanie biblioteki uruchamiając ją poleceniem:

sudo ./servod

W tym momencie powinien być dostępny plik

/dev/servoblaster 

do którego będziemy wysyłać polecenia sterujące serwomechanizmami

Podłączmy zatem servo do Raspberry Pi
Pobór prądu serwomechanizmu jest zdecydowanie większy niż to co jest w stanie dostarczyć Raspberry PI, zatem w tym przypadku również konieczne jest wykorzystanie zewnętrznego źródła zasilania. Schemat podłączenia na płytce prototypowej wygląda następująco:



Bardzo ważne jest podłączenie servo i Raspberry PI do wspólnej masy.

Biblioteka servoblaster potrafi sterować maksymalnie ośmioma serwomechanizmami.
Mapowanie numerów silniczków na piny GPIO wygląda następująco:


0 on P1-7  GPIO-4
1 on P1-11 GPIO-17
2 on P1-12 GPIO-18
3 on P1-13 GPIO-21
4 on P1-15 GPIO-22
5 on P1-16 GPIO-23
6 on P1-18 GPIO-24
7 on P1-22 GPIO-25


Po podłączeniu serwomechanizmu możemy sprawdzić jego działanie.

Wydanie polecenia:


echo 0=50% > /dev/servoblaster

ustawi zerowe serwo - czyli to podłączone do pinu GPIO-4 (P1-7) w pozycję 50%.

Polecenie:

echo 1=10% > /dev/servoblaster


ustawi serwo nr 1 (pin GPIO-14) w pozycję 10%.
Można również podać komendę w postaci:

echo 0=150 > /dev/servoblaster

co spowoduje przesunięcie serwo nr 0 w pozycję 150 kroków.

Jeśli chcemy przesunąć serwomechanizm o względną wartość (czyli np o 20 kroków względem aktualnej pozycji), możemy wydać polecenie:

echo 0=+20 > /dev/servoblaster

Biblioteka ma dużo większe możliwości konfiguracji. Szczegóły można znaleźć w bardzo przejrzystej dokumentacji.

Do konfiguracji pozostała jeszcze jedna bardzo istotna rzecz - uruchamianie demona ./servod przy starcie Raspberry PI.

Aby to zrobić wydajemy polecenia:

cd /home/pi/PiBits/ServoBlaster/user/
sudo make install

Odpowiednie skrypty zostaną skopiowane do /etc/init.d i po restarcie komputera demon servod powinien wystartować automatycznie.

Działanie całego układu można zobaczyć na poniższym filmie:




sobota, 25 stycznia 2014

Raspberry Pi - sterowanie modułem laserowym

Kolejnym krokiem przy budowaniu zabawki dla kota jest sterowanie modułem laserowym przy pomocy Raspberry PI.

Niestety nie można podpiąć modułu laserowego bezpośrednio do wyjścia GPIO w RPI ponieważ jesteśmy w stanie wyciągnąć z niego prąd o maksymalnym natężeniu 16mA. Jest to zdecydowanie za mało do wysterowania modułu.

Pozostaje zatem zasilenie lasera z zewnętrznego źródła, i wykorzystanie Raspberry PI jedynie do wysłania sygnału włącz/wyłącz. Najprostsze jest zrobienie tego za pomocą tranzystora.

Schemat połączenia wygląda następująco:

Nie znalazłem symbolu modułu laserowego, wykorzystałem zatem diodę LED, pamiętać jednak należy że zwykłej diody LED nie można podłączać bezpośrednio do zasilania bez rezystora.

Dodatkowo przygotowałem schemat podłączenia na płytce prototypowej (tutaj również dioda LED zamiast modułu - przy podłączeniu zwykłego LED'a należy dodać dodatkowy rezystor)

Po złożeniu prototypu można sprawdzić jego działanie.
Wyjściami GPIO możemy sterować bezpośrednio z linii poleceń Raspberry PI.
Wydajemy polecenia które przygotują wyjście GPIO4 do sterowania:

sudo bash
cd /sys/class/gpio
echo 4 > export
cd gpio4
echo out > direction

i teraz aby włączyć laser wydajemy polecenie:

echo 1 > value
aby wyłączyć wydajemy polecenie

echo 0 > value
Całość można zobaczyć w działaniu na poniższym filmie:


niedziela, 19 stycznia 2014

Raspberry Pi - konfiguracja wifi z wiersza poleceń

Na potrzeby opisywanej we wcześniejszym wpisie zabawki dla sierściucha potrzebowałem czystej instalacji Raspbiana, którą następnie będę odpowiednio konfigurował.
Zakładam że system nie będzie korzystał z trybu graficznego, zatem wszystkie ustawienia trzeba wykonać z wiersza poleceń.

Na pierwszy ogień poszła konfiguracja wifi, ponieważ domyślnie Raspbian jest skonfigurowany jedynie do obsługi sieci przewodowej za pomocą DHCP.

Dotychczas zawsze modyfikowałem pliki konfiguracyjne ręcznie.
Należy wtedy odpowiednio zmodyfikować pliki:

/etc/network/interfaces

oraz

/etc/wpa_supplicant/wpa_supplicant.conf

Ostatnio natrafiłem jednak na narzędzie które pozwala skonfigurować połączenia bez żmudnego wpisywania parametrów w plikach. Jest to konsolowa wersja dość popularnego managera połączeń sieciowych WICD.

Zakładam że mamy dostępne Raspberry Pi z działającym przewodowym połączeniem internetowym, oraz podłączoną do USB kartą WiFi.
 
Na początku należy zainstalować odpowiedni pakiet. Robimy to poleceniem 

sudo apt-get install wicd-curses

Następnie uruchamiamy konfigurator poleceniem:

sudo wicd-curses

Powinniśmy wtedy zobaczyć aktualne połączenie sieciowe, oraz listę dostępnych sieci bezprzewodowych:



Teraz należy klawiszami kursora najechać na sieć bezprzewodową i (UWAGA!!!) wcisnąć strzałkę w prawo. W moim przypadku wciśnięcie enter powodowało zawieszenie sesji sesji ssh którą łączyłem się z laptopa do Raspberry Pi. Nie badałem co było przyczyną - mogło to być albo zerwanie połączeń sieciowych, albo zawieszenie Pi. Podejrzewam pierwszą przyczynę.

W każdym razie po wciśnięciu strzałki w prawo pojawi się ekran konfiguracji połączenia, gdzie musimy wybrać kofigurację IP, DNS, szyfrowanie itd.



Po zakończeniu wpisywania ustawień należy wcisnąć F10.

I to już cała konfiguracja. Można odpiąć kabel ethernet i po restarcie urządzenia Raspberry Pi powinno już działać z kartą wifi.

Ten sposób jest zdecydowanie wygodniejszy od ręcznej konfiguracji, chociaż trzeba mieć na uwadze że też może sprawiać pewne problemy.