INHOUDSOPGAWE:

EWEEDINATOR☠ Deel 2: Satellietnavigasie: 7 stappe (met foto's)
EWEEDINATOR☠ Deel 2: Satellietnavigasie: 7 stappe (met foto's)

Video: EWEEDINATOR☠ Deel 2: Satellietnavigasie: 7 stappe (met foto's)

Video: EWEEDINATOR☠ Deel 2: Satellietnavigasie: 7 stappe (met foto's)
Video: Консультант от бога Tg: cadrolikk 2024, Julie
Anonim
EWEEDINATOR☠ Deel 2: Satellietnavigasie
EWEEDINATOR☠ Deel 2: Satellietnavigasie
EWEEDINATOR☠ Deel 2: Satellietnavigasie
EWEEDINATOR☠ Deel 2: Satellietnavigasie
EWEEDINATOR☠ Deel 2: Satellietnavigasie
EWEEDINATOR☠ Deel 2: Satellietnavigasie
EWEEDINATOR☠ Deel 2: Satellietnavigasie
EWEEDINATOR☠ Deel 2: Satellietnavigasie

Die Weedinator -navigasiestelsel word gebore!

'N Landbou -robot wat deur 'n slimfoon beheer kan word.

… En eerder as om net die gereelde proses van hoe dit saamgestel is, deur te gaan, het ek gedink ek sou probeer verduidelik hoe dit eintlik werk - natuurlik nie ALLES nie, maar die belangrikste en interessantste stukke. Verskoon asseblief die woordspeling, maar dit is hoe die data tussen die individuele modules vloei, wat ek interessant vind en in die laagste noemer van die werklike "stukkies" beland - nulle en ene. As u ooit deurmekaar geraak het oor stukkies, grepe, karakters en snare, is dit dan moontlik die tyd dat u nie verwar word nie? Ek gaan ook probeer om 'n effens abstrakte konsep genaamd 'Error Cancelling' te verwar.

Die stelsel self bevat:

  • GPS/GNSS: Ublox C94 M8M (Rover en Base)
  • 9DOF Razor IMU MO digitale kompas
  • Fona 800H 2G GPRS sellulêr
  • 2.2 "TFT skerm
  • Arduino Due 'Master'
  • Verskeie Arduino 'Slaves'.

Vreemd genoeg het baie Sat Navs nie 'n digitale kompas nie, wat beteken dat as u stilstaan en verlore is, u in enige willekeurige rigting moet loop of ry voordat die toestel u die regte rigting van satelliete kan wys. As u verdwaal in 'n dik oerwoud of ondergrondse parkeerterrein, is u vol!

Stap 1: Hoe dit werk

Hoe dit werk
Hoe dit werk

Tans word 'n eenvoudige paar koördinate vanaf 'n slimfoon of rekenaar opgelaai, wat dan deur die Weedinator afgelaai word. Dit word dan geïnterpreteer in 'n opskrif in grade en 'n afstand om in mm te reis.

Die GPRS -fona word gebruik om toegang tot 'n aanlyn databasis via die 2G -selfoonnetwerk te verkry en die koördinate via 'n Arduino Nano na die Arduino Due te ontvang en oor te dra. The Due is the Master en beheer 'n verskeidenheid ander Arduinos as slawe via die I2C en reeksbusse. The Due kan interaksie hê met lewendige data van die Ublox en Razor en 'n opskrif vertoon wat bereken is deur een van sy Arduino -slawe.

Die Ublox -satellietopsporing is besonder slim, aangesien dit foutonderdrukking gebruik om baie akkurate oplossings te kry - 'n finale nominale totale afwyking van ongeveer 40 mm. Die module bestaan uit 'n identiese paar, waarvan een, die 'rover', saam met die Weedinator beweeg, en die ander, die 'basis' is êrens buite op die paal vasgemaak. Foutkansellasie word bereik deurdat die basis 'n baie akkurate oplossing kan kry deur mettertyd 'n groot hoeveelheid monsters te gebruik. Hierdie monsters word dan gemiddeld om te kompenseer vir veranderende atmosferiese toestande. As die toestel aan die beweeg was, sou dit duidelik nie gemiddeld kon wees nie en sou dit ten volle aan 'n veranderende omgewing toegewy wees. As 'n statiese en bewegende toestel egter saamwerk, solank hulle met mekaar kan kommunikeer, kan hulle voordeel trek uit albei. Op die gegewe tydstip het die basiseenheid steeds 'n fout, maar dit het ook 'n voorheen berekende super akkurate oplossing, sodat dit die werklike fout kan bereken deur een stel koördinate van 'n ander af te trek. Dit stuur dan die berekende fout na die rover via 'n radioskakel, wat dan die fout by sy eie koördinate voeg en hey presto, ons het 'n fout kanselleer! In praktiese terme maak die kansellasie van foute die verskil tussen 3 meter en 40 mm totale afwyking.

Die volledige stelsel lyk ingewikkeld, maar is eintlik redelik maklik om te bou, los op 'n nie -geleidende oppervlak of met behulp van die PCB wat ek ontwerp het, sodat alle modules veilig vasgemaak kan word. Toekomstige ontwikkeling is op die PCB ingebou, waardeur 'n groot verskeidenheid Arduino's opgeneem kan word in die bestuur van motors vir stuur, voorwaartse beweging en 'n boord-CNC-masjien. Navigasie sal ook bygestaan word deur ten minste een voorwerpherkenningstelsel wat kameras gebruik om gekleurde voorwerpe te waarneem, byvoorbeeld fluoresserende gholfballe, wat noukeurig in 'n soort rooster geplaas word - kyk na hierdie ruimte!

Stap 2: Komponente

Komponente
Komponente
Komponente
Komponente
Komponente
Komponente
  • Ublox C94 M8M (Rover en Base) x 2 van
  • 9DOF Razor IMU MO digitale kompas
  • Fona 800H 2G GPRS sellulêr 1946
  • Arduino Due
  • Arduino Nano x 2 van
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (sien aangehegte Gerber -lêers) x 2 van
  • 1206 SMD zero ohm weerstande x 12 van
  • 1206 LED's x 24 van

Die PCB -lêer word oopgemaak met 'Design Spark' -sagteware.

Stap 3: Bekabeling van die modules

Bedrading van die modules
Bedrading van die modules

Dit is die maklike deel - veral maklik met die PCB wat ek gemaak het - volg net die diagram hierbo. Sorg moet gedra word om te verhoed dat die bedrading van 3v -modules na 5v, selfs op die reeks- en I2C -lyne.

Stap 4: Kode

Kode
Kode

Die meeste van die kode handel daaroor dat data op 'n ordelike manier deur die stelsel beweeg moet word, en dit is baie gereeld nodig om dataformate van heelgetalle na vlotte na strings en karakters om te skakel, wat baie verwarrend kan wees! Die 'Serial' protokol hanteer slegs karakters en terwyl die I2C -protokol hanteer baie klein heelgetalle; ek het dit beter gevind om dit na karakters om te skakel en dan om te skakel na heelgetalle aan die ander kant van die transmissielyn.

Die Weedinator -kontroleerder is basies 'n 8 -bis -stelsel met baie individuele Arduinos, of 'MCU's'. As 8 bis beskryf word as werklike binêre nulle en die een, kan dit so lyk: B01100101 wat gelyk sal wees aan:

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

Desimale syferwaarde 128 64 32 16 8 4 2 1
Binêre syfer waarde 0 1 1 0 0 1 0 1

= 101

En die maksimum waarde is 255…. Dus die maksimum heelgetal 'byte' wat ons oor I kan oordra2C is 255, wat baie beperkend is!

Op 'n Arduino kan ons tot 32 ASCII -karakters, of grepe, op 'n slag stuur met behulp van I2C, wat baie nuttiger is, en die karakterset bevat syfers, letters en kontrolekarakters in 7 bis -formaat soos hieronder:

Beeld
Beeld

Gelukkig doen die Arduino -samesteller al die werk van die omskakeling van karakter na binêre op die agtergrond, maar dit verwag steeds die korrekte tipe karakter vir data -oordrag en dit aanvaar nie 'snare' nie.

Dit is nou wanneer dinge verwarrend kan raak. Karakters kan uitgedruk word as enkele karakters met behulp van die kar definisie of as 'n eendimensionele reeks van 20 karakters met behulp van char [20]. 'N Arduino -string is baie soortgelyk aan 'n karakterreeks en is letterlik 'n string karakters wat die menslike brein dikwels as' woorde 'interpreteer.

// Bou die karakter 'distanceCharacter':

Stringinisieerder = ""; distanceString = inisieerder + distanceString; int n = distanceString.length (); vir (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Bogenoemde kode kan 'n lang string karakters omskakel in 'n karakterreeks karakters wat dan oor I oorgedra kan word2C of reeks.

Aan die ander kant van die transmissielyn kan die data met behulp van die volgende kode na 'n string omgeskakel word:

distanceString = distanceString + c; // string = string + karakter

'N Karakterreeks kan nie direk na 'n heelgetal omgeskakel word nie en moet eers in die stringformaat ingaan, maar die volgende kode sal van 'n string na 'n heelgetal omgeskakel word:

int resultaat = (distanceString).toInt ();

int distanceMetres = resultaat;

Nou het ons 'n heelgetal wat ons kan gebruik om berekeninge te maak. Floats (getalle met 'n desimale punt) moet omgeskakel word na heelgetalle tydens die transmissiestadium en dan gedeel deur 100 vir twee desimale plekke, bv:

vlotafstandMeters = afstandMm / 1000;

Laastens kan 'n string uit 'n mengsel van karakters en heelgetalle geskep word, bv:

// Dit is waar die data in 'n karakter saamgestel word:

dataString = inisieerder + "BEAR" + zbearing + "DIST" + zdistance; // Beperk tot 32 karakters // String = string + karakters + intereger + karakters + heelgetal.

Die res van die kode is standaard Arduino -goed wat in die verskillende voorbeelde in die Arduino -biblioteke voorkom. Kyk na die 'voorbeelde >>>> snare' -voorbeeld en die' draad' -biblioteekvoorbeelde.

Hier is die hele proses om 'n vlot te stuur en te ontvang:

Skakel Float ➜ Heelgetal ➜ String ➜ Karakter -skikking om … dan TRANSMIT karakterreeks van Master ANS

➜➜ ONTVANG individuele karakters op Slave … skakel dan karakter ➜ string ➜ heelgetal ➜ float om

Stap 5: Databasis en webbladsy

Databasis en webbladsy
Databasis en webbladsy
Databasis en webbladsy
Databasis en webbladsy

Hierbo word die databasisstruktuur getoon en die php- en html -kode lêers is aangeheg. Gebruikersname, databasisname, tabelname en wagwoorde word vir sekuriteit uitgewis.

Stap 6: Navigasietoetse

Navigasie toetse
Navigasie toetse
Navigasie toetse
Navigasie toetse
Navigasie toetse
Navigasie toetse

Ek het daarin geslaag om 'n datalogger aan te sluit by die Weedinator -beheerbord via I2C en 'n idee te kry van die Ublox M8M -satellietposisieprestasie:

By 'Cold Start', wat deur die groen grafiek aangedui word, het die module met baie foute begin, baie soortgelyk aan 'n 'normale' GPS, en geleidelik het die fout verminder totdat dit na ongeveer 2 uur 'n RTK -oplossing tussen rover gekry het en basis (aangedui as die rooi kruis). Gedurende die periode van 2 uur bou en baseer die basismodule voortdurend 'n gemiddelde waarde op vir breedtegraad en lengtegraad en besluit nadat die vooraf geprogrammeerde tydsinterval 'n goeie oplossing gekry het. Die volgende 2 grafieke toon gedrag na 'n 'warm begin' 'waar die basismodule reeds 'n goeie gemiddelde bereken het. Die boonste grafiek is oor 'n tydperk van 200 minute en soms is die oplossing verlore en stuur die rover 'n NMEA -boodskap aan die Weedinator dat die oplossing tydelik onbetroubaar geword het.

Die onderste blou grafiek is 'n 'inzoomen' op die rooi blokkie in die boonste grafiek en toon 'n goeie verteenwoordigende kiekie van die Ublox -prestasie, met 'n totale afwyking van 40 mm, wat meer as goed genoeg is om die Weedinator na sy leemte te lei, maar moontlik nie goed genoeg om die grond rondom individuele plante te bewerk nie?

Die derde grafiek toon data wat met die Rover en Base 100 meter uitmekaar versamel is - geen bykomende fout is opgespoor nie - die afstand van die skeiding het geen verskil aan die akkuraatheid gemaak nie.

Stap 7: Finale

Aanbeveel: