Pająk: Różnice pomiędzy wersjami

Z RoboCity
(Sterowanie serwem za pośrednictwem układu PCA9685 w pythonie)
(Opis modułu)
Linia 60: Linia 60:
 
== Moduł z układem PCA9685 ==
 
== Moduł z układem PCA9685 ==
 
=== Opis modułu ===
 
=== Opis modułu ===
 +
Najbardziej kolorową i rzucającą się w oczy częścią modułu jest rząd 16, w grupach po 4, potrójnych pinów do podłączania serw. Jak zwykle w przypadku serw pin czarny oznacza masę, czerwony napięcie zasilania, a żółty linię sterującą, na której podawany jest sygnał PWM. Jeśli kabelek serwa nie ma dokładnie tych samych kolorów można się zwykle kierować jasnością kolorów. Czarny bywa zastępowany brązowym, żółty białym, stosunkowo najrzadziej zmieniany jest kolor czerwony. Jeśli kabel serwa ma zupełnie inne kolory najlepiej upewnić się w jego specyfikacji jak producent rozmieścił wyjścia i ewentualnie dopasować ich rozkład do płytki PCA9685 przekładając styki we wtyczce.
 +
 
Na krótszych brzegach płytka ma wyprowadzone wyjścia, którymi możemy ją połączyć z maliną oraz następnymi płytkami PCA9685:
 
Na krótszych brzegach płytka ma wyprowadzone wyjścia, którymi możemy ją połączyć z maliną oraz następnymi płytkami PCA9685:
 
* GND — masa zasilania
 
* GND — masa zasilania
Linia 65: Linia 67:
 
* SCL i SDA — linie zegarowa i danych magistrali I2C
 
* SCL i SDA — linie zegarowa i danych magistrali I2C
 
* VCC — zasilanie częsci logicznej 3-5V
 
* VCC — zasilanie częsci logicznej 3-5V
* V+ — zasilanie serw, max 6V; do zasilania dużej ilości serw lepiej skorzystać z zielonego łącza w centralnej części płytki, które pozwala podłączyć grubsze przewody wymagane przy większym natężeniu (gdyby do każdego z 16 wyjść podłączyć serwo pobierające 2A podawanie zasilania przez cienki pin V+ obciążyło by go prądem 32A co powodowałoby duże straty napięcia)
+
* V+ — zasilanie serw, max 6V; nie należy przeciążać tego pinu (parz niżej)
 +
 
 +
 
 +
Choć łącze na brzegu płytki posiada pin V+ przeznaczony jako źródło zasilania dla silników serw, przy dużej ilości serw, albo dla dużych serw wymagających większej mocy, żeby dostarczyć napięcie zasilania części mechanicznych lepiej skorzystać z zielonego łącza w centralnej części płytki. Pozwala ono podłączyć grubsze przewody i dobrze je przymocować przykręcanymi stykami. Dobre połączenie i grubsze przewody pozwolą uniknąć strat napięcia zasilania. W przypadku pinu V+ możemy przyjąć, że ogólny opór tego połączenia wynosi około '''0.02Ω''' gdybyśmy więc chcieli przez nie zasilać 16 serw, każde po 1.5 A, przez pin płynąłby prąd 24A. Z prawa Ohma możemy policzyć, że w takim przypadku na tym połączeniu wystąpiłby spadek napięcia
 +
 
 +
 
 +
'''U = I ‧ R ''' = 24A ‧ 0.02Ω = 0.48V
 +
 
 +
Czyli napięcie spadłoby o prawie 10% jeśli zasilalibyśmy serwa ze źródła 6V! Żeby tego uniknąć lepiej korzystać z przeznaczonego dla dużych prądów podłączenia w środku płytki. Po jednej stronie tego łącza znajduje się napis '''GND''' oznaczający gdzie należy połączyć ujemny biegun baterii (lub innego zasilacza).
  
 
=== Połączenie maliny z modułem ===
 
=== Połączenie maliny z modułem ===

Wersja z 17:56, 2 lut 2019

Projekt robota wykorzystującego serwa (serwomechanizmy).

Do czego zmierzamy

Chodzi o stworzenie przykładowego robota używającego serw jako źródła siły mechanicznej. Dzięki temu można poznać sposób obsługi kolejnego typowego elementu, z którego buduje się mniejsze i większe maszyny. Zgodnie z nazwą zadaniem jest zbudowanie prostej maszyny kroczącej, czyli modelu pająka. Warto zwrócić uwagę, że nazwa dotyczy tylko trywialnego podobieństwa. Prawdziwe pająki, potrafiące konstruować wyrafinowane pajęczyny, czaić się na swoje ofiary, wykorzystywać zasadę obejścia (nie każdy pies potrafi ominąć płot chcąc się dostać do przedmiotu leżącego prawie z zasięgu pyska), posiadające nawet po kilkanaście par oczu, realizujące przeróżne rytuały godowe, są tak skomplikowane, że nazywanie pająkiem kilkunastu serw na zawiasach jest raczej pocieszne. Niemniej jednak od czegoś trzeba zacząć...

Mózgiem robota będzie Malina Zero W. Ponieważ pająk będzie miał 6 niezależnych nóg, a każda noga trzy stawy, będziemy potrzebowali 18 serw do zginania stawów. Zauważ, że staw nogi bez serwa pozwalającego ustawić ten staw pod zadanym kątem, ustawiałby się swobodnie w przypadkowych pozycjach i byłby mało przydatny. Z drugiej strony jeśli nogi mają być niezależne, każda musi posiadać swój własny zestaw serw. Dlatego będziemy potrzebowali tyle serw ile stawów będzie miał nasz stawonóg. Byłoby trudno samą Maliną wykonać sterowanie 18 serwami, o ile to w ogóle możliwe. Dlatego dodatkowym układem jaki zastosujemy będą płytki PCA9685 pozwalające wygodnie sterować 12 serwami na raz. Do komunikacji pomiędzy Maliną a płytkami sterowników serw posłuży łącze I²C. Poniższy film przedstawia ogólny schemat postępowania żeby sterować serwem z maliny z pośrednictwem układu PCA9685, co jak widać jest dziecinnie proste :)


Konstrukcja mechaniczna i zasada działania serwa modelarskiego

Łącze I²C

I²C pozwala połączyć układy cyfrowe (dwa lub więcej) dając im możliwość wymiany informacji pomiędzy sobą. Jest ono powszechnie używane we współczesnej elektronice. Na przykład w telefonach komórkowych główny procesor odczytuje informacje i steruje pracą układu scalonego z akcelerometrem przy pomocy tego połączenia. Jego zaletą jest względnie duża prędkość przesyłania danych (setki tysięcy bitów/s) oraz oszczędność ponieważ wymaga tylko dwóch przewodów: - SCL — czyli linii taktującej transmisję (ten sygnał synchronizuje układ nadawczy i odbiorczy) - SDA — czyli linii transmisji danych (tędy, w rytm linii SCL, słane są kolejne informacje)

Malina ma wyprowadzoną linię I²C na złącze 40-pinowe, ale domyślnie jego obsługa jest wyłączona. Żeby ją włączyć korzystamy z konfiguratora


sudo raspi-config


i w nim wybieramy Interfacing options, a potem I2C które włączamy i wychodzimy z programu.


Do pracy z łączem I²C przydatne nam będą również programy narzędziowe przeznaczone dla konsoli. Instalujemy je poleceniem:


sudo apt install i2c-tools


Jeśli wszystko przebiegło pomyślnie (możliwe, że będzie potrzebny restart maliny) powinniśmy być w stanie wyświetlić wszystkie urządzenia podłączone do linii I²C numer 1 poleceniem:


i2cdetect -y 1


które powinno wyświetlić następującą tabelkę:


     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --     


Oczywiście ponieważ nie podłączaliśmy jeszcze żadnego urządzenia do linii 1 lista jest pusta. Jednak jej pojawienie się pokazuje, że obsługa I²C jest prawidłowo skonfigurowana. Teraz można zacząć z tej linii korzystać podłączając zewnętrzne urządzenia do maliny i komunikować się z nimi.

Moduł z układem PCA9685

Opis modułu

Najbardziej kolorową i rzucającą się w oczy częścią modułu jest rząd 16, w grupach po 4, potrójnych pinów do podłączania serw. Jak zwykle w przypadku serw pin czarny oznacza masę, czerwony napięcie zasilania, a żółty linię sterującą, na której podawany jest sygnał PWM. Jeśli kabelek serwa nie ma dokładnie tych samych kolorów można się zwykle kierować jasnością kolorów. Czarny bywa zastępowany brązowym, żółty białym, stosunkowo najrzadziej zmieniany jest kolor czerwony. Jeśli kabel serwa ma zupełnie inne kolory najlepiej upewnić się w jego specyfikacji jak producent rozmieścił wyjścia i ewentualnie dopasować ich rozkład do płytki PCA9685 przekładając styki we wtyczce.

Na krótszych brzegach płytka ma wyprowadzone wyjścia, którymi możemy ją połączyć z maliną oraz następnymi płytkami PCA9685:

  • GND — masa zasilania
  • OE — podanie stanu wysokiego, odłączy wszystkie wyjścia
  • SCL i SDA — linie zegarowa i danych magistrali I2C
  • VCC — zasilanie częsci logicznej 3-5V
  • V+ — zasilanie serw, max 6V; nie należy przeciążać tego pinu (parz niżej)


Choć łącze na brzegu płytki posiada pin V+ przeznaczony jako źródło zasilania dla silników serw, przy dużej ilości serw, albo dla dużych serw wymagających większej mocy, żeby dostarczyć napięcie zasilania części mechanicznych lepiej skorzystać z zielonego łącza w centralnej części płytki. Pozwala ono podłączyć grubsze przewody i dobrze je przymocować przykręcanymi stykami. Dobre połączenie i grubsze przewody pozwolą uniknąć strat napięcia zasilania. W przypadku pinu V+ możemy przyjąć, że ogólny opór tego połączenia wynosi około 0.02Ω gdybyśmy więc chcieli przez nie zasilać 16 serw, każde po 1.5 A, przez pin płynąłby prąd 24A. Z prawa Ohma możemy policzyć, że w takim przypadku na tym połączeniu wystąpiłby spadek napięcia


U = I ‧ R = 24A ‧ 0.02Ω = 0.48V

Czyli napięcie spadłoby o prawie 10% jeśli zasilalibyśmy serwa ze źródła 6V! Żeby tego uniknąć lepiej korzystać z przeznaczonego dla dużych prądów podłączenia w środku płytki. Po jednej stronie tego łącza znajduje się napis GND oznaczający gdzie należy połączyć ujemny biegun baterii (lub innego zasilacza).

Połączenie maliny z modułem

Połączenie maliny zero z modułem PCA9685 używające do komunikacji kanału i2c-1 maliny.

Sterowanie serwem za pośrednictwem układu PCA9685 w pythonie

Do pracy z układem PCA9685 użyjemy modułu adafruit-pca9685, który zawiera różne funkcje pozwalające wykorzystywać możliwości chipa PCA9685 bez wnikania w szczegóły jego działania z poziomu kodu zapisanego w pythonie. Moduł można zainstalować korzystając z menadżera pakietów pythona pip poleceniem:


sudo pip install adafruit-pca9685

Przykładowy kod pythona korzystający z tego modułu można zobaczyć na stronie projektu Adafruit_Python_PCA9685. Program ten przestawia serwo podłączone do kanału 0 płytki PCA9685 między dwoma pozycjami co sekundę (jego działanie widać na końcu filmu z początku strony).