Arduino w roli sterownika pozycjonera kamery

Arduino w roli sterownika pozycjonera kamery
Pobierz PDF Download icon

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.

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

Artykuł ukazał się w
Elektronika Praktyczna
październik 2015
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe
KIT do tego projektu
AVTduino JOY - manipulator dla Arduino, AVT1618
AVTduino JOY - manipulator dla Arduino, AVT1618
Moduł jest kolejna nakładką na płytkę bazową projektu Arduino. Został wyposażony w niewielki joystick, dwa przyciski oraz złącza umożliwiające...
Zobacz w sklepie
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik grudzień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna grudzień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich grudzień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów