Kazalo:

☠WEEDINATOR☠ 2. del: Satelitska navigacija: 7 korakov (s slikami)
☠WEEDINATOR☠ 2. del: Satelitska navigacija: 7 korakov (s slikami)

Video: ☠WEEDINATOR☠ 2. del: Satelitska navigacija: 7 korakov (s slikami)

Video: ☠WEEDINATOR☠ 2. del: Satelitska navigacija: 7 korakov (s slikami)
Video: Convenience items needed in the family 2024, Julij
Anonim
WEEDINATOR☠ 2. del: Satelitska navigacija
WEEDINATOR☠ 2. del: Satelitska navigacija
WEEDINATOR☠ 2. del: Satelitska navigacija
WEEDINATOR☠ 2. del: Satelitska navigacija
WEEDINATOR☠ 2. del: Satelitska navigacija
WEEDINATOR☠ 2. del: Satelitska navigacija
WEEDINATOR☠ 2. del: Satelitska navigacija
WEEDINATOR☠ 2. del: Satelitska navigacija

Rojen je navigacijski sistem Weedinator!

Potujoči kmetijski robot, ki ga je mogoče upravljati s pametnim telefonom.

… In namesto da bi šel skozi običajen postopek, kako je sestavljen, sem mislil, da bom poskusil razložiti, kako v resnici deluje - očitno ne VSE, ampak najpomembnejše in najbolj zanimive koščke. Oprostite besedi, vendar se mi zdi zanimivo, kako podatki tečejo med posameznimi moduli in jih razčlenimo na najnižji imenovalec, ki ga na koncu dobimo z dejanskimi "bitovi" - ničlami in enotami. Če ste bili kdaj zmedeni glede bitov, bajtov, znakov in nizov, je morda zdaj pravi čas, da se zmedete? Prav tako bom poskušal odpraviti zmedo rahlo abstraktnega koncepta, imenovanega "Preklic napak".

Sam sistem ima:

  • GPS/GNSS: Ublox C94 M8M (Rover in baza)
  • 9DOF Razor IMU MO digitalni kompas
  • Fona 800H 2G GPRS mobilno
  • 2,2 -palčni zaslon TFT
  • Arduino Due "Mojster"
  • Različni Arduino "sužnji".

Nenavadno je, da veliko satelitskih navigacijskih naprav nima digitalnega kompasa, kar pomeni, da morate, če ste mirujoči in izgubljeni, hoditi ali voziti v kateri koli naključni smeri, preden vam naprava lahko pokaže pravilno smer s satelitov. Če se izgubite v debeli džungli ali podzemnem parkirišču, ste polni!

1. korak: Kako deluje

Kako deluje
Kako deluje

Trenutno se iz pametnega telefona ali računalnika naloži preprost par koordinat, ki jih nato prenese Weedinator. Ti se nato razlagajo v naslovu v stopinjah in razdalji za potovanje v mm.

Fona GPRS se uporablja za dostop do spletne baze podatkov prek mobilnega omrežja 2G ter za sprejem in prenos koordinat na Arduino Due prek Arduino Nano. Due je mojster in upravlja niz drugih Arduinov kot podrejenih preko I2C in serijskih vodilov. Due lahko komunicira z živimi podatki iz Ubloxa in Razorja ter prikaže naslov, ki ga izračuna eden od njegovih sužnjev Arduino.

Satelitski sledilnik Ublox je še posebej pameten, saj uporablja preklic napak za zelo natančne popravke - končno nominalno skupno odstopanje približno 40 mm. Modul je sestavljen iz enakega para, od katerih se eden, "rover", premika z Weedinatorjem, drugi pa je "osnova" pritrjena na drog nekje na prostem. Odpoved napak je dosežena s tem, da lahko baza z veliko količino vzorcev sčasoma doseže resnično natančno rešitev. Ti vzorci se nato povprečijo, da kompenzirajo spreminjajoče se atmosferske razmere. Če bi se naprava premikala, očitno ne bi mogla doseči kakršnega koli povprečja in bi bila popolnoma na milost in nemilost spreminjajočega se okolja. Če pa statična in premična naprava delujeta skupaj, če lahko komunicirata med seboj, imata lahko koristi od obeh. Osnovna enota ima v vsakem trenutku napako, vendar ima tudi predhodno izračunano super natančno popravilo, tako da lahko izračuna dejansko napako tako, da odšteje en niz koordinat od drugega. Izračunsko napako nato pošlje roverju po radijski povezavi, ki napako nato doda na lastne koordinate in hej presto, imamo napako pri preklicu! Praktično gledano, preklic napak naredi razliko med skupnim odstopanjem od 3 metrov do 40 mm.

Celoten sistem je videti zapleten, v resnici pa ga je precej enostavno zgraditi bodisi ohlapno na neprevodni površini bodisi z uporabo tiskanega vezja, ki sem ga oblikoval, kar omogoča varno pritrditev vseh modulov. Prihodnji razvoj temelji na tiskanem vezju, kar omogoča vgradnjo velikega števila Arduinosov za krmiljenje motorjev za krmiljenje, premikanje naprej in vgrajen CNC stroj. Navigaciji bo pomagal tudi vsaj en sistem za prepoznavanje predmetov, ki s kamerami zaznava barvne predmete, na primer fluorescenčne žogice za golf, ki so skrbno postavljene v nekakšno mrežo - Oglejte si ta prostor!

Korak: Komponente

Sestavni deli
Sestavni deli
Sestavni deli
Sestavni deli
Sestavni deli
Sestavni deli
  • Ublox C94 M8M (Rover in baza) x 2 od
  • 9DOF Razor IMU MO digitalni kompas
  • Fona 800H 2G GPRS mobilno 1946
  • Arduino Due
  • Arduino Nano x 2 od
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (glej priložene datoteke Gerber) x 2 od
  • 1206 SMD upori nič ohmov x 12 of
  • 1206 LED x 24 palcev

Datoteka PCB se odpre s programsko opremo 'Design Spark'.

3. korak: Ožičenje modulov

Ožičenje modulov
Ožičenje modulov

To je enostaven del - še posebej enostaven pri tiskanem vezju, ki sem ga naredil - samo sledite zgornjemu diagramu. Paziti je treba, da se izognete ožičenju 3v modulov na 5v, tudi na serijskih in I2C vodih.

4. korak: Koda

Koda
Koda

Večina kode se ukvarja s pridobivanjem podatkov za urejeno gibanje po sistemu in pogosto je treba pretvoriti podatkovne formate iz celih v plavajoče v nize in v znake, kar je lahko zelo zmedeno! Protokol 'Serial' bo obravnaval samo znake, medtem ko bo I2Protokol C bo obravnaval zelo majhna cela števila, meni se je zdelo bolje, da jih pretvorim v znake in nato na drugem koncu daljnovoda pretvorim nazaj v cela števila.

Krmilnik Weedinator je v bistvu 8 -bitni sistem z veliko posameznimi Arduini ali MCU -ji. Ko je 8 bit opisan kot dejanske binarne ničle in enote, lahko izgleda tako: B01100101, kar bi bilo enako:

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

Decimalna številska vrednost 128 64 32 16 8 4 2 1
Dvojna številska vrednost 0 1 1 0 0 1 0 1

= 101

Največja možna vrednost je 255 … Tako lahko največje celo število 'bajtov' prenesemo preko I2C je 255, kar je zelo omejujoče!

Na Arduinu lahko hkrati pošljemo do 32 znakov ASCII ali bajtov z uporabo I2C, ki je veliko bolj uporaben, nabor znakov pa vključuje številke, črke in kontrolne znake v 7 -bitnem formatu, kot je prikazano spodaj:

Slika
Slika

Na srečo prevajalnik Arduino v ozadju opravi vse delo pri pretvorbi znakov v binarno datoteko, vendar še vedno pričakuje pravilno vrsto znakov za prenos podatkov in ne bo sprejel 'nizov'.

Zdaj je čas, ko se stvari lahko zmedejo. Znaki se lahko izrazijo kot enojni znaki z uporabo definicije char ali kot enodimenzionalna matrika z 20 znaki z uporabo char [20]. Arduino niz je zelo podoben nizu znakov in je dobesedno niz znakov, ki jih človeški možgani pogosto razlagajo kot "besede".

// Zgradi znak 'distanceCharacter':

Začetnik niza = ""; distanceString = pobudnik + distanceString; int n = distanceString.length (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Zgornja koda lahko pretvori dolg niz znakov v niz znakov, ki se nato lahko prenese prek I2C ali serijsko.

Na drugem koncu daljnovoda lahko podatke pretvorite nazaj v niz z naslednjo kodo:

distanceString = distanceString + c; // niz = niz + znak

Niz znakov ni mogoče pretvoriti neposredno v celo število in mora najprej iti v obliko niza, vendar se naslednja koda pretvori iz niza v celo število:

int result = (distanceString).toInt ();

int distanceMetres = rezultat;

Zdaj imamo celo število, s katerim lahko izračunamo. Plavajoče (števila z decimalno vejico) je treba na stopnji prenosa pretvoriti v cela števila, nato pa jih za dve decimalni mesti deliti s 100, npr.:

float distanceMetres = razdaljaMm / 1000;

Nazadnje, niz lahko ustvarite iz mešanice znakov in celih števil, na primer:

// Tu so podatki zbrani v znak:

dataString = pobudnik + "BEAR" + zbearing + "DIST" + zdistance; // Omejeno na 32 znakov // Niz = niz + znaki + medštevilka + znaki + celo število.

Preostala koda je standardna Arduino, ki jo lahko najdete v različnih primerih v knjižnicah Arduino. Oglejte si primere 'examples >>>> Strings' in 'wire' library.

Tu je celoten postopek za prenos in sprejem plavajočega:

Pretvori Float ➜ Celo število ➜ Niz ➜ Znakovno polje ….. nato PRENOSI niz znakov iz Master ➜➜

➜➜ SPREJMITE posamezne znake na Slaveju…. nato pretvorite Znak ➜ Niz ➜ Celo število ➜ Float

5. korak: Baza podatkov in spletna stran

Baza podatkov in spletna stran
Baza podatkov in spletna stran
Baza podatkov in spletna stran
Baza podatkov in spletna stran

Zgoraj je prikazana struktura baze podatkov in priloženi sta datoteki s kodo php in html. Uporabniška imena, imena zbirk podatkov, imena tabel in gesla so zaradi varnosti prazna.

6. korak: Preskusi krmarjenja

Navigacijski testi
Navigacijski testi
Navigacijski testi
Navigacijski testi
Navigacijski testi
Navigacijski testi

Uspelo mi je preko I2C priključiti zapisovalnik podatkov na nadzorno ploščo Weedinator in dobiti nekaj predstave o zmogljivosti pozicioniranja satelita Ublox M8M:

Pri "hladnem zagonu", prikazanem na zelenem grafu, se je modul zagnal z veliko napakami, precej podobnimi "običajnemu" GPS -u, postopoma pa se je napaka zmanjševala, dokler po približno 2 urah ni dobil popravka RTK med roverjem in podnožje (prikazano kot rdeči križ). V tem 2-urnem obdobju osnovni modul nenehno gradi in posodablja povprečno vrednost zemljepisne širine in dolžine in potem, ko se vnaprej programiran časovni interval odloči, da je dobro popravljen. Naslednja 2 grafa prikazujeta vedenje po vročem zagonu ", kjer je osnovni modul že izračunal dobro povprečje. Zgornji graf je daljši od 200 minut, občasno se popravek izgubi in rover pošlje sporočilo NMEA Weedinatorju, da je popravek začasno postal nezanesljiv.

Spodnji modri graf je "povečava" rdečega polja na zgornjem grafu in prikazuje dober reprezentativen posnetek uspešnosti Ubloxa s skupnim odstopanjem 40 mm, kar je več kot dovolj dobro, da vodi Weedinator do njegove lokacije, a morda ni dovolj dobro za obdelavo tal okoli posameznih rastlin?

Tretji graf prikazuje podatke, zbrane z Roverjem in bazo 100 metrov narazen - Dodatne napake niso bile zaznane - razdalja ločevanja ni vplivala na natančnost.

7. korak: Končno

Priporočena: