Innholdsfortegnelse:

EWEEDINATOR☠ Del 2: Satellittnavigasjon: 7 trinn (med bilder)
EWEEDINATOR☠ Del 2: Satellittnavigasjon: 7 trinn (med bilder)

Video: EWEEDINATOR☠ Del 2: Satellittnavigasjon: 7 trinn (med bilder)

Video: EWEEDINATOR☠ Del 2: Satellittnavigasjon: 7 trinn (med bilder)
Video: Will She PASS THE TEST ☠️ Or FEEL THE WRATH??? (Pacific Crossing 7 of 8) S.V. Delos Ep. 422 2024, Juli
Anonim
EWEEDINATOR☠ Del 2: Satellittnavigasjon
EWEEDINATOR☠ Del 2: Satellittnavigasjon
EWEEDINATOR☠ Del 2: Satellittnavigasjon
EWEEDINATOR☠ Del 2: Satellittnavigasjon
EWEEDINATOR☠ Del 2: Satellittnavigasjon
EWEEDINATOR☠ Del 2: Satellittnavigasjon
EWEEDINATOR☠ Del 2: Satellittnavigasjon
EWEEDINATOR☠ Del 2: Satellittnavigasjon

Weedinator -navigasjonssystemet er født!

En svingende jordbruksrobot som kan styres av en smarttelefon.

… Og heller enn å bare gå gjennom den vanlige prosessen med hvordan det er satt sammen tenkte jeg at jeg ville prøve å forklare hvordan det faktisk fungerer - åpenbart ikke ALT, men de viktigste og mest interessante biter. Unnskyld ordspillet, men det er hvordan dataene flyter mellom de enkelte modulene som jeg synes er interessante og brutt ned i den laveste nevneren vi ender opp med faktiske "biter" - nuller og ener. Hvis du noen gang har vært forvirret om biter, byte, tegn og strenger, kan det være på tide å bli uforvirret nå? Jeg kommer også til å prøve å oppheve et litt abstrakt konsept som heter 'Error Cancelling'.

Selve systemet har:

  • GPS/GNSS: Ublox C94 M8M (Rover og Base)
  • 9DOF Razor IMU MO digitalt kompass
  • Fona 800H 2G GPRS mobilnett
  • 2,2 "TFT -skjerm
  • Arduino Due 'Master'
  • Ulike Arduino 'slaver'.

Merkelig nok har mange lørnavigasjoner ikke et digitalt kompass, noe som betyr at hvis du står stille og går tapt, må du gå eller kjøre i vilkårlig retning før enheten kan vise deg riktig retning fra satellitter. Hvis du går deg vill i en tykk jungel eller underjordisk parkeringsplass er du fylt!

Trinn 1: Slik fungerer det

Hvordan det fungerer
Hvordan det fungerer

For tiden blir et enkelt par koordinater lastet opp fra en smarttelefon eller datamaskin, som deretter lastes ned av Weedinator. Disse tolkes deretter til en overskrift i grader og en avstand for å reise i mm.

GPRS fona brukes til å få tilgang til en online database gjennom 2G mobilnettet og motta og overføre koordinatene til Arduino Due via en Arduino Nano. The Due er mesteren og styrer en rekke andre Arduinos som slaver via I2C og seriebusser. The Due kan samhandle med live data fra Ublox og Razor og vise en overskrift beregnet av en av dens Arduino -slaver.

Ublox satellittsporing er spesielt smart da den bruker feilavbrytelse for å få veldig nøyaktige reparasjoner - en endelig nominell total avvik på omtrent 40 mm. Modulen består av et identisk par, hvorav det ene, 'roveren', beveger seg med Weedinator, og det andre er 'basen' festet på en stolpe et sted ute i det fri. Feilavlysning oppnås ved at basen kan oppnå en virkelig nøyaktig løsning ved å bruke en stor mengde prøver over tid. Disse prøvene blir deretter gjennomsnittet for å kompensere for endrede atmosfæriske forhold. Hvis enheten var i bevegelse, ville den åpenbart ikke kunne få noen form for gjennomsnitt og ville være fullstendig prisgitt et miljø i endring. Imidlertid, hvis en statisk og bevegelig enhet fungerer sammen, så lenge de kan kommunisere mellom hverandre, kan de få fordelen av begge. Til enhver tid har baseenheten fortsatt en feil, men den har også en tidligere beregnet supernøyaktig løsning, slik at den kan beregne den faktiske feilen ved å trekke ett sett med koordinater fra et annet. Den sender deretter den beregnede feilen til roveren via en radiokobling, som deretter legger feilen til sine egne koordinater og hei presto, vi har feilavlysning! Rent praktisk utgjør feilavlysning forskjellen mellom 3 meter og 40 mm totalt avvik.

Hele systemet ser komplisert ut, men er faktisk ganske enkelt å bygge, enten løst på en ikke -ledende overflate eller ved hjelp av kretskortet som jeg designet, som gjør at alle modulene kan festes sikkert. Fremtidig utvikling er bygget på kretskortet, slik at et stort utvalg av Arduinos kan integreres for å styre motorer for styring, fremoverbevegelse og en innebygd CNC-maskin. Navigasjon vil også bli assistert av minst ett objektgjenkjenningssystem som bruker kameraer til å sanse fargede objekter, for eksempel fluorescerende golfballer, som er nøye plassert i et slags rutenett - Se dette rommet!

Trinn 2: Komponenter

Komponenter
Komponenter
Komponenter
Komponenter
Komponenter
Komponenter
  • Ublox C94 M8M (Rover og Base) x 2 av
  • 9DOF Razor IMU MO digitalt kompass
  • Fona 800H 2G GPRS mobil 1946
  • Arduino Due
  • Arduino Nano x 2 av
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (se vedlagte Gerber -filer) x 2 av
  • 1206 SMD null ohm motstander x 12 av
  • 1206 lysdioder x 24 tommer

PCB -filen åpnes med 'Design Spark' programvare.

Trinn 3: Koble til modulene

Kabling av modulene
Kabling av modulene

Dette er den enkle delen - spesielt lett med PCB -en som jeg ble laget - bare følg diagrammet ovenfor. Forsiktighet er nødvendig for å unngå å koble 3v -moduler til 5v, selv på serie- og I2C -linjene.

Trinn 4: Kode

Kode
Kode

Det meste av koden er opptatt av å få data til å bevege seg rundt i systemet på en ryddig måte, og ganske ofte er det behov for å konvertere dataformater fra heltall til flyter til strenger og til tegn, noe som kan være veldig forvirrende! Den 'serielle' protokollen vil bare håndtere tegn og mens jeg2C -protokollen vil håndtere veldig små heltall, jeg fant det bedre å konvertere dem til tegn og deretter konvertere tilbake til heltall i den andre enden av overføringslinjen.

Weedinator -kontrolleren er i utgangspunktet et 8 -bits system med mange individuelle Arduinos, eller 'MCU'er. Når 8 bits beskrives som faktiske binære nuller og ener, kan det se slik ut: B01100101 som ville være lik:

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

Desimal sifferverdi 128 64 32 16 8 4 2 1
Binær sifferverdi 0 1 1 0 0 1 0 1

= 101

Og maksimal verdi er 255…. Så det maksimale heltallet 'byte' vi kan overføre over I2C er 255, noe som er veldig begrensende!

På en Arduino kan vi overføre opptil 32 ASCII -tegn, eller byte, om gangen ved hjelp av I2C, som er mye mer nyttig, og tegnsettet inneholder tall, bokstaver og kontrolltegn i 7 -biters format som nedenfor:

Bilde
Bilde

Heldigvis gjør Arduino -kompilatoren alt konverteringsarbeid fra tegn til binært i bakgrunnen, men det forventer fortsatt den riktige typen tegn for dataoverføring, og den godtar ikke 'strenger'.

Det er nå ting kan bli forvirrende. Tegn kan uttrykkes som enkelttegn ved bruk av røydefinisjonen eller som en endimensjonal matrise på 20 tegn ved bruk av røyke [20]. En Arduino -streng ligner veldig på en tegnserie og er bokstavelig talt en rekke tegn som ofte tolkes av den menneskelige hjernen som 'ord'.

// Bygger tegnet 'distanceCharacter':

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

Koden ovenfor kan konvertere en lang tegnrekke til en tegnserie med tegn som deretter kan overføres over I2C eller serienummer.

I den andre enden av overføringslinjen kan dataene konverteres tilbake til en streng ved å bruke følgende kode:

distanceString = distanceString + c; // streng = streng + tegn

En tegnmatrise kan ikke konverteres direkte til et heltall og må gå inn i strengformatet først, men følgende kode vil konvertere fra en streng til et heltall:

int resultat = (distanceString).toInt ();

int distanceMetres = resultat;

Nå har vi et helt tall som vi kan bruke til å gjøre beregninger. Flyter (tall med desimaltegn) må konverteres til heltall på overføringsstadiet og deretter dividert med 100 for to desimaler, f.eks.:

float distanceMetres = distanceMm / 1000;

Til slutt kan en streng opprettes fra en blanding av tegn og heltall, f.eks.:

// Det er her dataene blir samlet til et tegn:

dataString = initiator + "BEAR" + zbearing + "DIST" + zdistance; // Begrenset til 32 tegn // String = streng + tegn + intereger + tegn + heltall.

Resten av koden er standard Arduino -ting som du finner i de forskjellige eksemplene i Arduino -bibliotekene. Sjekk eksemplene "eksempler >>>> strenger" og eksemplene på "wire" -biblioteket.

Her er hele prosessen for å sende og motta en flottør:

Konverter Float ➜ Heltall ➜ String ➜ Character array ….. deretter TRANSMIT character array fra Master ➜➜

➜➜ MOTTA individuelle tegn på Slave…. konverter deretter tegn ➜ streng ➜ heltall ➜ flyt

Trinn 5: Database og webside

Database og webside
Database og webside
Database og webside
Database og webside

Ovenfor vises databasestrukturen og php- og html -kodefiler er vedlagt. Brukernavn, databasenavn, tabellnavn og passord slettes for sikkerhet.

Trinn 6: Navigasjonstester

Navigasjonstester
Navigasjonstester
Navigasjonstester
Navigasjonstester
Navigasjonstester
Navigasjonstester

Jeg klarte å koble en datalogger til Weedinator -kontrollkortet via I2C og få en ide om Ublox M8M -satellittposisjoneringsytelsen:

På 'Cold Start', vist med den grønne grafen, startet modulen med mange feil, ganske lik en 'normal' GPS, og gradvis ble feilen redusert til den etter omtrent 2 timer fikk en RTK -løsning mellom rover og base (vist som det røde korset). I løpet av den 2 timers perioden bygger basismodulen kontinuerlig opp og oppdaterer en gjennomsnittlig verdi for breddegrad og lengdegrad, og etter at det forhåndsprogrammerte tidsintervallet avgjør at den har fått en god løsning. De neste 2 grafene viser atferd etter en 'Hot start' 'hvor basismodulen allerede har beregnet et godt gjennomsnitt. Den øverste grafen er over en periode på 200 minutter, og av og til går reparasjonen tapt og roveren sender en NMEA -melding til Weedinator om at reparasjonen midlertidig har blitt upålitelig.

Den nedre blå grafen er en 'zoom inn' på den røde boksen i den øverste grafen og viser et godt representativt øyeblikksbilde av Ublox -ytelsen, med en total avvik på 40 mm, noe som er mer enn godt nok til å lede Weedinator til dens loacation, men muligens ikke god nok til å dyrke jorda rundt individuelle planter?

Den tredje grafen viser data samlet med Rover og Base 100 meter fra hverandre - Ingen ytterligere feil ble oppdaget - separasjonsavstanden gjorde ingen forskjell for nøyaktigheten.

Trinn 7: Final

Anbefalt: