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

Planetarny wehikuł czasu - zegar z globusem (prototyp)

Tweenk 26 Wrz 2014 04:23 2658 0
  • Planetarny wehikuł czasu - zegar z globusem

    Przedstawiam mój projekt na przedmiot Interakcja Człowiek-Komputer na Informatyce UW - mam nadzieję, że kogoś zainspiruje :) Projekt jest na etapie działającego prototypu.

    Zdjęcia. Z góry przepraszam za dość kiepską jakość zdjęć - przy dobrym świetle nie bardzo widać, co jest na wyświetlaczu :/ Na pierwszym zdjęciu jest wygląd ogólny, na drugim część sterująca, na trzecim "interfejs użytkownika".
    Planetarny wehikuł czasu - zegar z globusem (prototyp)
    Planetarny wehikuł czasu - zegar z globusem (prototyp) Planetarny wehikuł czasu - zegar z globusem (prototyp)

    Filmik z krótką prezentacją projektu, od 1:45 widać że coś się rusza.

    Link


    Pomysł jest prosty: na dużym globusie pokazywać, gdzie na Ziemi w danej chwili świeci Słońce.

    Interfejs użytkownika
    Na wyświetlaczach siedmiosegmentowych sterowanych 2 układami MAX7219 pokazuje się czas (w polskiej strefie czasowej z uwzględnieniem zmian czasu między zimowym a letnim), który widać na globusie. Urządzenie ma dwa pokrętła na impulsatorach z włącznikami, którymi można ustawiać osobno datę i godzinę. Przyciśnięcie pokrętła resetuje datę / godzinę do aktualnej. Jest też dodatkowy przycisk, który umożliwia ustawienie aktualnego czasu.

    Obsługa
    Przed włączeniem należy na globusie ręcznie ustawić południe słoneczne w punkcie 0°, 0° w równonoc wiosenną (odpowiada to 20 marca 2014, 12:07 UTC) - układ sterujący przyjmuje to za początkową pozycję globusa w chwili włączenia. Następnie pokrętłami można ustawić na wyświetlaczach dowolny czas. Globus automatycznie ustawia się tak, żeby jego oświetlenie odpowiadało rzeczywistemu oświetleniu Ziemi o tym czasie. Jeśli nie rusza się pokrętłami, to globus obraca się w czasie rzeczywistym.





    Mechanika
    Część mechaniczna to 2 unipolarne silniki krokowe Sanyo Denki, 200 kroków / obr., sterowane przy pomocy gotowych modułów opartych na układzie TB6560 z podziałem kroku 1/16 - daje to 3200 kroków na jeden obrót, czyli dokładność około 7 minut kątowych. W czasie rzeczywistym globus robi 1 mikrokrok dzienny co 27 sekund.

    Silnik roczny: 103H6703-11D1, max prąd 1,1A
    Silnik dzienny: 103H7123-25D1, max prąd 1,9A
    Globus jest osadzony bezpośrednio na osi silnika dziennego, do której przymocowana jest stalowa rurka przechodząca przez środek globusa. Na jej końcu jest śruba ściskająca całą konstrukcję. Silnik dzienny jest z kolei na ramieniu z ocynkowanej blachy 2mm, wygiętej na prasie hydraulicznej.

    Żeby kabel silnika dziennego nie owijał się wokół podstawy, silnik roczny cofa się o 360° w okolicach równonocy jesiennej. Silnik dzienny dochodzi do pozycji docelowej "krótszą drogą", czyli tak, żeby obrócić się o najwyżej 1600 kroków.

    Za Słońce robi reflektor LED 20W.

    Układ sterujący
    Całym urządzeniem steruje Arduino Uno. Diody i sterowniki silników są podłączone przez układ MCP23017, bo Uno ma za mało pinów do sterowania wszystkim bezpośrednio; mam też płytkę Mega, ale mikrokontroler użyty w Uno jest łatwiej później wbudować w płytkę drukowaną (na razie nie czuję się na siłach żeby wchodzić w SMD). Czas jest zapisywany w zegarze DS1307 z bateryjką - moduł z firmy Propox.com, dzięki czemu nie trzeba za każdym razem ustawiać czasu od nowa.

    Zasilanie
    Arduino i wyświetlacze zasilane są z zasilacza wtyczkowego 9V, sterowniki silników - z zasilacza do laptopa 18,5V, reflektor LED - z gniazdka.

    Program
    Użyłem bibliotek Arduino: Wire, SPI, LedControl, Time, Timezone, TimerOne, DS1307RTC, ClickEncoder oraz AccelStepper. Biblioteki ClickEncoder, Time oraz LedControl musiałem nieco zmodyfikować: w ClickEncoder nie działało wyłączenie podwójnego kliknięcia, w Time była błędna konwersja między dwoma formatami daty, natomiast w LedControl zmieniłem metodę komunikacji z programowej manipulacji poziomami pinów na sprzętowy port SPI (bez tego silniki nie zachowywały się poprawnie ze względu na przestoje w bibliotece LedControl). Cały program ma około 18 kB.

    Pozycja silnika rocznego jest obliczana z równania orbitalnego stąd:
    https://en.wikipedia.org/wiki/Position_of_the_Sun#Ecliptic_coordinates
    Natomiast silnik dzienny robi 3200 kroków dziennie, plus liniowa poprawka na jeden dodatkowy obrót rocznie, który wiąże się z obrotem silnika rocznego.

    Problemy
    Podczas projektu miałem trzy poważniejsze zagwozdki:
    1. MAX7219 jest przystosowany do działania z wyświetlaczami ze wspólną katodą, tymczasem prawie wszystkie wyświetlacze 7-segmentowe na rynku mają wspólną anodę. Trzeba zatem podłączyć wyświetlacz odwrotnie (segmenty do pinów cyfr, cyfry do pinów segmentów) i "obrócić" wysyłane do układu dane o 90 stopni :)
    2. Zegar DS1307 przechodzi w tryb podtrzymania bateryjnego, jeśli napięcie zasilania spadnie poniżej około 4,6V. Wyświetlacze 7-segmentowe z łącznie 14 cyframi okazały się takim obciążeniem, że Arduino zasilane z USB dawało na pinie 5V właśnie coś koło 4,5-4,6V - zegar zachowywał się losowo, czasami zwracając poprawną datę, a czasami bzdurne wartości. Rozwiązaniem było podłączenie zewnętrznego zasilacza. W normalnym działaniu regulator napięcia na płytce osiąga ok. 50 stopni.
    3. Wejście "CLK" jednego ze sterowników podłączyłem do pinu 0, a "DIR" do pinu 1 - powodowało to nagłe ruchy silnika podczas transferu nowego programu. To dlatego, że właśnie przez piny 0 i 1 transferowany jest program. Wystarczy użyć innych pinów lub odłączyć je od sterowników na czas programowania :)

    Szacunkowe koszty
    Duży dobrej jakości globus (40 cm średnicy) - około 250 zł, najdroższy element.
    Sterowniki silników - 2 x 50 zł
    Arduino Uno - oryginalne 100 zł, klon 40 zł; ja używałem klonu Arduino Mega (50 zł) podczas prototypowania oraz pożyczonego oryginalnego podczas
    Silniki krokowe - nie ja kupowałem, ale powinno być poniżej 2 x 50 zł
    Konstrukcja ramienia - kilka zł
    Reflektor LED - 80 zł
    Podzespoły elektroniczne, płytki stykowe, kabelki itp. - około 100 zł

    Przy okazji kupiłem sporo części "na zapas", więc całkowite wydatki były większe niż powyżej.

    Części elektroniczne kupowałem przez Internet w sklepach Nettigo, Botland, ElectroPark oraz AVT, Arduino Mega - od użytkownika telmal_store na Allegro. Reflektor LED kupiłem w Castoramie.

    Dalsze plany
    - PCB. (Na razie próbuję to zrobić we Fritzing, ale muszę najpierw pododawać wszystkie brakujące części.)
    - Płyta ślizgowa z kontaktami między podstawą a ramieniem, żeby całość mogła się obracać dookoła bez zaplątywania się w kabel silnika dziennego. Rozważałem użycie odpowiedniego złącza obrotowego, ale jest droższe niż cały projekt :/
    - Zasilanie z jednego żródła (zasilacz do laptopa + przetwornica DC-DC na 5V), zamiast 3 różnych zasilaczy.
    - Ładna obudowa / gablota.
    - Automatyczny odbiór aktualnego czasu z odbiornika DCF77, Ethernetu (NTP) lub odbiornika GPS. (Mam odbiornik DCF77, ale coś nie chce działać...)
    - Automatyczna kalibracja położenia globusa.


    Fajne!
  • Semicon