Turinys:

EWEEDINATOR☠ 2 dalis. Palydovinė navigacija: 7 žingsniai (su nuotraukomis)
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija: 7 žingsniai (su nuotraukomis)

Video: EWEEDINATOR☠ 2 dalis. Palydovinė navigacija: 7 žingsniai (su nuotraukomis)

Video: EWEEDINATOR☠ 2 dalis. Palydovinė navigacija: 7 žingsniai (su nuotraukomis)
Video: Безымянная звезда (1 серия) (1978) фильм 2024, Liepa
Anonim
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija
EWEEDINATOR☠ 2 dalis. Palydovinė navigacija

Gimė „Weedinator“navigacijos sistema!

Riedantis žemės ūkio robotas, kurį galima valdyti išmaniuoju telefonu.

… Ir užuot tik atlikęs įprastą jo sudarymo procesą, aš maniau, kad pabandysiu paaiškinti, kaip tai iš tikrųjų veikia - aišku, ne VISKĄ, o svarbiausius ir įdomiausius dalykus. Prašau atleiskite už kalambūrą, bet būtent tai, kaip duomenų srautai tarp atskirų modulių man atrodo įdomūs ir suskirstyti į mažiausią vardiklį, galiausiai gauname tikrus „bitus“- nulius ir vienetus. Jei kada nors susipainiojote dėl bitų, baitų, simbolių ir eilučių, dabar gali būti laikas nesusipainioti? Aš taip pat pabandysiu supainioti šiek tiek abstrakčią koncepciją, pavadintą „Klaidos atšaukimas“.

Pati sistema pasižymi:

  • GPS/GNSS: „Ublox C94 M8M“(„Rover“ir „Base“)
  • „9DOF Razor IMU MO“skaitmeninis kompasas
  • Fona 800H 2G GPRS korinis
  • 2,2 colio TFT ekranas
  • „Arduino Due“meistras
  • Įvairūs „Arduino“vergai.

Kaip bebūtų keista, daugelis „Sat Nav“įrenginių neturi skaitmeninio kompaso, o tai reiškia, kad jei esate nejudantis ir pasiklydęs, turite eiti ar važiuoti bet kuria atsitiktine kryptimi, kad prietaisas galėtų parodyti jums teisingą palydovų kryptį. Jei pasiklysite storose džiunglėse ar požeminėje automobilių stovėjimo aikštelėje, būsite prikimšti!

1 žingsnis: kaip tai veikia

Kaip tai veikia
Kaip tai veikia

Šiuo metu iš išmaniojo telefono ar kompiuterio įkeliama paprasta koordinačių pora, kurią vėliau atsisiunčia „Weedinator“. Tada jie interpretuojami į kursą laipsniais ir atstumą, kurį reikia nuvažiuoti mm.

„GPRS fona“naudojama norint pasiekti internetinę duomenų bazę per 2G korinį tinklą ir gauti bei perduoti koordinates į „Arduino Due“per „Arduino Nano“. „Due“yra pagrindinis ir valdo daugybę kitų „Arduinos“kaip vergų per I2C ir nuoseklius autobusus. „Due“gali sąveikauti su tiesioginiais „Ublox“ir „Razor“duomenimis ir rodyti antraštę, apskaičiuotą vieno iš „Arduino“vergų.

„Ublox“palydovinis sekimo įrenginys yra ypač sumanus, nes jis naudoja klaidų atšaukimą, kad gautų labai tikslius pataisymus - galutinis nominalus bendras nuokrypis yra apie 40 mm. Modulį sudaro identiška pora, iš kurių viena, „rover“, juda kartu su „Weedinator“, o kita - „pagrindas“yra pritvirtintas prie stulpo kažkur atvirame lauke. Klaidų panaikinimas pasiekiamas tuo, kad bazė gali pasiekti tikrai tikslią pataisą, naudojant laikui bėgant daug mėginių. Tada šių mėginių vidurkis apskaičiuojamas keičiantis atmosferos sąlygoms. Jei prietaisas judėtų, akivaizdu, kad jis negalėtų gauti vidurkio ir būtų visiškai besikeičiančios aplinkos gailestingumas. Tačiau jei statinis ir judantis įrenginys veikia kartu, kol jie gali bendrauti tarpusavyje, jie gali gauti naudos iš abiejų. Bet kuriuo metu pagrindiniame įrenginyje vis dar yra klaida, tačiau jis taip pat turi anksčiau apskaičiuotą itin tikslų pataisymą, kad jis galėtų apskaičiuoti tikrąją klaidą, atimdamas vieną koordinačių rinkinį iš kito. Tada ji siunčia apskaičiuotą klaidą roveriui per radijo ryšį, o tada prideda klaidą prie savo koordinačių ir labas, mes turime klaidos atšaukimą! Praktiškai klaidų panaikinimas lemia skirtumą tarp 3 metrų ir 40 mm bendro nuokrypio.

Visa sistema atrodo sudėtinga, tačiau iš tikrųjų ją gana lengva pastatyti, palaidą ant nelaidžio paviršiaus arba naudojant mano sukurtą PCB, kuri leidžia tvirtai pritvirtinti visus modulius. Ateities plėtra yra pagrįsta PCB, leidžiančia įtraukti daugybę „Arduinos“, kad būtų galima valdyti vairavimo, judėjimo į priekį ir borto CNC mašinas. Naršyti taip pat padės bent viena objektų atpažinimo sistema, naudojant kameras, kad būtų galima aptikti spalvotus objektus, pavyzdžiui, fluorescencinius golfo kamuoliukus, kurie yra kruopščiai išdėstyti tinklelyje - Stebėkite šią erdvę!

2 žingsnis: komponentai

Komponentai
Komponentai
Komponentai
Komponentai
Komponentai
Komponentai
  • „Ublox C94 M8M“(„Rover“ir „Base“) x 2 iš
  • „9DOF Razor IMU MO“skaitmeninis kompasas
  • „Fona 800H 2G GPRS“korinis 1946 m
  • Arduino Due
  • „Arduino Nano“x 2
  • „SparkFun Pro Micro“
  • „Adafruit“2,2 colio TFT IL1940C 1480
  • PCB (žr. Pridėtus Gerber failus) x 2 iš
  • 1206 SMD nulinio omo rezistoriai x 12 iš
  • 1206 šviesos diodai x 24 iš

PCB failas atidaromas naudojant „Design Spark“programinę įrangą.

3 žingsnis: modulių prijungimas

Modulių prijungimas
Modulių prijungimas

Tai lengva dalis - ypač lengva naudojant mano pagamintą PCB - tiesiog sekite aukščiau pateiktą schemą. Reikia atsargiai vengti prijungti 3v modulius prie 5v, net nuosekliosios ir I2C linijos.

4 žingsnis: kodas

Kodas
Kodas

Dauguma kodo yra susiję su tuo, kad duomenys būtų tvarkingai judami sistemoje, ir gana dažnai reikia konvertuoti duomenų formatus iš sveikųjų skaičių į plūdes į eilutes ir simbolius, o tai gali būti labai painu! „Serijinis“protokolas apdoros tik simbolius, o „I“2C protokolas apdoros labai mažus sveikus skaičius, man pasirodė geriau juos konvertuoti į simbolius ir tada konvertuoti į sveikus skaičius kitame perdavimo linijos gale.

„Weedinator“valdiklis iš esmės yra 8 bitų sistema su daugybe atskirų „Arduinos“arba „MCU“. Kai 8 bitai yra apibūdinami kaip faktiniai dvejetainiai nuliai ir vienetai, tai gali atrodyti taip: B01100101, kuris būtų lygus:

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

Dešimtainė skaitmenų vertė 128 64 32 16 8 4 2 1
Dvejetainių skaitmenų vertė 0 1 1 0 0 1 0 1

= 101

Ir didžiausia galima vertė yra 255 … Taigi maksimalų sveikąjį „baitą“galime perduoti per I2C yra 255, o tai labai riboja!

„Arduino“vienu metu galime perduoti iki 32 ASCII simbolių arba baitų, naudodami I2C, kuris yra daug naudingesnis, o simbolių rinkinį sudaro skaičiai, raidės ir kontroliniai simboliai 7 bitų formatu, kaip nurodyta toliau:

Vaizdas
Vaizdas

Laimei, „Arduino“kompiliatorius atlieka visus konvertavimo iš simbolių į dvejetainius fone darbus, tačiau jis vis tiek tikisi teisingo tipo simbolių duomenų perdavimui ir nepriims „eilutės“.

Dabar viskas gali būti painu. Simboliai gali būti išreikšti kaip pavieniai simboliai, naudojant char apibrėžimą, arba kaip vientisas 20 simbolių masyvas, naudojant char [20]. Arduino eilutė yra labai panaši į simbolių masyvą ir pažodžiui yra simbolių eilutė, kurią žmogaus smegenys dažnai aiškina kaip „žodžius“.

// Sukuria simbolį „distanceCharacter“:

Stygos iniciatorius = ""; distanceString = iniciatorius + distanceString; int n = atstumasString.length (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Aukščiau pateiktas kodas gali paversti ilgą simbolių eilutę į simbolių masyvą, kuris vėliau gali būti perduotas per I2C arba serijinis.

Kitame perdavimo linijos gale duomenis galima konvertuoti atgal į eilutę naudojant šį kodą:

distanceString = distanceString + c; // eilutė = eilutė + simbolis

Simbolių masyvo negalima konvertuoti tiesiai į sveikąjį skaičių ir jis pirmiausia turi būti įvestas į eilutės formatą, tačiau šis kodas iš eilutės bus konvertuojamas į sveiką skaičių:

int rezultatas = (distanceString).toInt ();

int distanceMetres = rezultatas;

Dabar turime sveiką skaičių, kurį galime naudoti skaičiavimams. Plūdės (skaičiai su dešimtainiu tašku) perdavimo etape turi būti konvertuojamos į sveikus skaičius ir tada padalijamos iš 100 dviejų skaičių po kablelio, pvz.:

plūdės atstumasMetres = atstumasMm / 1000;

Galiausiai eilutę galima sukurti iš simbolių ir sveikųjų skaičių mišinio, pvz.:

// Čia duomenys surenkami į simbolį:

dataString = iniciatorius + "BEAR" + zbearing + "DIST" + zdistance; // Ribojamas iki 32 simbolių // Eilutė = eilutė + simboliai + sveikasis skaičius + simboliai + sveikasis skaičius.

Likusi kodo dalis yra standartinė „Arduino“medžiaga, kurią galima rasti įvairiuose „Arduino“bibliotekų pavyzdžiuose. Peržiūrėkite „pavyzdžių >>>> stygų“ir „vielos“bibliotekos pavyzdžius.

Štai visas plūdės perdavimo ir priėmimo procesas:

Konvertuoti plūdinį ➜ sveikąjį skaičių ring eilutę ➜ simbolių masyvą ….. tada PERDUOTI simbolių masyvą iš pagrindinio ➜➜

➜➜ GAUTI atskirus simbolius „Slave“…. tada konvertuokite simbolį ➜ eilutę ➜ sveiką skaičių ➜ plūdę

5 veiksmas: duomenų bazė ir tinklalapis

Duomenų bazė ir tinklalapis
Duomenų bazė ir tinklalapis
Duomenų bazė ir tinklalapis
Duomenų bazė ir tinklalapis

Aukščiau parodyta duomenų bazės struktūra ir pridedami php ir html kodo failai. Saugumo sumetimais vartotojo vardai, duomenų bazių pavadinimai, lentelių pavadinimai ir slaptažodžiai išbraukti.

6 veiksmas: naršymo bandymai

Navigacijos testai
Navigacijos testai
Navigacijos testai
Navigacijos testai
Navigacijos testai
Navigacijos testai

Man pavyko prijungti duomenų kaupiklį prie „Weedinator“valdymo plokštės per „I2C“ir susidaryti idėją apie „Ublox M8M“palydovinės padėties nustatymo našumą:

Įjungus „šaltą paleidimą“, parodytą žalioje diagramoje, modulis prasidėjo su daugybe klaidų, gana panašus į „įprastą“GPS, ir palaipsniui klaida sumažėjo, kol po maždaug 2 valandų RTV pataisė tarp roverio ir pagrindas (rodomas kaip raudonas kryžius). Per tą 2 valandų laikotarpį bazinis modulis nuolat kuria ir atnaujina vidutinę platumos ir ilgumos vertę, o iš anksto užprogramuotas laiko intervalas nusprendžia, kad jis buvo gerai ištaisytas. Kituose 2 grafikuose rodomas elgesys po karšto paleidimo kur bazinis modulis jau apskaičiavo gerą vidurkį. Viršutinis grafikas yra ilgesnis nei 200 minučių ir kartais pataisa prarandama, o roveris siunčia NMEA pranešimą „Weedinator“, kad pataisymas laikinai tapo nepatikimas.

Apatinė mėlyna diagrama yra „priartinimas“prie viršutinio grafiko raudono langelio ir rodo gerą reprezentatyvų „Ublox“našumo momentinį vaizdą, kurio bendras nuokrypis yra 40 mm, o tai yra daugiau nei pakankamai gerai, kad nukreiptų „Weedinator“į jo vietą, bet galbūt nepakankamai geras, kad būtų galima įdirbti dirvą aplink atskirus augalus?

Trečiojoje diagramoje rodomi duomenys, surinkti naudojant „Rover“ir „Base“100 metrų atstumu - jokios papildomos klaidos neaptikta - atskyrimo atstumas tikslumo nesikeitė.

7 žingsnis: finalas

Rekomenduojamas: