Spisu treści:

☠WEEDINATOR☠ Część 2: Nawigacja satelitarna: 7 kroków (ze zdjęciami)
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna: 7 kroków (ze zdjęciami)

Wideo: ☠WEEDINATOR☠ Część 2: Nawigacja satelitarna: 7 kroków (ze zdjęciami)

Wideo: ☠WEEDINATOR☠ Część 2: Nawigacja satelitarna: 7 kroków (ze zdjęciami)
Wideo: Голубая стрела (1958) фильм 2024, Czerwiec
Anonim
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna
☠WEEDINATOR☠ Część 2: Nawigacja satelitarna

Powstaje system nawigacji Weedinator!

Wędrujący robot rolniczy, którym można sterować za pomocą smartfona.

… I zamiast po prostu przejść przez zwykły proces, jak to się składa, pomyślałem, że spróbuję wyjaśnić, jak to właściwie działa – oczywiście nie WSZYSTKO, ale najważniejsze i najciekawsze fragmenty. Proszę wybaczyć grę słów, ale to sposób przepływu danych między poszczególnymi modułami, który uważam za interesujący i rozłożony na najniższy mianownik, kończy się na rzeczywistych "bitach" - zerach i jedynkach. Jeśli kiedykolwiek byłeś zdezorientowany co do bitów, bajtów, znaków i łańcuchów, to może teraz nadszedł czas, aby się nie mylić? Zamierzam również spróbować rozwiać nieco abstrakcyjną koncepcję o nazwie „Anulowanie błędów”.

Sam system zawiera:

  • GPS/GNSS: Ublox C94 M8M (łazik i podstawa)
  • Cyfrowy kompas 9DOF Razor IMU MO
  • Fona 800H 2G GPRS komórkowy
  • 2,2-calowy ekran TFT
  • Arduino Due 'Master'
  • Różne „niewolnice” Arduino.

Co dziwne, wiele urządzeń nawigacyjnych nie ma cyfrowego kompasu, co oznacza, że jeśli jesteś nieruchomy i zgubisz się, musisz iść lub jechać w dowolnym losowym kierunku, zanim urządzenie pokaże właściwy kierunek z satelitów. Jeśli zgubisz się w gęstej dżungli lub na podziemnym parkingu, jesteś najedzony!

Krok 1: Jak to działa

Jak to działa
Jak to działa

Obecnie prosta para współrzędnych jest ładowana ze smartfona lub komputera, które są następnie pobierane przez Weedinator. Są one następnie interpretowane jako kurs w stopniach i odległość do przebycia w mm.

Fona GPRS służy do uzyskiwania dostępu do bazy danych online za pośrednictwem sieci komórkowej 2G oraz odbierania i przesyłania współrzędnych do Arduino Due za pośrednictwem Arduino Nano. Due jest Master i kontroluje szereg innych Arduino jako Slaves za pośrednictwem magistrali I2C i szeregowych. Due może wchodzić w interakcje z danymi na żywo z Ublox i Razor i wyświetlać nagłówek obliczony przez jednego z jego niewolników Arduino.

Satelitarny tracker Ublox jest szczególnie sprytny, ponieważ wykorzystuje usuwanie błędów, aby uzyskać bardzo dokładne poprawki - końcowe nominalne całkowite odchylenie około 40 mm. Moduł składa się z identycznej pary, z których jeden, „łazik”, porusza się wraz z Weedinatorem, a drugi, „podstawa” jest przymocowana do słupa gdzieś na zewnątrz. Eliminację błędów osiąga się dzięki temu, że baza jest w stanie osiągnąć naprawdę dokładną poprawkę, używając dużej liczby próbek w czasie. Próbki te są następnie uśredniane w celu skompensowania zmieniających się warunków atmosferycznych. Gdyby urządzenie się poruszało, to oczywiście nie byłoby w stanie uzyskać żadnego uśrednienia i byłoby całkowicie na łasce zmieniającego się otoczenia. Jeśli jednak urządzenie statyczne i ruchome współpracują ze sobą, o ile mogą się ze sobą komunikować, mogą czerpać korzyści z obu. W dowolnym momencie jednostka podstawowa nadal ma błąd, ale ma również wcześniej obliczoną superdokładną poprawkę, dzięki czemu może obliczyć rzeczywisty błąd, odejmując jeden zestaw współrzędnych od drugiego. Następnie wysyła obliczony błąd do łazika za pośrednictwem łącza radiowego, który następnie dodaje błąd do własnych współrzędnych i hej, presto, mamy kasowanie błędu! W praktyce eliminacja błędów stanowi różnicę między całkowitym odchyleniem od 3 metrów do 40 mm.

Cały system wygląda na skomplikowany, ale w rzeczywistości jest dość łatwy do zbudowania, albo luźno na nieprzewodzącej powierzchni, albo przy użyciu zaprojektowanej przeze mnie płytki drukowanej, która pozwala na bezpieczne przykręcenie wszystkich modułów. Przyszły rozwój jest wbudowany w płytkę PCB, co pozwala na włączenie szerokiej gamy Arduino do sterowania silnikami do sterowania, ruchu do przodu i wbudowanej maszyny CNC. Nawigacja będzie również wspomagana przez co najmniej jeden system rozpoznawania obiektów, wykorzystujący kamery do wykrywania kolorowych obiektów, na przykład fluorescencyjnych piłek golfowych, które są starannie umieszczone w jakiejś siatce – Uważaj na tę przestrzeń!

Krok 2: Komponenty

składniki
składniki
składniki
składniki
składniki
składniki
  • Ublox C94 M8M (łazik i podstawa) x 2 szt.
  • Cyfrowy kompas 9DOF Razor IMU MO
  • Fona 800H 2G GPRS komórkowy 1946
  • Arduino Due
  • Arduino Nano x 2 z
  • SparkFun Pro Micro
  • Adafruit 2.2" TFT IL1940C 1480
  • PCB (patrz załączone pliki Gerber) x 2 z
  • Rezystory zerowe 1206 SMD x 12 szt
  • 1206 diod LED x 24 z

Plik PCB otwiera się za pomocą oprogramowania „Design Spark”.

Krok 3: Okablowanie modułów

Okablowanie modułów
Okablowanie modułów

To jest łatwa część - szczególnie łatwa w przypadku płytki drukowanej, którą zrobiłem - po prostu postępuj zgodnie z powyższym schematem. Należy uważać, aby uniknąć podłączania modułów 3V do 5V, nawet na liniach szeregowych i I2C.

Krok 4: Kod

Kod
Kod

Większość kodu dotyczy uporządkowanego poruszania się danych w systemie i dość często istnieje potrzeba konwersji formatów danych z liczb całkowitych na zmiennoprzecinkowe na łańcuchy i na znaki, co może być bardzo mylące! Protokół „Serial” obsługuje tylko znaki i podczas gdy I2Protokół C obsługuje bardzo małe liczby całkowite, stwierdziłem, że lepiej jest je przekonwertować na znaki, a następnie ponownie na liczby całkowite na drugim końcu linii transmisyjnej.

Kontroler Weedinator to w zasadzie 8-bitowy system z wieloma indywidualnymi Arduino lub „MCU”. Gdy 8 bit jest opisany jako rzeczywiste zera binarne i jedynek, może to wyglądać tak: B01100101, co byłoby równe:

(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =

Wartość cyfry dziesiętnej 128 64 32 16 8 4 2 1
Wartość cyfr binarnych 0 1 1 0 0 1 0 1

= 101

A maksymalna możliwa wartość to 255…. Zatem maksymalny 'bajt' liczby całkowitej, jaki możemy przesłać przez I2C to 255, co jest bardzo ograniczające!

Na Arduino możemy przesyłać do 32 znaków ASCII lub bajtów jednocześnie za pomocą I2C, co jest znacznie bardziej przydatne, a zestaw znaków zawiera cyfry, litery i znaki kontrolne w formacie 7-bitowym, jak poniżej:

Obraz
Obraz

Na szczęście kompilator Arduino wykonuje całą pracę związaną z konwersją ze znaku na binarny w tle, ale nadal oczekuje prawidłowego typu znaku do transmisji danych i nie akceptuje „ciągów”.

Teraz sprawy mogą się pogmatwać. Znaki mogą być wyrażone jako pojedyncze znaki przy użyciu definicji char lub jako jednowymiarowa tablica 20 znaków przy użyciu char[20]. Arduino String jest bardzo podobny do tablicy znaków i jest dosłownie ciągiem znaków często interpretowanych przez ludzki mózg jako „słowa”.

// Buduje znak 'distanceCharacter':

Inicjator ciągu = ""; dystansString = inicjator + dystansString; int n = odległośćString.length(); for (int aa=0;aa<=n;aa++) { odległośćZnak[aa] = odległośćCiąg[aa]; }

Powyższy kod może przekonwertować długi ciąg znaków na tablicę znaków, która może być następnie przesłana przez I2C lub seryjny.

Na drugim końcu linii transmisyjnej dane można przekonwertować z powrotem na ciąg znaków za pomocą następującego kodu:

odległośćString = odległośćString + c; // ciąg = ciąg + znak

Tablicy znaków nie można przekonwertować bezpośrednio na liczbę całkowitą i należy najpierw przejść do formatu ciągu, ale poniższy kod przekonwertuje z ciągu na liczbę całkowitą:

int wynik = (ciągOdległości).toInt();

int odległośćMetry = wynik;

Teraz mamy liczbę całkowitą, której możemy użyć do obliczeń. Liczby zmiennoprzecinkowe (liczby z kropką dziesiętną) należy na etapie transmisji przeliczyć na liczby całkowite, a następnie podzielić przez 100 do dwóch miejsc po przecinku, np.:

odległość pływakaMetry = odległośćMm / 1000;

Na koniec można utworzyć ciąg znaków z kombinacji znaków i liczb całkowitych, np.:

// Tutaj dane są kompilowane w znak:

dataString = inicjator + "NIEDŹWIEDŹ" + łożysko z + "ODLEGŁOŚĆ" + odległość; // Ograniczenie do 32 znaków // Ciąg = ciąg + znaki + liczba całkowita + znaki + liczba całkowita.

Reszta kodu to standardowe rzeczy Arduino, które można znaleźć w różnych przykładach w bibliotekach Arduino. Sprawdź przykład 'examples >>>> Strings' i przykłady biblioteki 'wire'.

Oto cały proces przesyłania i odbierania pływaka:

Konwersja Float ➜ Integer ➜ String ➜ Tablica znaków ….. następnie tablica znaków TRANSMIT z Master ➜➜

➜➜ ODBIERZ poszczególne postacie na Slave…. następnie przekonwertuj Znak ➜ Łańcuch ➜ Liczba całkowita ➜ Float

Krok 5: Baza danych i strona internetowa

Baza danych i strona internetowa
Baza danych i strona internetowa
Baza danych i strona internetowa
Baza danych i strona internetowa

Powyżej pokazana jest struktura bazy danych oraz załączone pliki z kodem php i html. Nazwy użytkowników, nazwy baz danych, nazwy tabel i hasła są wygaszone ze względów bezpieczeństwa.

Krok 6: Testy nawigacji

Testy nawigacyjne
Testy nawigacyjne
Testy nawigacyjne
Testy nawigacyjne
Testy nawigacyjne
Testy nawigacyjne

Udało mi się podłączyć rejestrator danych do tablicy kontrolnej Weedinator przez I2C i uzyskać wyobrażenie o wydajności pozycjonowania satelitarnego Ublox M8M:

Na „zimnym starcie”, pokazanym na zielonym wykresie, moduł zaczął z dużą ilością błędów, całkiem podobnych do „normalnego” GPS, i stopniowo błąd zmniejszał się, aż po około 2 godzinach uzyskał poprawkę RTK między łazikiem i podstawa (pokazana jako czerwony krzyż). W ciągu tych 2 godzin moduł podstawowy stale tworzy i aktualizuje średnią wartość dla szerokości i długości geograficznej, a po zaprogramowanym odstępie czasu decyduje, że ma dobrą poprawkę. Następne 2 wykresy pokazują zachowanie po „gorącym starcie ' gdzie moduł podstawowy obliczył już dobrą średnią. Górny wykres obejmuje okres 200 minut i czasami poprawka zostaje utracona, a łazik wysyła wiadomość NMEA do Weedinatora, że poprawka chwilowo stała się zawodna.

Dolny niebieski wykres jest „przybliżeniem” na czerwonym polu na górnym wykresie i pokazuje dobre reprezentatywne zdjęcie wydajności Ublox, z całkowitym odchyleniem 40 mm, co jest więcej niż wystarczająco dobre, aby poprowadzić Weedinator do jego lokalizacji, ale może nie na tyle dobre, aby uprawiać glebę wokół pojedynczych roślin?

Trzeci wykres przedstawia dane zebrane z łazikiem i bazą w odległości 100 metrów - Nie wykryto dodatkowego błędu - odległość oddzielenia nie miała wpływu na dokładność.

Krok 7: Finał

Zalecana: