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

Raspberry TOR Router

Numer: Czerwiec/2017

Korzystanie z sieci TOR nie jest specjalnie trudne, ale wymaga nieco zachodu. W praktyce każde urządzenie, na którym chcemy puścić ruch sieciowy poprzez szereg anonimowych routerów musi mieć zainstalowane odpowiednie oprogramowanie. Da się to jednak obejść w całkiem łatwy sposób - wystarczy tylko posiadać taki komputerek, jak Raspberry Pi.

Restarter do routera sterowany za pomocą SMS

Numer: Czerwiec/2016

Nikogo nie trzeba przekonywać o tym, jak bardzo jesteśmy uzależnieni od Internetu. Nie trzeba też przekonywać, jak irytujące mogą być niespodziewane przerwy w dostępie. Wiele z takich awarii można łatwo usunąć poprzez zrestartowanie routera lub modemu. Oczywiście, o ile mamy do niego łatwy dostęp. Jeśli nie, to idealnym rozwiązaniem będzie prezentowane urządzenie. Może służyć do zdalnego włączania, wyłączania lub restartowania ...

Automat do gier z Raspberry Pi

Numer: Czerwiec/2016

Miniaturowe komputery mają obecnie moce obliczeniowe znacznie przewyższające możliwości pełnowymiarowych komputerów z przed kilku-kilkunastu lat. Dotyczy to także specjalizowanych komputerów do gier wideo. Z całą pewnością wielu starszych czytelników EP miło wspomina czas spędzony w salonach gier, gdy królowały Pacman i Galaxians. Takie zamiłowanie do starych gier sprawiło, że na świecie opracowano bardzo wiele projektów, ...

Kot z dostępem do Internetu

Numer: Maj/2017

Choć prima aprilis już minął, publikujemy opis projektu, który na pierwszy rzut oka będzie wydawał się żartem. I fakt ? opisywany w nim projekt powstał jako żart, ale mamy wrażenie, że sama idea jest godna zastanowienia i może być podstawą do opracowania bardziej sensownych i przydanych rozwiązań. Dlatego prezentujemy "Kota IoT", na którego pomysł wpadł Jeremy Wall z Kalifornii.

Raspberry PI jako koparka bitcoinów

Numer: Maj/2016

Kryptowaluty coraz odważniej wkraczają do naszego życia. Bitcoin - najbardziej popularna z nich nie tylko została niedawno oficjalnie uznana w Europie za walutę, a nie towar, co ułatwia transakcje, ale też bywa akceptowana przez rosnącą liczbę firm. Pod pewnymi względami przypomina też złoto - jego zasoby są ograniczone i trzeba je wydobywać. Tyle, że zamiast przesiewać grunt na Alasce czy kopać kilofem pod ziemią, można to ...

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Czerwiec 2017

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym