Innehållsförteckning:

EWEEDINATOR☠ Del 2: Satellitnavigering: 7 steg (med bilder)
EWEEDINATOR☠ Del 2: Satellitnavigering: 7 steg (med bilder)

Video: EWEEDINATOR☠ Del 2: Satellitnavigering: 7 steg (med bilder)

Video: EWEEDINATOR☠ Del 2: Satellitnavigering: 7 steg (med bilder)
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, December
Anonim
EWEEDINATOR☠ Del 2: Satellitnavigering
EWEEDINATOR☠ Del 2: Satellitnavigering
EWEEDINATOR☠ Del 2: Satellitnavigering
EWEEDINATOR☠ Del 2: Satellitnavigering
EWEEDINATOR☠ Del 2: Satellitnavigering
EWEEDINATOR☠ Del 2: Satellitnavigering
EWEEDINATOR☠ Del 2: Satellitnavigering
EWEEDINATOR☠ Del 2: Satellitnavigering

Weedinator -navigationssystemet är fött!

En svängande jordbruksrobot som kan styras av en smart telefon.

… Och i stället för att bara gå igenom den vanliga processen med hur det sätts ihop tänkte jag försöka förklara hur det faktiskt fungerar - uppenbarligen inte ALLT utan de viktigaste och mest intressanta bitarna. Ursäkta ordvitsen, men det är hur dataflödet mellan de enskilda modulerna som jag tycker är intressant och uppdelat i dess lägsta nämnare slutar med faktiska "bitar" - nollor och enor. Om du någonsin varit förvirrad om bitar, byte, tecken och strängar, kan det vara dags att bli okonstlad nu? Jag kommer också att försöka ta bort ett lite abstrakt begrepp som heter "Felavbrytande".

Själva systemet har:

  • GPS/GNSS: Ublox C94 M8M (Rover och Base)
  • 9DOF Razor IMU MO digital kompass
  • Fona 800H 2G GPRS -mobil
  • 2,2 "TFT -skärm
  • Arduino Due 'Master'
  • Olika Arduino 'Slaves'.

Konstigt nog har många Sat Navs ingen digital kompass, vilket innebär att om du är stillastående och förlorad måste du gå eller köra i någon slumpmässig riktning innan enheten kan visa dig rätt riktning från satelliter. Om du går vilse i en tjock djungel eller underjordisk parkeringsplats är du fylld!

Steg 1: Hur det fungerar

Hur det fungerar
Hur det fungerar

För närvarande laddas ett enkelt par koordinater upp från en smarttelefon eller dator, som sedan laddas ner av Weedinator. Dessa tolkas sedan till en rubrik i grader och ett avstånd att resa i mm.

GPRS -fona används för att komma åt en online -databas via 2G -mobilnätet och ta emot och överföra koordinaterna till Arduino Due via en Arduino Nano. The Due är mästaren och styr en rad andra Arduinos som slavar via I2C och seriebussar. Due kan interagera med levande data från Ublox och Razor och visa en rubrik beräknad av en av dess Arduino -slavar.

Ublox satellitspårare är särskilt smart eftersom den använder felavstängning för att få mycket exakta korrigeringar - en slutlig nominell totalavvikelse på cirka 40 mm. Modulen består av ett identiskt par, varav ett, "rovern", rör sig med Weedinator, och det andra, "basen" är fixerad på en stolpe någonstans ute i det fria. Felavbrott uppnås genom att basen kan uppnå en riktigt exakt fix genom att använda en stor mängd prover över tid. Dessa prover genomsnitts sedan för att kompensera för förändrade atmosfäriska förhållanden. Om enheten rörde sig skulle den uppenbarligen inte kunna få någon form av medelvärde och skulle vara fullt ut nådd av en föränderlig miljö. Men om en statisk och rörlig enhet fungerar tillsammans, så länge de kan kommunicera mellan varandra, kan de dra nytta av båda. Vid varje given tidpunkt har basenheten fortfarande ett fel men den har också en tidigare beräknad superexakt fix så att den kan beräkna det faktiska felet genom att subtrahera en uppsättning koordinater från en annan. Det skickar sedan det beräknade felet till rovern via en radiolänk, som sedan lägger till felet på sina egna koordinater och hej presto, vi har felaktivering! Rent praktiskt gör felavbrott skillnaden mellan 3 meter och 40 mm totalavvikelse.

Hela systemet ser komplicerat ut, men är faktiskt ganska enkelt att bygga, antingen löst på en icke -ledande yta eller med det kretskort som jag konstruerade, vilket gör att alla moduler kan skruvas fast på ett säkert sätt. Framtida utveckling är byggd på kretskortet, så att ett stort antal Arduinos kan integreras för att styra motorer för styrning, framåtgående rörelse och en inbyggd CNC-maskin. Navigering kommer också att assisteras av minst ett objektigenkänningssystem som använder kameror för att känna av färgade föremål, till exempel fluorescerande golfbollar, som är noggrant placerade i något slags rutnät - Titta på det här utrymmet!

Steg 2: Komponenter

Komponenter
Komponenter
Komponenter
Komponenter
Komponenter
Komponenter
  • Ublox C94 M8M (Rover och Base) x 2 av
  • 9DOF Razor IMU MO digital 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 bifogade Gerber -filer) x 2 av
  • 1206 SMD noll ohm motstånd x 12 av
  • 1206 lysdioder x 24 tum

PCB -filen öppnas med "Design Spark" -programvara.

Steg 3: Koppla ihop modulerna

Anslutning av modulerna
Anslutning av modulerna

Detta är den enkla delen - särskilt lätt med kretskortet som jag fick - följ bara diagrammet ovan. Var försiktig för att undvika att 3v -moduler kopplas till 5v, även på serie- och I2C -linjerna.

Steg 4: Kod

Koda
Koda

Det mesta av koden handlar om att få data att flytta runt i systemet på ett ordnat sätt och ganska ofta finns det ett behov av att konvertera dataformat från heltal till floats till strängar och till tecken, vilket kan vara mycket förvirrande! "Serial" -protokollet hanterar endast tecken och medan jag2C -protokollet kommer att hantera mycket små heltal, jag tyckte att det var bättre att konvertera dem till tecken och sedan konvertera tillbaka till heltal i andra änden av överföringslinjen.

Weedinator -styrenheten är i grunden ett 8 -bitars system med massor av individuella Arduinos, eller 'MCU: er. När 8 bitar beskrivs som faktiska binära nollor och enor kan det se ut så här: B01100101 vilket skulle vara lika med:

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

Decimal siffervärde 128 64 32 16 8 4 2 1
Binärt siffervärde 0 1 1 0 0 1 0 1

= 101

Och det högsta möjliga värdet är 255…. Så det maximala heltalet 'byte' vi kan överföra över I2C är 255, vilket är mycket begränsande!

På en Arduino kan vi överföra upp till 32 ASCII -tecken eller byte åt gången med I2C, vilket är mycket mer användbart, och teckenuppsättningen innehåller siffror, bokstäver och kontrolltecken i 7 -bitarsformat enligt nedan:

Bild
Bild

Lyckligtvis gör Arduino -kompilatorn allt arbete med att konvertera från tecken till binärt i bakgrunden, men det förväntar sig fortfarande rätt typ av tecken för dataöverföring och det accepterar inte "Strings".

Nu är det när saker kan bli förvirrande. Tecken kan uttryckas som enstaka tecken med hjälp av karaktärsdefinitionen eller som en endimensionell uppsättning med 20 tecken med hjälp av tecken [20]. En Arduino -sträng är mycket lik en teckenmatris och är bokstavligen en rad karaktärer som ofta tolkas av den mänskliga hjärnan som 'ord'.

// Bygger tecknet 'distanceCharacter':

Stränginitiator = ""; distanceString = initiator + distanceString; int n = distanceString.length (); för (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Koden ovan kan konvertera en lång teckensträng till en teckenmatris med tecken som sedan kan överföras över I2C eller serie.

I andra änden av överföringslinjen kan data konverteras tillbaka till en sträng med följande kod:

distanceString = distanceString + c; // string = string + character

En teckenmatris kan inte konverteras direkt till ett heltal och måste först gå in i strängformatet, men följande kod kommer att konverteras från en sträng till ett heltal:

int resultat = (distanceString).toInt ();

int distanceMetres = resultat;

Nu har vi ett heltal som vi kan använda för att göra beräkningar. Flytare (siffror med en decimal) måste konverteras till heltal vid överföringssteget och sedan divideras med 100 för två decimaler, t.ex.:

float distanceMetres = distanceMm / 1000;

Slutligen kan en sträng skapas från en blandning av tecken och heltal, t.ex.

// Här sammanställs data till ett tecken:

dataString = initiator + "BEAR" + zbearing + "DIST" + zdistance; // Begränsat till 32 tecken // Sträng = sträng + tecken + intereger + tecken + heltal.

Resten av koden är standard Arduino -grejer som finns i de olika exemplen i Arduino -biblioteken. Kolla in exemplen "exempel >>>> strängar" och "tråd" -biblioteksexempel.

Här är hela processen för att sända och ta emot en flottör:

Konvertera Float ➜ Heltal ➜ Sträng ➜ Tecken array ….. sedan TRANSMIT teckenmatris från Master ➜➜

➜➜ RECIEVE individual characters on Slave…. konvertera sedan Character ➜ String ➜ Integer ➜ Float

Steg 5: Databas och webbsida

Databas och webbsida
Databas och webbsida
Databas och webbsida
Databas och webbsida

Ovan visas databasstrukturen och php- och html -kodfiler bifogas. Användarnamn, databasnamn, tabellnamn och lösenord täcks av säkerhetsskäl.

Steg 6: Navigeringstester

Navigeringstester
Navigeringstester
Navigeringstester
Navigeringstester
Navigeringstester
Navigeringstester

Jag lyckades ansluta en datalogger till Weedinator -styrkortet via I2C och få en uppfattning om Ublox M8M -satellitpositioneringsprestanda:

På "Cold Start", som visas med den gröna grafen, startade modulen med mycket fel, ganska likt en "vanlig" GPS, och gradvis minskade felet tills det efter cirka 2 timmar fick en RTK -fix mellan rover och bas (visas som röda korset). Under denna 2-timmarsperiod bygger basmodulen kontinuerligt upp och uppdaterar ett medelvärde för latitud och longitud och efter att det förprogrammerade tidsintervallet bestämmer att det har fått en bra fix. Nästa 2 grafer visar beteende efter en 'Hot start 'där basmodulen redan har beräknat ett bra genomsnitt. Den övre grafen är över en 200 minuters period och ibland försvinner korrigeringen och rovern skickar ett NMEA -meddelande till Weedinator att korrigeringen tillfälligt har blivit opålitlig.

Den nedre blå grafen är en "zoom in" på den röda rutan i det övre diagrammet och visar ett bra representativt ögonblicksbild av Ublox -prestanda, med en total avvikelse på 40 mm, vilket är mer än tillräckligt bra för att vägleda Weedinator till dess bristande, men kanske inte tillräckligt bra för att odla jorden runt enskilda växter?

Den tredje grafen visar data som samlats in med Rover och basen 100 meter från varandra - Inget ytterligare fel detekterades - avståndet mellan separationen gjorde ingen skillnad för noggrannheten.

Steg 7: Slutlig

Rekommenderad: