Sisällysluettelo:

EWEEDINATOR☠ Osa 2: Satelliittinavigointi: 7 vaihetta (kuvilla)
EWEEDINATOR☠ Osa 2: Satelliittinavigointi: 7 vaihetta (kuvilla)

Video: EWEEDINATOR☠ Osa 2: Satelliittinavigointi: 7 vaihetta (kuvilla)

Video: EWEEDINATOR☠ Osa 2: Satelliittinavigointi: 7 vaihetta (kuvilla)
Video: Голубая стрела (1958) фильм 2024, Joulukuu
Anonim
EWEEDINATOR☠ Osa 2: Satelliittinavigointi
EWEEDINATOR☠ Osa 2: Satelliittinavigointi
EWEEDINATOR☠ Osa 2: Satelliittinavigointi
EWEEDINATOR☠ Osa 2: Satelliittinavigointi
EWEEDINATOR☠ Osa 2: Satelliittinavigointi
EWEEDINATOR☠ Osa 2: Satelliittinavigointi
EWEEDINATOR☠ Osa 2: Satelliittinavigointi
EWEEDINATOR☠ Osa 2: Satelliittinavigointi

Weedinator -navigointijärjestelmä on syntynyt!

Pyörivä maatalousrobotti, jota voidaan ohjata älypuhelimella.

… Ja sen sijaan, että kävisimme läpi säännöllisen kokoonpanoprosessin, ajattelin yrittää selittää, miten se todella toimii - ei tietenkään KAIKKI, vaan tärkeimmät ja mielenkiintoisimmat asiat. Anteeksi sananlasku, mutta se, miten data kulkee yksittäisten moduulien välillä, on mielestäni mielenkiintoinen ja jaettu pienimpään nimittäjään, ja lopulta saamme todellisia "bittejä" - nollia ja ykkösiä. Jos olet koskaan ollut hämmentynyt biteistä, tavuista, merkeistä ja merkkijonoista, nyt saattaa olla aika hämmentyä? Yritän myös purkaa hieman abstraktin käsitteen nimeltä "Virheen peruutus".

Itse järjestelmässä on:

  • GPS/GNSS: Ublox C94 M8M (Rover ja Base)
  • 9DOF Partakone IMU MO digitaalinen kompassi
  • Fona 800H 2G GPRS matkapuhelin
  • 2,2 "TFT -näyttö
  • Arduino Due 'Master'
  • Erilaisia Arduinon orjia.

Kummallista, että monissa satelliittinavigointilaitteissa ei ole digitaalista kompassia, mikä tarkoittaa, että jos olet paikalla ja kadonnut, sinun täytyy kävellä tai ajaa mihin tahansa satunnaiseen suuntaan, ennen kuin laite voi näyttää sinulle oikean suunnan satelliiteista. Jos eksyt paksuun viidakkoon tai maanalaiseen pysäköintialueeseen, olet täynnä!

Vaihe 1: Näin se toimii

Kuinka se toimii
Kuinka se toimii

Tällä hetkellä älypuhelimesta tai tietokoneesta ladataan yksinkertainen koordinaattipari, jonka Weedinator lataa. Nämä tulkitaan sitten suuntana asteina ja matkaa millimetreinä.

GPRS fonaa käytetään pääsemään online -tietokantaan 2G -matkapuhelinverkon kautta ja vastaanottamaan ja lähettämään koordinaatit Arduino Due -laitteelle Arduino Nanon kautta. Due on isäntä ja ohjaa joukkoa muita Arduinoja orjina I2C- ja sarjaväylien kautta. Due voi olla vuorovaikutuksessa Ubloxin ja Razorin reaaliaikaisten tietojen kanssa ja näyttää otsikon, jonka yksi sen Arduino -orjista on laskenut.

Ublox -satelliittiseuranta on erityisen älykäs, koska se käyttää virheiden poistoa saadakseen erittäin tarkkoja korjauksia - lopullinen nimellinen kokonaispoikkeama noin 40 mm. Moduuli koostuu identtisestä parista, joista toinen, "rover", liikkuu Weedinatorin kanssa ja toinen, "pohja" on kiinnitetty napaan jossain ulkona. Virheiden peruutus saavutetaan siten, että tukiasema pystyy saavuttamaan todella tarkan korjauksen käyttämällä suurta määrää näytteitä ajan mittaan. Nämä näytteet lasketaan sitten keskiarvoksi muuttuvien ilmakehän olosuhteiden kompensoimiseksi. Jos laite liikkuisi, se ei selvästikään pystyisi saamaan minkäänlaista keskiarvoa ja olisi täysin muuttuvan ympäristön armoilla. Kuitenkin, jos staattinen ja liikkuva laite toimivat yhdessä, niin kauan kuin ne voivat kommunikoida keskenään, he voivat hyötyä molemmista. Tukiasemassa on aina virhe, mutta sillä on myös aiemmin laskettu erittäin tarkka korjaus, jotta se voi laskea todellisen virheen vähentämällä yhden koordinaattisarjan toisesta. Sitten se lähettää lasketun virheen roverille radiolinkin kautta, joka sitten lisää virheen omiin koordinaatteihinsa ja hei presto, meillä on virheen peruutus! Käytännössä virheenpoisto tekee eron 3 metrin ja 40 mm: n kokonaispoikkeaman välillä.

Koko järjestelmä näyttää monimutkaiselta, mutta on itse asiassa melko helppo rakentaa joko löysästi johtamattomalle pinnalle tai käyttämällä suunniteltavaa piirilevyä, jonka avulla kaikki moduulit voidaan kiinnittää tukevasti. Tuleva kehitys on rakennettu piirilevylle, jolloin laaja valikoima Arduinoja voidaan sisällyttää ohjauksen, eteenpäin liikkeen ja sisäisen CNC-koneen ohjausmoottoreihin. Navigointia avustaa myös ainakin yksi esineiden tunnistusjärjestelmä, joka käyttää kameroita värillisten kohteiden havaitsemiseen, esimerkiksi fluoresoivat golfpallot, jotka on sijoitettu huolellisesti jonkinlaiseen verkkoon - Katso tätä tilaa!

Vaihe 2: Komponentit

Komponentit
Komponentit
Komponentit
Komponentit
Komponentit
Komponentit
  • Ublox C94 M8M (Rover ja Base) x 2
  • 9DOF Razor IMU MO digitaalinen kompassi
  • Fona 800H 2G GPRS matkapuhelin 1946
  • Arduino Due
  • Arduino Nano x 2
  • SparkFun Pro Micro
  • Adafruit 2,2 "TFT IL1940C 1480
  • PCB (katso liitteenä olevat Gerber -tiedostot) x 2
  • 1206 SMD nollaohmin vastukset x 12 of
  • 1206 LEDiä x 24 kpl

PCB -tiedosto avautuu 'Design Spark' -ohjelmistolla.

Vaihe 3: Moduulien kytkentä

Moduulien kytkentä
Moduulien kytkentä

Tämä on helppo osa - etenkin helppo tekemäni piirilevyn kanssa - seuraa vain yllä olevaa kaaviota. On huolehdittava siitä, ettei 3V -moduuleja kytketä 5 V: iin edes sarja- ja I2C -linjoilla.

Vaihe 4: Koodi

Koodi
Koodi

Suurin osa koodista koskee datan siirtymistä järjestelmään järjestyksessä ja melko usein on tarpeen muuntaa datamuodot kokonaisluvuista kellukkeiksi merkkijonoiksi ja merkeiksi, mikä voi olla hyvin hämmentävää! Sarjaprotokolla käsittelee vain merkkejä ja I2C -protokolla käsittelee hyvin pieniä kokonaislukuja, minusta oli parempi muuntaa ne merkkeiksi ja muuntaa sitten takaisin kokonaisluvuiksi siirtolinjan toisessa päässä.

Weedinator -ohjain on pohjimmiltaan 8 -bittinen järjestelmä, jossa on paljon yksittäisiä Arduinoja tai MCU: ita. Kun 8 -bittisiä kuvataan todellisiksi binaarisiksi nolliksi, ne voivat näyttää tältä: B01100101, joka vastaa:

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

Desimaaliluku 128 64 32 16 8 4 2 1
Binäärilukuinen arvo 0 1 1 0 0 1 0 1

= 101

Ja suurin mahdollinen arvo on 255 … Joten suurin kokonaisluku 'tavu', jonka voimme lähettää I: n kautta2C on 255, mikä on erittäin rajoittavaa!

Arduinolla voimme lähettää enintään 32 ASCII -merkkiä tai tavua kerrallaan käyttämällä I: tä2C, joka on paljon hyödyllisempi, ja merkistö sisältää numeroita, kirjaimia ja ohjausmerkkejä 7 -bittisessä muodossa seuraavasti:

Kuva
Kuva

Onneksi Arduino -kääntäjä tekee kaiken muunnoksen merkistä binaariksi taustalla, mutta se odottaa silti oikean tyyppistä merkkiä tiedonsiirtoon, eikä se hyväksy merkkijonoja.

Nyt tilanne voi muuttua sekaisin. Merkit voidaan ilmaista yksittäisinä merkeinä käyttämällä char -määritelmää tai 20 -ulotteisena yksipainotteisena matriisina käyttämällä merkkiä [20]. Arduino -merkkijono on hyvin samanlainen kuin merkkijono ja se on kirjaimellisesti merkkijono, jonka ihmisen aivot tulkitsevat usein sanoiksi.

// Rakentaa merkin "distanceCharacter":

Merkkijonon aloittaja = ""; distanceString = aloittaja + distanceString; int n = etäisyysJono.pituus (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Yllä oleva koodi voi muuntaa pitkän merkkijonon merkkijonoksi, joka voidaan sitten lähettää I: n kautta2C tai sarja.

Siirtolinjan toisessa päässä data voidaan muuntaa takaisin merkkijonoksi käyttämällä seuraavaa koodia:

distanceString = etäisyysJono + c; // merkkijono = merkkijono + merkki

Merkkiryhmää ei voi muuntaa suoraan kokonaislukuksi, ja sen on ensin mentävä merkkijonomuotoon, mutta seuraava koodi muuntuu merkkijonosta kokonaisluvuksi:

int tulos = (distanceString).toInt ();

int distanceMetres = tulos;

Nyt meillä on kokonaisluku, jota voimme käyttää laskelmien tekemiseen. Kellukkeet (luvut desimaalilla) on muunnettava kokonaisluvuiksi lähetysvaiheessa ja jaettava sitten 100: lla kahden desimaalin tarkkuudella, esim.

float distanceMetres = etäisyysMm / 1000;

Lopuksi merkkijono voidaan luoda merkkien ja kokonaislukujen seoksesta, esim.

// Tässä tiedot kootaan merkkiksi:

dataString = aloittaja + "BEAR" + zlaakeri + "DIST" + zdistance; // Vain 32 merkkiä // Merkkijono = merkkijono + merkkiä + kokonaisluku + merkkiä + kokonaisluku.

Loput koodista ovat tavallisia Arduino -juttuja, jotka löytyvät Arduino -kirjastojen eri esimerkeistä. Tutustu esimerkkeihin "esimerkit >>>> Jouset" ja "lanka" -kirjastoesimerkkeihin.

Tässä on koko kellukkeen lähetys- ja vastaanottoprosessi:

Muunna Float ➜ Kokonaisluku ➜ Merkkijono ➜ Merkkitaulukko ….. sitten LÄHETÄ merkkipaketti Masterilta ➜➜

EC VASTAA yksittäisiä hahmoja orjassa…. Muunna sitten merkki ➜ merkkijono ➜ kokonaisluku ➜ kelluva

Vaihe 5: Tietokanta ja verkkosivu

Tietokanta ja verkkosivusto
Tietokanta ja verkkosivusto
Tietokanta ja verkkosivusto
Tietokanta ja verkkosivusto

Yllä on tietokantarakenne ja php- ja html -kooditiedostot liitteenä. Käyttäjätunnukset, tietokantojen nimet, taulukkojen nimet ja salasanat poistetaan turvallisuuden vuoksi.

Vaihe 6: Navigointitestit

Navigointitestit
Navigointitestit
Navigointitestit
Navigointitestit
Navigointitestit
Navigointitestit

Onnistuin kytkemään dataloggerin Weedinator -ohjauskorttiin I2C: n kautta ja saamaan jonkinlaisen käsityksen Ublox M8M -satelliitin paikannustehokkuudesta:

Vihreässä käyrässä näytetyssä 'kylmäkäynnistyksessä' moduuli lähti liikkeelle paljon virheitä, aivan kuten 'normaali' GPS, ja vähitellen virhe pieneni, kunnes noin 2 tunnin kuluttua se sai RTK -korjauksen roverin välillä ja pohja (näkyy punaisena ristinä). Tuon kahden tunnin aikana perusmoduuli rakentaa ja päivittää jatkuvasti leveys- ja pituusasteiden keskiarvoa ja sen jälkeen, kun esiohjelmoitu aikaväli päättää, että se on saanut hyvän korjauksen. 'jossa perusmoduuli on jo laskenut hyvän keskiarvon. Ylempi kuvaaja on yli 200 minuutin ajanjakso ja joskus korjaus menetetään ja rover lähettää NMEA -viestin Weedinatorille, että korjaus on väliaikaisesti tullut epäluotettavaksi.

Alempi sininen kuvaaja on `` lähentää '' ylemmän kaavion punaiseen ruutuun ja näyttää hyvän edustavan kuvan Ubloxin suorituskyvystä, kokonaispoikkeama 40 mm, mikä on enemmän kuin tarpeeksi hyvä ohjaamaan Weedinatorin paikkaansa, mutta ei ehkä tarpeeksi hyvä viljelemään maaperää yksittäisten kasvien ympärillä?

Kolmas kaavio näyttää tiedot, jotka on kerätty Roverin ja Base: n kanssa 100 metrin etäisyydellä toisistaan - Lisävirhettä ei havaittu - etäisyyden etäisyys ei vaikuttanut tarkkuuteen.

Vaihe 7: Lopullinen

Suositeltava: