Spisu treści:

Zegar lokalizacyjny „Weasley” z 4 wskazówkami: 11 kroków (ze zdjęciami)
Zegar lokalizacyjny „Weasley” z 4 wskazówkami: 11 kroków (ze zdjęciami)

Wideo: Zegar lokalizacyjny „Weasley” z 4 wskazówkami: 11 kroków (ze zdjęciami)

Wideo: Zegar lokalizacyjny „Weasley” z 4 wskazówkami: 11 kroków (ze zdjęciami)
Wideo: JAK ZROBIĆ KOMPAS KTÓRY WSKAZUJE GRACZA (DREAM, TOBIASZ, NOLIF) - MINECRAFT 1.16 2024, Lipiec
Anonim
Zegar lokalizacji „Weasley” z 4 wskazówkami
Zegar lokalizacji „Weasley” z 4 wskazówkami

Tak więc, mając Raspberry Pi, które od jakiegoś czasu się bawiło, chciałem znaleźć fajny projekt, który pozwoli mi go jak najlepiej wykorzystać. Natknąłem się na ten wspaniały instruktażowy zegar lokalizacji Weasley zbuduj swój własny autorstwa ppeters0502 i pomyślałem, że dobrze byłoby spróbować.

Zegar składa się zasadniczo z Raspberry Pi, które steruje serwomechanizmami w celu obracania wskazówek zegara. Podobnie jak w domu rodziny Weasleyów w książkach/filmach o Harrym Potterze, każdy członek rodziny ma własną rękę. Każda wskazówka wskazuje aktualną lokalizację członka rodziny. Zegar osiąga to poprzez odbieranie wiadomości z telefonów komórkowych rodziny za każdym razem, gdy wchodzą lub opuszczają określony promień.

Główne różnice w stosunku do poprzedniego Instructable polegały na tym, że musiałem mieć 4 wskazówki, a nie 2 (w przeciwnym razie moje córki narzekałyby) i postanowiłem również zbudować ramę, a nie stary zegar do ponownego użycia. Stało się tak, ponieważ obawiałem się, że problemem będzie miejsce w istniejącej obudowie zegara, z koniecznością zmieszczenia 4 serwomechanizmów itp.

Zajęło mi to dużo więcej czasu, niż się spodziewałem, chociaż głównie wtedy, gdy natknąłem się na kłopotliwe problemy, które mnie zaskoczyły i których nie opisał oryginalny post. Nic w stosunku do oryginalnego Instructable, który był ogólnie świetny, ale minęło kilka lat i wersje rzeczy się zmieniły… itd. Ponadto przebywanie w Wielkiej Brytanii oznaczało, że niektóre elementy imperialne / metryczne powodowały więcej wyzwań, niż się spodziewałem.

Ponadto, podczas gdy kodowanie jest w porządku, fizyczne wykonanie zegara zdecydowanie mnie rozciągnęło i wymagało dodatkowych narzędzi, co również nieco mnie spowolniło.

Na koniec dołączę sekcję „Rzeczy, które zrobiłbym inaczej/lepiej, gdybym robił to jeszcze raz…”

Kieszonkowe dzieci:

Jedną z rzeczy, które mnie uderzyły, było to, że drogie komponenty miały zrobić z wskazówkami zegara. 4 ręce są zdecydowanie droższe niż 2. Zdecydowałem się wprowadzić trochę kosztów, aby mieć jakiś pomysł. To pierwszy raz, kiedy to wszystko zsumowałem i pomijając narzędzia, wydaje mi się, że wydałem około 200 funtów. Plus kilka rzeczy, których nie używałem (i nie zamieściłem poniżej) plus Pi, plus zasilacz, który już miałem.

Pi itp

  1. Raspberry Pi - nie pamiętam ile pierwotnie kosztował, ale był to Model 2B. Myślę, że jeśli jeszcze go nie masz, prawdopodobnie zrobi to nawet Pi Zero. Dodałem klucz WiFi i kartę SD z Raspbianem. A ja miałem starą ładowarkę do telefonu z Androidem.
  2. Serwohat Adafruit dla Pi - £16
  3. Zasilanie dla Servohata - Naprawdę ciężko było mi to znaleźć, ponieważ wszystkie strony internetowe po prostu wskazywały na stronę adafruit, która oczywiście zaleca amerykański zasilacz. Potem zdałem sobie sprawę, że mam stary zasilacz o zmiennym napięciu z wymiennymi końcówkami, więc go użyłem. Ale amerykański kosztuje 8 dolarów, więc to jest pole do popisu.
  4. Etui na Pi, abym mógł następnie przymocować go do ramy zegara. £5

Serwa i przekładnie

Tutaj podaję cenę za wszystkie 4, więc podziel, jeśli chcesz mieć mniej rozdań (sumując, wynosi to ~40 GBP ZA RĘKĘ = 160 GBP:-o

  1. 4 x Serwa - użyłem tych rekomendowanych przez ppeters0502 - znalezione na ebay za ~15£ każdy = 60£ - szukałem następującego tekstu "GWS-Digital-Servo-Sail-Winch-S125-1T-2BB-360-degree "ale czasami były niedostępne
  2. 4 x mosiężne rurki, które pasowały dokładnie do siebie - ~3 £ każda. Mam po 1 z 1/4", 7/32", 3/16", 5/32" = 11 zł
  3. 4 x zaciski, które zaciskają się na mosiężnych rurkach, aby umożliwić zamocowanie kół zębatych. ~7 GBP za sztukę = 28 GBP. Dostałem je od ActiveRobots, które regularnie realizują zamówienia z Servocity w USA, co pozwala uniknąć wysyłki międzynarodowej. Mogą również uzyskać wszystko, co można znaleźć na głównej amerykańskiej stronie Servocity. Było to bardzo przydatne w przypadku kolejnych 2 pozycji
  4. 4 x acetylo 0,770" przekładnie zębate do montażu na piastach zaciskowych. ~6£ każda = 24£
  5. 4 x acetylenowe koła zębate z wypustem acetylowym do montażu na serwomechanizmach. ~ 6,50 GBP za sztukę = 26 GBP
  6. 1 x opakowanie nakrętek sześciokątnych do dołączonych kół zębatych do nakrętek zaciskowych = £2.60
  7. Klucz imbusowy 1 x 7/64" (klucz imbusowy), ponieważ wszystko, co pochodzi z USA jest imperialne, więc setki kluczy imbusowych, które już mam, są bezużyteczne = 1 GBP

Dla budowy fizycznej

Tutaj najczęściej używałam resztek rzeczy, o których kłamałem

  1. 2 x kwadraty ze sklejki na „twarz” i „tylną” płytę
  2. Następnie wyciąłem cylindry 4x10cm ze starej poręczy, którą miałem, aby połączyć tył z licem
  3. Kilka klocków do zamontowania serw w odpowiednim przesunięciu - tylko ścinki z miękkiego drewna, które przycinam na wymiar.
  4. Różne śruby. od bardzo małego (do przymocowania obudowy Pi do ramy) do średniego (do połączenia ramy)
  5. 0,75mm blacha z miękkiej stali około 50cm x 20cm (do wycięcia rąk). To była jedyna rzecz, którą kupiłem ~ 9 funtów od Wickes

Narzędzia

Niektóre rzeczy miałem, a niektóre pożyczyłem lub kupiłem

  1. Lutownica + lut elektryczny - do podłączenia złącz do Adafruit Hat & Pi.
  2. Jigsaw - do wycinania szorstkiego kształtu dłoni
  3. Wiertarka. tylko zwykła akumulatorowa wiertarko-wkrętarka 18 V
  4. Wiertła - pamiętaj, że do wykonania otworów pasujących do mosiężnych rurek będziesz potrzebować wierteł imperialnych. Udało mi się trochę pożyczyć.
  5. piła do metalu - do cięcia rurek mosiężnych. Nie rób tego co ja i wydaj 3 funty na przecinak do rurek, działa on pod ciśnieniem i sprawia, że wnętrze rurek staje się nieco mniejsze. więc rura o mniejszym rozmiarze nie pasuje wtedy
  6. Szlifierka stołowa - ja takiej nie miałam, ale zrobiła to znajoma i dzięki temu DUŻO łatwiej było kształtować dłonie. Do tego czasu używałem tylko plików. Nie kupiłbym jednego tylko do tego projektu, ale dla metalowych wskazówek było super.
  7. Kupiłem różne pilniki diamentowe (bardzo małe). przydatne do rąk i rurek około £15
  8. szorstki i gładki papier ścierny
  9. niektóre małe zaciski utrzymują przedmioty na miejscu podczas wiercenia.
  10. imadło z tego samego powodu.

Krok 1: Konfigurowanie telefonów w celu wysłania ich lokalizacji do Twojego Pi (Część I Broker MQTT)

Ten bit jest bardzo dobrze opisany przez ppeters0502 w jego znakomitym Weasley Clock Instructable. Co dziwne, choć może odzwierciedlając różne zestawy umiejętności, zaczął od kompilacji, a następnie przeniósł się do oprogramowania, ja zrobiłem to na odwrót. Więc zacząłem od telefonu… poczekaj, nie, nie, zacząłem od brokera MQTT, który jest krokiem 6 w jego instrukcji. Pominę wszystkie fragmenty, które robi bardzo dobrze i po prostu dorzucę kilka fragmentów, które mógłbym dodać. Poszedłem drogą CloudMQTT, o której wspomniał.

ALE jak to pisałem, sprawdziłem link do planów i stwierdziłem, że nie ma już darmowego planu! Wycofali go z powodów, które wydają się uzasadnione. to znaczy, że ludzie założyliby darmową instancję, a potem nigdy z niej nie skorzystali. Nie zauważyłem, ponieważ obecne instancje mogą być kontynuowane. Więc się nie zmienię. Ale sprawia to, że instrukcje są nieco zbędne. Wydaje się, że są 3 opcje.

  1. Płać 5 USD miesięcznie za Cloud MQTT (ale na bieżąco brzmi to drogo).
  2. Idź Mosquitto na trasie Pi, jak opisano w pierwszej instrukcji. Nie mogę tego komentować, ale może to być dobra opcja.
  3. Po prostu wpisz w Google „darmowy broker w chmurze MQTT” i wygląda na to, że jest jeszcze kilka innych.

Tak więc, zakładając, że masz działającego brokera MQTT, jeśli jest on podobny do tego z CloudMQTT, zostaną wyświetlone Serwer, Użytkownik, Hasło i Port. Wszystko to będzie potrzebne do skonfigurowania telefonów, aby wysłać brokerowi swoje lokalizacje/przeprowadzki.

Krok 2: Konfigurowanie telefonów w celu wysłania ich lokalizacji do Twojego Pi (Część II Własne)

Jest to również bardzo dobrze omówione w oryginalnym Instructable, w krokach 7 (Android), 8 (iOS) i 9 (konfigurowanie regionów).

Miałem tylko urządzenia z systemem iOS, więc nie próbowałem kroku 7.

Co dodałbym do tych instrukcji?

  1. W konfiguracji znajdują się również pola TrackerID i DeviceID. Powinieneś je mieć, ponieważ możesz zidentyfikować cię w swojej rodzinie. Np. Miałem je odpowiednio jako R i RPhone. Oznacza to, że możesz przejść do zegara, który Servo, a tym samym którą wskazówkę obrócić.
  2. Regiony to nazwy lokalizacji, które chcesz śledzić.
  3. Każdy region jest określony przez nazwę, szerokość geograficzną, długość geograficzną i promień.
  4. Ponieważ chciałem mieć kilka lokalizacji jako jedną sekcję na moim Zegarze, zastosowałem konwencję nazewnictwa, która okazała się bardzo przydatna. Możliwe są inne metody, ale to zadziałało dla mnie.

    • Na przykład dla sekcji zegara RODZINA chciałem mieć moich rodziców i rodzeństwo oraz rodziców i rodzeństwo mojej żony. Miałem więc takie lokacje jak „Rodzina Tom”, „Rodzina Kutas”, Rodzina Harry” i „Rodzina Rodziców R”, co oznaczało, że kolejny etap mógł wiedzieć, co przekazać Zegarowi.
    • Pamiętaj, że ludzie mogą mieć różne lokalizacje. Ale dopóki są zgodne z konwencją nazewnictwa, to jest w porządku. Np. moja praca różniłaby się od rejonu pracy mojej żony i inaczej się nazywała. ale tak długo, jak oboje zaczynają „Pracę”, wszystko jest w porządku.
  5. Chcesz, aby tryb na ekranie Mapy był ustawiony na „Znaczący”. Oznacza to, że (w większości) otrzymujesz wiadomości tylko wtedy, gdy wjeżdżasz lub opuszczasz region. Wydaje się, że jest to zaktualizowana wersja notatki oznaczonej WAŻNE: na końcu kroku 8 w oryginale Instructable.
  6. Jak wspomniano w oryginalnym Instructable, korzystanie z Google Maps to świetny sposób na znalezienie miejsca na szerokość / długość. Uważam, że bardziej wydajne jest robienie tego zbiorczo, sprawdzając wszystkie szerokości i długości mojej lokalizacji, a następnie wkleiłem je do Notatek (na moim Macu) i dzięki synchronizacji w chmurze oznaczało to, że magicznie pojawiły się na moim iPhonie w Notatkach i mógłbym je skopiować/wkleić do Owntracks. Oznaczało to również, że mogłem wysłać plik na telefony mojej rodziny i wszyscy mieliśmy spójne lokalizacje.
  7. Lokalizacje znajdujące się blisko siebie mogą powodować problemy. Mój brat mieszka 2 ulice dalej i początkowo mój telefon myślał, że jestem jednocześnie w okolicy jego domu i w domu. W końcu musiałem umieścić dodatkową logikę w Node Red, aby złapać i zignorować to zdarzenie.

Krok 3: Konfiguracja Raspberry Pi

Konfiguracja Raspberry Pi
Konfiguracja Raspberry Pi

Więc tutaj zakładam, że masz skonfigurowaną podstawową Pi i Wi-Fi. Używałem Raspbiana, ale to nie powinno mieć znaczenia. Użyj instrukcji na raspberrypi.org, aby wszystko skonfigurować.

Zauważ, że Pi ma porty do wyświetlania na monitorze i klawiaturze / myszy itp. ALE oczywiście, gdy masz go na zegarze, nie chcesz tego. Tak więc odpowiedzią, zasugerowaną przez kogoś na stronie Raspberry pi, jak sądzę, było skonfigurowanie połączenia VNC. Pozwala to na połączenie z innego urządzenia do Pi i kontrolowanie go. Robię to z mojego Maca, ale zrobiłem to również z iPada. Sugeruję używanie czegoś z klawiaturą dla ułatwienia użytkowania.

Właśnie odkryłem, że wydaje się, że ułatwili to, odkąd się połączyłem… patrz tutaj

Zasadniczo łączysz się i otrzymujesz okno, które jest standardowym interfejsem Pi.

Masz więc okno do swojego Pi z laptopa lub komputera.

Teraz musisz podłączyć Serwa.

Najpierw musisz wykonać dość podstawowe lutowanie, aby nałożyć kapelusz adafruit na Pi. To trochę kłopotliwe, ale pomimo tego, że nie lutowałem przez 30 lat, było w porządku. Jak zawsze znalazłem przydatny film na YouTube, który poprowadził mnie przez to, co było bardzo pomocne.

Podczas gdy czapka może obsługiwać 16 serw, ja potrzebowałem tylko 4, więc zadałem sobie trud przylutowania pierwszego zestawu 4 pinów.

Następnie serwa po prostu wciskają się w szpilki. Zrobiłem jeden pierwszy, aby sprawdzić, czy rzeczywiście mogę uruchomić serwo.

To tam trafiłem na moją pierwszą poważną przeszkodę. Miałem bardzo prosty skrypt Pythona do poruszania serwomechanizmami i dosłownie nic się nie stało. Spędziłem około tygodnia próbując nowe skrypty itp., a potem na kapeluszu zaczął pojawiać się dym. Wyłączając wszystko, sprawdziłem schemat. Był to składnik chroniący przed odwrotną polaryzacją. Ponieważ miałem wielokońcówkowe, wielonapięciowe źródło zasilania, przegapiłem fakt, że wyjście DC może działać w obie strony, odwracając końcówkę. Źle się pomyliłem (szansa 50:50) i właśnie wypaliłem swój pierwszy kapelusz adafruit

:-(Czyli niewielkie opóźnienie jak kupiłem nowy, przelutowałem i poprawiłem końcówkę. Dużo lepiej.

Następnie musiałem wymyślić, jak przesunąć serwa do właściwego punktu na zegarze. To pojawi się w kroku 5, ale to, co zrobiłem, nie zbudowałem rzeczywistego zegara, to lekko przykręcić serwa do losowego kawałka drewna i przykleić do nich taśmę maskującą ze strzałką, jak na zdjęciu. Dało to bardzo wizualną informację zwrotną na temat tego, co kodowałem.

Krok 4: Instalowanie węzła czerwonego (pobieranie komunikatów z serwera MQTT do skryptu Pythona)

Instalowanie Node Red (Pobieranie komunikatów z serwera MQTT do skryptu Pythona)
Instalowanie Node Red (Pobieranie komunikatów z serwera MQTT do skryptu Pythona)
Instalowanie Node Red (Pobieranie komunikatów z serwera MQTT do skryptu Pythona)
Instalowanie Node Red (Pobieranie komunikatów z serwera MQTT do skryptu Pythona)
Instalowanie Node Red (Pobieranie komunikatów z serwera MQTT do skryptu Pythona)
Instalowanie Node Red (Pobieranie komunikatów z serwera MQTT do skryptu Pythona)
Instalowanie Node Red (Pobieranie komunikatów z serwera MQTT do skryptu Pythona)
Instalowanie Node Red (Pobieranie komunikatów z serwera MQTT do skryptu Pythona)

Node-RED to program, który instalujesz na Pi, który zapewnia wizualny interfejs (w przeglądarce) do odbierania wiadomości z serwera MQTT i używania go do przekazywania prawidłowych informacji do skryptu Pythona (omówionego w następnym kroku (Krok 5). Właściwie użyłem instrukcji ppeters0502 w kroku 5. W tych przepływach jest logika, a dodatkowa logika w pytonie i możesz mieć mniej więcej w każdym, w zależności od twoich preferencji. Zasadniczo musisz to zrobić następujące

  1. Mieć węzły odbiorcze dla wiadomości MQTT - są one jasnofioletowe i miałem 1 na członka rodziny
  2. Przypisz to do serwa, które chcesz przenieść (o numerach 0, 1, 2, 3)
  3. Określ, czy wjeżdżasz, czy opuszczasz promień na OwnTracks
  4. Ustal, na którą lokalizację ma wskazywać serwo

    Było kilka wyjątków od podstawowych zasad, które musiałem wbudować

  5. Ustaw kąt poprawnie

Pierwsze 4 zrobiłem z Node-RED, a Python był stosunkowo prosty.

Tutaj możesz zobaczyć podstawowy przepływ, a wszystkie przepływy można wyeksportować do formatu tutaj, co oznacza, że możesz zaimportować ten podstawowy przepływ do swojego Node-RED, a następnie dostosować. Zauważ, że usunąłem wszystkie połączenia z fioletowych węzłów, więc nie możesz uzyskać dostępu do mojej instancji MQTT. Usunąłem również wszystkie węzły testowe, ponieważ zawierają one rzeczywiste dane… być może będziesz musiał zmienić ten typ pliku na flow.json w celu zaimportowania do twojego Node-RED, ale Instructables nie pozwolił mi tego przesłać.

Zielone węzły to węzły debugowania, które następnie wyświetlają dane wyjściowe w oknie debugowania po prawej stronie ekranu (może wymagać rozwinięcia - znajdź strzałkę w połowie drogi po prawej stronie)

Pierwszym bitem do zrobienia jest bit "Na żywo - tylko do debugowania". To sprawdza, czy możesz odbierać wiadomości MQTT i zobaczyć, co w nich jest. json to po prostu bardziej ustrukturyzowana wersja wiadomości, która pozwala łatwiej wydobyć dane. W tym przepływie, na żywo, łączę fioletowe węzły w lewym górnym rogu z węzłem json po prawej stronie.

Testowanie węzłów

Kiedy już wiesz, jak wiadomości będą wyglądać na żywo, bardzo nudno będzie wychodzić z domu i iść drogą iz powrotem, tylko po to, aby wywołać zdarzenie. Gdy to zrobisz, możesz skopiować wiadomość do wyzwalacza TEST, a następnie po prostu kliknąć go, aby zasymulować zdarzenie. Możesz również zmienić dane, aby udawać różne lokalizacje (upewnij się, że dokładnie odpowiadają nazwom lokalizacji w Owntracks).

W przepływie widać, że wszystkie przypadki testowe trafiają do oddzielnego węzła, a następnie do węzła json. Ma to na celu wyłącznie uporządkowanie ekranu.

Nie mogę wystarczająco podkreślić, jak przydatne były te węzły i nadal są.

Wywoływanie Pythona

Więc trafiłem na następną blokadę. Ten wymagał DUŻO googlowania na forach itp. Mój przepływ działałby idealnie, ale nie uruchomiłby mojego skryptu Pythona. Nie mogłem tego rozgryźć, ale oszczędzę ci przekleństw itp. Żeby powiedzieć, jak podkreślono na drugim zrzucie ekranu, musisz określić python3, ponieważ najwyraźniej Node-RED zakłada python2, chyba że określisz.

2 dodatkowe komplikacje - tylko w razie potrzeby

Miałem wtedy kilka wyzwań, w których logika nie działała. Po pierwsze, Owntracks poszło trochę dziwnie, a ponieważ mój brat mieszka 2 ulice dalej, często mówiło się, że jestem w 2 miejscach naraz lub ciągle się przełączam. Jedynym sposobem, w jaki mogłem to obejść, było dodanie warunku, aby zatrzymać fałszywe alarmy. Jeśli twierdził, że jestem w jego domu, przechodziłem przez i sprawdzałem rzeczywistą długość/szerokość geograficzną w wiadomości i przerywałem, jeśli informowałem, że faktycznie jestem w domu.

Drugi problem polegał na tym, że podczas spaceru z psem nie mogłem uzyskać dobrego promienia. Zwykle chodzę w tym samym obszarze, więc tutaj powiedziałem: „jeśli wejdę w ten obszar, na pewno wyprowadzam psa i będę chodzić, dopóki nie wrócę do domu”. oznaczało to, że nie przeniósłby się do pubu, który mijam w drodze do domu, ani do różnych innych miejsc, które mogłyby się uruchomić podczas spaceru z psem. Aby to zrobić, musiałem ustawić kilka trwałych zmiennych kontekstowych (sprawdź je na Node-RED. Zobacz zrzut ekranu. Te zmienne utrzymują się do momentu ponownego uruchomienia Node-RED, więc mogę powiedzieć, że jeśli na spacerze z psem, ustaw zmienną kontekstową do "Psa". Następnie zignoruj CAŁKOWITE inne, chyba że "Wejdę" do domu.

Ostatni zrzut ekranu to ten z mojego ostatniego przepływu, ze wszystkimi wyjątkami, tylko dla twojego zainteresowania.

Krok 5: Właściwe przenoszenie serw za pomocą Pythona na Pi

Krótka zmiana na serwa. Nie wiedziałem nic o serwomechanizmach, ale w sieci jest mnóstwo informacji. Te, których użyłem, to serwa ciągłe, które mogą obracać się o 360 stopni i płynnie. Drugim głównym rodzajem są serwa krokowe, które poruszają się w kawałkach (krokach) i najwyraźniej dochodzą tylko do około 180 stopni (tutaj wyraźnie nieprzydatne). Zaletą serw krokowych jest to, że wystarczy je ustawić pod kątem, a one przesuną się do tego punktu i zatrzymają. Cała dokumentacja, którą znalazłem, mówi, że ciągłe serwa działają, otrzymując prędkość i czas na utrzymanie tej prędkości (np. Pełna prędkość przez 1 s) i kończą tam, gdzie kończą, ale jest to zależne od ich punktu początkowego. Po wielu próbach nie udało mi się, aby to zadziałało, ale dowiedziałem się, używając stanowiska testowego, że serwa konsekwentnie wracały do tego samego punktu przy tym samym kącie. Co jest o wiele łatwiejsze, więc po prostu to zrobiłem. Może być jakiś minus, o którym nie wiem, ale dla mnie to działa. Pamiętaj jednak, że każdy serwo jest inny, więc musisz mieć unikalny zestaw kątów dla każdego serwa. Uznałem, że najłatwiej jest mieć skrypt „kalibracji” w Pythonie, w którym mogłem ustawić serwa pod różnymi kątami, dopracowując je, aż wszystkie będą wyglądały dobrze. To jest pierwszy dołączony skrypt. Po prostu komentujesz serwa, których nie testujesz, koncentrujesz się na jednym, a następnie dostosowujesz wartości według potrzeb. UWAGA: kalibracja na stanowisku testowym jest prosta, zgrubna i gotowa. Będziesz musiał ponownie skalibrować, gdy zegar zostanie zmontowany, ponieważ koła zębate itp. zmienią wszystko. Wtedy drugi skrypt jest dość prosty. Wykonuje następujące czynności

  1. Zaimportuj kilka bibliotek
  2. przenieś zmienne pochodzące z węzła Node-RED do zmiennych w skrypcie
  3. mapuje kąty określone przez skrypt kalibracji do lokalizacji na zegarze.
  4. sprawdź, czy lokalizacja znajduje się na liście, a jeśli nie, przejdź do „Niebezpieczeństwo”
  5. wypisz, co zostało zrobione w pliku dziennika
  6. przesuń wymagane serwo pod wymaganym kątem
  7. Zatrzymaj jedno serwo przed „brzęczeniem” *

3 rzeczy do zapamiętania.

Plik dziennika jest bardzo przydatny do debugowania. Oznacza to, że możesz spojrzeć na debugowanie komunikatu Node-RED, a następnie zobaczyć, co się stało w skrypcie. wynik wygląda tak. Pierwsze 3 to ja wyprowadzam psa na spacer, a następnie Dziecko 1 wychodzące z domu i przychodzące do szkoły. Uwaga, aby sprawdzić czas na Pi. Może to być domyślnie UTC i nie zezwalać na zmiany czasu letniego/zimowego. Np. czasy poniżej to 1 godzina.

2020-12-07_05:36:03 Kto = 0, loc = podróżowanie, szczegół = dom, kąt = 10, indeks = 8

2020-12-07_05:36:04 Kto = 0, loc = Pies, detal = Astony, Kąt = 86,5, indeks = 10

2020-12-07_06:07:49 Kto = 0, loc = Home, detal = wchodzenie, Kąt = 75, indeks = 0

2020-12-07_06:23:53 Kto = 2, loc = Podróże, szczegół = Dom, Kąt = 19, indeks = 8

2020-12-07_06:30:48 Kto = 2, loc = Szkoła, szczegół = N, Kąt = 60,5, indeks = 2

Serwo-brzęczenie

Jeden z serwomechanizmów (0) cały czas brzęczał po zakończeniu skryptu. Jak możesz sobie wyobrazić, jest to bardzo irytujące w naszej kuchni. Znalazłem gdzieś wątek, który wspomniał o ustawieniu kąta serwa na „brak”, co jakoś ustawia go na bezczynność. To zadziałało znakomicie i widać to w scenariuszu na końcu.

Czasy

Pamiętaj, jak nisko potrzeba ręki do zamiatania przez całą dobę. W skrypcie widać, że tuż przed ustawieniem serwomechanizmu na zatrzymanie brzęczenia znajduje się linia time.sleep(4). Dzieje się tak, ponieważ musisz pozwolić dłoni dotrzeć do miejsca docelowego, zanim ustawisz ją w stanie bezczynności. W przeciwnym razie po prostu się zatrzyma. Jest to również ważne podczas kalibracji, ponieważ w skrypcie wykonujesz wiele ruchów. Ustawiłbym go tak, aby poruszał się po kolei do wszystkich 12 lokalizacji, abym mógł je wszystkie ponownie sprawdzić. ale potrzebujesz trochę czasu pomiędzy.

Krok 6: Finalizacja oprogramowania - telefony do serw

Po skonfigurowaniu stanowiska testowego i skryptów możesz uruchomić go na chwilę i zobaczyć, jak działa w czasie rzeczywistym. Tutaj znalazłem wyjątki, które musiałem dodać do przepływu Node-RED.

Możesz łatwo rozłączyć się i połączyć członków rodziny w przepływie Node-RED, jeśli chcesz się skoncentrować na jednym. Na przykład, jeśli dwa powodują problemy, ale chcesz naprawić jeden na raz. W przeciwnym razie pamiętaj, że nadal będziesz otrzymywać wiadomości z podłączonych telefonów.

Wspomniałem o problemie związanym z wyprowadzaniem psów i domem mojego brata, który jest dość blisko. Miałem 2 inne wyzwania.

Po pierwsze, lokalizacje w innych lokalizacjach. Moja żona była na kursie w college'u w Londynie. Chcieliśmy, żeby to było zarejestrowane jako „Szkoła”, ale jest też w „Londynie”. Musieliśmy więc ponownie użyć kontekstu, aby powiedzieć, że jeśli opuszczasz tę „szkołę”, to przenieś się do „Londynu”, a nie do „podróży”.

Po drugie, warunki wyścigu. Jak wspomniano, dom mojego brata jest 2 ulice dalej, a także w pobliżu naszego ulubionego pubu/restauracji. Oznacza to, że czasami odbierane są 2 sygnały jednocześnie lub bardzo blisko siebie. Może to stworzyć „warunek wyścigu”, w którym otrzymujesz różne wyniki, w zależności od tego, który z logiki przechodzi najszybciej, prowadząc do nieprzewidywalnych wyników. Aby temu przeciwdziałać, sprawiłem, że wszystkie wiadomości „wchodzące” miały w logice opóźnienie 1s, co wydawało się naprawiać problem. Być może istnieją lepsze, bardziej eleganckie sposoby rozwiązania tego problemu, ale wydawało się, że to działa.

Krok 7: Budowanie zegara fizycznego - część I - serwa i oś

Budowa Zegara Fizycznego - Część I - Serwa i Oś
Budowa Zegara Fizycznego - Część I - Serwa i Oś
Budowanie zegara fizycznego - część I - serwa i oś
Budowanie zegara fizycznego - część I - serwa i oś
Budowanie zegara fizycznego - część I - serwa i oś
Budowanie zegara fizycznego - część I - serwa i oś

Teraz część, do której byłam najmniej pewna, dlatego zostawiłam ją na dłużej. Chciałem mieć przyzwoitą twarz i łatwą konstrukcję. Byłem również zdenerwowany fizycznym umieszczeniem 2 serw wokół osi centralnej. Oznaczało to, że po krótkim spojrzeniu na eBay w poszukiwaniu starych zegarów, jak w instrukcji, którą śledziłem, postanowiłem dać sobie więcej szans, budując go sam.

  • Dostałem 2 duże (~30cm) kwadraty ze sklejki, które leżały dookoła (grubość około 9mm).
  • Następnie pociąłem starą poręcz balustrady na sekcje 4x10cm i skręciłem ze sobą przednią i tylną płytę.
  • Po zaznaczeniu środkowego otworu wywierciłem go tak, aby miał ten sam rozmiar, co największa mosiężna rurka.
  • Następnie pomalowałem go zwykłą białą farbą z połyskiem.
  • Po kilku eksperymentach zdałem sobie sprawę, że prawdopodobnie nie mógłbym umieścić 4 serw na tej samej osi, gdyby wszystkie były przymocowane do tylnej (lub przedniej) płyty. Musiałem więc mieć 3+1 lub 2+2 na każdym talerzu. Skończyło się na 3 z tyłu i 1 z przodu.
  • Opracowałem wymagane offsety na kawałku papieru, a następnie przyciąłem mosiężne rurki tak, aby pasowały. Zwróć uwagę, że najgrubsza rurka jest najkrótsza, a najcieńsza musi sięgać do tylnej płyty. (Właściwie najmniejszą osadziłem w otworze, który częściowo wywierciłem w tylnej płycie, ale nie do końca, aby oś nie przesunęła się do tyłu).
  • Do rurek kupiłem przecinak do rurek, ale używa on do ich przecinania nacisku i oznacza to, że nie można włożyć do środka mniejszej rurki. Użyłem więc piły do metalu, a potem musiałem sporo pilnować, aby zmusić je do pracy. Nieocenione były tutaj diamentowe pilniki punktowe.
  • Następnie dopasowałem schemat do rzeczywistych przesunięć dla zacisków i kół zębatych*.
  • Kiedy już miałem offsety, wiedziałem, jak „wysoki” zrobić bloki do montażu serw. Złamałem kilka bloków, piłując je zbyt cienkimi, a także wywierciłem otwór, aby wypuścić drut.
  • Potem przyszła kłopotliwa część, w której należy umieścić klocki, aby dokładnie spotkały się z trybami na osi. Wkręciłem jeden klocek i wtedy mogłem obrócić serwo do osi a potem wkręcić drugi klocek drugi koniec serwa. Odkryłem również, że muszę trochę wyciąć niektóre bloki, aby uniknąć zaczepienia o inne trybiki. Zajęło to trochę czasu.
  • Kiedy już to wszystko zrobiłem, wziąłem moją skrzynkę raspberry pi, wywierciłem w niej dwa otwory i przykręciłem do przedniej płyty. Potem mógłbym dodać Pi, zamknąć przednią i tylną płytę (po podłączeniu serw do pi (pamiętając, które serwo było dla którego członka rodziny) i zwrócić się do rąk…

* Tutaj znalazłem największy problem, którego jeszcze do końca nie rozwiązałem. Rury mosiężne to 1/4", 7/32", 3/16", 5/32". Ale zaciski były metryczne (z wyjątkiem jednego, który miał 1/4"). Przeliczając rury na metryczne, miały 6,35 mm, 5,56 mm, 4,76 mm 3,97 mm. Pozostałe zaciski miały otwór 4 mm, 5 mm i 6 mm. Najmniejsze 2 i największe są w porządku.ale wyraźnie 0,44 mm to zbyt duży skok dla zacisku, więc musiałem go wyściełać papierem. Próbowałem tego kilka razy i przez chwilę działa OK, a następnie ponownie się rozluźnia. Więc drugi największy ręka nie działa poprawnie. Jednak przez około 6 miesięcy było dobrze, więc czas spędzony na robieniu tego dobrze był czasem dobrze zainwestowanym. Ale gdybym robił to ponownie, mógłbym zwiększyć lub zmniejszyć o 1 rozmiar, z przerwą, aby spróbować i uzyskać lepsze dopasowanie zacisku do rury, np. na 9/32", 1/4", (gap), 3/16", 5/32"

Krok 8: Wskazówki zegara

Wskazówki zegara
Wskazówki zegara
Wskazówki zegara
Wskazówki zegara
Wskazówki zegara
Wskazówki zegara

Zdecydowałem się na blachę stalową, ponieważ chciałem czegoś sztywnego, ale mniej podatnego na pękanie podczas tworzenia. Również szczupłość oznaczała, że 4 ręce były mniejszym problemem.

  • Najpierw naszkicowałem kształt.
  • Następnie przeniosłem go na stal na taśmie maskującej.
  • Potem bardzo nieumiejętnie wyciąłem je swoją układanką. Były i są różne, ale nie przeszkadza mi to.
  • Wtedy przyjaciel zasugerował, żebym pożyczył jego szlifierkę stołową, żeby je ukształtować, i to było świetne. wysoce rekomendowane. W przeciwnym razie zgłoszenie trwa wieki.
  • Pozostało jeszcze trochę do piłowania, a następnie szlifowania, aby zapewnić brak ostrych krawędzi, a także ładne wykończenie.
  • Musiałem wywiercić otwory, aby pasowały do odpowiednich mosiężnych rurek (do sprawdzenia używaj odciętych rurek, a nie zamontowanych na zegarze).
  • Odkryłem, że otwory wymagały trochę opiłowania, aby umieścić je na rurkach, ale raz były ciasne i nie wymagały kleju. Wyjątkiem była przednia ręka, którą chciałem mieć „okładkę”. Wyciąłem więc (w większości) okrągły kawałek stali po wywierceniu otworu i uzyskaniu odpowiedniego rozmiaru i przyklejeniu go z przodu. widać to na ostatnim zdjęciu. Czasami przednia ręka wymaga odrobiny kleju, aby ją zabezpieczyć, ale po kilku nieudanych próbach ręce działają naprawdę dobrze.
  • Odrzuciłam pomysł zdjęć (bo dzieci szybko narzekałyby na nasze zdjęcia z randki), więc zdecydowałam się na malowanie na inicjałach farbą akrylową.

Krok 9: Zakończ

Kompletny!
Kompletny!
Kompletny!
Kompletny!

To wszystko działa naprawdę ładnie. Ręce są czasami trochę przesunięte, w zależności od tego, skąd pochodzą, ale w rzeczywistości nie ma to znaczenia, ponieważ każda lokalizacja to sekcja, a nie tylko linia.

Czasami, co dziwne, mój telefon odmawia potwierdzenia, że jestem w domu. Na mapie wyraźnie znajduję się w promieniu Owntracks, a nawet jeśli celność jest dobra… nie mam pojęcia dlaczego. nie wydaje się niepokoić reszty mojej rodziny. ale konfiguracja jest taka sama. Oznacza to, że Owntracks nigdy nie wysyła wiadomości i utknąłem w „Podróżach”. Ale zazwyczaj w końcu to się układa.

To było bardzo przydatne w naszej kuchni, głównie po to, aby wiedzieć, kiedy dziewczyny wracają do domu ze szkoły lub domów przyjaciół, a więc kiedy przygotować dla nich jedzenie/herbatę.

Ponownie wielkie podziękowania dla @ppeters0502 za wspaniałe instrukcje do naśladowania. Mam nadzieję, że mogą one dodać coś do stworzenia zegara z 4 wskazówkami.

Krok 10: Rzeczy, których się nauczyłem i zrobiłbym lepiej / inaczej, gdybym musiał to zrobić ponownie

  • Fizyczne kompilacje wymagają prób i błędów. Nie sposób przewidzieć problemów kosmosu, wystarczy zanurkować i spróbować.
  • W przypadku kodu problemy z googlowaniem są niezbędne
  • Zacznij od podstaw i buduj. Serwa na drewnie testowym sprawiły, że większość z nich mogłam uruchomić bez fizycznej budowy
  • Mogłem mieć ręce wycięte laserem na maszynie CNC. Ale nie wiedziałem, gdzie jest lokalna, a podoba mi się, jak sprawdziła się stal miękka (była tania, a szlifierka stołowa znacznie ułatwiała)
  • silnik krokowy może być możliwy, jeśli użyjesz przekładni, aby uzyskać obrót o 360. ale wtedy być może będziesz musiał ustawić serwa zbyt blisko osi środkowej
  • Istnieją 2 rodzaje serw (Futaba i HiTech). Upewnij się, że to sprawdziłeś, ponieważ mają różną liczbę zębów na splajnie. I początkowo kupiłem niewłaściwe…
  • Nie podłączaj czapki z niewłaściwą polaryzacją;-)
  • Google i Stack Overflow są Twoimi przyjaciółmi, gdy utkniesz. Ale musisz używać dobrych terminów wyszukiwania…
  • Stanowisko testowe to w rzeczywistości sposób, w jaki można znacznie łatwiej uzyskać prostszą, tańszą wersję. Większość komplikacji związanych z budową wynika z konieczności obracania rąk wokół tej samej osi. Jeśli pójdziesz na kompromis w tej kwestii, wszystko będzie o wiele łatwiejsze. I myślę, że 4 może być granicą pojedynczej osi, chyba że wał się znacznie wydłuży. Mógłbyś, przypuszczam, że 3 na przedniej płycie i 3 na tylnej, gdyby wał był dłuższy…

Krok 11: Możliwe przyszłe rozszerzenia…?

Pomysły, które miałem na temat kolejnych kroków, są następujące.

  1. Chciałbym zmienić przeznaczenie starego iPada na tarczę zegara. czyli zrobić zegar cyfrowy. Ewentualnie w przeglądarce lub w aplikacji. Ponieważ zegar fizyczny jest zasadniczo bezstanowy (tzn. nie wie, gdzie aktualnie się znajduje, z wyjątkiem tego, że wskazówki znajdują się w fizycznej pozycji), musiałbym mieć trwały magazyn danych. Node Red może zapisywać do lokalnego systemu plików, więc prawdopodobnie bym to zrobił.
  2. Gdybym to zrobił, to chciałbym móc to zobaczyć spoza domu. Ale wtedy naprawdę musimy uporządkować bezpieczeństwo. Ponieważ dostęp w ramach tej samej sieci Wi-Fi to jedno, dostęp z Internetu to drugie. Obecnie nie mam pojęcia, jak najlepiej to zrobić, ale podejrzewam, że subskrypcja MQTT przechodząca w drugą stronę może działać (pi publikuje aktualny stan i subskrybują go urządzenia zewnętrzne)…?
  3. Poproszę jedną rękę na „Za granicą”. ale to może być skomplikowane z punktu widzenia OwnTracks. Może po prostu użyjesz długiego/łatwego w połączeniu z dużymi promieniami?

Zalecana: