Inhoudsopgave:

☠WEEDINATOR☠ Deel 2: Satellietnavigatie: 7 stappen (met afbeeldingen)
☠WEEDINATOR☠ Deel 2: Satellietnavigatie: 7 stappen (met afbeeldingen)

Video: ☠WEEDINATOR☠ Deel 2: Satellietnavigatie: 7 stappen (met afbeeldingen)

Video: ☠WEEDINATOR☠ Deel 2: Satellietnavigatie: 7 stappen (met afbeeldingen)
Video: Голубая стрела (1958) фильм 2024, Juli-
Anonim
☠WEEDINATOR☠ Deel 2: Satellietnavigatie
☠WEEDINATOR☠ Deel 2: Satellietnavigatie
☠WEEDINATOR☠ Deel 2: Satellietnavigatie
☠WEEDINATOR☠ Deel 2: Satellietnavigatie
☠WEEDINATOR☠ Deel 2: Satellietnavigatie
☠WEEDINATOR☠ Deel 2: Satellietnavigatie
☠WEEDINATOR☠ Deel 2: Satellietnavigatie
☠WEEDINATOR☠ Deel 2: Satellietnavigatie

Het Weedinator navigatiesysteem is geboren!

Een zwervende landbouwrobot die kan worden bestuurd door een smartphone.

… En in plaats van gewoon door te gaan met het reguliere proces van hoe het in elkaar zit, dacht ik dat ik zou proberen uit te leggen hoe het echt werkt - natuurlijk niet ALLES maar de belangrijkste en meest interessante stukjes. Excuseer de woordspeling, maar het is hoe de gegevensstromen tussen de afzonderlijke modules die ik interessant vind en opgesplitst in de laagste noemer, we eindigen met echte "bits" - nullen en enen. Als je ooit in de war bent geweest over bits, bytes, karakters en strings, dan is dit misschien het moment om niet meer in de war te raken? Ik ga ook proberen een enigszins abstract concept genaamd 'Error Cancelling' te ontwarren.

Het systeem zelf beschikt over:

  • GPS/GNSS: Ublox C94 M8M (Rover en basis)
  • 9DOF Razor IMU MO digitaal kompas
  • Fona 800H 2G GPRS mobiel
  • 2,2" TFT-scherm
  • Arduino Due 'Master'
  • Diverse Arduino 'Slaven'.

Vreemd genoeg hebben veel navigatiesystemen geen digitaal kompas, wat betekent dat als je stilstaat en verdwaald bent, je in een willekeurige richting moet lopen of rijden voordat het apparaat je de juiste richting van satellieten kan laten zien. Als je verdwaalt in een dichte jungle of ondergrondse parkeergarage zit je vol!

Stap 1: Hoe het werkt

Hoe het werkt
Hoe het werkt

Op dit moment wordt een eenvoudig paar coördinaten geüpload vanaf een smartphone of computer, die vervolgens worden gedownload door de Weedinator. Deze worden vervolgens geïnterpreteerd in een koers in graden en een af te leggen afstand in mm.

De GPRS-fona wordt gebruikt om toegang te krijgen tot een online database via het 2G-cellulaire netwerk en om de coördinaten te ontvangen en te verzenden naar de Arduino Due via een Arduino Nano. De Due is de Master en bestuurt een reeks andere Arduino's als Slaves via de I2C en seriële bussen. De Due kan communiceren met live gegevens van de Ublox en Razor en een koers weergeven die is berekend door een van zijn Arduino-slaves.

De Ublox-satelliettracker is bijzonder slim omdat hij foutannulering gebruikt om zeer nauwkeurige fixes te krijgen - een uiteindelijke nominale totale afwijking van ongeveer 40 mm. De module bestaat uit een identiek paar, waarvan de ene, de 'rover', meebeweegt met de Weedinator, en de andere, de 'basis', is ergens in de open lucht op een paal bevestigd. Foutannulering wordt bereikt doordat de basis in staat is om een echt nauwkeurige oplossing te bereiken door in de loop van de tijd een groot aantal monsters te gebruiken. Deze monsters worden vervolgens gemiddeld om te compenseren voor veranderende atmosferische omstandigheden. Als het apparaat in beweging was, zou het natuurlijk geen enkele vorm van middeling kunnen krijgen en zou het volledig overgeleverd zijn aan een veranderende omgeving. Als een statisch en bewegend apparaat echter samenwerken, kunnen ze van beide profiteren, zolang ze maar met elkaar kunnen communiceren. Op elk willekeurig moment heeft de basiseenheid nog steeds een fout, maar hij heeft ook een eerder berekende supernauwkeurige fix zodat hij de werkelijke fout kan berekenen door de ene set coördinaten van de andere af te trekken. Het stuurt dan de berekende fout naar de rover via een radioverbinding, die de fout vervolgens optelt bij zijn eigen coördinaten en hey presto, we hebben foutannulering! In de praktijk maakt foutannulering het verschil tussen 3 meter en 40 mm totale afwijking.

Het complete systeem ziet er ingewikkeld uit, maar is eigenlijk vrij eenvoudig te bouwen, ofwel los op een niet-geleidend oppervlak of met behulp van de PCB die ik heb ontworpen, waardoor alle modules stevig kunnen worden vastgeschroefd. Toekomstige ontwikkeling is op de PCB gebouwd, waardoor een breed scala aan Arduino's kan worden ingebouwd om motoren te besturen voor besturing, voorwaartse beweging en een ingebouwde CNC-machine. De navigatie wordt ook ondersteund door ten minste één objectherkenningssysteem dat camera's gebruikt om gekleurde objecten te detecteren, bijvoorbeeld fluorescerende golfballen, die zorgvuldig in een soort raster zijn geplaatst - Let op deze ruimte!

Stap 2: Componenten

Componenten
Componenten
Componenten
Componenten
Componenten
Componenten
  • Ublox C94 M8M (Rover en basis) x 2 stuks
  • 9DOF Razor IMU MO digitaal kompas
  • Fona 800H 2G GPRS mobiel 1946
  • Arduino Due
  • Arduino Nano x 2 van
  • SparkFun Pro Micro
  • Adafruit 2.2" TFT IL1940C 1480
  • PCB (zie bijgevoegde Gerber-bestanden) x 2 van
  • 1206 SMD nul ohm weerstanden x 12 of
  • 1206 LED's x 24 van

Het PCB-bestand wordt geopend met 'Design Spark'-software.

Stap 3: Bedrading van de modules

Bedrading van de modules
Bedrading van de modules

Dit is het gemakkelijke deel - vooral gemakkelijk met de PCB die ik heb gemaakt - volg gewoon het bovenstaande diagram. Voorzichtigheid is geboden om te voorkomen dat 3v-modules worden aangesloten op 5v, zelfs niet op de seriële en I2C-lijnen.

Stap 4: Coderen

Code
Code

Het grootste deel van de code is erop gericht om gegevens op een ordelijke manier door het systeem te laten bewegen en vaak is het nodig om gegevensformaten te converteren van integers naar floats naar strings en naar karakters, wat erg verwarrend kan zijn! Het 'Serial'-protocol verwerkt alleen tekens en terwijl de I2Het C-protocol kan zeer kleine gehele getallen aan, ik vond het beter om ze naar karakters te converteren en vervolgens terug te converteren naar gehele getallen aan het andere uiteinde van de transmissielijn.

De Weedinator-controller is in feite een 8-bits systeem met veel individuele Arduino's of 'MCU's. Wanneer 8 bit wordt beschreven als werkelijke binaire nullen en enen, kan het er als volgt uitzien: B01100101 wat gelijk zou zijn aan:

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

Decimale cijferwaarde 128 64 32 16 8 4 2 1
Binaire cijferwaarde 0 1 1 0 0 1 0 1

= 101

En de maximaal mogelijke waarde is 255 …. Dus de maximale integer 'byte' die we kunnen verzenden over I2C is 255, wat erg beperkend is!

Op een Arduino kunnen we tot 32 ASCII-tekens of bytes tegelijk verzenden met I2C, wat veel handiger is, en de tekenset bevat cijfers, letters en besturingstekens in 7-bits formaat, zoals hieronder:

Afbeelding
Afbeelding

Gelukkig doet de Arduino-compiler al het werk van de conversie van teken naar binair op de achtergrond, maar hij verwacht nog steeds het juiste type teken voor gegevensoverdracht en accepteert geen 'Strings'.

Dit is wanneer dingen verwarrend kunnen worden. Tekens kunnen worden uitgedrukt als enkele tekens met behulp van de char-definitie of als een eendimensionale array van 20 tekens met behulp van char [20]. Een Arduino String lijkt erg op een tekenreeks en is letterlijk een reeks tekens die door het menselijk brein vaak als 'woorden' worden geïnterpreteerd.

// Bouwt het karakter 'distanceCharacter':

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

De bovenstaande code kan een lange reeks tekens omzetten in een tekenreeks tekens die vervolgens via I. kan worden verzonden2C of serieel.

Aan het andere uiteinde van de transmissielijn kunnen de gegevens worden teruggeconverteerd naar een string met behulp van de volgende code:

distanceString = distanceString + c; // tekenreeks = tekenreeks + teken

Een tekenarray kan niet rechtstreeks naar een geheel getal worden geconverteerd en moet eerst naar het tekenreeksformaat gaan, maar de volgende code zal van een tekenreeks naar een geheel getal converteren:

int resultaat = (distanceString).toInt();

int distanceMetres = resultaat;

Nu hebben we een geheel getal waarmee we berekeningen kunnen maken. Floats (getallen met een decimale punt) moeten in de transmissiefase worden omgezet in gehele getallen en vervolgens worden gedeeld door 100 voor twee decimalen, bijvoorbeeld:

float distanceMetres = afstandMm / 1000;

Ten slotte kan een string worden gemaakt van een combinatie van tekens en gehele getallen, bijvoorbeeld:

// Dit is waar de gegevens worden gecompileerd tot een teken:

dataString = initiator + "BEAR" + zbearing + "DIST" + zdistance; // Beperkt tot 32 tekens // String = string + tekens + intereger + tekens + geheel getal.

De rest van de code is standaard Arduino-spul dat te vinden is in de verschillende voorbeelden in de Arduino-bibliotheken. Bekijk het voorbeeld 'voorbeelden >>>> Strings' en de bibliotheekvoorbeelden 'wire'.

Hier is het hele proces voor het verzenden en ontvangen van een float:

Converteer Float ➜ Integer ➜ String ➜ Teken array ….. dan TRANSMIT tekenreeks van Master ➜➜

➜➜ ONTVANG individuele karakters op Slave …. converteer vervolgens Character ➜ String ➜ Integer ➜ Float

Stap 5: Database en webpagina

Database en webpagina
Database en webpagina
Database en webpagina
Database en webpagina

Hierboven ziet u de databasestructuur en de php- en html-codebestanden zijn bijgevoegd. Gebruikersnamen, databasenamen, tabelnamen en wachtwoorden zijn om veiligheidsredenen weggelaten.

Stap 6: Navigatietests

Navigatietests
Navigatietests
Navigatietests
Navigatietests
Navigatietests
Navigatietests

Ik slaagde erin om via I2C een datalogger aan te sluiten op de Weedinator-besturingskaart en een idee te krijgen van de Ublox M8M-satellietpositioneringsprestaties:

Op 'Cold Start', weergegeven door de groene grafiek, startte de module met veel fouten, vergelijkbaar met een 'normale' GPS, en geleidelijk werd de fout minder totdat hij, na ongeveer 2 uur, een RTK-fix kreeg tussen rover en basis (weergegeven als het rode kruis). Gedurende die periode van 2 uur is de basismodule voortdurend bezig met het opbouwen en bijwerken van een gemiddelde waarde voor lengte- en breedtegraad en besluit na het voorgeprogrammeerde tijdsinterval dat het een goede oplossing heeft. De volgende 2 grafieken tonen het gedrag na een 'Hot start' ' waar de basismodule al een goed gemiddelde heeft berekend. De bovenste grafiek gaat over een periode van 200 minuten en soms gaat de fix verloren en stuurt de rover een NMEA-bericht naar de Weedinator dat de fix tijdelijk onbetrouwbaar is geworden.

De onderste blauwe grafiek is een 'inzoomen' op het rode vak in de bovenste grafiek en toont een goede representatieve momentopname van de Ublox-prestaties, met een totale afwijking van 40 mm, wat meer dan goed genoeg is om de Weedinator naar zijn locatie te leiden, maar mogelijk niet goed genoeg om de grond rond individuele planten te bewerken?

De derde grafiek toont gegevens die zijn verzameld met de Rover en de basis 100 meter uit elkaar - Er is geen extra fout gedetecteerd - de afstand van de afstand maakte geen verschil voor de nauwkeurigheid.

Stap 7: Finale

Aanbevolen: