Taula de continguts:

☠WEEDINATOR☠ Part 2: navegació per satèl·lit: 7 passos (amb imatges)
☠WEEDINATOR☠ Part 2: navegació per satèl·lit: 7 passos (amb imatges)

Vídeo: ☠WEEDINATOR☠ Part 2: navegació per satèl·lit: 7 passos (amb imatges)

Vídeo: ☠WEEDINATOR☠ Part 2: navegació per satèl·lit: 7 passos (amb imatges)
Vídeo: Convenience items needed in the family 2024, Juliol
Anonim
☠WEEDINATOR☠ Part 2: navegació per satèl·lit
☠WEEDINATOR☠ Part 2: navegació per satèl·lit
☠WEEDINATOR☠ Part 2: navegació per satèl·lit
☠WEEDINATOR☠ Part 2: navegació per satèl·lit
☠WEEDINATOR☠ Part 2: navegació per satèl·lit
☠WEEDINATOR☠ Part 2: navegació per satèl·lit
☠WEEDINATOR☠ Part 2: navegació per satèl·lit
☠WEEDINATOR☠ Part 2: navegació per satèl·lit

Neix el sistema de navegació Weedinator!

Un robot agrícola itinerant que es pot controlar mitjançant un telèfon intel·ligent.

… I en lloc de passar pel procés habitual de com es combina, vaig pensar a intentar explicar com funciona, òbviament no TOT, sinó els trossos més importants i interessants. Perdoneu el joc de paraules, però és com les dades flueixen entre els mòduls individuals que trobo interessants i que es divideixen en el seu denominador més baix. Acabem amb els "bits" reals: zeros i uns. Si alguna vegada us han confós els bits, els bytes, els caràcters i les cadenes, ara pot ser el moment de no confondre’s? També intentaré desconfondre un concepte lleugerament abstracte anomenat "Cancel·lació d'errors".

El propi sistema inclou:

  • GPS / GNSS: Ublox C94 M8M (Rover i Base)
  • 9DOF Razor IMU MO brúixola digital
  • Fona 800H 2G GPRS cel·lular
  • Pantalla TFT de 2,2"
  • Arduino Due 'Master'
  • Diversos 'esclaus' d'Arduino.

Curiosament, molts navegadors satèl·lits no tenen una brúixola digital, cosa que significa que si esteu parats i perduts, heu de caminar o conduir en qualsevol direcció aleatòria abans que el dispositiu us pugui mostrar la direcció correcta des dels satèl·lits. Si us perdeu en una espessa jungla o un aparcament subterrani, esteu farcits!

Pas 1: Com funciona

Com funciona
Com funciona

En l'actualitat, es carrega un simple parell de coordenades des d'un telèfon intel·ligent o un ordinador, que el Weedinator descarrega després. Tot seguit, s’interpreten en un encapçalament en graus i en una distància a recórrer en mm.

La fona GPRS s’utilitza per accedir a una base de dades en línia a través de la xarxa cel·lular 2G i rebre i transmetre les coordenades a l’Arduino Due mitjançant un Arduino Nano. El Due és el mestre i controla una sèrie d'altres Arduinos com a esclaus a través dels busos I2C i sèrie. The Due pot interactuar amb dades en directe de Ublox i Razor i mostrar un encapçalament calculat per un dels seus esclaus Arduino.

El rastrejador de satèl·lits Ublox és especialment intel·ligent, ja que utilitza la cancel·lació d’errors per obtenir solucions molt precises: una desviació total nominal final d’uns 40 mm. El mòdul es compon d'un parell idèntic, un dels quals, el "rover", es mou amb el Weedinator i l'altre, la "base" es fixa en un pal en algun lloc obert. La cancel·lació d’errors s’aconsegueix perquè la base pugui aconseguir una correcció realment precisa mitjançant l’ús d’una gran quantitat de mostres al llarg del temps. A continuació, es fan una mitjana d’aquestes mostres per compensar el canvi de les condicions atmosfèriques. Si el dispositiu es mogués, òbviament no seria capaç de fer cap tipus de mitjana i estaria a la mercè completa d’un entorn canviant. Tanmateix, si un dispositiu estàtic i mòbil treballa junts, sempre que puguin comunicar-se entre ells, poden obtenir el benefici d’ambdós. En qualsevol moment, la unitat base encara té un error, però també té una correcció super precisa calculada prèviament, de manera que pot calcular l’error real restant un conjunt de coordenades d’un altre. A continuació, envia l'error calculat al rover a través d'un enllaç de ràdio, que després afegeix l'error a les seves pròpies coordenades i hey presto, hem cancel·lat l'error. En termes pràctics, la cancel·lació d'errors marca la diferència entre la desviació total de 3 metres i 40 mm.

El sistema complet sembla complicat, però en realitat és bastant fàcil de construir, ja sigui solt sobre una superfície no conductora o mitjançant el PCB que he dissenyat, cosa que permet fixar tots els mòduls de manera segura. El desenvolupament futur es basa en el PCB, cosa que permet incorporar una àmplia gamma d’Arduinos per controlar motors per a la direcció, el moviment cap endavant i una màquina CNC integrada. La navegació també serà assistida per almenys un sistema de reconeixement d’objectes que utilitza càmeres per detectar objectes de colors, per exemple pilotes de golf fluorescents, que es col·loquen acuradament en algun tipus de quadrícula. Mireu aquest espai.

Pas 2: components

Components
Components
Components
Components
Components
Components
  • Ublox C94 M8M (Rover i Base) x 2 de
  • 9DOF Razor IMU MO brúixola digital
  • Fona 800H 2G GPRS cel·lular de 1946
  • Arduino Due
  • Arduino Nano x 2 de
  • SparkFun Pro Micro
  • Adafruit 2.2 "TFT IL1940C 1480
  • PCB (vegeu fitxers Gerber adjunts) x 2 de
  • 1206 resistències SMD zero ohm x 12 de
  • 1206 LEDs x 24 de

El fitxer PCB s'obre amb el programari "Design Spark".

Pas 3: Connexió dels mòduls

Cablatge dels mòduls
Cablatge dels mòduls

Aquesta és la part més fàcil, especialment fàcil amb el PCB que he fet, només heu de seguir el diagrama anterior. Cal tenir cura per evitar el cablejat de mòduls de 3v a 5v, fins i tot a les línies sèrie i I2C.

Pas 4: Codi

Codi
Codi

La majoria del codi es preocupa d’aconseguir que les dades es moguin pel sistema de manera ordenada i, sovint, cal convertir formats de dades des de enters a flotants a cadenes i a caràcters, cosa que pot ser molt confús. El protocol 'Serial' només gestionarà caràcters i, mentre que l'I2El protocol C manejarà nombres enters molt petits, he trobat millor convertir-los en caràcters i convertir-los de nou en nombres enters a l’altre extrem de la línia de transmissió.

El controlador Weedinator és bàsicament un sistema de 8 bits amb molts Arduinos individuals o MCU. Quan es descriu 8 bits com a zeros binaris reals i uns, pot tenir el següent aspecte: B01100101, que seria igual a:

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

Valor de dígits decimals 128 64 32 16 8 4 2 1
Valor de dígit binari 0 1 1 0 0 1 0 1

= 101

I el valor màxim possible és 255 … Així doncs, el màxim 'byte' enter que podem transmetre sobre I2C és 255, cosa que és molt limitant!

En un Arduino podem transmetre fins a 32 caràcters ASCII, o bytes, alhora utilitzant I2C, que és molt més útil, i el conjunt de caràcters inclou números, lletres i caràcters de control en format de 7 bits com es mostra a continuació:

Imatge
Imatge

Afortunadament, el compilador Arduino fa tota la feina de conversió de caràcter a binari en segon pla, però encara espera el tipus de caràcter correcte per a la transmissió de dades i no acceptarà "Cadenes".

Ara és quan les coses es poden confondre. Els caràcters es poden expressar com a caràcters individuals mitjançant la definició de caràcters o com una matriu unidimensional de 20 caràcters mitjançant caràcters [20]. Una cadena Arduino és molt similar a una matriu de caràcters i és literalment una sèrie de caràcters sovint interpretats pel cervell humà com a "paraules".

// Construeix el caràcter 'distanceCharacter':

Iniciador de cadena = ""; distanceString = iniciador + distanceString; int n = distanceString.length (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }

El codi anterior pot convertir una llarga cadena de caràcters en una matriu de caràcters de caràcters que després es poden transmetre per I2C o sèrie.

A l’altre extrem de la línia de transmissió, les dades es poden convertir de nou a una cadena mitjançant el codi següent:

distanceString = distanceString + c; // cadena = cadena + caràcter

Una matriu de caràcters no es pot convertir directament a un enter i ha d'anar primer al format de cadena, però el següent codi es convertirà d'una cadena a un enter:

int result = (distanceString).toInt ();

int distanceMetres = resultat;

Ara tenim un nombre enter que podem utilitzar per fer càlculs. Els flotadors (nombres amb un punt decimal) s'han de convertir a enters en l'etapa de transmissió i després dividir-los per 100 per a dos decimals, per exemple:

float distanceMetres = distanceMm / 1000;

Per últim, es pot crear una cadena a partir d’una barreja de caràcters i enters, per exemple:

// Aquí és on es recopilen les dades en un caràcter:

dataString = iniciador + "BEAR" + zbearing + "DIST" + zdistance; // Limitat a 32 caràcters // Cadena = cadena + caràcters + enter + caràcters + enter.

La resta del codi és material Arduino estàndard que es pot trobar als diversos exemples de les biblioteques Arduino. Consulteu l'exemple "exemples >>>> Strings" i els exemples de la biblioteca "wire".

Aquí teniu tot el procés per transmetre i rebre un flotador:

Converteix Float ➜ Enter ➜ String ➜ Caràcter matriu ….. després TRANSMET la matriu de caràcters del mestre ➜➜

➜➜ RECIBIR personatges individuals a Slave … després converteix Caràcter ➜ Cadena ➜ Enter ➜ Flotant

Pas 5: base de dades i pàgina web

Base de dades i pàgina web
Base de dades i pàgina web
Base de dades i pàgina web
Base de dades i pàgina web

A la part superior es mostra l'estructura de la base de dades i s'adjunten els fitxers de codi php i html. Els noms d’usuari, els noms de les bases de dades, els noms de les taules i les contrasenyes estan buits per seguretat.

Pas 6: proves de navegació

Proves de navegació
Proves de navegació
Proves de navegació
Proves de navegació
Proves de navegació
Proves de navegació

Vaig aconseguir connectar un registre de dades a la placa de control de Weedinator mitjançant I2C i fer-me una idea del rendiment de posicionament per satèl·lit Ublox M8M:

A "Arrencada en fred", que es mostra al gràfic verd, el mòdul va començar amb molts errors, bastant similar a un GPS "normal", i gradualment l'error es va reduint fins que, al cap d'unes dues hores, va aconseguir una correcció RTK entre el rover i base (es mostra com la creu vermella). Durant aquest període de 2 hores, el mòdul base està construint i actualitzant contínuament un valor mitjà de latitud i longitud i, després de l'interval de temps preprogramat, decideix que té una bona solució. Els 2 gràfics següents mostren el comportament després d'un "inici calent" 'on el mòdul base ja ha calculat una bona mitjana. El gràfic superior té una durada de 200 minuts i, de tant en tant, la solució es perd i el rover envia un missatge NMEA al Weedinator que indica que la solució s’ha tornat poc fiable.

El gràfic blau inferior és un "zoom" al quadre vermell del gràfic superior i mostra un bon instantani representatiu del rendiment Ublox, amb una desviació total de 40 mm, que és prou bo per guiar Weedinator fins a la seva locació., però possiblement no és prou bo per cultivar el sòl al voltant de plantes individuals?

El tercer gràfic mostra les dades recollides amb el Rover i el Base a 100 metres de distància - No es va detectar cap error addicional - la distància de separació no va fer cap diferència en la precisió.

Pas 7: final

Recomanat: