wersja mobilna | kontakt z nami

Arduino w roli sterownika pozycjonera kamery

Numer: Październik/2015

Wiele drogich kamer do systemów monitorowania jest wyposażonych w zamontowany fabrycznie napęd realizujący funkcje pan/tilt/zoom. W podobny napęd, niestety bez zoomu optycznego, możemy wyposażyć dowolną kamerę. W artykule opisano manipulator do kamery lub aparatu wykonany na bazie gotowych komponentów. Jest to rodzaj statywu ustawianego w dwóch płaszczyznach, sterowanego joystickiem, mającego możliwość zaprogramowania sekwencji ruchów.

Pobierz PDFMateriały dodatkowe

Część mechaniczną wykonano z dwóch serwomechanizmów połączonych ze sobą (sklejonych) jak na fotografii 1. Jeden odpowiada za ruch w płaszczyźnie poziomej, drugi w płaszczyźnie pionowej. W trakcie sklejania należy zwrócić uwagę czy serwomechanizmy mogą swobodnie poruszać się w całym zakresie, czy nie są blokowane przez pozostałe elementy mechaniczne oraz czy są równo ustawione. Do serwomechnizmów należy dołączyć duży, płaski element, który będzie pełnił rolę podstawki lub elementu mocującego oraz np. metalowy kątownik, na którym zostanie zamocowana sama kamera.

Fotografia 1. Sposób przyklejenia serwomechanizmów: a) serwomechanizm przyklejony do uchwytu kamery, b) sposób sklejenia dwóch serwomechanizmów, c) przyklejenie zespołu serwomechanizmów do podstawy, d) sposób zamocowania kamery

Serwomechanizm

Serwomechanizm to silnik z przekładnią i układem sterującym skonfigurowanymi w taki sposób, aby umożliwić ruch osi w pewnym zakresie, najczęściej 180 stopni. Serwomechanizm jest kontrolowany za pomocą przebiegu impulsowego o ściśle określonych parametrach. Położenie osi jest proporcjonalne do czasu trwania impulsu sterującego, co pokazano na rysunku 2.

Większość serwomechanizmów wymaga zasilania napięciem z zakresu 4,5...6 V. W stanie spoczynku pobiera niewielki prąd rzędu kilkudziesięciu miliamperów. W czasie przemieszczania się lub gdy ramie jest obciążone (nawet nie musi być w ruchu), silnik napędu może pobierać znaczny prąd, nawet kilka amperów.

Rysunek 2. Złącze oraz impulsy sterujące serwomechanizmem

Fotografia 3. Moduł ArduinoUno

Dlatego bardzo ważne jest zapewnienie odpowiednio wydajnego zasilania, a najlepszym rozwiązaniem jest zastosowanie oddzielnego zasilacza specjalnie dla serwomechanizmu. W proponowanym rozwiązaniu zastosowano serwomechanizmy modelarskie klasy "micro", a współpracująca kamera jest lekka, więc nie użyto odrębnego zasilacza. Całość należy jednak zasilać z zasilacza, a nie z portu USB, który może mieć zbyt małą wydajność prądową oraz dołączyć dodatkowy kondensator filtrujący zasilanie o dużej pojemności.

Panel sterujący

Jako panel sterujący zastosowano pokazany na fotografii 3 moduł AVT1618, który zawiera następujące elementy umożliwiające wygodną manipulację kamerą: joystick, dwa przyciski, dwie diody LED oraz wyprowadzone złącza dla serwomechanizmów.

Rysunek 4. Działanie joysticka analogowego

Głównym elementem panelu sterującego manipulatora jest joystick analogowy, zbliżonych budową do stosowanych w padach do konsoli PS. Drążek joysticka jest sprzęgnięty z osiami dwóch potencjometrów umieszczonych prostopadle, a ruch drążka zmienia położenie suwaków tych potencjometrów. Jeśli do potencjometrów doprowadzimy zasilanie, to na wyjściach otrzymamy dwa napięcia, jedno odpowiadające położeniu na umownej osi x, a drugie na umownej osi y. Zasadę działania oraz wygląd panelu pokazano na rysunku 4.

Kontroler

"Mózgiem" urządzenia jest płytka Arduino Uno. Ma ona tę zaletę, że kupiona u sprawdzonego dostawcy, na pewno działa i nie trzeba marnować czasu na jej uruchomienie. Sposób połączenia poszczególnych komponentów pokazano na fotografii 5. Gdyby fotografie były niewystarczające, to można posiłkować się schematem zamieszczonym na rysunku 6.

Fotografia 5. Sposób przyłączenia płytki ArduinoUno: a) widok złącza zasilania i serwomechanizmów, b) widok mechanizmu i sterownika

Rysunek 6. Schemat ideowy

Oprogramowanie

Listing 1. Odczyt wartości analogowych i ustawianie serwomechanizmów - wersja uproszczona

Oprogramowanie sterujące manipulatorem zostało wykonane w środowisku Arduino IDE. Do wygenerowania impulsów sterujących serwomechanizmem należałoby użyć timera zawartego w peryferiach procesora i uruchomić odpowiednie przerwania, ale Adruino ma gotowe rozwiązanie - jest nim biblioteka servo.h, którą dołączymy do projektu.

Odczyt położenia suwaków potencjometrów joysticka zostanie wykonany za pomocą funkcji analogRead.

W celu przetestowania pracy płytki tworzymy nieskomplikowany program, jak na listingu 1. Kompilujemy i przesyłamy do płytki Arduino.

Po załadowaniu programu urządzenie działa, ale można zauważyć, że ruch serwomechanizmów jest gwałtowny i szarpany, zwłaszcza przy szybszym ruchu joysticka. Dzieje się tak, ponieważ serwomechanizmy dążą do jak najszybszego osiągnięcia zadanego położenia.

Może się zdarzyć, że płytka "zawiesi się" - to właśnie efekt gwałtownego poboru prądu przez szybko pracujące serwomechanizmy. W kolejnym programie "zmusimy" je do nieco wolniejszej pracy, dzięki czemu ruch stanie się bardziej płynny i unikniemy zawieszania się płytki. Zmieniamy nieco główną pętlę programu, jak pokazano listingu 2.

Listing 2. Zmodyfikowany program - spowolnienie pracy serwomechanizmów

Po załadowaniu programu z listingu 2, widzimy, że teraz serwomechanizmy pracują dużo wolniej, ich szybkość możemy regulować wartością opóźnienia na końcu głównej pętli programu. Ponadto, zamieniliśmy parametry polecenia map, dzięki czemu ruch w płaszczyźnie x jest zgodny z ruchem joysticka.

Na koniec sprawimy by nasz manipulator sam wykonywał zapamiętane sekwencje ruchów, co może przydać się do monitorowania obiektów.

Do tego celu przede wszystkim będzie potrzebny bardziej rozbudowany interfejs użytkownika, do którego dodamy obsługę dwóch przycisków i diod LED. Do programu dopisujemy linie kodu definiujące zmienne określające, do których wyprowadzeń są dołączone komponenty:

int led1_pin = 6;
int led2_pin = 5;
int button1_pin = 3;
int button2_pin = 4;

W sekcji setup() dopisujemy konfigurację nowych wyprowadzeń:

pinMode(led1_pin, OUTPUT);
pinMode(led2_pin, OUTPUT);
pinMode(button1_pin, INPUT_PULLUP);
pinMode(button2_pin, INPUT_PULLUP);

Tworzymy funkcje ButtonCheck() oraz LedState() obsługujące nowe komponenty - zamieszczono je na listingu 3.

Listing 3. Funkcje ButtonCheck() oraz LedState()

Listing 4. Pętla główna programu po modyfikacjach

Teraz potrzebujemy dodatkowych zmiennych, które zapamiętają sekwencje. Wykorzystamy do tego tablice oraz dwie zmienne pomocnicze:

int pos_go; //funkcja replay - gdy 1 to odtwarza sekwencje
int pos_step; //numer położenia
int pos_x[4]; //tablica położeń na płaszczyźnie poziomej
int pos_y[4]; //tablica położeń na płaszczyźnie pionowej

Listing 5. Procedury PositionSet() oraz PositionNext()

Ostatecznie główna pętla programu będzie wyglądała jak na listingu 4.

Procedury odpowiedzialne za wywoływanie sekwencji ruchów pokazano na listingu 5. PositionSet() służy do zapamiętania aktualnych wartości położenia x i y w tablicach sekwencji, natomiast PositionNext() służy do przełączania kolejnych sekwencji po określonym czasie, po wykonaniu ostatniej sekwencji powraca do pierwszej.

Po załadowaniu programu za pomocą joysticka sterujemy położeniem statywu. Gdy naciśniemy przycisk "1", to zostaje zapamiętane aktualne położenie, jako pierwsze położenie w sekwencji oraz zaświeci się dioda LED1 sygnalizując, że należy wprowadzić kolejne pozycje. Po wprowadzeniu czterech pozycji dioda LED1 zgaśnie. Teraz, przyciskając przycisk 2, uruchamiamy odtwarzanie sekwencji. Statyw będzie ustawiał się po kolei w czterech wcześniej ustawionych pozycjach.

Pełne źródło programu dostępne jest w materiałach dodatkowych do tego artykułu.

KS

Pozostałe artykuły

Sterownik do statywu 360°

Numer: Grudzień/2015

Urządzenie służy do sterowania statywem przytwierdzonym do silnika krokowego. Statyw będzie obracał się zawsze o stały kąt, który można ustawić. Po każdym częściowym obrocie sterownik zatrzymuje statyw i może wyzwolić spust aparatu fotograficznego. Taki proces będzie przebiegał automatycznie aż do pełnego obrotu - 360 stopni. Efektem będzie seria kilku - kilkudziesięciu fotografii prezentujących obiekt z perspektywy okręgu. ...

Pi-Pocket - przenośna konsola do gier z Raspberry Pi

Numer: Grudzień/2015

Zapewne większość czytelników EP pamięta emocje i pierwsze konsole do gier. Ówczesne gry, choć nie zachwycały grafiką, potrafiły wciągnąć na długie godziny. Co prawda, tamtego sprzętu na próżno szukać w sprzedaży, ale współczesna technika i technologia dają możliwość "powrotu" do tamtych lat. Tak właśnie postąpił autor opisywanego projektu, który przygotował nowoczesną wersję konsoli Nintendo Game Boy, która ...

PiTelephone - retro telefon z Raspberry Pi

Numer: Listopad/2016

W Elektronice Praktycznej opisywaliśmy już projekt telefonu, w którym zastosowano Raspberry Pi, ale prezentowany poniżej PiTelephone to zupełnie inna konstrukcja. Widać to już z zewnątrz, bo aparat telefoniczny jest stacjonarny i tarczowy i wygląda, jakby wyprodukowano go w latach 70. XX wieku. W środku znajduje się natomiast Raspberry Pi i szereg dodatkowych komponentów, które zmieniają wybieranie impulsowe na tonowe oraz sterują pracą ...

Skaner 3D z setką Raspberry Pi

Numer: Listopad/2015

Nie jest trudno pokazać, że za pomocą miniaturowego Raspberry Pi można zrealizować wielkie rzeczy - projekty zarówno innowacyjne, jak i niedrogie, a ponadto łatwe do wykonania. Co w takim razie można zrobić, gdy ma się do dyspozycji np. 100 sztuk komputerka Raspberry Pi? Świetnym przykładem możliwości jest skaner 3D, opracowany przez Richarda Garsthagena z Holandii.

Samojezdny, dwukołowy robot z Intel Galileo

Numer: Listopad/2015

Od czasu pojawienia się na rynku mikroelektromechanicznych akcelerometrów, dużą popularnością wśród pokazowych aplikacji firm oraz projektów studenckich cieszą się maszyny, które są w stanie utrzymać w pionie, wbrew grawitacji, długie, pionowe konstrukcje. Ten bardzo widowiskowy pokaz możliwości inżynierskich wcale nie jest trudny do realizacji, a przy zastosowaniu gotowych komputerków jednopłytkowych, jego przygotowanie ...

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

 2017

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym