Përmbajtje:

EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor: 7 hapa (me fotografi)
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor: 7 hapa (me fotografi)

Video: EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor: 7 hapa (me fotografi)

Video: EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor: 7 hapa (me fotografi)
Video: Как спрятать данные в ячейках Excel? 2024, Nëntor
Anonim
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor
EWEEDINATOR☠ Pjesa 2: Lundrimi satelitor

Lind sistemi i navigimit Weedinator!

Një robot bujqësor që mund të kontrollohet nga një telefon i zgjuar.

… Dhe në vend që thjesht të kaloj përmes procesit të rregullt se si është bërë së bashku, mendova se do të përpiqesha dhe të shpjegoja se si funksionon në të vërtetë - padyshim jo gjithçka, por pjesët më të rëndësishme dhe interesante. Ju lutemi falni fjalën, por është mënyra se si të dhënat rrjedhin midis moduleve individuale që më duket interesante dhe të ndara në emëruesin më të ulët, ne përfundojmë me "copa" të vërteta - zero dhe njëshe. Nëse jeni ngatërruar ndonjëherë për copa, bajt, karaktere dhe vargje, atëherë tani mund të jetë koha për t'u bërë të pakonfuzionuar? Unë gjithashtu do të përpiqem të ngatërroj një koncept pak abstrakt të quajtur 'Anulimi i Gabimit'.

Vetë sistemi përmban:

  • GPS/GNSS: Ublox C94 M8M (Rover dhe Baza)
  • Busull dixhital 9DOF Razor IMU MO
  • Fona 800H 2G GPRS celulare
  • Ekran 2.2 "TFT
  • Arduino Due 'Master'
  • "Skllevër" të ndryshëm Arduino.

Çuditërisht, shumë Sat Navs nuk kanë një busull dixhitale që do të thotë nëse jeni të palëvizshëm dhe të humbur, ju duhet të ecni ose të vozisni në çdo drejtim të rastësishëm para se pajisja t'ju tregojë drejtimin e duhur nga satelitët. Nëse humbisni në një xhungël të trashë ose park nëntokësor të makinave jeni të mbushur!

Hapi 1: Si funksionon

Si punon
Si punon

Aktualisht, një palë e thjeshtë koordinatash ngarkohen nga një telefon i mençur ose kompjuter, të cilat më pas shkarkohen nga Weedinator. Këto pastaj interpretohen në një titull në gradë dhe një distancë për të udhëtuar në mm.

Fona GPRS përdoret për të hyrë në një bazë të dhënash në internet përmes rrjetit celular 2G dhe për të marrë dhe transmetuar koordinatat në Arduino Due përmes një Arduino Nano. The Due është Master dhe kontrollon një sërë Arduinos të tjerë si Skllevër përmes I2C dhe autobusëve serik. The Due mund të ndërveprojë me të dhënat e drejtpërdrejta nga Ublox dhe Razor dhe të shfaqë një titull të llogaritur nga një prej skllevërve të tij Arduino.

Gjurmuesi satelitor Ublox është veçanërisht i zgjuar pasi përdor anulimin e gabimit për të marrë rregullime shumë të sakta - një devijim total nominal përfundimtar prej rreth 40 mm. Moduli përbëhet nga një palë identike, njëra prej të cilave, "rover", lëviz me Weedinator, dhe tjetra, "baza" është e fiksuar në një shtyllë diku jashtë. Anulimi i gabimit arrihet pasi baza është në gjendje të arrijë një rregullim vërtet të saktë duke përdorur një sasi të madhe mostrash me kalimin e kohës. Këto mostra më pas mesatarizohen për të kompensuar ndryshimin e kushteve atmosferike. Nëse pajisja do të lëvizte, padyshim që nuk do të ishte në gjendje të merrte asnjë lloj mesatarizimi dhe do të ishte në mëshirën e plotë të një mjedisi në ndryshim. Sidoqoftë, nëse një pajisje statike dhe lëvizëse punojnë së bashku, për sa kohë që ata mund të komunikojnë mes njëri -tjetrit, ata mund të përfitojnë nga të dy. Në çdo kohë, njësia bazë ka ende një gabim, por gjithashtu ka një rregullim super të saktë të llogaritur më parë, kështu që mund të llogarisë gabimin aktual duke zbritur një grup koordinatash nga një tjetër. Pastaj dërgon gabimin e llogaritur në rover përmes një lidhje radio, e cila më pas shton gabimin në koordinatat e veta dhe hej presto, ne kemi gabim në anulimin! Në aspektin praktik, anulimi i gabimit bën diferencën midis devijimit total prej 3 metrash dhe 40 mm.

Sistemi i plotë duket i komplikuar, por në të vërtetë është mjaft i lehtë për t'u ndërtuar, ose i lirshëm në një sipërfaqe jo përçuese ose duke përdorur PCB që kam projektuar, e cila lejon që të gjitha modulet të fiksohen mirë. Zhvillimi i ardhshëm është ndërtuar mbi PCB, duke lejuar që një grup i madh Arduinos të përfshihen për të kontrolluar motorët për drejtimin, lëvizjen përpara dhe një makinë CNC në bord. Lundrimi gjithashtu do të ndihmohet nga të paktën një sistem i njohjes së objekteve duke përdorur kamera për të ndjerë objektet me ngjyrë, për shembull topa golfi fluoreshente, të cilët janë të pozicionuar me kujdes në një lloj rrjeti - Shikoni këtë hapësirë!

Hapi 2: Përbërësit

Komponentët
Komponentët
Komponentët
Komponentët
Komponentët
Komponentët
  • Ublox C94 M8M (Rover dhe Base) x 2 prej
  • Busull dixhital 9DOF Razor IMU MO
  • Fona 800H 2G GPRS celulare 1946
  • Arduino Due
  • Arduino Nano x 2 prej
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (shih skedarët Gerber të bashkangjitur) x 2 prej
  • 1206 SMD rezistente zero ohm x 12 prej
  • 1206 LEDs x 24 e

Skedari PCB hapet me programin 'Design Spark'.

Hapi 3: Instalimi i moduleve

Instalimi i moduleve
Instalimi i moduleve

Kjo është pjesa e lehtë - veçanërisht e lehtë me PCB që kam bërë - thjesht ndiqni diagramin e mësipërm. Kujdes nevojitet për të shmangur lidhjen e moduleve 3v në 5v, madje edhe në linjat seriale dhe I2C.

Hapi 4: Kodi

Kodi
Kodi

Pjesa më e madhe e kodit ka të bëjë me marrjen e të dhënave që të lëvizin nëpër sistem në mënyrë të rregullt dhe mjaft shpesh ka nevojë të konvertohen formatet e të dhënave nga numrat e plotë në nota në vargje dhe karaktere, të cilat mund të jenë shumë konfuze! Protokolli 'Serial' do të trajtojë vetëm karakteret dhe ndërsa I2Protokolli C do të trajtojë numra të plotë shumë të vegjël, e kam gjetur më mirë t'i konvertoj ato në karaktere dhe pastaj të kthehem përsëri në numra të plotë në skajin tjetër të linjës së transmetimit.

Kontrolluesi Weedinator është në thelb një sistem 8 bitësh me shumë Arduinos individualë, ose 'MCU's. Kur 8 biti përshkruhet si zero binare aktuale dhe ato mund të duket kështu: B01100101 që do të ishte e barabartë me:

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

Vlera dhjetore e shifrës 128 64 32 16 8 4 2 1
Vlera e Shifrës Binare 0 1 1 0 0 1 0 1

= 101

Dhe vlera maksimale e mundshme është 255…. Pra, 'bajt' i plotë maksimal mund ta transmetojmë mbi I2C është 255, që është shumë kufizuese!

Në një Arduino ne mund të transmetojmë deri në 32 karaktere ASCII, ose bajt, në të njëjtën kohë duke përdorur I2C, e cila është shumë më e dobishme, dhe grupi i karaktereve përfshin numra, shkronja dhe karaktere kontrolli në formatin 7 bit si më poshtë:

Imazhi
Imazhi

Për fat të mirë, përpiluesi Arduino bën të gjithë punën e shndërrimit nga karakteri në binar në sfond, por ai ende pret llojin e saktë të karakterit për transmetimin e të dhënave dhe nuk do të pranojë 'Vargje'.

Tani është kur gjërat mund të bëhen konfuze. Karakteret mund të shprehen si karaktere të vetme duke përdorur përkufizimin char ose si një grup një -dimensional prej 20 karakteresh duke përdorur char [20]. Një varg Arduino është shumë i ngjashëm me një grup personazhesh dhe është fjalë për fjalë një varg personazhesh që shpesh interpretohen nga truri i njeriut si "fjalë".

// Ndërton karakterin 'distanceCharacter':

Iniciatori i vargut = ""; distanceString = inicues + distanceString; int n = distanceString.length (); për (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

Kodi i mësipërm mund të shndërrojë një varg të gjatë karakteresh në një grup karakteresh, të cilat pastaj mund të transmetohen mbi I2C ose serial.

Në anën tjetër të linjës së transmetimit, të dhënat mund të konvertohen përsëri në një varg duke përdorur kodin e mëposhtëm:

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

Një grup karakteresh nuk mund të konvertohet drejtpërdrejt në një numër të plotë dhe duhet të kalojë në formatin e vargut, por kodi i mëposhtëm do të konvertohet nga një varg në një numër të plotë:

int rezultati = (distancaString).toInt ();

int distanceMetres = rezultati;

Tani kemi një numër të plotë të cilin mund ta përdorim për të bërë llogaritjet. Notat (numrat me një pikë dhjetore) duhet të konvertohen në numra të plotë në fazën e transmetimit dhe më pas të ndahen me 100 për dy vende dhjetore p.sh.:

float distanceMetres = distancaMm / 1000;

Së fundi, një varg mund të krijohet nga një përzierje e karaktereve dhe numrave të plotë, p.sh.:

// Kjo është ajo ku të dhënat përpilohen në një karakter:

dataString = iniciator + "BEAR" + zbearing + "DIST" + distancë; // Kufizuar në 32 karaktere // Varg = varg + karaktere + numër i plotë + karaktere + numër i plotë.

Pjesa tjetër e kodit është material standard Arduino që mund të gjendet në shembujt e ndryshëm në bibliotekat Arduino. Shikoni shembullin 'shembuj >>>> Strings dhe shembujt e bibliotekës' wire '.

Këtu është i gjithë procesi për transmetimin dhe marrjen e një notimi:

Konverto Float ➜ Integer ring String ➜ Character array….. pastaj TRANSMIT array karakter nga Master ➜➜

➜➜ MERRNI personazhe individualë në Slave…. pastaj konvertoni Karakterin ring Varg ➜ Integer ➜ Float

Hapi 5: Baza e të dhënave dhe Uebfaqja

Baza e të dhënave dhe Uebfaqja
Baza e të dhënave dhe Uebfaqja
Baza e të dhënave dhe Uebfaqja
Baza e të dhënave dhe Uebfaqja

Më sipër është treguar struktura e bazës së të dhënave dhe skedarët e kodit php dhe html janë bashkangjitur. Emrat e përdoruesve, emrat e bazës së të dhënave, emrat e tabelave dhe fjalëkalimet fshihen për siguri.

Hapi 6: Testet e navigimit

Testet e navigimit
Testet e navigimit
Testet e navigimit
Testet e navigimit
Testet e navigimit
Testet e navigimit

Unë arrita të lidh një regjistrues të të dhënave në bordin e kontrollit Weedinator përmes I2C dhe të marr një ide për performancën e pozicionimit të satelitit Ublox M8M:

Në "Fillimin e Ftohtë", treguar nga grafiku i gjelbër, moduli filloi me shumë gabime, mjaft të ngjashme me një GPS "normal", dhe gradualisht gabimi u zvogëlua derisa, pas rreth 2 orësh, ai mori një rregullim RTK midis rover dhe baza (e treguar si kryqi i kuq). Gjatë asaj periudhe 2 orëshe, moduli bazë po ndërton dhe përditëson vazhdimisht një vlerë mesatare për gjerësinë dhe gjatësinë gjeografike dhe pasi intervali kohor i para-programuar vendos që ka marrë një rregullim të mirë. 2 grafikët e mëposhtëm tregojnë sjelljen pas një 'Fillimi të nxehtë ku moduli bazë tashmë ka llogaritur një mesatare të mirë. Grafiku i lartë është mbi një periudhë prej 200 minutash dhe herë pas here fiksimi humbet dhe roveri dërgon një mesazh NMEA tek Weedinator se rregullimi është bërë përkohësisht i pasigurt.

Grafiku i poshtëm blu është një 'zmadhim' në kutinë e kuqe në grafikun e sipërm dhe tregon një fotografi të mirë përfaqësuese të performancës Ublox, me devijim total prej 40 mm, i cili është më se i mirë sa duhet për të drejtuar Weedinatorin në pushimin e tij, por ndoshta jo aq i mirë sa për të kultivuar tokën rreth bimëve individuale?

Grafiku i tretë tregon të dhënat e mbledhura me Rover dhe Base 100 metra larg - Asnjë gabim shtesë nuk u zbulua - distanca e ndarjes nuk bëri asnjë ndryshim në saktësinë.

Hapi 7: Përfundimtar

Recommended: