Indholdsfortegnelse:

EWEEDINATOR☠ Del 2: Satellitnavigation: 7 trin (med billeder)
EWEEDINATOR☠ Del 2: Satellitnavigation: 7 trin (med billeder)

Video: EWEEDINATOR☠ Del 2: Satellitnavigation: 7 trin (med billeder)

Video: EWEEDINATOR☠ Del 2: Satellitnavigation: 7 trin (med billeder)
Video: Сериал - "Сваты" (1-й сезон 1-я серия) фильм комедия для всей семьи 2024, Juli
Anonim
☠WEEDINATOR☠ Del 2: Satellitnavigation
☠WEEDINATOR☠ Del 2: Satellitnavigation
☠WEEDINATOR☠ Del 2: Satellitnavigation
☠WEEDINATOR☠ Del 2: Satellitnavigation
☠WEEDINATOR☠ Del 2: Satellitnavigation
☠WEEDINATOR☠ Del 2: Satellitnavigation
☠WEEDINATOR☠ Del 2: Satellitnavigation
☠WEEDINATOR☠ Del 2: Satellitnavigation

Weedinator -navigationssystemet er født!

En vandrende landbrugsrobot, der kan styres af en smart telefon.

… Og i stedet for bare at gennemgå den normale proces med hvordan det er sammensat, tænkte jeg, at jeg ville prøve at forklare, hvordan det rent faktisk fungerer - naturligvis ikke ALT, men de vigtigste og mest interessante ting. Undskyld venligst ordspillet, men det er hvordan dataene flyder mellem de enkelte moduler, som jeg synes er interessante og opdelt i den laveste nævner, vi ender med faktiske "bits" - nuller og dem. Hvis du nogensinde har været forvirret om bits, bytes, tegn og strenge, kan det nu være tid til at blive uforvirret? Jeg vil også prøve at fjerne et lidt abstrakt koncept, der hedder 'Fejlafbrydelse'.

Selve systemet indeholder:

  • GPS/GNSS: Ublox C94 M8M (Rover og Base)
  • 9DOF Razor IMU MO digitalt kompas
  • Fona 800H 2G GPRS mobil
  • 2,2 "TFT -skærm
  • Arduino Due 'Master'
  • Forskellige Arduino 'slaver'.

Mærkeligt nok har mange Sat Navs ikke et digitalt kompas, hvilket betyder, at hvis du står stille og går tabt, skal du gå eller køre i vilkårlig retning, før enheden kan vise dig den korrekte retning fra satellitter. Hvis du farer vild i en tyk jungle eller underjordisk parkeringsplads, er du fyldt!

Trin 1: Sådan fungerer det

Hvordan det virker
Hvordan det virker

I øjeblikket uploades et simpelt par koordinater fra en smartphone eller computer, som derefter downloades af Weedinator. Disse fortolkes derefter til en overskrift i grader og en afstand til at rejse i mm.

GPRS fona bruges til at få adgang til en online database via 2G mobilnetværket og modtage og transmittere koordinaterne til Arduino Due via en Arduino Nano. Due er mesteren og styrer en række andre Arduinos som slaver via I2C og serielle busser. Due kan interagere med levende data fra Ublox og Razor og vise en overskrift beregnet af en af dens Arduino -slaver.

Ublox satellitsporing er særlig smart, da den bruger fejlreducering til at få meget præcise rettelser - en endelig nominel total afvigelse på cirka 40 mm. Modulet er sammensat af et identisk par, hvoraf det ene, 'roveren', bevæger sig med Weedinator, og det andet er 'basen' fastgjort til en stang et sted ude i det fri. Fejlaflysning opnås ved, at basen kan opnå en virkelig nøjagtig løsning ved hjælp af en stor mængde prøver over tid. Disse prøver beregnes derefter i gennemsnit for at kompensere for ændrede atmosfæriske forhold. Hvis enheden bevægede sig, ville den naturligvis ikke kunne opnå nogen form for gennemsnitsværdi og ville være fuldstændig prisgivende i et skiftende miljø. Men hvis en statisk og bevægelig enhed fungerer sammen, så længe de kan kommunikere mellem hinanden, kan de få fordelen af begge. På ethvert givet tidspunkt har baseenheden stadig en fejl, men den har også en tidligere beregnet supernøjagtig løsning, så den kan beregne den faktiske fejl ved at trække et sæt koordinater fra et andet. Det sender derefter den beregnede fejl til roveren via et radiolink, som derefter tilføjer fejlen til sine egne koordinater og hey presto, vi har fejl ved at annullere! Rent praktisk gør fejlafbrydelse forskellen mellem 3 meter og 40 mm total afvigelse.

Hele systemet ser kompliceret ud, men er faktisk ret let at bygge, enten løst på en ikke -ledende overflade eller ved hjælp af det printkort, som jeg designede, hvilket gør det muligt at fastgøre alle moduler sikkert. Fremtidig udvikling er bygget på printkortet, så en lang række Arduinos kan integreres til at styre motorer til styring, fremadgående bevægelse og en indbygget CNC-maskine. Navigation vil også blive hjulpet af mindst ét objektgenkendelsessystem, der bruger kameraer til at fornemme farvede objekter, f.eks. Fluorescerende golfbolde, som er omhyggeligt placeret i en slags gitter - Se dette rum!

Trin 2: Komponenter

Komponenter
Komponenter
Komponenter
Komponenter
Komponenter
Komponenter
  • Ublox C94 M8M (Rover og Base) x 2 af
  • 9DOF Razor IMU MO digitalt kompas
  • Fona 800H 2G GPRS mobil 1946
  • Arduino Due
  • Arduino Nano x 2 af
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (se vedhæftede Gerber -filer) x 2 af
  • 1206 SMD nul ohm modstande x 12 af
  • 1206 lysdioder x 24 af

PCB -filen åbnes med 'Design Spark' software.

Trin 3: Tilslutning af modulerne

Tilslutning af modulerne
Tilslutning af modulerne

Dette er den lette del - især let med det printkort, jeg fik lavet - følg bare diagrammet ovenfor. Omsorg er nødvendig for at undgå tilslutning af 3v -moduler til 5v, selv på serie- og I2C -linjer.

Trin 4: Kode

Kode
Kode

Det meste af koden handler om at få data til at bevæge sig rundt i systemet på en ordnet måde, og ganske ofte er der behov for at konvertere dataformater fra heltal til floats til strenge og til tegn, hvilket kan være meget forvirrende! 'Seriel' protokollen håndterer kun tegn, og mens jeg2C -protokol vil håndtere meget små heltal, jeg fandt det bedre at konvertere dem til tegn og derefter konvertere tilbage til heltal i den anden ende af transmissionslinjen.

Weedinator -controlleren er dybest set et 8 -bit system med masser af individuelle Arduinos, eller 'MCU'er. Når 8 bit beskrives som faktiske binære nuller og dem, kan det se sådan ud: B01100101, som ville svare til:

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

Decimal cifferværdi 128 64 32 16 8 4 2 1
Binær cifferværdi 0 1 1 0 0 1 0 1

= 101

Og den maksimale mulige værdi er 255…. Så det maksimale heltal 'byte', vi kan transmittere over I2C er 255, hvilket er meget begrænsende!

På en Arduino kan vi transmittere op til 32 ASCII -tegn eller byte ad gangen ved hjælp af I2C, hvilket er meget mere nyttigt, og tegnsættet indeholder tal, bogstaver og kontroltegn i 7 bit format som nedenfor:

Billede
Billede

Heldigvis udfører Arduino -kompilatoren alt konverteringsarbejde fra karakter til binært i baggrunden, men det forventer stadig den korrekte type tegn til dataoverførsel, og det accepterer ikke 'strenge'.

Nu er det, når tingene kan blive forvirrende. Tegn kan udtrykkes som enkelttegn ved hjælp af tegndefinitionen eller som en endimensionel matrix på 20 tegn ved hjælp af tegn [20]. En Arduino -streng ligner meget en karaktermatrix og er bogstaveligt talt en række tegn, der ofte tolkes af den menneskelige hjerne som 'ord'.

// Bygger karakteren 'distanceCharacter':

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

Ovenstående kode kan konvertere en lang række tegn til et tegnsæt af tegn, som derefter kan overføres over I2C eller seriel.

I den anden ende af transmissionslinjen kan dataene konverteres tilbage til en streng ved hjælp af følgende kode:

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

En karaktermatrix kan ikke konverteres direkte til et helt tal og skal først gå ind i strengformatet, men følgende kode konverteres fra en streng til et helt tal:

int resultat = (distanceString).toInt ();

int distanceMetres = resultat;

Nu har vi et helt tal, som vi kan bruge til at foretage beregninger. Floats (tal med et decimalpunkt) skal konverteres til heltal på transmissionstrinnet og derefter divideret med 100 for to decimaler, f.eks.:

float distanceMetres = distanceMm / 1000;

Endelig kan der oprettes en streng fra en blanding af tegn og heltal f.eks.:

// Det er her dataene samles til et tegn:

dataString = initiator + "BEAR" + zbearing + "DIST" + zdistance; // Begrænset til 32 tegn // String = streng + tegn + intereger + tegn + helt tal.

Resten af koden er standard Arduino -ting, der kan findes i de forskellige eksempler på Arduino -bibliotekerne. Se eksemplerne 'eksempler >>>> strenge' og eksemplerne på 'wire' bibliotek.

Her er hele processen med at sende og modtage en float:

Konverter Float ➜ Heltal ➜ String ➜ Character array ….. derefter TRANSMIT character array fra Master ➜➜

➜➜ MODTAG individuelle tegn på Slave…. konverter derefter tegn ➜ streng ➜ heltal ➜ float

Trin 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 vedhæftet. Brugernavne, databasenavne, tabelnavne og adgangskoder slettes af sikkerhedshensyn.

Trin 6: Navigationstests

Navigationstest
Navigationstest
Navigationstest
Navigationstest
Navigationstest
Navigationstest

Det lykkedes mig at tilslutte en datalogger til Weedinator -kontrolkortet via I2C og få en ide om Ublox M8M -satellitpositioneringsydelsen:

På 'Cold Start', vist med den grønne graf, startede modulet med masser af fejl, der lignede en 'normal' GPS, og gradvist blev fejlen reduceret, indtil den efter cirka 2 timer fik en RTK -fix mellem rover og base (vist som det røde kryds). I løbet af den 2 timers periode bygger basismodulet løbende op og opdaterer en gennemsnitsværdi for breddegrad og længdegrad, og efter at det forudprogrammerede tidsinterval beslutter, at det har fået en god løsning. De næste 2 grafer viser adfærd efter en 'Hot start' 'hvor basismodulet allerede har beregnet et godt gennemsnit. Den øverste graf er over en periode på 200 minutter, og lejlighedsvis går reparationen tabt, og roveren sender en NMEA -meddelelse til Weedinator om, at rettelsen midlertidigt er blevet upålidelig.

Den nederste blå graf er et 'zoom ind' på den røde boks i den øverste graf og viser et godt repræsentativt snapshot af Ublox -ydeevnen med en total afvigelse på 40 mm, hvilket er mere end godt nok til at guide Weedinator til dens loacation, men muligvis ikke god nok til at dyrke jorden omkring enkelte planter?

Den tredje graf viser data indsamlet med Rover og Base 100 meter fra hinanden - Ingen yderligere fejl blev registreret - afstanden mellem adskillelse gjorde ingen forskel for nøjagtigheden.

Trin 7: Endelig

Anbefalede: