Elektroda.pl
Elektroda.pl
X
Deimic Smart Home
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sterowanie kamerą Pan Tilt w oparciu o Raspberry Pi i STM32

y0yster 08 Cze 2018 19:54 2400 8
  • Sterowanie kamerą Pan Tilt w oparciu o Raspberry Pi i STM32

    Jakiś czas temu zrealizowałem pewną konstrukcję, jaką jest kamera Pan Tilt na Raspberry Pi. Z racji tego, że jest to forum traktujące o elektronice skupię się właśnie na takich aspektach. Zanim zacznę opiszę architekturę systemu, czyli co z czym się łączy i jakie komponenty wchodzą w jego skład.

    Architektura systemu

    Sam system składa się z kilku komponentów:
    1. Raspberry Pi -- SBC, na którym serwowana jest strona z dostępem do sterowania ruchem kamery.
    2. Mikrokontrolera STM32 zapewniającego końcówkę do bezpośredniego sterowania położeniem przegubów modułu kamery.
    3. Moduł kamery wyposażony w dwa przeguby sterowane za pomocą serwomechanizmów.

    Poniższy diagram najlepiej obrazuje dekompozycję konstrukcji i wymianę informacji pomiędzy komponentami:

    Sterowanie kamerą Pan Tilt w oparciu o Raspberry Pi i STM32

    Ogólna zasada działania jest następująca. Raspberry Pi serwuje stronę WWW za pomocą, której użytkownik może wyświetlać streaming z kamery. Przykładowy widok został pokazany na zdjęciu poniżej:

    Sterowanie kamerą Pan Tilt w oparciu o Raspberry Pi i STM32

    Ponadto pod samym strumieniem video znajdują się dwa panele kontrolne. Pierwszy z nich służy do zadawania pozycji zarówno w pionie, jak i poziomie. Dzięki temu możliwe jest ustawienie kamery w konkretnym punkcie, z którego chcemy obserwować. Drugi z paneli pozwala na kontrolowanie tzw. przemiatania w zadanej osi. Owo przemiatanie polega na poruszaniu jednym z przegubów z ustaloną prędkością i pozycjami krańcowymi -- maksymalną i minimalną. Opisana funkcjonalność daje możliwość podglądu obrazu w szerszym spektrum. Wspominane dwa panele zostały pokazane na poniższych rysunkach:

    Sterowanie kamerą Pan Tilt w oparciu o Raspberry Pi i STM32 Sterowanie kamerą Pan Tilt w oparciu o Raspberry Pi i STM32





    Po naciśnięciu przycisku "Send" nastawy, to jest komendy sterujące, są przekazywane do mikrokontrolera, który bezpośrednio steruje pracą serwomechanizmów.

    Mikrokontroler STM32

    Jako układ sterujący został wykorzystany mikrokontroler STM32F103C8T6, który powszechnie jest wykorzystywany w tzw. Blue Pillu. Jest on wyposażony w rdzeń Cortex-M3, a całość dopełnia 64kB pamięci FLASH oraz 20kB pamięci operacyjnej SRAM. Jednym słowem mały i przyjazny mikrokontroler. Konfiguracja pinów została przedstawiona na poniższej grafice:

    Sterowanie kamerą Pan Tilt w oparciu o Raspberry Pi i STM32

    Komunikacja Raspberry Pi, a STM32

    Sterowanie kamerą Pan Tilt w oparciu o Raspberry Pi i STM32

    Ważnym aspektem całego projektu jest komunikacja pomiędzy SBC, a mikrokontrolerem. Odbywa się ona za pośrednictwem magistrali I2C. Mikrokontroler STM32 jest skonfigurowany w trybie Slave, natomiast Raspberry Pi działa, jako układ nadrzędny i inicjalizuje transmisję.
    Wartym uwagi jest jeden aspekt związany z samą transmisją. W trakcie przeprowadzonych testów na magistrali I2C pojawiały się zakłócenia, które negatywnie wpływały na układ podrzędny -- STM32. Ponadto, ponowne uruchomienie RPi powodowało błędy w transmisji, co najprawdopodobniej wynika z wyszukiwania urządzeń podczas startu komputera na szynie I2C. W tym celu został dopisany niewielki fragment kodu, który radzi sobie z zaistniałą sytuacją:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jego działanie sprowadza się do sprawdzania, czy w buforze znajdują się jakieś dane. Jeśli się one tam znajdują oraz liczba odebranych bajtów nie zmieniła się przez określony czas to należy zresetować peryferium I2C mikrokontrolera. Dodany fragment kodu pozwolił na wyeliminowanie wszelkich zakłóceń dzięki czemu działa on stabilnie.

    Ramka danych

    Ramka danych przesyłana po I2C ma stałą długość wynoszącą 8 bajtów. Pierwszy bajt jest numerem komendy. Dostępne są dwa tryby sterowania:

    0 -- sterowanie pozycyjne
    1 -- sterowanie prędkościowe

    W zależności od wybranej komendy pozostałe 7 bajtów są odpowiednio interpretowane w celu zrealizowania sterowania. W przypadku sterowania pozycyjnego przesyłany jest numer wyjścia PWM, który określa, którym serwem należy poruszyć oraz zadana pozycja. Podobne dane wysyłane są podczas sterowania prędkościowego. W tym przypadku pozostała część ramki zawiera numer wyjścia PWM, prędkość ruchu oraz maksymalną i minimalną dozwoloną pozycję.

    Podsumowanie

    Zasadniczo można było od tego zacząć, a mianowicie od motywacji. Otóż, w moim przypadku projekt służy podglądaniu... Podglądaniu sekretnego życia roślinek na parapecie :) Sprawdza się on bardzo dobrze w swojej roli. Projekt w przyszłości zostanie zapewne rozbudowany o funkcje pozwalające na monitorowanie wegetacji flory, a może nawet w jej ingerencję.

    Cały kod projektu zarówno części webowej jaki i mikrokontrolera został opublikowany na moim blogu.


    Fajne!
  • Deimic Smart Home
  • #2 08 Cze 2018 22:46
    piotr_go
    Poziom 27  
  • Deimic Smart Home
  • #3 09 Cze 2018 10:19
    y0yster
    Poziom 19  

    Zgadza się. Raspberry Pi posiada wyjścia PWM, ale z tego co mi wiadomo to ich liczba jest bardzo ograniczona. Zazwyczaj osoby, które chcą pobawić się sygnałem PWM wykorzystują coś pokroju:

    Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685

    Uważam, że zaletą stosowania zewnętrznego układu do samego sterowania jest separacja dwóch systemów. Mikrokontroler martwi się tylko o sterowanie wyłącznie niskopoziomowe, a SBC wysyła do niego komendy, które powinny być zrealizowane. W takim podejściu mamy pewność, że nawet jeśli coś się stanie z systemem na SBC, to mikrokontroler cały czas dba o to, aby zewnętrzne układy nie były przez to dotknięte.

  • #4 09 Cze 2018 11:19
    piotr_go
    Poziom 27  

    y0yster napisał:
    ich liczba jest bardzo ograniczona

    2 na pewno ma, do Pan/Tilt wystarczy.

    y0yster napisał:
    mamy pewność, że nawet jeśli coś się stanie z systemem na SBC, to mikrokontroler cały czas dba o to

    Jeśli coś się stanie to i tak sterowanie nie będzie działać.
    Jeżeli już to dał bym separację optyczną sygnałów.

  • #5 09 Cze 2018 12:04
    y0yster
    Poziom 19  

    piotr_go napisał:
    y0yster napisał:
    ich liczba jest bardzo ograniczona

    2 na pewno ma, do Pan/Tilt wystarczy.


    Z tego co się orientuję to są tylko dwa sprzętowe PWMy Link. Reszta może działać jako programowe. Zatem dwa wystarczą, ale co w przypadku, gdy projekt będzie rozbudowywany ;)

    piotr_go napisał:

    y0yster napisał:
    mamy pewność, że nawet jeśli coś się stanie z systemem na SBC, to mikrokontroler cały czas dba o to

    Jeśli coś się stanie to i tak sterowanie nie będzie działać.
    Jeżeli już to dał bym separację optyczną sygnałów.


    Tak i nie. Masz rację pisząc o separacji, to nas uchroni przed fizyczną awarią. Natomiast w przypadku awarii programowej np. zawieszenie się SBC, cały układ przestanie działać. Oczywiście w takim prostym przypadku, jak Pan Tilt camera to nie ma większego znaczenia, natomiast wyobraźmy sobie sytuację, w której RPi sterowało by jakimś piecem CO. RPi pada i cały system leży, a piec jeśli nie ma swoich zabezpieczeń też padnie. Tutaj przykład może jest zbytnio przejaskrawiony i należało by zastosować dodatkowe środki bezpieczeństwa, ale sedno pozostaje takie samo. Z doświadczenia wolę odseparować sterowanie od "zarządzania".

    Ważniejszym powodem, dla którego pokusiłem się o zastosowanie takiego właśnie podejścia było wykonanie testów komunikacji po I2C. Jak pokazałem nie wszystko od razu zadziałało.

  • #6 09 Cze 2018 14:08
    krisRaba
    Poziom 25  

    Nie ma też co przesadzać :) Robię migającego LEDa, ale najlepiej przygotuję wszystko pod sieć zasilającą w układzie IT, gdyby ten LED miał migać w jakiejś aparaturze medycznej na bloku operacyjnym, no i dodam jeszcze kilka modułów, gdyby trzeba było wystrzelić go w kosmos ;)
    Genialne wykonanie, to najprostsze, które w pełni realizuje przyjęte założenia :) Można oczywiście robić proste urządzenia, a w zamyśle testować rzeczy, które chcemy użyć w bardziej rozbudowanych, ale to warto zaznaczyć w opisie - "tu i tu przekombinowałem, ale chciałem sprawdzić to i to" :)

  • #8 09 Cze 2018 22:50
    makosuu
    Specjalista Sieci, Internet

    Całkiem fajny projekt ale wg. mnie brakuje lampy tzn. oświetlenia do nocnej obserwacji. Tak jak w telefonie z apką IP Webcam można lampę włączyć to tu też powinno być :)

  • #9 10 Cze 2018 16:25
    y0yster
    Poziom 19  

    @makosuu Kto wie :) Mam jeszcze kamerkę na podczerwień. Wymaga ona tylko dodatkowego oświetlenia i w nocy nie będzie widać światła, a obraz będzie :)