Konfigurowanie sprzętu i oprogramowania

Lokalizator GPS Arduino do samochodu. Lokalizator GPS DIY oparty na GY-NEO6M - to proste

Dzisiaj stworzymy tracker GPS oparty na Arduino MKR FOX 1200, który wysyła dokładne dane GPS poprzez sieć Sigfox.

Staje się to jeszcze bardziej istotne dla wielu krajów ze względu na zwiększoną kontrolę nad wszelkimi importowanymi urządzeniami technicznymi, szczególnie tymi związanymi z GPS.

Krok 1. Czego będziemy potrzebować

Zestaw części do tej lekcji nie jest duży:

  • Arduino MKR Fox 1200 × 1
  • Moduł GPS (opcjonalnie, ale użyliśmy repliki ublox NEO6m (ATGM332D) × 1
  • Tranzystor NPN ogólnego przeznaczenia (użyliśmy BC548) × 1
  • Rezystor 1 kOhm × 1

Krok 2. Informacje o projekcie

Lokalizator wykorzystuje moduł GPS ATGM332 do uzyskiwania pozycji GPS z większą dokładnością niż usługi lokalizacyjne świadczone przez firmę Sigfox. Dane przedmiotu są następnie wysyłane w postaci „ciągu znaków” przez sieć Sigfox i ostatecznie dostarczane pocztą elektroniczną.

Arduino MKR FOX 1200

Płytka jest podobna do Arduino Zero, która opiera się na SAM D21 i zawiera moduł ATA8520 Sigfox. Jest to płytka energooszczędna, do której dołączona jest bezpłatna roczna subskrypcja sieci Sigfox (do 140 wiadomości dziennie), a także bezpłatny dostęp do usługi lokalizacyjnej Znajdź to.

Moduł GPS ATGM332

Ten niedrogi moduł GPS o niskim poborze mocy pasuje bardzo dobrze do Arduino MKR FOX 1200, ponieważ działa tylko przy napięciu 2,7 V (nominalnie 3,3 V).

Początkowo miałem kupić moduł NEO6m2, który posiada tryb czuwania, jednak musiałem skorzystać z NEO6. Faktycznie był to moduł ATGM332. W rezultacie nie miał trybu czuwania, więc konieczne było użycie tranzystora, aby włączyć moduł GPS, gdy zajdzie taka potrzeba, i wyłączyć go, aby oszczędzać baterię. Naszym celem jest otrzymywanie informacji o lokalizacji dość rzadko, tj. 4 wiadomości na godzinę, ponieważ Sigfox pozwala tylko na 140 wiadomości dziennie.

Do dekodowania ramek GPS używamy biblioteki TinyGPS (https://github.com/mikalhart/TinyGPS).

Przełącznik tranzystorowy

W razie potrzeby konieczne było włączanie i wyłączanie GPS. Moduły przekaźnikowe są zbyt nieporęczne i mocne, jeśli wystarczy przełączyć obciążenie 3 V i kilka miliamperów. Ponadto większość modułów przekaźnikowych wymaga napięcia 5 V, więc lepszym rozwiązaniem byłby tranzystor. Dodatkowo MKR FOX 1200 zapewnia tylko 7 mA na pinie I/O.

Wystarczy tranzystor NPN BC548. Kiedy sygnał zerowy zostanie przyłożony do podstawy tranzystora, wyłącza się, działając jak otwarty przełącznik i nie przepływa prąd kolektora. Kiedy do podstawy tranzystora zostanie przyłożony sygnał dodatni, zostaje on „włączony”, działając jak zamknięty przełącznik, a przez urządzenie przepływa maksymalny prąd obwodu.

Krok 3. Schemat połączeń

Jedynym źródłem zasilania są dwie baterie AA 1,5 V, które zasilają Arduino MKR FOX 1200. Moduł GPS zasilany jest z płytki Arduino.

Arduino MKR FOX 1200 komunikuje się z modułem GPS za pomocą drugiego portu szeregowego poprzez piny 13 i 14, zwane w kodzie Serial1. Wyjście danych TX modułu GPS jest podłączone do wejścia danych szeregowych (pin 13) płytki Arduino.

Dodatkowo płytka Arduino wykorzystuje PIN2 do włączania i wyłączania modułu GPS, jak wyjaśniono powyżej.

Krok 4. Kod projektu

Poniżej możesz pobrać lub skopiować kod naszego projektu:

#włączać #włączać #włączać //incluimos TinyGPS #define WAITING_TIME 15 #define GPS_PIN 2 #define GPS_INFO_BUFFER_SIZE 128 bool debug = false; TinyGPS gps;//Obiekt GPS //Zmienne danych GPS int rok; bajt miesiąc, dzień, godzina, minuta, sekunda, setne; długie znaki bez znaku; niepodpisane krótkie zdania, nieudana_suma kontrolna; char GPS_info_char; char GPS_info_buffer; unsigned int otrzymany_char; bool wiadomość_started = fałsz; int i = 0; // Struktura współrzędnych GPS, rozmiar 12 bajtów na platformach 32-bitowych struct gpscoord ( float a_latitude; // 4 bajty float a_longitude; // 4 bajty float a_altitude; // 4 bajty ); szerokość geograficzna pływaka = 0,0f; długość geograficzna pływaka = 0,0f; wysokość pływaka = 0; //////////////// Funkcja oczekiwania ////////////////// void Wait(int m, bool s) ( //m minut czekać //s na wolne impulsy diody if (debug) ( Serial.print("Oczekiwanie: "); Serial.print(m); Serial.println(" min."); ) digitalWrite(LED_BUILTIN, LOW s) ( int seg = m * 30; for (int i = 0; tj< seg; i++) { digitalWrite(LED_BUILTIN, HIGH); //LED on delay(1000); digitalWrite(LED_BUILTIN, LOW); //LED off delay(1000); } } else { int seg = m * 15; for (int i = 0; i < seg; i++) { digitalWrite(LED_BUILTIN, HIGH); //LED on delay(1000); digitalWrite(LED_BUILTIN, LOW); //LED off delay(3000); } } } /////////////////// Sigfox Send Data function //////////////// void SendSigfox(String data) { if (debug) { Serial.print("Sending: "); Serial.println(data); if (data.length() >12) ( Serial.println("Wiadomość jest za długa, zostanie wysłanych tylko pierwszych 12 bajtów"); ) ) // Usuń EOL //data.trim();< len; --i) { if (bytes[i] < 12) { cadena.concat(byte(0)); // Not tested } cadena.concat(char(bytes[i])); if (debug) Serial.print(bytes[i], HEX); } if (debug) { Serial.println(""); Serial.print("String to send: "); Serial.println(cadena); } return cadena; } ////////////////////////// Get GPS position function///////////////////// String GetGPSpositon() { int messages_count = 0; String pos; if (debug) Serial.println("GPS ON"); digitalWrite(GPS_PIN, HIGH); //Turn GPS on Wait(1, false); while (messages_count < 5000) { while (Serial1.available()) { int GPS_info_char = Serial1.read(); if (GPS_info_char == "$") messages_count ++; // start of message. Counting messages. if (debug) { if (GPS_info_char == "$") { // start of message message_started = true; received_char = 0; } else if (GPS_info_char == "*") { // end of message for (i = 0; i < received_char; i++) { Serial.write(GPS_info_buffer[i]); // writes the message to the PC once it has been completely received } Serial.println(); message_started = false; // ready for the new message } else if (message_started == true) { // the message is already started and I got a new character if (received_char <= GPS_INFO_BUFFER_SIZE) { // to avoid buffer overflow GPS_info_buffer = GPS_info_char; received_char++; } else { // resets everything (overflow happened) message_started = false; received_char = 0; } } } if (gps.encode(GPS_info_char)) { gps.f_get_position(&latitude, &longitude); altitud = gps.altitude() / 100; // Store coordinates into dedicated structure gpscoord coords = {altitud, longitude, latitude}; gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths); if (debug) { Serial.println(); Serial.println(); Serial.print("Latitud/Longitud: "); Serial.print(latitude, 5); Serial.print(", "); Serial.println(longitude, 5); Serial.println(); Serial.print("Fecha: "); Serial.print(day, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year); Serial.print(" Hora: "); Serial.print(hour, DEC); Serial.print(":"); Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); Serial.print("."); Serial.println(hundredths, DEC); Serial.print("Altitud (metros): "); Serial.println(gps.f_altitude()); Serial.print("Rumbo (grados): "); Serial.println(gps.f_course()); Serial.print("Velocidad(kmph): "); Serial.println(gps.f_speed_kmph()); Serial.print("Satelites: "); Serial.println(gps.satellites()); Serial.println(); } gps.stats(&chars, &sentences, &failed_checksum); if (debug) Serial.println("GPS turned off"); digitalWrite(GPS_PIN, LOW); //GPS turned off pos = ConvertGPSdata(&coords, sizeof(gpscoord)); //Send data return pos; } } } pos = "No Signal"; } //////////////////SETUP/////////////////// void setup() { if (debug) { Serial.begin(9600); while (!Serial) {}// wait for serial port to connect. Needed for native USB port only Serial.println("Serial Connected"); } //Serial1 pins 13-14 for 3.3V connection to GPS. Serial1.begin(9600); while (!Serial1) {} if (debug) { Serial.println("GPS Connected"); } pinMode(GPS_PIN, OUTPUT); //pin de interruptor del GPS if (!SigFox.begin()) { Serial.println("Shield error or not present!"); return; } // Enable debug led and disable automatic deep sleep if (debug) { SigFox.debug(); } else { SigFox.end(); // Send the module to the deepest sleep } } //////////////////////LOOP//////////////////////// void loop() { String position_data; position_data = GetGPSpositon(); SendSigfox(position_data); Wait(WAITING_TIME, false); }

// Uruchom moduł SigFox.begin();

// Poczekaj co najmniej 30 ms po pierwszej konfiguracji (wcześniej 100 ms) opóźnienie (100);

// Czyści wszystkie oczekujące przerwania SigFox.status();

opóźnienie(1);

if (debugowanie) SigFox.debug();

  • opóźnienie(100);
  • SigFox.beginPacket();
  • SigFox.print(dane);

if (debug) ( int ret = SigFox.endPacket(true); // wyślij bufor do sieci SIGFOX i poczekaj na odpowiedź if (ret > 0) ( Serial.println("Brak transmisji"); ) else ( Serial.println („Transmisja OK”); ) Serial.println(SigFox.status(SIGFOX)); "); while (SigFox.available()) ( Serial.print("0x"); Serial.println(SigFox.read() , HEX); ) ) else ( Serial.println("Nie można uzyskać żadnej odpowiedzi z serwera"); Serial.println("Sprawdź zasięg SigFox w Twojej okolicy"); Serial.println("Jeśli jesteś w pomieszczeniu, sprawdź zasięg 20 dB lub zbliż się do okna"); ) Serial.println(); ) else ( SigFox.endPacket(); ) SigFox.end(); ) ////////////////// Konwersja funkcji GPS ///////////////////* Konwertuje pływające dane GPS na dane Char * / String ConvertGPSdata(const void* data, uint8_t len) ( uint8_t* bytes = (uint8_t*)data; String cadena ; if (debug) ( Serial.print("Długość: "); Serial.println(len); ) dla (uint8_t i = len - 1; tj

Krok 5: Wysyłanie informacji GPS przez Sigfox

Chcieliśmy wysłać informacje GPS przy użyciu danych zmiennoprzecinkowych, ale gdy próbowaliśmy, zawsze otrzymywaliśmy wartości zerowe.

Otrzymasz e-mail:

Aby łatwo sprawdzić pozycję, umieściliśmy adres URL w Mapach Google, korzystając z pobranych informacji:

I na koniec wynik naszego trackera GPS Arduino:

To wszystko, życzę świetnych projektów!

Globalny system pozycjonowania GPS stał się już częścią naszego życia. Trudno dziś wyobrazić sobie telefon komórkowy bez wbudowanego modułu GPS. Ten system nawigacji satelitarnej umożliwia śledzenie dowolnych obiektów, określanie ich współrzędnych i prędkości ruchu. Teraz GPS jest dostępny nie tylko dla firm opracowujących odpowiedni sprzęt, ale także dla zwykłych radioamatorów, którzy już w pełni wykorzystują popularne płytki Arduino. W tym materiale omówione zostanie podłączenie miniaturowego trackera GPS do płytki Arduino Pro Mini. Obiektem testowym jest lokalizator PG03 MiniGPS.



Tracker ten oprócz bezpośrednich współrzędnych geograficznych pokazuje kierunek ruchu, przebytą odległość i prędkość poruszania się. Niestety nie rejestruje informacji, więc podłączając go do Arduino, możesz uzyskać dostęp do tych danych i zrobić z nimi, co chcesz.


Najpierw należy zdemontować tracker. Poniżej zdjęcia rozłożonego trackera GPS.




Sercem trackera jest układ GPS Venus638FLP. Jego 44-ty pin jest wyjściem interfejsu UART (TxD). Można przylutować przewód bezpośrednio do tego pinu, lub można znaleźć pin testowy na płytce, do której ten pin również jest podłączony. Poniżej znajdują się obrazy lokalizacji pinów mikroukładu i sposobu podłączenia do żądanego pinu.





Weźmy teraz kompaktową płytkę Arduino Pro Mini i moduł karty SD do nagrywania danych protokołu NMEA. Schemat podłączenia Arduino Pro Mini i modułu karty SD wygląda następująco:



Podłączenie pinów modułu dla kart SD:


GND do GND
VCC do 3,3 V
MISO do pinu 12
MOSI do pinu 11
SCK do pinu 13
CS do pinu 10

Podłączenie pinów trackera GPS:


GND do GND
Pin 2 (Arduino) do Pin 44 (GPS)

Lepiej jest pobierać zasilanie z lokalizatora GPS (3,7 V). Ponieważ jego bateria ma małą pojemność energetyczną, lepiej jest podłączyć baterię zewnętrzną, na przykład z telefonu komórkowego 1400 mAh, jak pokazano na jednym z powyższych zdjęć.


Teraz należy pobrać bibliotekę TinyGPS, potrzebna będzie także biblioteka do pracy z kartami SD oraz biblioteka SoftwareSerial, którą znajdziemy w bibliotekach Arduino.



W poniższym fragmencie kodu możesz wybrać, jakie dane mają zostać zapisane:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Prędkość w km/h float falt = gps.f_altitude(); // +/- wysokość w metrach (w rzeczywistości wydaje się, że jest to wysokość) float fc = gps.f_course(); // Kurs w stopniach unsigned long age; gps.f_get_position(&flat, &flon, &age (flat, 4); Serial.print() " lon "); Serial.print("kms "); .print(fc); Serial.print("wysokość"); ////////////////// //// /////////////////////////////////////////// // ///////////////

Wgraj szkic do Arduino, włóż kartę SD sformatowaną zgodnie z FAT32 i posiadającą plik log.txt w katalogu głównym. Uruchom Serial Monitor, a zobaczysz, że dane są zapisywane na karcie SD.



Czy kiedykolwiek wyszedłeś z centrum handlowego i nie pamiętasz, gdzie zostawiłeś samochód? miałem. Istnieje wiele aplikacji na smartfony, które pomogą Ci znaleźć samochód, ale smartfony są drogie.
Dlatego postanowiłem zrobić lokalizator GPS do samochodu własnymi rękami.

Zasada działania:
Po zaparkowaniu samochodu naciśnij przycisk, aby lokalizator samochodowy zapisał współrzędne GPS w pamięci EEPROM, po czym mini tracker mógł zostać wyłączony. Po wyjściu z budynku tracker oblicza Twoje nowe współrzędne GPS i wyświetla w linii prostej kierunek, w którym musisz się ruszyć do samochodu oraz odległość do niego.

Krok 1: Moduł automatycznego śledzenia




Pokaż jeszcze 3 obrazy




Moduł wyświetlacza składa się z kilku głównych elementów, które można zamówić w serwisie eBay:

  • Moduł GPS NEO6M firmy Ublox (na zdjęciu)
  • Magnetometr LSM303DLHC (na zdjęciu)
  • Wyświetlacz graficzny LCD5110 (na zdjęciu)
  • Niestandardowa płytka PCB Arduino
  • Bateria litowa (na zdjęciu)

Do zasilania użyłem akumulatora litowo-jonowego 3,7 V. Są one powszechnie stosowane w niektórych smartfonach i tabletach i są dostępne w różnych rozmiarach i pojemnościach. Przylutowałem złącze JST2.0 do podłączenia akumulatora, ale jeszcze nie zdecydowałem, którego użyć.

Można także używać akumulatorów o rozmiarze 18650.
Kupiłem ładowarkę 1A do akumulatorów litowo-jonowych ze złączem USB. Podłączyłem do niego złącze JST2.0 aby naładować te akumulatory.

Uwaga! Standardowy port USB w komputerze generuje tylko 0,5 A, więc proces ładowania z komputera będzie trwał dłużej. Ładowanie zajmie mniej czasu, jeśli użyjesz źródła zasilania o natężeniu 1 lub 2 A, takiego jak zasilacz sieciowy USB.

W załączniku schemat płytki Arduino. Moc regulowana jest za pomocą regulatora 3,3 V. S1 – przycisk przełączający.
Buz1,2 – styki buzzera, nieużywane.
Złącze oznaczone nrf24L01 również nie jest używane.
Złącze USB-BUB, służące do przesyłania szkiców do Arduino.
Na zdjęciu z wyświetlaczem widoczna jest „strzałka” wskazująca obiekt i odległość do niego.

Zasada działania:
Moduł GPS stale mierzy szerokość i długość geograficzną lokalizacji urządzenia śledzącego samochód. Po naciśnięciu przycisku dane te są zapisywane w pamięci EEPROM. W ten sposób zachowana zostanie lokalizacja Twojego samochodu.
Załóżmy teraz, że wyszedłeś ze sklepu i pamiętasz, gdzie zostawiłeś samochód. Włącz lokalizator samochodowy, ale nie naciskaj przycisku. Moduł GPS obliczy Twoje współrzędne oraz obliczy odległość do zapisanej lokalizacji samochodu oraz kierunek, w którym stoi. Na wyświetlaczu pojawi się informacja o odległości do samochodu, a strzałka wskaże kierunek, w którym znajduje się samochód.

Krok 2: Szkice Arduino

Szkic do trackera samochodowego: plik ArduinoCarTracker.zip

Mam zainstalowany „standardowy” pin USB-BUB, więc potrzebuję adaptera USB-BUB lub jego odpowiednika (PL2303)
GPS: łącze do biblioteki TinyGPS++
LSM303DLHC: plik Compass.zip

CALIBRATE: Ten program jest podobny do programu Serial Calibrate z przykładów, ale zamiast wyświetlać ostatnie odczytane dane, wyświetla maksymalne i minimalne dane odczytane z każdej osi magnetometru na wyświetlaczu LCD5110. Wartości te można wykorzystać do kalibracji wskazania kursu i przykładowej trasy poprzez przeszukanie akcelerometru LSM303 przez wszystkie możliwe współrzędne.

Zmodyfikowałem program tak, aby wzloty i upadki były pokazane na wyświetlaczu. Uruchom program na module śledzącym. Uruchom program i powoli i ostrożnie obracaj oraz przechylaj moduł we wszystkich kierunkach. Zapisz wzloty i upadki pokazane na wyświetlaczu i wklej je do programu, zastępując wartości w następujących wierszach:
kompas.m_min = (LSM303::vector)(-433, -600, -546);
kompas.m_max = (LSM303::vector)(+570, +488, +579);
powinno to poprawić dokładność kompasu.

Kiedy pobierałem aktualizacje dla Arduino, musiałem także zaktualizować biblioteki Adafruit_GFX i Adafruit_PCD8544. Oto linki:
Adafruit_GFX
Adafruit_PCD8544
Podsumowanie szkicu automatycznego śledzenia:

Oprócz funkcji konfiguracji i pętli napisałem sześć funkcji:

nieważne setSetPoint(); // ustawienie SetPoint, zapisanie współrzędnych szerokości i długości geograficznej w EEPROM
unieważnij getGPS(); // pobierz aktualne dane GPS
nieważne obliczenia(); //oblicz odległość i kierunek
int getNagłówek(); // pobierz dane o kierunku z kompasu
bajt getPostion(int); // oblicz pozycję na podstawie kierunku
unieważnij kierunek wyświetlania(); // wyświetla dane
Blok poleceń Setup() - wczytanie zadanych współrzędnych do EEPROM, uruchomienie GPS, kompasu, uruchomienie wyświetlacza.
Blok poleceń cyklicznych pętli() – pobieranie aktualnych współrzędnych z GPS, obliczanie odległości i kierunku do danego punktu, wyświetlanie wartości odległości oraz strzałki wskazującej kierunek.
Inne programy dla Arduino:
Kompas: Prosty kompas wskazujący północ i pokazujący kierunek na wyświetlaczu.
GPStoLCD: wyświetla współrzędne GPS na wyświetlaczu.

Żywotność baterii: Żywotność baterii można wydłużyć poprzez usunięcie diody z modułu GPS.
Wniosek: tracker działa dobrze. Rzadko z niego korzystam, bo jest dość nieporęczny i zapominam nacisnąć przycisk przy wychodzeniu z samochodu.

Tego trackera można również używać podczas spacerów, aby powrócić do miejsca, z którego zacząłeś chodzić.

Argument na korzyść ATmega328

Kod, jak widać na powyższym zrzucie ekranu, zajmuje około 16 kilobajtów pamięci mikrokontrolera, co zdecydowanie nie wystarczy, jeśli Arduino jest oparte na ATmega168, chociaż oczywiście można wyciąć z oprogramowania nie do końca niezbędną funkcjonalność i tym samym spróbuj to dopasować. Naprawdę, dlaczego?


Na żądanie znajdź sterowniki do układu CH340G w pierwszych linkach „sterownik ch340g” w Google lub w archiwum tego artykułu.

Czujnik GY-85 to trójosiowy żyroskop MPU3200, akcelerometr ADXL345 i magnetometr HMC5883L na jednej płytce. To w zupełności wystarczy do poruszania się w przestrzeni w trzech osiach.

Najlepiej się sprawdził, nie wymaga wstępnej kalibracji, wystarczy podłączyć, zflashować Arduino i działa. Chociaż oprogramowanie AHRS (Heading Vertical) umożliwia kalibrację, jest to osobny temat, który moim zdaniem jest więcej niż szczegółowo omówiony na forum gier WarThunder;

Różne drobiazgi - przewody, lutownica (bez niej się nie obejdzie, bo Arduino Nano i GY-85 pochodzą z Chin w stanie lutowanym), przedłużacz USB, kabel Mini-USB do Arduino Nano V3.

Zespół śledzenia głowy:

Łączymy Arduino i GY-85, w przypadku Arduino Nano będzie tak:

  • VCC_IN -> 5 V;
  • SCL -> A5;
  • SDA -> A4;
  • GND -> GND.

Zasilamy Arduino - dioda na czujniku powinna się zaświecić.

W przypadku Head Trackera idealnym rozwiązaniem jest przymocowanie czujnika do pałąka słuchawek, ja zrobiłem to metodą „krzywej ręki” tak:

Jestem pewien, że zrobisz to znacznie ostrożniej niż ja.

Płytkę Arduino przymocowałem zwykłą skrętką, aby niczego nie zwierać na płytce, nie usuwałem izolacji z przewodu, wszystko działa dobrze, jeśli nie ma się przy tym ciągle majstrowania.

Jeśli chodzi o nie majstrowanie przy płycie, po prostu skręciłem kabel USB i przewód słuchawek za pomocą tej samej skrętki.

Na początku chciałem zrobić to samo z czujnikiem, jednak metodą prób i błędów dowiedziałem się, że nie wchodzi to w grę, napiszę poniżej dlaczego. Połączyłem wszystko nitką i wyszło tak:

Pod czujnik podłożyłem kawałek pianki polietylenowej, a także pod arduino, żeby nie porysowały mi słuchawek i dzięki temu wszystko trzyma się lepiej.

To prawda, że ​​\u200b\u200bjest tu kilka punktów, ważne jest, aby ustawić czujnik w taki sposób, aby strzałka Y wskazywała na monitor.

Czujnik należy także trzymać z daleka od metalowych przedmiotów, zalecana odległość wynosi 5-10 cm. W przeciwnym razie mogą wystąpić zniekształcenia odczytów i zakłócenia w działaniu czujnika. Dotyczy to tych, którzy mają metalową obręcz słuchawek. Chociaż nie tylko metal może zniekształcać odczyty, ale także samo arduino czy nawet przewody, jak pokazano na filmie, dlatego staraj się to wszystko odsunąć od czujnika przynajmniej na odległość 5-10 cm.

Najprostszym rozwiązaniem z metalową opaską jest gąbka do mycia naczyń:

Ponieważ mam plastikową opaskę (była testowana z magnesem), zapomniałem o tym wszystkim.

Oprogramowanie sprzętowe:
Jeśli nadal nie masz zainstalowanej najnowszej wersji Arduino IDE, pobierz ją i zainstaluj. W chwili pisania tego tekstu jest to wersja 1.6.8.

W naszym inercyjnym trackerze użyjemy niestandardowego oprogramowania układowego z oprogramowania sprzętowego AHRS dla projektu SparkFun 9DOF Razor IMU i SparkFun 9DOF Sensor Stick ( archiwum ze wszystkim, czego potrzebujesz na dole artykułu). W Arduino IDE otwórz plik Razor_AHRS.ino, który znajduje się w archiwum wzdłuż ścieżki DIY headtracker\RazorAHRS_FaceTrack\Razor_AHRS:

I załaduj oprogramowanie do Arduino:

Konfiguracja OpenTrack:

OpenTrack to darmowy program typu open source przeznaczony do śledzenia ruchów głowy użytkownika i konwertowania ich na współrzędne. Może współpracować z różnymi urządzeniami wejściowymi, w tym ramką IR i Oculus Rift lub smartfonami.

Na filmie koleś gra w kultową grę Elite Dangerous, używając swojego smartfona z Androidem jako myszy:

Umożliwiło to użycie obu rąk podczas rozgrywki. Zgadzam się, wygląda bardzo fajnie. Co prawda nie podoba mi się kilka niuansów w tej realizacji, a mianowicie smartfon jest stosunkowo nieporęczny i ciężki, GY-85 wyraźnie zajmuje miejsce i mniej waży, a poza tym nie odciąga uwagi od promieniowania z nadajnik WiFi w smartfonie.

Wróćmy jednak do naszych modułów Arduino i GY-85. Najpierw musisz pobrać i zainstalować najnowszą wersję programu (obecnie jest to opentrack-2.3 rc21p11), uruchomić:

Teraz musimy skonfigurować program - w polu „Tracker” wybierz „Hatire Arduino” i wciśnij przycisk „…”, a naszym oczom ukaże się coś takiego:

Okno ustawień Hatire Arduino



Tutaj należy zmienić „Port szeregowy” na port COM naszego Arduino, w moim przypadku jest to COM42. Następnie przejdź do zakładki „Polecenie”, w polach „Init” i „Start” wpisz 1000, następnie ustaw „BaudRate” na 115200, a na koniec kliknij „Zapisz” i „OK”.

Następnie w głównym oknie programu naciśnij przycisk „Start”, zacznij obracać czujnik w różnych osiach i monitoruj ośmiornicę. Najprawdopodobniej ruchy czujnika i ośmiornicy będą inne, przynajmniej w moim przypadku tak się stało, nie przerywając śledzenia, wciskamy przycisk „…” w polu „Tracker”. Tutaj musimy skonfigurować „Konfigurację osi”, aby ruchy czujnika pokrywały się z ruchami ośmiornicy w programie - ustawiamy wartości RotX/RotY/RotZ dla „Yaw”, „Pich” i „Roll ” w żądanej kolejności, ten pomoże nam z tym obrazkiem:

Jak to się u mnie skończyło, możecie zobaczyć na ekranie ustawień „Hatire Arduino” powyżej. Oś „Roll” musiała zostać odwrócona, ponieważ ośmiornica kręciła się w przeciwnym kierunku.

Program umożliwia także dostosowanie czułości dla każdej z osi – przycisk „Mapowanie” w głównym oknie programu:

Prawym przyciskiem myszy możesz umieszczać i przesuwać punkty, lewy przycisk myszy usuwa punkty, możesz umieścić kilka punktów, aby wyeliminować nieliniowość w odczytach czujnika, jeśli taka występuje. Wszystkie osie mam skonfigurowane w ten sposób:

Zakładka „Filtr” w głównym oknie programu umożliwia zmianę typu filtra lub jego całkowite wyłączenie, w takim przypadku odczyty będą bardzo niestabilne i ostre. Mój typ filtra to „Accela” z następującymi ustawieniami:

Jeśli chcesz, możesz pobawić się ustawieniami.

Przejdźmy do ustawienia emulacji myszy, w tym celu w zakładce „Protokół” wybierz „emulacja myszy” i wciśnij przycisk „…”, tam musisz ustawić „Yaw” i „Pich” dla X , osie Y:

Naciskamy przycisk start i voila - zapobieganie osteochondrozie szyjnej. Na koniec dodam, że przed naciśnięciem przycisku start należy ustawić głowę na poziomie monitora, gdyż sensor w tym momencie się kalibruje.

Zalety w porównaniu z opcją wykorzystania kamery internetowej i diod IR:

  • Szybkość, to oprogramowanie generuje około 60 odczytów na sekundę, co jest w przybliżeniu równe kamerze internetowej 60 fps, ale wydaje mi się, że kamera internetowa 60 fps jest wyraźnie droższa niż GY-85 i płyta Arduino;
  • Brak zależności od oświetlenia;
  • Ponieważ prawie wszystkie obliczenia są wykonywane przez Arduino, zasoby procesora komputera są rozładowywane, to znaczy w grach występuje mniej błędów;
  • Można go używać nie tylko do gier, ale także do ułatwienia korzystania z komputera osobom niepełnosprawnym.
Wady:
  • Połączenie przewodowe, które w zasadzie można rozwiązać za pomocą modułu Bluetooth, np. HC-05/HC-06. Oprogramowanie sprzętowe obsługuje tę funkcję.
  • Czujnik jest stosunkowo drogi, swój kupiłem za 8 dolarów, co uważam za przesadę;
  • Estetyczny wygląd słuchawek ulegnie pogorszeniu, ale jestem pewien, że poradzicie sobie lepiej ode mnie.

Z pewnością wielu będzie miało pytanie, jaki jest sens odwracania głowy wokół monitora, jeśli stoi nieruchomo? Jak mówiłem w filmie, to dopiero początek tematu VR na moim kanale YouTube.

Schemat projektu:

Witajcie przyjaciele, nad naszymi głowami lata wiele różnych statków kosmicznych. Wśród nich znajduje się około 90 niezwykle przydatnych satelitów nawigacyjnych amerykańskiego systemu GPS, rosyjskiego GLONASS, europejskiego Galileo i chińskiego BeiDou. A dzisiaj złapiemy od nich sygnał.

Na początek trochę teorii: System nawigacji satelitarnej to sieć statków kosmicznych, które latają po znanych wcześniej trasach, dokładnie obserwując ich orbitę i trajektorię, lub znajdują się w znanym stacjonarnym punkcie na orbicie geostacjonarnej lub geosynchronicznej. Satelity latają średnio na wysokości około 20 tysięcy kilometrów, a każdy z nich jest ultraprecyzyjnym zegarem atomowym, który w sposób ciągły transmituje na całą planetę swój aktualny czas.

Sygnał radiowy rozchodzący się z prędkością światła dociera do Ziemi z opóźnieniem od 60 do 90 milisekund, zależnym od odległości satelity. Znając dokładną lokalizację źródła sygnału radiowego na podstawie opóźnienia czasowego jego propagacji, możesz określić dokładną odległość do satelity. Następnie, triangulując odległości do kilku znanych obiektów, możesz dowiedzieć się, gdzie jesteś w przestrzeni.

Wyobraź sobie, że ta niebieska kula to nasza planeta. Nad nim na wysokości 20 tysięcy kilometrów przelatują trzy satelity. Mierząc odległość do pierwszego, otrzymasz informację, że jesteś gdzieś na tym okręgu - na razie nie jest to zbyt pouczające. Sygnał z drugiego satelity wyjaśni Twoją lokalizację w dwóch punktach przecięcia bez odniesienia do wysokości. Sygnał z trzeciego satelity nawigacyjnego wskaże wysokość tych punktów nad powierzchnią i formalnie rozwiąże równanie nawigacyjne, redukując Twoją lokalizację do dwóch możliwych lokalizacji. W rzeczywistości jedna z tych współrzędnych ma niesamowitą charakterystykę i zostaje odrzucona, co całkowicie rozwiązuje problem. Sygnał z czwartego satelity robi to samo – już jednoznacznie i dokładnie rozwiązuje równanie nawigacji.

Pomiar odległości do każdego kolejnego satelity zwiększa dokładność pozycjonowania i dziś wynosi ona od 1 do 3 metrów przy standardowej widoczności około 10 satelitów nawigacyjnych.

Omówiliśmy teorię, przejdźmy do praktyki. Obecnie różne moduły nawigacyjne są sprzedawane osobno. Te najprostsze i najstarsze obsługują jedynie sygnały z amerykańskiego systemu obserwacyjnego GPS, średnio 5-7 satelitów. Bardziej zaawansowane moduły mogą także odbierać sygnały z rosyjskiej konstelacji GLONASS, zwiększając całkowitą liczbę obserwowanych satelitów średnio dwukrotnie. W sprzedaży dostępne są także moduły współpracujące z kompasem, służące do dokładnej nawigacji i utrzymywania kursu.

Na ekranie mojego telefonu widoczne są satelity różnych systemów nawigacji. Okręgi to GPS, trójkąty to GLONASS, a gwiazdy to chińskie BeiDou. Tym samym mój telefon obsługuje trzy różne systemy nawigacji i łącząc z nich sygnały, zwiększa dokładność wyznaczania lokalizacji. Teraz nad moją głową jest 28 satelitów, a sygnał jest dostępny tylko z 7. To znaczy. mój telefon już z góry wie, gdzie znajduje się każdy satelita. A brakujący sygnał z 21 satelitów oznacza, że ​​są one poza zasięgiem wzroku. Sygnał nawigacyjny jest bardzo słaby, od słowa VASCHE prawie nie jest odbijany, blokuje go teren, budynki, dach samochodu - jakikolwiek metal nad głową lub z boku. Nawet padający za oknem śnieg zakłóca dobry odbiór.

Do realizacji projektu potrzebny będzie szereg modułów elektronicznych: programowalna platforma Arduino Nano, ekran OLED 128 na 32 punkty (podłączony poprzez magistralę I2C), moduł GPS do połączenia poprzez UART, dowolna bateria litowa z pojemność powyżej 200 miliamperów, ochronny moduł ładowania litu i konwerter wspomagający, aby uzyskać 5 woltów. Mam tutaj trzy różne typy, każdy będzie odpowiedni. Planowałem również użyć kolorowej diody LED RGB do wskazywania stanu, ale porzuciłem to w miarę postępu projektu.

Podłączamy ekran do Arduino i napotykamy pierwszą trudność. Standardowa biblioteka ekranów OLED zajmuje 20 kB, co stanowi 70% pamięci mikrokontrolera i nie pozostawia praktycznie miejsca na program. Wcześniej składałem wysokościomierz i spotkałem się z faktem, że każda nowa linia kodu prowadzi do przepełnienia pamięci i mikrokontroler zawiesza się podczas pracy. Dlatego użyję znacznie lżejszej biblioteki. Nie współpracuje z grafiką, wyświetla jedynie tekst na ekranie OLED i zajmuje jedynie 1 KB pamięci.

Oddzielnie podłączam moduł GPS do płytki prototypowej i widzę pierwsze dane nawigacyjne – sygnał z kosmosu został przechwycony i przetworzony. Teraz wyświetlam informacje na ekranie. Klasa! Widzi 4 satelity, teraz 3 i znowu 4, już 5! Dla lepszego odbioru GPS moduł zawiesza się za oknem na drucie.

Podczas opracowywania projektu korzystałem z różnych typów modułów GPS. Prosty GPS i połączony GPS z Glonass. Aby sprawdzić stabilność działania, musieliśmy przeprowadzić serię wielogodzinnych eksperymentów. Moduły okazały się działać, ale musiałem majstrować przy bibliotekach oprogramowania. Wypróbowałem kilka różnych bibliotek i jako jedyna TinyGPS+ współpracowała ze wszystkimi modułami GPS na raz.

Ogólnie rzecz biorąc, biblioteka analizuje protokół NMEA; po prostu analizuje dane wysyłane przez moduł GPS dwa razy na sekundę. Tak wygląda nieprzetworzony strumień danych.

Dzięki temu mój firmware umożliwia podłączenie niemal każdego modułu GPS poprzez UART z protokołem transmisji danych NMEA. Tak naprawdę to większość modułów posiada piny RX i TX. Polecam wziąć moduł GPS od Glonass, widzi więcej satelitów, więc jego dokładność jest większa. Linki do wszystkich komponentów i modułów znajdują się w opisie tego filmu.

Płytka prototypowa pokazała pełną funkcjonalność systemu, teraz można wszystko zmontować sprzętowo. Jako zasilanie użyję baterii litowej; będzie ona podłączona do płytki ochronnej podczas ładowania. Na tej płytce dolny rezystor R3 ustawia prąd ładowania akumulatora, domyślnie jest to 1 amper, to dużo jak na małe akumulatory, więc rezystor trzeba wymienić. Na ekranie widać tabliczkę z wartościami rezystorów dla różnych prądów ładowania. Jeśli bateria ma pojemność 500 miliamperogodzin, należy ustawić prąd ładowania nie wyższy niż ta wartość. Te. możesz ustawić 200 lub 300 miliamperów i nie przekraczać 500.

Następnie należy zwiększyć napięcie; ekran i moduł GPS są zasilane napięciem 5 woltów. Zrobimy to za pomocą konwertera napięcia podwyższającego. Są one zwykle instalowane w bankach mocy w celu podniesienia napięcia z 3,7 do 5 woltów. Będę używać małego zielonego modułu, może on wysyłać prąd do 300 mA i w zupełności wystarczy do tego projektu.

Zaktualizowałem oprogramowanie, teraz podczas ładowania na głównym ekranie wyświetla się aktualny dokładny czas z satelitów, liczba widocznych satelitów i aktualna prędkość trackera, przeskakuje, ponieważ pojawił się błąd w określeniu lokalizacji. Po naciśnięciu przycisku ekran się zmienia. Tutaj wyświetlana jest aktualna wartość prędkości oraz maksymalna wartość dla okresu obserwacji. Na drugim ekranie wyświetlana jest aktualna odległość do punktu zerowego, maksymalna zarejestrowana odległość od niego oraz licznik kilometrów.

Mierzę rozmiary wszystkich modułów i staram się je ułożyć możliwie kompaktowo. Ale niezależnie od tego, jak bardzo się starałem, cienki ekran nie pasował do szerokiego odbiornika GPS. Dlatego zdecydowałem się na wymianę ekranu na inny OLED 128x64 piksele. Dzięki temu jest bardziej ergonomiczny i pozwala na zastosowanie większego przycisku. Ekrany OLED są w pełni kompatybilne i wymagają minimalnej korekty kodu, dlatego firmware będzie dostępny zarówno dla wersji urządzenia z małym ekranem, jak i z dużym.

Schemat montażu jest prosty. Trzeba podłączyć ekran do magistrali I2C, są to piny A4 i A5, moduł gps podłączamy do portu szeregowego oprogramowania na pinach D3 i D4. Przycisk na pinie D7. Przeciągamy moc z akumulatora przez moduł ochronny do przełącznika, następnie do konwertera podwyższającego i podłączamy Arduino do 5 woltów.

Do wygodnego rozmieszczenia komponentów użyję zielonej płytki prototypowej o wymiarach 7 na 3 centymetry. Aby ekran nie zawieszał się na złączu, montuję go na plastikowych stojakach z dystansami 5 mm. Pomiędzy ekranem a przyciskiem znajdzie się odbiornik GPS. Z tyłu płytki znajdować się będzie kontroler Arduino, bateria oraz płytka ochronna. Ja użyję cienkiej baterii litowej o mocy 350 miliamperów, jeśli się nie mylę, takie stosuje się w papierosach elektronicznych, ale jak już mówiłem, można zastosować dowolną baterię litową.

Wszystko jeszcze raz mierzę, mierzę i przygotowuję projekt obudowy do druku na drukarce 3D. Dosłownie 15 minut na stronie TinkerCAD i projekt jest gotowy do druku. Przenoszę plik na pendrive, uruchamiam i zaczynamy. Czas drukowania wynosi około 40 minut, jest to pierwsza jednostka celownicza do wypróbowania rozmieszczenia modułów.

Płytka i przycisk mieszczą się na swoim miejscu, jednak ekran zabrakło dosłownie milimetra, a przeszkadzała wewnętrzna podstawka. I tak wszystko pasuje i jest zainstalowane na swoim miejscu. Świetnie, edytuję projekt i drukuję ostateczną wersję etui w kolorze pomarańczowym. Po zakończeniu drukowania należy dać stołowi czas na ostygnięcie i dopiero wtedy oderwać część, wtedy przednia strona będzie gładka i nie będzie się przesuwać.

Odłamuję i oczyszczam krawędź mocującą plastiku. Ponieważ użyłem tworzywa ABS, podlega ono dodatkowej obróbce acetonem. Nakładam go pędzlem, warstwy dodatkowo sklejają się ze sobą, a bryła staje się mocniejsza i nabiera połysku.

Płytka idealnie mieści się w etui, zapięcia są dopasowane, guzik nie zacina się. Z jednej strony znajduje się otwór na złącze Arduino Nano, a z drugiej strony do ładowania akumulatora. Okazał się trochę węższy, więc poszerzam go skalpelem.

Płytka ładująca ma wypustki na krawędziach, uniemożliwiają one zagłębienie złącza, dlatego szlifuję je pilnikiem igłowym. Teraz tablica jest na swoim miejscu.

Ogólnie urządzenie będzie wyglądać następująco: Obudowa znajduje się na górze. Pod nim znajdzie się mikroprzełącznik, płytka stykowa z ekranem, moduł GPS i przycisk. Z boku znajduje się także konwerter step-up.

Oddzielnie dla włącznika wyciąłem skalpelem otwór w obudowie, nad przyciskiem. Jest wpuszczony w korpus i nie będzie przeszkadzał.

Czas lutować. Przylutowuję pierwszy styk ekranu do płytki, przymierzam - wszystko się zgadza i można przylutować pozostałe trzy styki. Teraz przycisk. I pamiętaj, aby oczyścić topnik za pomocą pędzla. Przylutowuję przewody do modułu zabezpieczającego akumulator.

Podczas podłączania należy zwrócić uwagę na kolor przewodów. Nieprawidłowe kolory czasami pochodzą z Chin. W tym przypadku zdecydowałem się na wylutowanie złącza i przylutowanie przewodów bezpośrednio dla lepszego kontaktu. Procedura jest złożona i wymaga precyzji i ostrożności podczas lutowania. Dodatkowo wypełniam styki gorącym klejem, co zabezpieczy ścieżki i przewód przed przypadkowym wyciągnięciem. I od razu cały moduł GPS wpychamy w folię termokurczliwą; nie jest to konieczne, ale dodatkowo zabezpieczy przed uszkodzeniami mechanicznymi i zwarciami po zamontowaniu na płytce stykowej.

Owijamy również konwerter doładowania w folię termokurczliwą. Do zabezpieczenia modułów używam taśmy dwustronnej. Podczas montażu płytki okazało się, że miejsca na przewody jest za mało, więc wywierciłem otwory na środku i przełożyłem tam przewody zasilające.

Swoją drogą polecam fajną wiertarkę akumulatorową. Działa na jednym akumulatorze 18650 i pozwala szybko wywiercić podobne otwory w płytach i obudowach. Wcześniej do takich prac musiałem wyjąć Dremel z obudowy i podłączyć go do gniazdka, ale teraz zawsze mam to. wiertarka pod ręką.

Górna część płytki jest zmontowana, przewody są gwintowane i teraz pozostaje zainstalować przełącznik. Aby to zrobić, odgryzamy na nim dodatkowe nogi; potrzebne są tylko dwie do dostarczania i przerywania jedzenia. Przylutowujemy do nich drut i jak zwykle wszystko obkurczamy termokurczliwie. Następnie możesz zainstalować przełącznik na swoim miejscu i wypełnić go gorącym klejem. Teraz wygodnie będzie włączać i wyłączać tracker.

Instaluję płytkę w obudowie i mocuję ją czterema małymi śrubkami. Odpowiednie otwory znajdują się już na wspornikach obudowy. Po zdjęciu folii ochronnej z ekranu zauważyłem dużą szczelinę pomiędzy wyświetlaczem a obudową. Dlatego wziąłem kawałek przezroczystego opakowania od jakiejś elektroniki i wyciąłem z niego szkło, aby pasowało do okna. I przykleiłem go acetonem do plastiku obudowy.

Montaż przeprowadzamy zgodnie ze schematem, nie ma tu żadnych trudności ani niuansów. Po prostu zwróć uwagę, plus na plus, minus na minus. Przełącznik podłączamy bezpośrednio do wyjścia modułu ładującego. Spowoduje to wyłączenie całego obwodu zasilania i zapobiegnie rozładowaniu akumulatora.

Po przylutowaniu wszystkich przewodów do modułów zaklej dolną płytkę niebieską taśmą izolacyjną. Na górze będzie kontroler Arduino z ładowaniem, a bez izolacji istnieje możliwość zwarcia czegoś.

Lutuję moduł ochronny i zabezpieczam go gorącym klejem.

Zalewam styki akumulatora i szybko przylutowuję do nich przewód, żeby nie przegrzać akumulatora. Z jednej strony i z drugiej. Następnie należy podłączyć kabel micro USB i zasilić moduł zabezpieczający, co uruchomi jego działanie.

Gotowe, teraz musisz wgrać oprogramowanie sprzętowe. Podłączamy Arduino do komputera, przechodzimy do strony projektu, link do niej znajduje się w opisie filmu. Pobierz archiwum, rozpakuj pliki, zainstaluj biblioteki, otwórz wymaganą wersję oprogramowania dla ekranu 32- lub 64-punktowego i załaduj ją do sterownika. Wszystko zadziałało za pierwszym razem! Dane z pręta GPS. Fajny!

Instaluję sterownik na swoim miejscu, włączam autonomiczne zasilanie... iiiiiiiii... nic. Dioda LED zasilania na Arduino świeci, ale ekran się nie włącza. I tak właśnie doszło do tryndets, powód do dziś nie wiem. Kilka godzin pracy zajęło mi doprowadzenie trackera do pracy autonomicznej z wbudowanego akumulatora.

Na początku myślałem, że przyczyną jest mały konwerter step-up. Ale sprawdzenie multimetrem wykazało stabilne 5 woltów. Następnie podłączyłem autonomiczny moduł zasilania, który został mi z innego projektu, jest on zbudowany na dużym konwerterze podwyższającym - i otóż tracker uruchomił się, ale po kilku sekundach zawiesił się.

Naładowałem na nim akumulator i umieściłem tracker na oknie, żeby łapał satelity. Trzy minuty później odebrał sygnał z 4 satelitów i określił lokalizację. To znaczy, że działa i prawdopodobnie da się go zmontować? Zmieniamy konwerter podwyższający, podobno ten mały hałasuje z zasilacza.

Aby to zrobić musiałem całkowicie zdemontować tracker, odlutować wszystkie przewody i złożyć go ponownie. Nowy moduł zasilający stanie w tym samym miejscu, co stary, trzeba było jedynie zdjąć jedną podstawkę, aby zmieścił się pod ekranem.

To wszystko, skręciłem przewody w warkocze, aby uniknąć zakłóceń. Aaa... ten drań znowu się nie włączył. Dokładniej, włączył się i natychmiast zamarł z artefaktami na ekranie. Tyle godzin pracy i wszystko na nic. Wymiana konwertera nie pomogła.

Próbowałem zamontować kondensatory na zasilaczu - nic nie pomogło. Tracker odmawiał pracy autonomicznej, zarówno z przetwornic podwyższających napięcie, jak i z zasilacza laboratoryjnego - zawieszał się lub w ogóle się nie włączał. Ale jednocześnie działało idealnie ze złącza USB Arduino.

Korzystając z metody sekwencyjnego wyłączania, udało mi się dowiedzieć, że winę za to ponosi ekran OLED - ale nadal nie rozumiem dlaczego. Rozwiązanie znaleziono nagle. Podczas kolejnej kontroli autonomicznego zasilacza przypadkowo przyłożyłem 5 woltów do pinu VIN. Zaznaczam, że ten pin! Nie! przeznaczony do zasilania napięciem 5 V i wymaga napięcia od 7 do 12 V.

Niemniej jednak tracker natychmiast się uruchomił i zaczął działać stabilnie. Te. Okazuje się, że przyczyną problemu nie był mały stabilizator, a coś innego.

Jednocześnie postanowiłem sprawdzić aktualne zużycie. Od 5 woltów tracker zużywał około 70 miliamperów. A od 4 woltów przez konwerter podwyższający okazało się, że wynosi około 110 miliamperów. W ten sposób moja mała bateria 350 miliamperów wystarczy na trzy godziny pracy. A zasilacza jeszcze nie zoptymalizowałem, można odciąć zawsze włączone diody LED i nadal oszczędzać baterię.

Tracker zaczął działać całkowicie stabilnie, zostawiłem go na oknie i po kilku minutach złapał 4 satelity. Świetnie

Jeśli chcesz pomóc mi zrozumieć przyczynę dziwnego zachowania Arduino, oto wprowadzenie:

1 – Tracker działa, jeśli jest zasilany poprzez złącze USB Arduino.

2 – Tracker zawiesza się i nie włącza się, jeśli zasilasz go przez pin Arduino 5 V, przykładając do niego napięcie 5 woltów z dowolnego źródła zasilania.

3 – Tracker zawiesza się i nie włącza się, jeśli przyłożone zostanie do niego napięcie 7 woltów lub więcej poprzez pin Arduino VIN.

4 – Lokalizator działa, jeśli jest zasilany niestandardowym napięciem 5 V poprzez ten sam pin VIN.

Gotowe urządzenie to uniwersalny autonomiczny prędkościomierz, dalmierz, licznik kilometrów i satelitarny zegar czasu dokładnego w jednej obudowie.

Na ekranie głównym po załadowaniu u góry wyświetla się aktualny czas i data w Greenwich, druga linia to aktualna prędkość 0,3 km na godzinę oraz maksymalna wartość prędkości, która została zarejestrowana od chwili włączenia - 26 kilometrów na godzinę. W trzeciej linii aktualna odległość do punktu zerowego wynosi 530 metrów, a maksymalna odległość, jaką osiągnięto od włączenia to 580 metrów. W czwartej linii licznik kilometrów wskazuje 923 metry i liczbę używanych satelitów.

Dolne znaki to ilość danych otrzymanych z modułu GPS.

Po krótkim naciśnięciu przycisku zmienia się sposób wyświetlania ekranu, a przy dłuższym przytrzymaniu tracker zapamiętuje aktualną lokalizację jako zerowy punkt odniesienia dla pomiarów odległości. Drugi ekran wyświetla aktualną i maksymalną prędkość. Trzeci ekran zawiera informację o odległości do punktu zerowego. Czwarty ekran to licznik przebiegu. Piąta szerokość i długość geograficzna.

Możesz zresetować licznik przebiegu i wartości maksymalne, naciskając długo przycisk na ekranie z tymi parametrami. Te. przejdź do licznika kilometrów i przytrzymaj przycisk, aby go zresetować.

Przejdźmy do testów. Teraz tracker widzi 12 satelitów. Ustawiłem bieżący punkt zerowy i wyzerowałem licznik przebiegu. To samo robię na liczniku kilometrów w samochodzie. Po przejechaniu 1,2 km według prędkościomierza samochodu, na trackerze GPS zobaczyłem te same 1205 metrów. Aktualna odległość do punktu zerowego w linii prostej wynosi 0,93 km. A według mapy te same 930 metrów, na razie wszystko się zgadza.

Postanowiłem zmierzyć większy dystans. Ponownie zresetowałem odczyty do zera w trackerze i samochodzie. Po przejechaniu 8,4 km na trackerze stwierdziłem, że odległość była krótsza – tylko 7974 metry. W tym przypadku aktualna odległość do punktu zerowego wynosi 4930 metrów. Sprawdźmy to na mapie, okazuje się bardzo dokładnie, te same 4930 metrów. Nie jest jasne, ale dlaczego licznik kilometrów wskazuje 400 metrów i który licznik kilometrów leży – w samochodzie czy na GPS.

OK, czas wydrukować tylną okładkę i przetestujemy ją ponownie. Zamykam. Waga gotowego urządzenia okazała się 55 gramów, dużo, ale nie krytycznie - na koniec pokażę, jak to zmniejszyć.

Dotarłem na lodowisko i postanowiłem zmierzyć prędkość hokeisty. Cholera, nadal musi zdjąć osłony, żeby przyspieszyć. Rezultatem była ogromna prędkość, jak „rosyjska rakieta” - 5 kilometrów na godzinę. Szedłem, a wszystko dlatego, że sufit na lodowisku jest izolowany folią odblaskową, aby chronić przed zimnem. Jest sygnał z satelitów, ale nie jest on dokładny.

Zróbmy ostatni test za pomocą telefonu komórkowego. Telefon widzi 7 satelitów, a tracker 9. Rozpoczynam rejestrację i resetuję licznik kilometrów w trackerze. Cóż... chodźmy. Po przejechaniu trzech kilometrów telefon i tracker pokazywały identyczne wartości na liczniku kilometrów. 3017 kontra 3021 metrów to super wynik, nie spodziewałem się takiej celności.

Ale licznik kilometrów wariował, aż 12 tysięcy kilometrów. Nie kwaśny. Wcześniej podczas debugowania programu spotkałem się już z taką usterką, a tracker został jednocześnie przesunięty o 7 tysięcy kilometrów. Kiedy wróciłem do domu, utworzyłem w Google punkt z zerową szerokością i długością geograficzną. Okazało się, że znajduje się na Oceanie Atlantyckim, niedaleko wybrzeży Ghany. Po zmierzeniu odległości od niego do mojej lokalizacji otrzymałem te same 7 tysięcy kilometrów. Okazuje się, że moduł GPS czasami pomija zera wzdłuż współrzędnych. Można to łatwo naprawić, dodając tylko jeden warunek do kodu programu. I tej usterki nie zaobserwowano podczas testów.

Myślę, że tracker okazał się świetny; to moje pierwsze doświadczenie w bezpośredniej pracy z modułami GPS. Dlaczego jest to potrzebne? Taki tracker może służyć jako autonomiczny prędkościomierz lub niezależny licznik kilometrów. Można go umieścić na rowerze, samochodzie, zabawce lub quadkopterze. Umożliwia także pomiar odległości w linii prostej do zadanego punktu; wartości zerowe zapisywane są w pamięci nieulotnej. Zapamiętuje maksymalne osiągnięte wartości prędkości i dystansu. Robi to wszystko autonomicznie i nie jest zależne od nikogo innego niż satelity. I oczywiście jest to dokładny zegar czasu. Potrzebuję go do pomiaru maksymalnej prędkości i maksymalnej odległości od obiektów. Zgadza się, musisz zwiększyć wysokość ekranu, aby zmierzyć, jak wysoko się podnosisz!

Porozmawiajmy o tym, jak zmniejszyć wagę; najłatwiej to zrobić, montując tracker na platformie Arduino Pro Mini przy napięciu 3,3 V. Wtedy nie będziesz potrzebował konwertera podwyższającego, zamiast tego będzie mały liniowy odgałęzienie o napięciu 3,3 V, moduł GPS działa bez problemów na tym napięciu, a na ekranie trzeba będzie ominąć stabilizator mocy.

No cóż, od razu odpowiem na pytanie: czy można dołożyć moduł GSM i sterować trackerem poprzez SMS? Tak, możesz. Aby to zrobić oprócz samego modułu trzeba będzie jeszcze dodać do kodu programu przetwarzanie poleceń SMS i to powinien być osobny projekt.

To tyle na dziś, jeśli spodobał Ci się ten film, to na pewno Ci się spodoba i udostępnisz link do filmu swoim znajomym.

Dziękuję za obejrzenie, życzę wszystkim powodzenia i do zobaczenia w nowych filmach! Do widzenia!



Spodobał Ci się artykuł? Podziel się ze znajomymi!
Czy ten artykuł był pomocny?
Tak
NIE
Dziękujemy za Twoją opinię!
Coś poszło nie tak i Twój głos nie został policzony.
Dziękuję. Twoja wiadomość została wysłana
Znalazłeś błąd w tekście?
Wybierz, kliknij Ctrl + Enter a my wszystko naprawimy!