Zabawkowe ramię robota OWI 535 i sterowanie komputerem: Różnice pomiędzy wersjami

Z Technique.pl
Skocz do: nawigacja, szukaj
m
m (Sterowanie poziom 3)
 
(Nie pokazano 48 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
[[Category:Komputery]]
+
[[category:Komputery]]
Zabawkowe ramię robota OWI 535 sterowanie komputerem. To popularny projekt. Jednak niewiele osób które się go podjęły chwali się jego zakończeniem. Spróbujemy powiedzieć dlaczego tak się dzieje.
+
[[category:Drobne porady]]
 
 
 
=Wstęp=
 
=Wstęp=
 
Występuje na rynku zabawka politechniczna - ramię robota, znane m.in. pod nazwą OWI-535.  
 
Występuje na rynku zabawka politechniczna - ramię robota, znane m.in. pod nazwą OWI-535.  
  
Ramie jest analogowo sterowane elektrycznie. Prawie każdemu, kto je widzi wydaje się, że nie ma nic prostszego, niż przerobienie go na sterowane komputerowo. A jednak. W internecie można napotkać sporo wpisów mówiących o rozpoczęciu takiej przeróbki. Jednak filmów dowodzących osiągnięcie pełnego sukcesu projektu - precyzyjnego wykonywania zadanych poleceń lub powtarzalnego wykonywania programu jest już tylko parę.
+
Ramie jest analogowo sterowane elektrycznie. Prawie każdemu kto je widzi wydaje się, że nie ma nic prostszego niż przerobienie go na sterowane komputerowo. A jednak. W internecie można napotkać sporo wpisów mówiących o rozpoczęciu takiej przeróbki. Jednak filmów dowodzących osiągnięcie pełnego sukcesu projektu - precyzyjnego wykonywania zadanych poleceń lub powtarzalnego wykonywania programu jest już tylko parę.
  
 
Dlaczego tak się dzieje? Spróbujemy poniżej odpowiedzieć na to pytanie.
 
Dlaczego tak się dzieje? Spróbujemy poniżej odpowiedzieć na to pytanie.
Linia 13: Linia 12:
  
 
=Prace mechaniczne: Kontrola położenia=
 
=Prace mechaniczne: Kontrola położenia=
Aby komputer mógł precyzyjnie sterować robotem, musi wiedzieć co się z nim dzieje, tzn. w jakiej pozycji jest ramię. Być może najprościej zrobić to montując na przegubach potencjometry. Zwykle ludzie tak to robią i my też tak zrobiliśmy. Można zrobić to na dwa sposoby: zwykle ludzie montują je na zewnątrz lub bardziej elegancko, wbudowując je do wnętrza serwomechanizmów.  
+
Aby komputer mógł precyzyjnie sterować robotem, musi wiedzieć co się z nim dzieje, tzn. w jakiej pozycji jest ramię. Być może najprościej zrobić to montując na przegubach potencjometry. Zwykle ludzie tak to robią i my też tak zrobiliśmy. Można zrobić to na dwa sposoby: montując potencjometry na zewnątrz lub bardziej elegancko, wbudowując je do wnętrza serwomechanizmów. Wybraliśmy drugie rozwiązanie.  
Wybraliśmy drugie rozwiązanie. Montaż potencjometrów powoduje, że do każdego serwomechanizmu i/lub przegubu zaczyna dochodzić nie 2 ale 5 przewodów: standardowe zasilanie silnika, dodatkowe zasilanie potencjometru oraz sygnał zwrotny zależny od pozycji serwomechanizmu/przegubu. Ich montaż zajmuje umownie 2rh.  
+
 
 +
Montaż potencjometrów powoduje, że do każdego serwomechanizmu i/lub przegubu zaczyna dochodzić nie 2 ale 5 przewodów: standardowe zasilanie silnika, dodatkowe zasilanie potencjometru oraz sygnał zwrotny zależny od pozycji serwomechanizmu/przegubu. Ich montaż zajmuje umownie 2rh.  
  
 
[[File:WP_20140814_001-ramie.jpg|600px|center|thumb|Widok poglądowy. Widać dodatkowe przewody do potencjometrów zamontowanych wewnątrz serwomechanizmów.]]
 
[[File:WP_20140814_001-ramie.jpg|600px|center|thumb|Widok poglądowy. Widać dodatkowe przewody do potencjometrów zamontowanych wewnątrz serwomechanizmów.]]
Linia 23: Linia 23:
  
 
=Sterowanie=
 
=Sterowanie=
Standardowo serwomechanizmy ramienia są wyposażone w małe silniki zasilane prądem stałym. Biegunowość zasilania zmienia się zależnie od kierunku pracy. Ramię jest wyposażone w symetryczne zasilanie bateryjne. Od baterii można się uwolnić, ale od symetrycznego zasilania już nie bardzo. Tzn. trzeba się nauczyć z nim żyć. Serwomechanizmy są w zasadniczy sposób związane z  
+
Standardowo serwomechanizmy ramienia są wyposażone w małe silniki zasilane prądem stałym. Biegunowość zasilania zmienia się zależnie od kierunku pracy. Ramię jest wyposażone w symetryczne zasilanie bateryjne. Od baterii można się uwolnić, ale od symetrycznego zasilania już nie bardzo. Tzn. trzeba się nauczyć z nim żyć. Serwomechanizmy są w zasadniczy sposób związane z  
konstrukcją ramienia i zmiana sposobu ich napędu np. na silniki krokowe dla osób odpowiednio zdeterminowanych jest możliwa, ale dla nas takie rozwiązanie nie wchodziło w grę. Brak ingerencji w serwomechanizmy ma też pewną zaletę - nasze ramię pozostaje zgodne z dotychczasowym manualnym analogowym kontrolerem.
+
konstrukcją ramienia. Zmiana sposobu ich napędu np. na silniki krokowe dla osób odpowiednio zdeterminowanych jest możliwa, ale dla nas takie rozwiązanie nie wchodziło w grę. Brak ingerencji w serwomechanizmy ma też pewną zaletę - nasze ramię pozostaje zgodne z dotychczasowym manualnym analogowym kontrolerem.
  
[[File:WP_20140814_004-ramie.jpg|600px|center|thumb|Raspberry Pi, 512 MB, model B - czyli z gniazdem Ethernet i dwoma portami USB.]]
+
[[File:WP_20140814_004-ramie.jpg|600px|center|thumb|Rozgałęzienie wejścia sterowania. Złącze prowadzące do komputera ma dodatkowo wyprowadzoną masę, której nie ma na złączu manualnego kontrolera. Wynika to z symetrycznego systemu zasilania i sterowania.]]
  
Zapewne czytelnicy mają teraz przed oczami co najmniej układ przekaźników lub tranzystorów, ale szczęśliwie jest na sterowanie silnikami inny prosty sposób - układy scalone typu L293B. To proste układy dedykowane do tych celów, często spotykane w zabawkach. Co robią? mają cyfrowe wejście (kierunek i aktywność) i analogowe wyjścia na których przełączają biegunowość zależnie od stanu wejść. Jeden układ potrafi sterować dwoma silniczkami.
+
Zapewne czytelnicy mają teraz przed oczami co najmniej układ przekaźników lub tranzystorów... Szczęśliwie sterowanie silnikami można zrealizować w prostszy sposób - np. układami scalonymi typu L293B. To proste układy dedykowane do tych celów, często spotykane w zabawkach. Co robią? mają cyfrowe wejście (kierunek i aktywność) i analogowe wyjścia na których przełączają biegunowość napięcia zależnie od stanu wejść. Jeden układ potrafi sterować dwoma silniczkami.
  
[[File:WP_20140814_008-ramie.jpg|600px|center|thumb|Rozgałęzienie wejścia sterowania. Złącze prowadzące do komputera ma dodatkowo wyprowadzoną stałą masę, której nie ma na złączu manualnego kontrolera. Wynika to z symetrycznego systemu zasilania i sterowania.]]
+
[[File:WP_20140814_008-ramie.jpg|600px|center|thumb|Płytka ze sterownikami serwomechanizmów L293B.]]
  
Cóż, do wysterowania naszego ramienia (5 serwomechanizmów) będą potrzebne 3 układy scalone tego typu i 10 cyfrowych linii sterujących (lub 12, jeżeli doliczymy oświetlenie). Ilość przewodów rośnie w oczach ;) Do robocizny doliczamy dodatkowe 3rh ;)
+
Do wysterowania naszego ramienia (5 serwomechanizmów) potrzeba 3 układów scalonych tego typu i 10 cyfrowych linii sterujących (lub 12, jeżeli doliczymy oświetlenie). Ilość przewodów rośnie w oczach ;) Do robocizny doliczamy co najmniej dodatkowe 3rh ;)
  
 
=Sterowanie poziom 2=
 
=Sterowanie poziom 2=
W wypadku starego komputera PC należało by nadużyć portu równoległego (LPT). 8 bitów wyjścia + 2 dodatkowe bity sterujące. W wypadku współczesnych komputerów PC trzeba by użyć jakiegoś rozwiązania z USB - jak choćby Arduino - w szczególności, że za chwilę będzie potrzebny 5-cio kanałowy przetwornik analogowo-cyfrowy. My jednak upieramy się, aby do sterowania naszego ramienia użyć komputera Raspberry Pi. Co prawda z jego złącza GPIO dało by się wykrzesać tych 10 linii sterujących, ale wybierzmy bardziej eleganckie rozwiązanie - dodatkowy pośredni układ wejścia/wyjścia MPC23S17. Jak wynika z jego nazwy to układ współpracujący z magistralą SPI. Potencjalnie można by użyć też wersji i2c. Kosztuje nas to dodatkowe 2rh, gdy kupimy taką kartę lub 6rh, gdy zrobimy ją sami (tak jak my... zbudowaliśmy ją wg schematu ze strony dtronics.com).
+
W wypadku starego komputera PC, do sterowania należało by nadużyć portu równoległego (LPT). 8 bitów wyjścia + 2 dodatkowe bity sterujące. W wypadku współczesnych komputerów PC trzeba by użyć jakiegoś rozwiązania z USB - jak choćby Arduino (w szczególności, że będzie jeszcze potrzebny 5-cio kanałowy przetwornik analogowo-cyfrowy). My jednak uparliśmy się aby do sterowania naszego ramienia użyć komputera Raspberry Pi. Co prawda z jego złącza GPIO dało by się wykrzesać tych 10 linii sterujących, ale wybraliśmy bardziej eleganckie rozwiązanie - dodatkowy pośredni układ wejścia/wyjścia MCP23S17. Jak wynika z jego nazwy to układ współpracujący z magistralą SPI. Potencjalnie można użyć też wersji z interfejsem i2c. Kosztuje nas to dodatkowe 2rh, gdy kupimy odpowiednią kartę rozszerzeń lub 6rh, gdy zrobimy ją sami (tak jak my... zbudowaliśmy ją wg schematu ze strony dtronixs.com).
  
 
[[File:WP_20140814_007-ramie.jpg|600px|center|thumb|Karta rozszerzeń z układem wejścia-wyjścia. Karta przetwornika analogowo-cyfrowego jest zamontowana pod nią - wewnątrz obudowy.]]
 
[[File:WP_20140814_007-ramie.jpg|600px|center|thumb|Karta rozszerzeń z układem wejścia-wyjścia. Karta przetwornika analogowo-cyfrowego jest zamontowana pod nią - wewnątrz obudowy.]]
  
 
=Sterowanie poziom 3=
 
=Sterowanie poziom 3=
Potencjalnie możemy już włączać i wyłączać serwomechanizmy. Musimy jeszcze wiedzieć kiedy mamy to robić. Mamy już system czujników/potencjometrów (5 czujników). Podłączamy je do komputera za pomocą przetwornika analogowo-cyfrowego. W naszym wypadku stosujemy kartę "ADC Pi V.1.0" łączoną z komputerem za pomocą magistrali i2c (przypominam, że to Raspberry Pi). Wraz z lutowaniem przewodów i wtyczek podsumujmy tą operację jako dodatkowe 2rh.
+
Potencjalnie można już włączać i wyłączać serwomechanizmy. Musimy jeszcze wiedzieć kiedy ma się to dziać. Mamy już mechanicznie zabudowany system czujników/potencjometrów (5 czujników). Podłączamy je do komputera za pomocą przetwornika analogowo-cyfrowego. W naszym wypadku zastosowaliśmy kartę "ADC Pi V.1.0" firmy ABElectronics, łączoną z komputerem za pomocą magistrali i2c (przypominam, że to Raspberry Pi). Wraz z lutowaniem przewodów i wtyczek podsumujmy tą operację jako dodatkowe 2rh.
  
 
=Półmetek?=
 
=Półmetek?=
Na tym etapie zainwestowaliśmy już w projekt dobre 16-21rh i co najmniej 130$, a ramię nawet się nie rusza. Tzn. co najwyżej można nim nieskoordynowanie poruszać za pomocą jakiegoś IDE lub innego programu zarządzającego wejściem i wyjściem. W tym miejscu kończy się prawdopodobnie 80% projektów, których rozpoczęcie jest ogłaszane w internecie i zapewne 99% tych, których rozpoczęcia nie ogłoszono.
+
Na tym etapie zainwestowaliśmy w projekt dobre 16-21rh i co najmniej 130$, a ramię nawet się nie rusza. Tzn. co najwyżej można nim nieskoordynowanie poruszać za pomocą jakiegoś IDE lub innego programu zarządzającego układami wejścia i wyjścia. Prawdopodobnie w tym miejscu kończy się 80% projektów, których rozpoczęcie jest ogłaszane w internecie i zapewne 99% tych, których rozpoczęcia nie ogłoszono.
  
 
[[File:WP_20140813_001-ramie.jpg|600px|center|thumb|Zestaw ramienia połączony z komputerem i gotowy do pracy.]]
 
[[File:WP_20140813_001-ramie.jpg|600px|center|thumb|Zestaw ramienia połączony z komputerem i gotowy do pracy.]]
  
 
=The Software (Oprogramowanie)=
 
=The Software (Oprogramowanie)=
Aby to wszystko zaczęło działać i przyniosło chociaż trochę satysfakcji musimy napisać własne oprogramowanie. My zrobiliśmy to "z grubej rury". Nasz Rasberry Pi pracuje pod kontrolą systemu ARM Slackware Linux, a nasze oprogramowanie napisaliśmy w języku Ada. Umożliwia ono:
+
Aby to wszystko zaczęło działać i przyniosło chociaż trochę satysfakcji trzeba napisać własne oprogramowanie. My zrobiliśmy to "z grubej rury". Nasz komputer Raspberry Pi pracuje pod kontrolą systemu ARM Slackware Linux, a nasze oprogramowanie napisaliśmy w języku Ada (GNAT). Umożliwia ono:
 
*ręczne sterowanie ramieniem (równolegle ze standardowym kontrolerem),
 
*ręczne sterowanie ramieniem (równolegle ze standardowym kontrolerem),
 
*zapisywanie ustawionych pozycji ramienia w pliku (czyli "rejestracja" programu),
 
*zapisywanie ustawionych pozycji ramienia w pliku (czyli "rejestracja" programu),
Linia 55: Linia 55:
 
*obsługę awaryjnej reakcji na zatrzymanie ramienia (tzn. gdy serwomechanizm jest włączony, a ramię się nie porusza),
 
*obsługę awaryjnej reakcji na zatrzymanie ramienia (tzn. gdy serwomechanizm jest włączony, a ramię się nie porusza),
 
*ignorowanie zakłóceń ;) ,
 
*ignorowanie zakłóceń ;) ,
*podstawową obsługę dynamiki pracy serwomechanizmów (silniczki są małe i szybkoobrotowe - bez dodatkowej obsługi po odłączeniu zasilania potrafią obrócić serwomechanizm nawet o 2-3 stopnie); Dzięki temu uzyskaliśmy błąd odtwarzania pozycji każdego serwomechanizmu mniejszy niż +-0,25 stopnia, przy czym błędy z poszczególnych ruchów (kroków programu) nie sumują się.
+
*podstawową obsługę dynamiki pracy serwomechanizmów (silniczki są małe i szybkoobrotowe - bez dodatkowej obsługi po odłączeniu zasilania potrafią obrócić serwomechanizm siłą rozpędu nawet o 2-3 stopnie); Dzięki tej obsłudze uzyskaliśmy błąd odtwarzania pozycji każdego serwomechanizmu mniejszy niż ok.+-0,25 stopnia, przy czym błędy z poszczególnych ruchów (kroków programu) nie sumują się.
Programu nie będziemy opisywać szczegółowo. Wspomnimy tylko, że każdy serwomechnanizm jest sterowany oddzielnym taskiem. Każdy z tych tasków sprawdza stan swojego serwomechanizmu z częstotliwością 1kHz i z taką częstotliwością może go włączać lub wyłączać. Stan ramienia jest oczywiście na bieżąco dostępny dla wszystkich części programu. Do komunikacji przez magistralę SPI i i2c zostały wykorzystane biblioteki systemowe w języku C - uniwersalna WiringPi (i2c) i, po drobnej modyfikacji (obydwa porty wyjściowe), dedykowana do interfejsu PiFace (SPI). Obsługa protokołu układu scalonego ADC jest własna.
+
Programu nie będziemy opisywać szczegółowo. Wspomnimy tylko, że każdy serwomechanizm jest sterowany oddzielnym taskiem. Każdy z tych tasków sprawdza stan swojego serwomechanizmu z częstotliwością 1kHz i z taką częstotliwością może go włączać lub wyłączać. Stan ramienia jest oczywiście na bieżąco dostępny dla wszystkich części programu. Do komunikacji przez magistralę i2c i SPI zostały wykorzystane biblioteki systemowe w języku C - uniwersalna biblioteka [https://projects.drogon.net/raspberry-pi/wiringpi/ WiringPi] (obsługa magistrali i2c) i, po drobnej modyfikacji (obydwa porty wyjściowe), biblioteka dedykowana do obsługi karty rozszerzeń [http://www.piface.org.uk/products/piface_digital/ PiFace] (obsługa magistrali SPI i układu MCP23S17). Obsługa układu scalonego przetwornika analogowo-cyfrowego (ADC) jest własna (Ada). Natomiast za wyświetlanie siermiężnego UI (interfejsu użytkownika) odpowiada biblioteka [http://www.gnu.org/software/ncurses/ncurses.html Ncurses].
Ile czasu zajęło napisanie tego programu? Od początku do końca ok. 40rh...
+
Ile czasu zajęło napisanie tego programu? Od początku do końca ok. 40rh... Przy czym pewne fragmenty mieliśmy opracowane już wcześniej - jak np. obsługę ADC.
  
 
=Koniec projektu=
 
=Koniec projektu=
Jeżeli wystarczy nam determinacji i jak wszystko pójdzie zgodnie z planem, na koniec będziemy mieli chwilę satysfakcji:
+
Jeżeli wystarczy nam determinacji i wszystko pójdzie zgodnie z planem, na koniec będziemy mieli chwilę satysfakcji:
 
<Center>
 
<Center>
 
{{#widget:YouTube|id=GeDwQdqIz5A}}
 
{{#widget:YouTube|id=GeDwQdqIz5A}}
Linia 66: Linia 66:
  
 
=Podsumowanie=
 
=Podsumowanie=
Nasz projekt zakończył się sukcesem. Wiele innych projektów w internecie nie. Poprzedni rozdział wskazał chyba na podstawową przyczynę dlaczego tak mało projektów tego typu uwieńczył sukces. Część mechaniczna i elektroniczna to co najwyżej połowa projektu. Pozostałe przyczyny wymieniamy poniżej. Cały projekt zajął ok. 56-66rh (projekt został wykonany głównie w czasie
+
Powyższy film dowodzi ;) , że nasz projekt zakończył się sukcesem. Wiele innych projektów, które były ogłaszane w internecie nie. Poprzedni rozdział wskazał chyba na podstawową przyczynę dlaczego tak mało z nich uwieńczył sukces. Część mechaniczna i elektroniczna to co najwyżej połowa pracy. Reszta to oprogramowanie. Poza brakiem oprogramowania lub jego wadami poniżej przedstawiamy, naszym zdaniem, najważniejsze uogólnione przyczyny porażek:
wakacji). Parę lat temu mniej czasu i pracy kosztowało nas dołożenie do niedużej frezarki sterowania CNC. A w omawianym teraz  przypadku mówimy o zabawce...
 
 
 
Podsumowując przyczyny porażek przy tym projekcie należy wymienić:
 
 
*brak samodyscypliny ;) ,
 
*brak samodyscypliny ;) ,
*brak planu, z czego wynika nieprzygotowanie się na ew. trudności (patrz niżej), a może nawet sam fakt rozpoczęcie projektu ;) ,
+
*brak planu, z czego wynika nieprzygotowanie się na ew. trudności (patrz niżej), a może nawet sam fakt rozpoczęcia projektu ;) ,
 
*błędy w połączeniach elektrycznych - w tym projekcie ilość przewodów i połączeń rośnie dość szybko,
 
*błędy w połączeniach elektrycznych - w tym projekcie ilość przewodów i połączeń rośnie dość szybko,
 
*brak dokumentacji wykonawczej - co uniemożliwia diagnostykę w razie wystąpienia błędów i problemów.
 
*brak dokumentacji wykonawczej - co uniemożliwia diagnostykę w razie wystąpienia błędów i problemów.
 
Dodatkowo należy jeszcze wymienić:
 
Dodatkowo należy jeszcze wymienić:
*niewystarczająca wiedza i umiejętności elektroniczne - standardowy zestaw ramienia może złożyć nawet laik lub nastolatek, ale połączenie wszystkich elementów systemu sterowanego komputerem nie jest już proste,
+
*niewystarczającą wiedzę i umiejętności elektroniczne - standardowy zestaw ramienia może sprawnie złożyć nawet laik lub nastolatek, ale połączenie wszystkich elementów systemu sterowanego komputerem nie jest już proste,
*niewystarczająca wiedza i umiejętności programistyczne,
+
*niewystarczającą wiedzę i umiejętności programistyczne,
*niewystarczająca wiedza i umiejętności dotyczące wykorzystywanego komputera i innego podłączonego do niego sprzętu,
+
*niewystarczającą wiedzę i umiejętności dotyczące wykorzystywanej platformy sprzętowej - komputera i podłączonych do niego akcesoriów,
*niewystarczająca znajomość fizyki ;)
+
*niewystarczającą znajomość fizyki ;)
 
*brak czasu.
 
*brak czasu.
Jak widać jest to skomplikowany projekt łączący ze sobą wiele dziedzin wiedzy. Stanowczo odradzamy go osobom nie mającym wystarczającej wiedzy i umiejętności, a przede wszystkim dużej ilości wolnego czasu. Z drugiej strony, przy tym projekcie można się bardzo dużo nauczyć.
+
Realizacja całego projektu zajęła ok. 56-66rh (projekt został wykonany głównie w czasie wakacji). Parę lat temu znacznie mniej czasu i energii kosztowało nas dołożenie do niedużej frezarki sterowania CNC. A w omawianym teraz przypadku mówimy o zabawce...
 +
 
 +
Jak widać jest to skomplikowany i czasochłonny projekt łączący ze sobą wiele dziedzin wiedzy. Stanowczo odradzamy go osobom nie mającym wystarczającej wiedzy i umiejętności, a przede wszystkim dużej ilości wolnego czasu. Z drugiej strony, przy tym projekcie można się bardzo dużo nauczyć. Z trzeciej strony, do nauki można sobie znaleźć/wymyślić projekt np. zawierający tylko jeden serwomechanizm, a nie pięć... Nie da się ukryć, że całe przedsięwzięcie nie jest warte poświęconego mu czasu...
  
  

Aktualna wersja na dzień 09:08, 2 wrz 2014

Wstęp

Występuje na rynku zabawka politechniczna - ramię robota, znane m.in. pod nazwą OWI-535.

Ramie jest analogowo sterowane elektrycznie. Prawie każdemu kto je widzi wydaje się, że nie ma nic prostszego niż przerobienie go na sterowane komputerowo. A jednak. W internecie można napotkać sporo wpisów mówiących o rozpoczęciu takiej przeróbki. Jednak filmów dowodzących osiągnięcie pełnego sukcesu projektu - precyzyjnego wykonywania zadanych poleceń lub powtarzalnego wykonywania programu jest już tylko parę.

Dlaczego tak się dzieje? Spróbujemy poniżej odpowiedzieć na to pytanie.

Prace mechaniczne: Ramię robota

Ramię jest sprzedawane w postaci zestawu do samodzielnego montażu. To starannie opracowany zestaw. Jego złożenie nie jest skomplikowane, ale czasochłonne. Zajmuje ok. 6-8rh (roboczo-godzin). Umiejętność lutowania nie jest potrzebna.

Prace mechaniczne: Kontrola położenia

Aby komputer mógł precyzyjnie sterować robotem, musi wiedzieć co się z nim dzieje, tzn. w jakiej pozycji jest ramię. Być może najprościej zrobić to montując na przegubach potencjometry. Zwykle ludzie tak to robią i my też tak zrobiliśmy. Można zrobić to na dwa sposoby: montując potencjometry na zewnątrz lub bardziej elegancko, wbudowując je do wnętrza serwomechanizmów. Wybraliśmy drugie rozwiązanie.

Montaż potencjometrów powoduje, że do każdego serwomechanizmu i/lub przegubu zaczyna dochodzić nie 2 ale 5 przewodów: standardowe zasilanie silnika, dodatkowe zasilanie potencjometru oraz sygnał zwrotny zależny od pozycji serwomechanizmu/przegubu. Ich montaż zajmuje umownie 2rh.

Widok poglądowy. Widać dodatkowe przewody do potencjometrów zamontowanych wewnątrz serwomechanizmów.
Konstrukcja serwomechanizmu chwytaka uniemożliwia zabudowę potencjometru w jego wnętrzu. Na zdjęciu nasze autorskie rozwiązanie z potencjometrem suwakowym.

Co dalej?

Sterowanie

Standardowo serwomechanizmy ramienia są wyposażone w małe silniki zasilane prądem stałym. Biegunowość zasilania zmienia się zależnie od kierunku pracy. Ramię jest wyposażone w symetryczne zasilanie bateryjne. Od baterii można się uwolnić, ale od symetrycznego zasilania już nie bardzo. Tzn. trzeba się nauczyć z nim żyć. Serwomechanizmy są w zasadniczy sposób związane z konstrukcją ramienia. Zmiana sposobu ich napędu np. na silniki krokowe dla osób odpowiednio zdeterminowanych jest możliwa, ale dla nas takie rozwiązanie nie wchodziło w grę. Brak ingerencji w serwomechanizmy ma też pewną zaletę - nasze ramię pozostaje zgodne z dotychczasowym manualnym analogowym kontrolerem.

Rozgałęzienie wejścia sterowania. Złącze prowadzące do komputera ma dodatkowo wyprowadzoną masę, której nie ma na złączu manualnego kontrolera. Wynika to z symetrycznego systemu zasilania i sterowania.

Zapewne czytelnicy mają teraz przed oczami co najmniej układ przekaźników lub tranzystorów... Szczęśliwie sterowanie silnikami można zrealizować w prostszy sposób - np. układami scalonymi typu L293B. To proste układy dedykowane do tych celów, często spotykane w zabawkach. Co robią? mają cyfrowe wejście (kierunek i aktywność) i analogowe wyjścia na których przełączają biegunowość napięcia zależnie od stanu wejść. Jeden układ potrafi sterować dwoma silniczkami.

Płytka ze sterownikami serwomechanizmów L293B.

Do wysterowania naszego ramienia (5 serwomechanizmów) potrzeba 3 układów scalonych tego typu i 10 cyfrowych linii sterujących (lub 12, jeżeli doliczymy oświetlenie). Ilość przewodów rośnie w oczach ;) Do robocizny doliczamy co najmniej dodatkowe 3rh ;)

Sterowanie poziom 2

W wypadku starego komputera PC, do sterowania należało by nadużyć portu równoległego (LPT). 8 bitów wyjścia + 2 dodatkowe bity sterujące. W wypadku współczesnych komputerów PC trzeba by użyć jakiegoś rozwiązania z USB - jak choćby Arduino (w szczególności, że będzie jeszcze potrzebny 5-cio kanałowy przetwornik analogowo-cyfrowy). My jednak uparliśmy się aby do sterowania naszego ramienia użyć komputera Raspberry Pi. Co prawda z jego złącza GPIO dało by się wykrzesać tych 10 linii sterujących, ale wybraliśmy bardziej eleganckie rozwiązanie - dodatkowy pośredni układ wejścia/wyjścia MCP23S17. Jak wynika z jego nazwy to układ współpracujący z magistralą SPI. Potencjalnie można użyć też wersji z interfejsem i2c. Kosztuje nas to dodatkowe 2rh, gdy kupimy odpowiednią kartę rozszerzeń lub 6rh, gdy zrobimy ją sami (tak jak my... zbudowaliśmy ją wg schematu ze strony dtronixs.com).

Karta rozszerzeń z układem wejścia-wyjścia. Karta przetwornika analogowo-cyfrowego jest zamontowana pod nią - wewnątrz obudowy.

Sterowanie poziom 3

Potencjalnie można już włączać i wyłączać serwomechanizmy. Musimy jeszcze wiedzieć kiedy ma się to dziać. Mamy już mechanicznie zabudowany system czujników/potencjometrów (5 czujników). Podłączamy je do komputera za pomocą przetwornika analogowo-cyfrowego. W naszym wypadku zastosowaliśmy kartę "ADC Pi V.1.0" firmy ABElectronics, łączoną z komputerem za pomocą magistrali i2c (przypominam, że to Raspberry Pi). Wraz z lutowaniem przewodów i wtyczek podsumujmy tą operację jako dodatkowe 2rh.

Półmetek?

Na tym etapie zainwestowaliśmy w projekt dobre 16-21rh i co najmniej 130$, a ramię nawet się nie rusza. Tzn. co najwyżej można nim nieskoordynowanie poruszać za pomocą jakiegoś IDE lub innego programu zarządzającego układami wejścia i wyjścia. Prawdopodobnie w tym miejscu kończy się 80% projektów, których rozpoczęcie jest ogłaszane w internecie i zapewne 99% tych, których rozpoczęcia nie ogłoszono.

Zestaw ramienia połączony z komputerem i gotowy do pracy.

The Software (Oprogramowanie)

Aby to wszystko zaczęło działać i przyniosło chociaż trochę satysfakcji trzeba napisać własne oprogramowanie. My zrobiliśmy to "z grubej rury". Nasz komputer Raspberry Pi pracuje pod kontrolą systemu ARM Slackware Linux, a nasze oprogramowanie napisaliśmy w języku Ada (GNAT). Umożliwia ono:

  • ręczne sterowanie ramieniem (równolegle ze standardowym kontrolerem),
  • zapisywanie ustawionych pozycji ramienia w pliku (czyli "rejestracja" programu),
  • odtwarzanie zapamiętanych pozycji ramienia z pliku (czyli wykonywanie programu), oczywiście przy wykorzystaniu sprzężenia zwrotnego,
  • kontrola nieprzekraczania skrajnych pozycji pracy serwomechanizmów,
  • obsługę awaryjnej reakcji na zatrzymanie ramienia (tzn. gdy serwomechanizm jest włączony, a ramię się nie porusza),
  • ignorowanie zakłóceń ;) ,
  • podstawową obsługę dynamiki pracy serwomechanizmów (silniczki są małe i szybkoobrotowe - bez dodatkowej obsługi po odłączeniu zasilania potrafią obrócić serwomechanizm siłą rozpędu nawet o 2-3 stopnie); Dzięki tej obsłudze uzyskaliśmy błąd odtwarzania pozycji każdego serwomechanizmu mniejszy niż ok.+-0,25 stopnia, przy czym błędy z poszczególnych ruchów (kroków programu) nie sumują się.

Programu nie będziemy opisywać szczegółowo. Wspomnimy tylko, że każdy serwomechanizm jest sterowany oddzielnym taskiem. Każdy z tych tasków sprawdza stan swojego serwomechanizmu z częstotliwością 1kHz i z taką częstotliwością może go włączać lub wyłączać. Stan ramienia jest oczywiście na bieżąco dostępny dla wszystkich części programu. Do komunikacji przez magistralę i2c i SPI zostały wykorzystane biblioteki systemowe w języku C - uniwersalna biblioteka WiringPi (obsługa magistrali i2c) i, po drobnej modyfikacji (obydwa porty wyjściowe), biblioteka dedykowana do obsługi karty rozszerzeń PiFace (obsługa magistrali SPI i układu MCP23S17). Obsługa układu scalonego przetwornika analogowo-cyfrowego (ADC) jest własna (Ada). Natomiast za wyświetlanie siermiężnego UI (interfejsu użytkownika) odpowiada biblioteka Ncurses. Ile czasu zajęło napisanie tego programu? Od początku do końca ok. 40rh... Przy czym pewne fragmenty mieliśmy opracowane już wcześniej - jak np. obsługę ADC.

Koniec projektu

Jeżeli wystarczy nam determinacji i wszystko pójdzie zgodnie z planem, na koniec będziemy mieli chwilę satysfakcji:

Podsumowanie

Powyższy film dowodzi ;) , że nasz projekt zakończył się sukcesem. Wiele innych projektów, które były ogłaszane w internecie nie. Poprzedni rozdział wskazał chyba na podstawową przyczynę dlaczego tak mało z nich uwieńczył sukces. Część mechaniczna i elektroniczna to co najwyżej połowa pracy. Reszta to oprogramowanie. Poza brakiem oprogramowania lub jego wadami poniżej przedstawiamy, naszym zdaniem, najważniejsze uogólnione przyczyny porażek:

  • brak samodyscypliny ;) ,
  • brak planu, z czego wynika nieprzygotowanie się na ew. trudności (patrz niżej), a może nawet sam fakt rozpoczęcia projektu ;) ,
  • błędy w połączeniach elektrycznych - w tym projekcie ilość przewodów i połączeń rośnie dość szybko,
  • brak dokumentacji wykonawczej - co uniemożliwia diagnostykę w razie wystąpienia błędów i problemów.

Dodatkowo należy jeszcze wymienić:

  • niewystarczającą wiedzę i umiejętności elektroniczne - standardowy zestaw ramienia może sprawnie złożyć nawet laik lub nastolatek, ale połączenie wszystkich elementów systemu sterowanego komputerem nie jest już proste,
  • niewystarczającą wiedzę i umiejętności programistyczne,
  • niewystarczającą wiedzę i umiejętności dotyczące wykorzystywanej platformy sprzętowej - komputera i podłączonych do niego akcesoriów,
  • niewystarczającą znajomość fizyki ;)
  • brak czasu.

Realizacja całego projektu zajęła ok. 56-66rh (projekt został wykonany głównie w czasie wakacji). Parę lat temu znacznie mniej czasu i energii kosztowało nas dołożenie do niedużej frezarki sterowania CNC. A w omawianym teraz przypadku mówimy o zabawce...

Jak widać jest to skomplikowany i czasochłonny projekt łączący ze sobą wiele dziedzin wiedzy. Stanowczo odradzamy go osobom nie mającym wystarczającej wiedzy i umiejętności, a przede wszystkim dużej ilości wolnego czasu. Z drugiej strony, przy tym projekcie można się bardzo dużo nauczyć. Z trzeciej strony, do nauki można sobie znaleźć/wymyślić projekt np. zawierający tylko jeden serwomechanizm, a nie pięć... Nie da się ukryć, że całe przedsięwzięcie nie jest warte poświęconego mu czasu...


Autor: dr inż. Szymon Dowkontt


Powrót do "Strony głównej"


Powrót do "Drobnych porad"


Powrót do "Wydania 2014"