Sommario:

WEEDINATOR☠ Parte 2: Navigazione satellitare: 7 passaggi (con immagini)
WEEDINATOR☠ Parte 2: Navigazione satellitare: 7 passaggi (con immagini)

Video: WEEDINATOR☠ Parte 2: Navigazione satellitare: 7 passaggi (con immagini)

Video: WEEDINATOR☠ Parte 2: Navigazione satellitare: 7 passaggi (con immagini)
Video: Голубая стрела (1958) фильм 2024, Luglio
Anonim
WEEDINATOR☠ Parte 2: Navigazione satellitare
WEEDINATOR☠ Parte 2: Navigazione satellitare
WEEDINATOR☠ Parte 2: Navigazione satellitare
WEEDINATOR☠ Parte 2: Navigazione satellitare
WEEDINATOR☠ Parte 2: Navigazione satellitare
WEEDINATOR☠ Parte 2: Navigazione satellitare
WEEDINATOR☠ Parte 2: Navigazione satellitare
WEEDINATOR☠ Parte 2: Navigazione satellitare

Nasce il sistema di navigazione Weedinator!

Un robot agricolo itinerante che può essere controllato da uno smartphone.

… E invece di limitarmi a seguire il normale processo di come è messo insieme, ho pensato di provare a spiegare come funziona effettivamente - ovviamente non TUTTO ma le parti più importanti e interessanti. Per favore, scusa il gioco di parole, ma è il modo in cui i dati fluiscono tra i singoli moduli che trovo interessante e, scomposti nel minimo denominatore, finiamo con i "bit" effettivi: zero e uno. Se sei mai stato confuso su bit, byte, caratteri e stringhe, ora potrebbe essere il momento di non essere confuso? Cercherò anche di chiarire un concetto leggermente astratto chiamato "Cancellazione degli errori".

Il sistema stesso dispone di:

  • GPS/GNSS: Ublox C94 M8M (Rover e Base)
  • Bussola digitale 9DOF Razor IMU MO
  • Fona 800H 2G GPRS cellulare
  • Schermo TFT da 2,2"
  • Arduino Due 'Master'
  • Vari "Slave" di Arduino.

Stranamente, molti navigatori satellitari non hanno una bussola digitale, il che significa che se sei fermo e ti sei perso, devi camminare o guidare in qualsiasi direzione casuale prima che il dispositivo possa mostrarti la direzione corretta dai satelliti. Se ti perdi in una fitta giungla o in un parcheggio sotterraneo sei pieno!

Passaggio 1: come funziona

Come funziona
Come funziona

Al momento, da uno smartphone o da un computer viene caricata una semplice coppia di coordinate, che vengono poi scaricate dal Weedinator. Questi vengono poi interpretati in una direzione in gradi e una distanza da percorrere in mm.

La fona GPRS viene utilizzata per accedere a un database online attraverso la rete cellulare 2G e ricevere e trasmettere le coordinate all'Arduino Due tramite un Arduino Nano. Il Due è il Master e controlla una serie di altri Arduino come Slave tramite I2C e bus seriali. Il Due può interagire con i dati live di Ublox e Razor e visualizzare un'intestazione calcolata da uno dei suoi slave Arduino.

Il localizzatore satellitare Ublox è particolarmente intelligente in quanto utilizza la cancellazione degli errori per ottenere correzioni molto accurate: una deviazione totale nominale finale di circa 40 mm. Il modulo è composto da una coppia identica, una delle quali, il 'rover', si muove con il Weedinator, e l'altra, la 'base', è fissata su un palo da qualche parte all'aperto. La cancellazione dell'errore è ottenuta dalla base che è in grado di ottenere una correzione davvero accurata utilizzando una grande quantità di campioni nel tempo. Questi campioni vengono quindi mediati per compensare le mutevoli condizioni atmosferiche. Se il dispositivo fosse in movimento, ovviamente non sarebbe in grado di ottenere alcun tipo di media e sarebbe alla completa mercé di un ambiente in evoluzione. Tuttavia, se un dispositivo statico e in movimento funzionano insieme, purché possano comunicare tra loro, possono ottenere il vantaggio di entrambi. In qualsiasi momento, l'unità di base ha ancora un errore, ma ha anche una correzione super accurata calcolata in precedenza in modo che possa calcolare l'errore effettivo sottraendo un insieme di coordinate da un altro. Quindi invia l'errore calcolato al rover tramite un collegamento radio, che quindi aggiunge l'errore alle proprie coordinate e, in breve, abbiamo la cancellazione dell'errore! In pratica, la cancellazione dell'errore fa la differenza tra 3 metri e una deviazione totale di 40 mm.

Il sistema completo sembra complicato, ma in realtà è abbastanza facile da costruire, sia allentato su una superficie non conduttiva, sia utilizzando il PCB che ho progettato, che consente a tutti i moduli di essere saldamente imbullonati. Lo sviluppo futuro è basato sul PCB, consentendo di incorporare una vasta gamma di Arduino per controllare i motori per lo sterzo, il movimento in avanti e una macchina CNC a bordo. La navigazione sarà inoltre assistita da almeno un sistema di riconoscimento degli oggetti che utilizza telecamere per rilevare oggetti colorati, ad esempio palline da golf fluorescenti, che sono accuratamente posizionate in una sorta di griglia - Guarda questo spazio!

Passaggio 2: componenti

Componenti
Componenti
Componenti
Componenti
Componenti
Componenti
  • Ublox C94 M8M (Rover e Base) x 2 di
  • Bussola digitale 9DOF Razor IMU MO
  • Fona 800H 2G GPRS cellulare 1946
  • Arduino Due
  • Arduino Nano x 2 di
  • SparkFun Pro Micro
  • Adafruit 2.2" TFT IL1940C 1480
  • PCB (vedi file Gerber allegati) x 2 di
  • 1206 Resistori SMD zero ohm x 12 di
  • 1206 LED x 24 di

Il file PCB si apre con il software 'Design Spark'.

Passaggio 3: cablaggio dei moduli

Cablaggio dei moduli
Cablaggio dei moduli

Questa è la parte facile - particolarmente facile con il PCB che ho realizzato - basta seguire lo schema sopra. Occorre prestare attenzione per evitare di cablare moduli 3v a 5v, anche sulle linee seriali e I2C.

Passaggio 4: codice

Codice
Codice

La maggior parte del codice si occupa di far muovere i dati nel sistema in modo ordinato e molto spesso è necessario convertire i formati dei dati da interi a float, a stringhe ea caratteri, il che può creare molta confusione! Il protocollo 'Serial' gestirà solo i caratteri e mentre l'I2Il protocollo C gestirà numeri interi molto piccoli, ho trovato meglio convertirli in caratteri e poi riconvertirli in numeri interi all'altra estremità della linea di trasmissione.

Il controller Weedinator è fondamentalmente un sistema a 8 bit con molti singoli Arduino, o "MCU". Quando 8 bit è descritto come effettivi zeri binari e uno può apparire così: B01100101 che sarebbe uguale a:

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

Valore della cifra decimale 128 64 32 16 8 4 2 1
Valore della cifra binaria 0 1 1 0 0 1 0 1

= 101

E il valore massimo possibile è 255 …. Quindi il massimo 'byte' intero che possiamo trasmettere su I2C è 255, il che è molto limitante!

Su un Arduino possiamo trasmettere fino a 32 caratteri ASCII, o byte, alla volta usando I2C, che è molto più utile, e il set di caratteri include numeri, lettere e caratteri di controllo in formato a 7 bit come di seguito:

Immagine
Immagine

Fortunatamente, il compilatore Arduino fa tutto il lavoro di conversione da carattere a binario in background, ma si aspetta comunque il tipo corretto di carattere per la trasmissione dei dati e non accetterà "Stringhe".

Ora è quando le cose possono diventare confuse. I caratteri possono essere espressi come singoli caratteri utilizzando la definizione char o come array unidimensionale di 20 caratteri utilizzando char[20]. Una stringa Arduino è molto simile a un array di caratteri ed è letteralmente una stringa di caratteri spesso interpretata dal cervello umano come "parole".

// Costruisce il carattere 'distanceCharacter':

Iniziatore stringa = ""; Stringadistanza = initiator + Stringadistanza; int n = distanzaStringa.lunghezza(); for (int aa=0;aa<=n;aa++) { DistanceCharacter[aa] = DistanceString[aa]; }

Il codice sopra può convertire una lunga stringa di caratteri in un array di caratteri che può quindi essere trasmesso su I2C o seriale.

All'altra estremità della linea di trasmissione, i dati possono essere riconvertiti in una stringa utilizzando il seguente codice:

StringaDistanza = StringaDistanza + c; // stringa = stringa + carattere

Un array di caratteri non può essere convertito direttamente in un numero intero e deve prima passare al formato stringa, ma il codice seguente convertirà da una stringa a un numero intero:

int risultato = (distanceString).toInt();

int distanceMetres = risultato;

Ora abbiamo un numero intero che possiamo usare per fare calcoli. I float (numeri con un punto decimale) devono essere convertiti in numeri interi in fase di trasmissione e quindi divisi per 100 per due cifre decimali, ad esempio:

float distanzaMetri = distanzaMm / 1000;

Infine, è possibile creare una stringa da una combinazione di caratteri e numeri interi, ad esempio:

// Qui è dove i dati vengono compilati in un carattere:

dataString = initiator + "BEAR" + z Bearing + "DIST" + zdistance; // Limitato a 32 caratteri // Stringa = stringa + caratteri + intero + caratteri + intero.

Il resto del codice è roba Arduino standard che può essere trovata nei vari esempi nelle librerie Arduino. Dai un'occhiata all'esempio 'esempi >>>> Stringhe' e agli esempi di libreria 'wire'.

Ecco l'intero processo per trasmettere e ricevere un float:

Converti Float ➜ Integer ➜ String ➜ Character array ….. quindi TRANSMIT array di caratteri dal Master ➜➜

RICEVERE singoli caratteri su Slave…. quindi converti Carattere ➜ Stringa ➜ Intero ➜ Float

Passaggio 5: database e pagina Web

Database e pagina web
Database e pagina web
Database e pagina web
Database e pagina web

Sopra è mostrata la struttura del database e sono allegati i file di codice php e html. I nomi utente, i nomi dei database, i nomi delle tabelle e le password vengono cancellati per motivi di sicurezza.

Passaggio 6: test di navigazione

Test di navigazione
Test di navigazione
Test di navigazione
Test di navigazione
Test di navigazione
Test di navigazione

Sono riuscito a collegare un datalogger alla scheda di controllo Weedinator tramite I2C e a farmi un'idea delle prestazioni di posizionamento satellitare Ublox M8M:

Su 'Cold Start', mostrato dal grafico verde, il modulo ha iniziato con molti errori, abbastanza simili a un GPS 'normale', e gradualmente l'errore si è ridotto fino a quando, dopo circa 2 ore, ha ottenuto un fix RTK tra rover e base (mostrata come croce rossa). Durante quel periodo di 2 ore, il modulo di base crea e aggiorna continuamente un valore medio per latitudine e longitudine e dopo l'intervallo di tempo preprogrammato decide che ha ottenuto una buona correzione. I successivi 2 grafici mostrano il comportamento dopo un 'Hot start ' dove il modulo base ha già calcolato una buona media. Il grafico in alto è superiore a un periodo di 200 minuti e occasionalmente la correzione viene persa e il rover invia un messaggio NMEA a Weedinator che la correzione è diventata temporaneamente inaffidabile.

Il grafico blu in basso è uno 'zoom in' sulla casella rossa nel grafico in alto e mostra una buona istantanea rappresentativa delle prestazioni di Ublox, con una deviazione totale di 40 mm, che è più che sufficiente per guidare il Weedinator nella sua posizione, ma forse non abbastanza per coltivare il terreno intorno alle singole piante?

Il terzo grafico mostra i dati raccolti con il Rover e la Base a 100 metri di distanza - Non è stato rilevato alcun errore aggiuntivo - la distanza di separazione non ha influito sulla precisione.

Passaggio 7: finale

Consigliato: