Tartalomjegyzék:

☠WEEDINATOR☠ 2. rész: Műholdas navigáció: 7 lépés (képekkel)
☠WEEDINATOR☠ 2. rész: Műholdas navigáció: 7 lépés (képekkel)

Videó: ☠WEEDINATOR☠ 2. rész: Műholdas navigáció: 7 lépés (képekkel)

Videó: ☠WEEDINATOR☠ 2. rész: Műholdas navigáció: 7 lépés (képekkel)
Videó: Угрюм-река (1969) (1 серия) фильм 2024, Július
Anonim
☠WEEDINATOR☠ 2. rész: Műholdas navigáció
☠WEEDINATOR☠ 2. rész: Műholdas navigáció
☠WEEDINATOR☠ 2. rész: Műholdas navigáció
☠WEEDINATOR☠ 2. rész: Műholdas navigáció
☠WEEDINATOR☠ 2. rész: Műholdas navigáció
☠WEEDINATOR☠ 2. rész: Műholdas navigáció
☠WEEDINATOR☠ 2. rész: Műholdas navigáció
☠WEEDINATOR☠ 2. rész: Műholdas navigáció

Megszületett a Weedinator navigációs rendszer!

Csavargó mezőgazdasági robot, amelyet okostelefonnal lehet irányítani.

… És ahelyett, hogy csak végigmenne a rendszeres összeállítási folyamaton, úgy gondoltam, megpróbálom elmagyarázni, hogyan is működik valójában - nyilvánvalóan nem MINDEN, hanem a legfontosabb és legérdekesebb részletek. Elnézést kérek a szójátékért, de érdekesnek találom az egyes modulok közötti adatáramlást, és a legalacsonyabb nevezőre bontva tényleges "biteket" kapunk - nullákat és egyeseket. Ha valaha is összezavarodott a bitek, bájtok, karakterek és karakterláncok miatt, akkor most lehet itt az ideje, hogy zavartalan legyen? Megpróbálom megzavarni egy kissé absztrakt fogalmat, az úgynevezett „Hiba törlés” nevet.

Maga a rendszer jellemzői:

  • GPS/GNSS: Ublox C94 M8M (Rover és Base)
  • 9DOF Razor IMU MO digitális iránytű
  • Fona 800H 2G GPRS mobil
  • 2,2 hüvelykes TFT képernyő
  • Arduino Due „Mester”
  • Különböző Arduino "rabszolgák".

Furcsa módon sok Sat Nav -ban nincs digitális iránytű, ami azt jelenti, hogy ha helyben vagy, és elveszett, akkor bármilyen véletlenszerű irányba kell gyalogolnia vagy vezetnie, mielőtt a készülék meg tudja mutatni a műholdak helyes irányát. Ha eltévedsz egy vastag dzsungelben vagy a mélygarázsban, tele vagy!

1. lépés: Hogyan működik?

Hogyan működik
Hogyan működik

Jelenleg egy egyszerű koordinátapárt töltenek fel okostelefonról vagy számítógépről, amelyet a Weedinator letölt. Ezeket ezután fejlécben értelmezik fokban és a megtett távolságot mm -ben.

A GPRS fona arra szolgál, hogy elérjen egy online adatbázist a 2G mobilhálózaton keresztül, és fogadja és továbbítsa a koordinátákat az Arduino Due -hoz egy Arduino Nano segítségével. A Due a mester, és számos más Arduinót irányít rabszolgaként az I2C és soros buszokon keresztül. A Due kölcsönhatásba léphet az Ublox és a Razor élő adataival, és megjelenítheti az egyik Arduino rabszolga által kiszámított címsort.

Az Ublox műholdkövető különösen ügyes, mivel hibajavítást használ a nagyon pontos javítások eléréséhez - a végső névleges teljes eltérés körülbelül 40 mm. A modul egy azonos párból áll, amelyek közül az egyik, a „rover” a Weedinatorral együtt mozog, a másik, az „alap” pedig egy oszlopra van rögzítve valahol a szabadban. A hibák törlését úgy érik el, hogy a bázis valóban pontos javítást érhet el nagy mennyiségű minta használatával. Ezeket a mintákat ezután átlagolják, hogy kompenzálják a változó légköri viszonyokat. Ha az eszköz mozogna, nyilvánvalóan nem lenne képes átlagolásra, és a változó környezet teljes kegyében lenne. Ha azonban egy statikus és mozgó eszköz együtt dolgozik, mindaddig, amíg kommunikálni tudnak egymással, mindkettőből részesülhetnek. Bármikor, az alapegységnek még mindig van hibája, de van egy korábban kiszámított szuper pontos javítása is, így kiszámíthatja a tényleges hibát úgy, hogy kivon egy koordinátahalmazt a másikból. Ezután egy rádiókapcsolaton keresztül elküldi a kiszámított hibát a rovernek, amely aztán hozzáadja a hibát a saját koordinátáihoz, és hé, presto, hibaelhárítással rendelkezünk! Gyakorlatilag a hibaelhárítás teszi a különbséget a 3 méter és a 40 mm teljes eltérés között.

A teljes rendszer bonyolultnak tűnik, de valójában meglehetősen könnyen felépíthető, vagy lazán egy nem vezető felületen, vagy az általam tervezett NYÁK segítségével, amely lehetővé teszi az összes modul biztonságos rögzítését. A jövőbeli fejlesztések a NYÁK-ra épülnek, lehetővé téve az Arduino-k széles skálájának beépítését a kormányzáshoz, az előrehaladáshoz és a fedélzeti CNC-gépek vezérléséhez. A navigációt legalább egy objektumfelismerő rendszer is segíti, amely kamerákkal érzékeli a színes tárgyakat, például fluoreszkáló golflabdákat, amelyek gondosan vannak elhelyezve valamilyen rácsban - Figyelje ezt a helyet!

2. lépés: Alkatrészek

Alkatrészek
Alkatrészek
Alkatrészek
Alkatrészek
Alkatrészek
Alkatrészek
  • Ublox C94 M8M (Rover és Base) x 2
  • 9DOF borotva IMU MO digitális iránytű
  • Fona 800H 2G GPRS mobil 1946
  • Arduino Due
  • Arduino Nano x 2
  • SparkFun Pro Micro
  • Adafruit 2,2 "TFT IL1940C 1480
  • NYÁK (lásd a mellékelt Gerber fájlokat) x 2
  • 1206 SMD nulla ohmos ellenállás x 12 db
  • 1206 LED x 24 db

A PCB fájl megnyílik a "Design Spark" szoftverrel.

3. lépés: A modulok bekötése

A modulok bekötése
A modulok bekötése

Ez az egyszerű rész - különösen könnyű az általam készített NYÁK -val - csak kövesse a fenti ábrát. Ügyelni kell arra, hogy a soros és az I2C vonalakon ne legyen 3v -os modul 5V -ra kötve.

4. lépés: Kód

Kód
Kód

A legtöbb kód azzal foglalkozik, hogy az adatok rendezett módon mozoghassanak a rendszerben, és gyakran szükség van arra, hogy az adatformátumokat egész számokból lebegőből karakterlánccá és karakterré alakítsuk át, ami nagyon zavaró lehet! A soros protokoll csak karaktereket kezel, míg az I2A C protokoll nagyon kicsi egész számokat fog kezelni, jobbnak találtam, ha karakterré alakítom őket, majd az átviteli vonal másik végén visszaállítom egész számokká.

A Weedinator vezérlő alapvetően egy 8 bites rendszer, sok egyedi Arduinóval vagy MCU -val. Ha a 8 bitet tényleges bináris nulláknak és egyeseknek írják le, akkor ez így nézhet ki: B01100101, amely egyenlő:

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

Tizedesjegy érték 128 64 32 16 8 4 2 1
Bináris számjegy érték 0 1 1 0 0 1 0 1

= 101

És a lehetséges maximális érték 255. Tehát a maximális egész számú „bájt”, amelyet I -n keresztül továbbíthatunk2C 255, ami nagyon korlátozó!

Egy Arduino -n egyszerre legfeljebb 32 ASCII karaktert vagy bájtot tudunk továbbítani az I használatával2C, amely sokkal hasznosabb, és a karakterkészlet számokat, betűket és vezérlő karaktereket tartalmaz 7 bites formátumban, az alábbiak szerint:

Kép
Kép

Szerencsére az Arduino fordító a háttérben elvégzi a karakterből binárisba való átalakítás minden munkáját, de továbbra is a megfelelő típusú karaktert várja az adatátvitelhez, és nem fogadja el a „karakterláncokat”.

Most van az, amikor zavarba jöhetnek a dolgok. A karakterek kifejezhetők egyetlen karakterként a char meghatározás használatával, vagy 20 karakteres egydimenziós tömbként a char használatával [20]. Az Arduino karakterlánc nagyon hasonlít a karakter tömbhöz, és szó szerint karakterlánc, amelyet az emberi agy gyakran „szavakként” értelmez.

// Létrehozza a "distanceCharacter" karaktert:

Karakterlánc kezdeményező = ""; distanceString = kezdeményező + távolságString; int n = távolságString.length (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

A fenti kód hosszú karaktersorozatot alakíthat karakter tömbvé, amely azután továbbítható I -n keresztül2C vagy soros.

Az átviteli vonal másik végén az adatokat vissza lehet alakítani karakterlánccá a következő kód használatával:

distanceString = távolságString + c; // karakterlánc = karakterlánc + karakter

A karakter tömb nem konvertálható közvetlenül egész számra, és először a karakterlánc formátumába kell lépnie, de a következő kód karakterláncból egész számgá alakul:

int eredmény = (távolságString).toInt ();

int distanceMetres = eredmény;

Most van egy egész számunk, amellyel számításokat végezhetünk. Az úszókat (tizedesvesszővel ellátott számokat) az átviteli szakaszban egész számokká kell alakítani, majd két tizedesjegyre el kell osztani 100 -zal, pl.

úszó távolságMetres = távolságMm / 1000;

Végül karakterlánc hozható létre karakterek és egész számok keverékéből, pl.

// Itt az adatok karakterré vannak összeállítva:

dataString = kezdeményező + "BEAR" + zbearing + "DIST" + zdistance; // 32 karakterre korlátozva // Karakterlánc = karakterlánc + karakter + egész + karakter + egész szám.

A kód többi része szabványos Arduino cucc, amely megtalálható az Arduino könyvtárak különböző példáiban. Nézze meg a „példák >>>> karakterláncok” és a „drót” könyvtári példákat.

Íme az egész folyamat az úszás továbbítására és fogadására:

Float ➜ egész szám ➜ karakterlánc ➜ karakter tömb konvertálása….. majd TRANSMIT karakter tömb átvitele a Master ➜➜ -ből

FOGADJA az egyes karaktereket a Slave -en…. majd konvertálja a karaktert ➜ karakterláncot ➜ egész számot ➜ úszót

5. lépés: Adatbázis és weboldal

Adatbázis és weboldal
Adatbázis és weboldal
Adatbázis és weboldal
Adatbázis és weboldal

Fentebb látható az adatbázis szerkezete és a php és html kód fájlok. A felhasználónevek, adatbázisnevek, táblázatnevek és jelszavak a biztonság kedvéért törlődnek.

6. lépés: Navigációs tesztek

Navigációs tesztek
Navigációs tesztek
Navigációs tesztek
Navigációs tesztek
Navigációs tesztek
Navigációs tesztek

Sikerült csatlakoztatnom egy adatgyűjtőt a Weedinator vezérlőpultjához I2C -n keresztül, és képet kapnom az Ublox M8M műholdas helymeghatározási teljesítményéről:

A zöld grafikonon látható „hidegindításon” a modul sok hibával indult, hasonlóan a „normál” GPS -hez, és fokozatosan csökkent a hiba, amíg körülbelül 2 óra elteltével RTK javítást kapott a rover között és az alap (vörös keresztként látható). Ez alatt a 2 órás időszak alatt az alapmodul folyamatosan felépíti és frissíti a szélességi és hosszúsági átlagértékeket, és miután az előre beprogramozott időintervallum úgy dönt, hogy jó javítást kapott. A következő 2 grafikon a „Hot start” utáni viselkedést mutatja 'ahol az alapmodul már jó átlagot számított. A felső grafikon több mint 200 perces időtartamú, és időnként a javítás elveszik, és a rover NMEA üzenetet küld a Weedinatornak, hogy a javítás átmenetileg megbízhatatlanná vált.

Az alsó kék grafikon egy „nagyítás” a felső grafikon piros mezőjén, és jól reprezentatív pillanatfelvételt mutat az Ublox teljesítményéről, teljes 40 mm -es eltéréssel, ami több mint elég ahhoz, hogy a Weedinator -t ellássa, de esetleg nem elég jó ahhoz, hogy megművelje a talajt az egyes növények körül?

A harmadik grafikon a Rover és a Base 100 méter távolságra gyűjtött adatait mutatja - További hibát nem észlelt - az elválasztási távolság nem befolyásolta a pontosságot.

7. lépés: döntő

Ajánlott: