Raspberry Pi posiada jeden sprzętowy port PWM, za pomocą którego możemy sterować serwami czy silnikami. Problemem staje się, gdy chcemy podpiąć już dwa serwa lub silniki przez sterownik. Na szczęście istnieją biblioteki, dzięki którym możemy stworzyć dodatkowe programowe porty PWM. Obecnie dostępne są dwie biblioteki: WiringPi oraz pigpio, które pozwalają na programowe ustawienie pinów GPIO jako PWM na Raspberry Pi.

Działanie skryptu pokazane jest na filmiku:

Przedstawię bibliotekę pigpio, gdyż jest łatwiejsza w obsłudze oraz nie obciąża zbytnio procesora jak ma to miejsce w WiringPi.

Instalacja biblioteki pigpio w Raspbian

Pobieramy archiwum biblioteki za pomocą polecenia

[bash]wget abyz.co.uk/rpi/pigpio/pigpio.tar[/bash]

następnie rozpakowujemy archiwum

[bash]tar -xvf pigpio.tar[/bash]

przechodzimy do rozpakowanego katalogu

[bash]cd PIGPIO[/bash]

następnie wykonujemy polecenie

[bash]cp libpigpio.a-hard libpigpio.a[/bash]

a następnie budujemy i instalujemy bibliotekę

[bash]make & make install[/bash]

na koniec uruchamiamy program pigpiod, który domyślnie nasłuchuje na porcie 8888 i możliwa jest komunikacja z nim poprzez sieć (więcej na stronie). Program musi być uruchamiany po każdym uruchomieniu systemu. Jeśli ktoś zamierza korzystać z niego na stałe warto dodać go do programów domyślnie uruchamianych z systemem.

[bash]sudo pigpiod[/bash]

Schemat testowego układu

Zbudujemy teraz układ przedstawiony poniżej. Do pinu 17 podłączamy pierwsze serwo, zaś do pinu 21 drugie. Zasilanie w naszym układzie zapewniają 4 baterie AAA dające prąd 4.8V wystarczający do sterowania naszymi serwami. Do naszego przykładu użyjemy dwa mikro-serwa  Redox S90, którymi będziemy sterować za pomocą RPi.

układ serv PWM

Sterowanie serwami z poziomu konsoli

Z biblioteka pigpio dostarczone są dodatkowe programy i usługi m.in. proste narzędzie do sterowania portami IO pigs. Za pomocą tego narzędzia można ustawiać długość impulsów PWM pigs s [długość] (gdzie zakres musi być od 0,5ms do 2,5ms. czyli w naszym przypadku od 500 do 2500). Sama aplikacja wysyła domyślnie 50 impulsów na sekundę. Można również użyć pigs p np do zwiększania obrotów silników lub do sterowania napięciem zasilania diody od 0 do 255. Np. aby dioda świeciła z 50% mocy wystarczy wydać polecenie pigs p [nrpinu] 128

Ustawiamy obydwa serwa pierwsze na maksymalnym obrocie, drugie na początkowym położeniu

[bash]
pigs s 17 500
pigs s 21 2500
[/bash]

następnie na odwrót:

[bash]
pigs s 17 2500
pigs s 21 500
[/bash]

następnie ma środkowe położenie:

[bash]
pigs s 17 1250
pigs s 21 1250
[/bash]

Polecamy przetestować samemu z innymi wartościami z zakresu 500-2500.

Wykonamy teraz prosty skrypt który obracać będzie  serwami w obu kierunkach. Tworzymy plik:

[bash]nano serwa.sh[/bash]

piszemy program:

[bash]
#!/bin/bash

for ((;;)); do
x=500

while [ $x -le 2500 ]; do
pigs s 17 $x
pigs s 21 $x
sleep 0.05
x=$[x + 50]
done

y=2500

while [ $y -gt 500 ]; do
pigs s 17 $y
pigs s 21 $y
sleep 0.05
y=$[y – 50]
done

done
[/bash]

zapisujemy [CTRL+o] i wychodzimy [CTRL+x]. Następnie ustawiamy nasz skrypt, jako wykonywalny:

[bash]chmod +x serwa.sh[/bash]

i uruchamiamy:

[bash]./serwa.sh[/bash]

Aby zakończyć program wciskamy [CTRL+c]

Sterowanie PWM za pomocą biblioteki pigpio.h

Istnieje również możliwość użycia biblioteki do języka C pigpio.h za pomocą, której możliwe jest sterowanie portami gpio w RPi. Przykładowe aplikacje dostępne są na stronie z przykładami. Opis funkcji oraz więcej informacji na stronie projektu.

Poprzedni artykułHumble Weekly Sale: EGOSOFT z X3: Terran Conflict, Albion Prelude i Reunion dostępnymi na Linuksa
Następny artykułOpenJDK dostępna na architekturę AArch64

2 KOMENTARZE

ZOSTAW ODPOWIEDŹ

Proszę wpisać swój komentarz!
Proszę podać swoje imię tutaj