DIY: camera-slider

To już prawie pół roku temu zakończyłem mój projekt sterowanego modelu żurawia (dźwigu).
Po porażce chyba zebrałem już wystarczająco dużo siły i chęci by zabrać się za kolejny projekt.
Tym razem padło na wykonanie zautomatyzowanej szyny do aparatu/kamery : camera-slider.

2021-03-05

Pierwsze zamówione części (i pewnie nie ostatnie).

2021-03-09

Slider zmierzony i odwzorowany w DesignSpark

2021-03-12

Udało mi się przetestować czujnik optyczny TCST2103 i czujnik odległości ultradźwiękowy US-015.
O tym pierwszym (TCST2103) można napisać że po prostu działa.


Za to US-015 to już inna bajka.
Samo wykonanie pomiaru jest proste. Łatwo można napisać swój kod do mierzenia odległości albo użyć gotowej biblioteki (np. NewPing).
Największym problemem to interpretacja wyników, ponieważ przy odległości do 10cm raczej pomiar jest poprawny ale im dalej tym robi się gorzej. Pojawiają się szumy i często przy wynikach 20cm nagle wpada np 3cm. To sprawia że trzeba by było jeszcze trochę podkodować aby wyłapywać takie piki.
Poniżej znajduje się też spektrum dźwięku jaki zarejestrowała komórka w trakcie włączania i wyłączania czujnika.

2021-03-19

Tydzień sukcesów!
Udało się:
podłączyć i zakodować obsługę ekranu LCD – do sprawniejszego sterowania samym ekranem użyłem konwertera I2C (polecam takie rozwiązanie, bo ułatwia kontrolę i można oszczędzić na pinach arduino)
podłączyć i zakodować obsługę silnika krokowego – w tym przypadku sterowanie silnikiem odbywa się poprzez sterownik DRV8825
zmierzyć i zamodelować kolejne elementy w 3D – tylne mocowanie, klawiatura, ekran lcd, wyłącznik krańcowy
wydrukować tylne mocowanie 😃

2021-03-28

Ten tydzień był pod hasłem „elektronika”.
Po przypomnieniu sobie co kryje się za hasłem rezystor, kondensator, stabilizator zabrałem się za projektowanie płytki PCB.
Oto mój zaprojektowany schemat ścieżek i ułożenia elementów na płytce PCB:

A to etapy lutowania:

2021-04-03

2021-04-08

Po zaprojektowaniu wszystkich elementów do druku, przyszedł czas na wielkie drukowanie.
Oto efekt:

2021-04-13

Nadszedł czas magicznego kodowania ✨🧙✨.
Oto pierwsza działająca wersja kodu: https://github.com/N0N4M3pl/camera-slider/…/camera-slider-v1.ino

2021-04-15

Po wydrukowaniu, zakodowaniu przyszedł czas na złożenie wszystkiego w jedną całość.

2021-05-16

Po długiej przerwie nadszedł czas na wykonanie samej głowicy – a dokładniej mówiąc „obrotowej” głowicy na kamerę/aparat.
Sama głowica to Ulanzi U-80L – mała, lekka i dość mocna.
Wózek do zamocowania głowicy został odpowiednio przerobiony – tak aby możliwe było gładkie obracanie głowicy. Dlatego wymagało to umieszczenia odpowiedniego łożyska 51105 (łożysko oporowe kulkowe) i koła napędowego GT2 z 60 zębami.

2021-07-08

Po złożeniu wszystkiego w całość i podłączeniu drugiego steppera, przyszedł czas na kodowanie.
Niby miało być łatwo ale okazało się że uruchomienie dwóch silników na raz powoduje problem związany z synchronizacją. Slider zamiast działać płynnie to najpierw wykonuje obrót i powoli podjeżdża. Jak obrót się skończy to silnik do przesuwania dostaje na własność procesor i dopiero wtedy wykonuje swoją pracę na 100%. Wynika to z tego że pomimo ustawienia wspólnego czasu pracy dla obu silników to ilość kroków na minutę w obu silnikach jest różna (oba silniki mają do wykonania różna pracę).
Próbowałem rozwiązać ten problem na poziomie swojego kodu jednak nic to nie dało.
Do obsługi silników krokowych użyłem biblioteki https://github.com/laurb9/StepperDriver. W niej także znalazłem rozwiązanie mojego problemu, poprzez użycie: https://github.com/laurb9/StepperDriver/blob/master/src/SyncDriver.cpp
Dzięki temu oba silniki działają równolegle i nie spowalniają się wzajemnie.

2021-07-20

Ostatnie szlify, testy i skończone.
Wprowadziłem także korektę czasu. Czas zdefiniowany przez użytkownika musi zostać skrócony o odpowiedni czas zarezerwowany dla przeliczeń. Inaczej mówiąc chcąc aby slider przesuwał się w 1 minutę to w praktyce silniki ustawiane są na pracę przez około 55 sekundy, a reszta 5 sekund spożytkowana jest przez procesor na obliczenia.
Wprowadzenie odpowiednich modyfikatorów czasu wymagało trochę pracy i analizy, ale się udało: https://github.com/N0N4M3pl/camera-slider/blob/main/logs/timing.md
Dopracowałem także wszystkie parametry związane z opcją smoothing.

Finalna wersja kodu: https://github.com/N0N4M3pl/camera-slider/blob/main/arduino/camera-slider/camera-slider.ino

W ramach ostatnich prac dodrukowałem także osłonę silnika odpowiedzialnego za rotacje.