Table des matières:

☠WEEDINATOR☠ Partie 2 : Navigation par satellite : 7 étapes (avec photos)
☠WEEDINATOR☠ Partie 2 : Navigation par satellite : 7 étapes (avec photos)

Vidéo: ☠WEEDINATOR☠ Partie 2 : Navigation par satellite : 7 étapes (avec photos)

Vidéo: ☠WEEDINATOR☠ Partie 2 : Navigation par satellite : 7 étapes (avec photos)
Vidéo: Голубая стрела (1958) фильм 2024, Novembre
Anonim
☠WEEDINATOR☠ Partie 2: Navigation par satellite
☠WEEDINATOR☠ Partie 2: Navigation par satellite
☠WEEDINATOR☠ Partie 2: Navigation par satellite
☠WEEDINATOR☠ Partie 2: Navigation par satellite
☠WEEDINATOR☠ Partie 2: Navigation par satellite
☠WEEDINATOR☠ Partie 2: Navigation par satellite
☠WEEDINATOR☠ Partie 2: Navigation par satellite
☠WEEDINATOR☠ Partie 2: Navigation par satellite

Le système de navigation Weedinator est né !

Un robot agricole itinérant qui peut être contrôlé par un téléphone intelligent.

… Et plutôt que de simplement suivre le processus régulier de montage, j'ai pensé essayer d'expliquer comment cela fonctionne réellement - évidemment pas TOUT mais les éléments les plus importants et les plus intéressants. Veuillez excuser le jeu de mots, mais c'est la façon dont les données circulent entre les modules individuels que je trouve intéressantes et décomposées en son plus petit dénominateur, nous nous retrouvons avec des "bits" réels - des zéros et des uns. Si vous avez déjà été confus au sujet des bits, des octets, des caractères et des chaînes, le moment est peut-être venu de ne plus être confus ? Je vais également essayer de démêler un concept légèrement abstrait appelé « Annulation d'erreur ».

Le système lui-même comporte:

  • GPS/GNSS: Ublox C94 M8M (Rover et Base)
  • Boussole numérique 9DOF Razor IMU MO
  • Cellulaire Fona 800H 2G GPRS
  • Écran TFT 2.2"
  • Arduino Due 'Maître'
  • Divers « esclaves » Arduino.

Étrangement, beaucoup de GPS n'ont pas de boussole numérique, ce qui signifie que si vous êtes immobile et perdu, vous devez marcher ou conduire dans n'importe quelle direction avant que l'appareil puisse vous montrer la bonne direction à partir des satellites. Si vous vous perdez dans une jungle épaisse ou un parking souterrain, vous êtes bourré !

Étape 1: Comment ça marche

Comment ça fonctionne
Comment ça fonctionne

À l'heure actuelle, une simple paire de coordonnées est téléchargée à partir d'un téléphone intelligent ou d'un ordinateur, qui sont ensuite téléchargées par le Weedinator. Celles-ci sont ensuite interprétées en un cap en degrés et une distance à parcourir en mm.

Le GPRS fona est utilisé pour accéder à une base de données en ligne via le réseau cellulaire 2G et recevoir et transmettre les coordonnées à l'Arduino Due via un Arduino Nano. Le Due est le maître et contrôle un ensemble d'autres Arduinos en tant qu'esclaves via les bus I2C et série. Le Due peut interagir avec les données en direct de l'Ublox et du Razor et afficher un cap calculé par l'un de ses esclaves Arduino.

Le tracker satellite Ublox est particulièrement intelligent car il utilise l'annulation d'erreur pour obtenir des corrections très précises - un écart total nominal final d'environ 40 mm. Le module est composé d'une paire identique, dont l'une, le 'rover', se déplace avec le Weedinator, et l'autre, la 'base' est fixée sur un poteau quelque part à l'air libre. L'annulation des erreurs est obtenue grâce à la capacité de la base à obtenir une correction vraiment précise en utilisant une grande quantité d'échantillons au fil du temps. Ces échantillons sont ensuite moyennés pour compenser les conditions atmosphériques changeantes. Si l'appareil était en mouvement, il ne serait évidemment pas en mesure d'obtenir une quelconque moyenne et serait à la merci d'un environnement changeant. Cependant, si un appareil statique et mobile fonctionnent ensemble, tant qu'ils peuvent communiquer entre eux, ils peuvent bénéficier des deux. À tout moment, l'unité de base a toujours une erreur, mais elle a également un correctif super précis précédemment calculé afin qu'elle puisse calculer l'erreur réelle en soustrayant un ensemble de coordonnées d'un autre. Il envoie ensuite l'erreur calculée au rover via une liaison radio, qui ajoute ensuite l'erreur à ses propres coordonnées et hop, nous avons l'annulation d'erreur ! Concrètement, l'annulation d'erreur fait la différence entre 3 mètres et un écart total de 40 mm.

Le système complet a l'air compliqué, mais est en fait assez facile à construire, que ce soit en vrac sur une surface non conductrice ou en utilisant le PCB que j'ai conçu, qui permet à tous les modules d'être solidement boulonnés. Le développement futur est construit sur le PCB, permettant à une vaste gamme d'Arduinos d'être incorporés pour contrôler les moteurs de direction, de mouvement vers l'avant et une machine CNC embarquée. La navigation sera également assistée par au moins un système de reconnaissance d'objets utilisant des caméras pour détecter des objets colorés, par exemple des balles de golf fluorescentes, qui sont soigneusement positionnées dans une sorte de grille - Surveillez cet espace !

Étape 2: Composants

Composants
Composants
Composants
Composants
Composants
Composants
  • Ublox C94 M8M (Rover et Base) x 2 de
  • Boussole numérique 9DOF Razor IMU MO
  • Fona 800H 2G GPRS cellulaire 1946
  • Arduino en raison
  • Arduino Nano x 2 de
  • SparkFun Pro Micro
  • Adafruit 2.2" TFT IL1940C 1480
  • PCB (voir fichiers Gerber joints) x 2 de
  • 1206 résistances CMS zéro ohm x 12 de
  • 1206 LED x 24 de

Le fichier PCB s'ouvre avec le logiciel 'Design Spark'.

Étape 3: Câblage des modules

Câblage des modules
Câblage des modules

C'est la partie facile - particulièrement facile avec le PCB que j'ai fait - il suffit de suivre le schéma ci-dessus. Des précautions sont nécessaires pour éviter de câbler des modules 3v à 5v, même sur les lignes série et I2C.

Étape 4: Coder

Code
Code

La plupart du code vise à faire circuler les données dans le système de manière ordonnée et il est souvent nécessaire de convertir les formats de données d'entiers en flottants en chaînes et en caractères, ce qui peut être très déroutant ! Le protocole 'Série' ne gérera que les caractères et tandis que le I2Le protocole C gère de très petits entiers, j'ai trouvé préférable de les convertir en caractères, puis de les reconvertir en entiers à l'autre extrémité de la ligne de transmission.

Le contrôleur Weedinator est essentiellement un système 8 bits avec de nombreux Arduinos individuels, ou « MCU ». Lorsque 8 bits sont décrits comme des zéros et des uns binaires réels, cela peut ressembler à ceci: B01100101 qui équivaudrait à:

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

Valeur du chiffre décimal 128 64 32 16 8 4 2 1
Valeur de chiffre binaire 0 1 1 0 0 1 0 1

= 101

Et la valeur maximale possible est de 255 …. Donc l'entier maximum 'byte' que nous pouvons transmettre sur I2C vaut 255, ce qui est très limitatif !

Sur un Arduino, nous pouvons transmettre jusqu'à 32 caractères ASCII, ou octets, à la fois en utilisant I2C, qui est beaucoup plus utile, et le jeu de caractères comprend des chiffres, des lettres et des caractères de contrôle au format 7 bits comme ci-dessous:

Image
Image

Heureusement, le compilateur Arduino effectue tout le travail de conversion de caractère en binaire en arrière-plan, mais il attend toujours le bon type de caractère pour la transmission de données et il n'acceptera pas les « chaînes ».

C'est maintenant que les choses peuvent devenir confuses. Les caractères peuvent être exprimés sous forme de caractères uniques à l'aide de la définition char ou sous forme de tableau unidimensionnel de 20 caractères à l'aide de char[20]. Une chaîne Arduino est très similaire à un tableau de caractères et est littéralement une chaîne de caractères souvent interprétée par le cerveau humain comme des « mots ».

// Construit le caractère 'distanceCharacter':

Initiateur de chaîne = ""; distanceString = initiateur + distanceString; int n = distanceString.length(); for (int aa=0;aa<=n;aa++) { distanceCaractère[aa] = distanceString[aa]; }

Le code ci-dessus peut convertir une longue chaîne de caractères en un tableau de caractères qui peut ensuite être transmis sur I2C ou série.

À l'autre extrémité de la ligne de transmission, les données peuvent être reconverties en chaîne à l'aide du code suivant:

distanceChaîne = distanceChaîne + c; // chaîne = chaîne + caractère

Un tableau de caractères ne peut pas être converti directement en un entier et doit d'abord passer au format chaîne, mais le code suivant convertira d'une chaîne en un entier:

int result = (distanceString).toInt();

int distanceMetres = résultat;

Nous avons maintenant un entier que nous pouvons utiliser pour faire des calculs. Les flottants (nombres avec une virgule décimale) doivent être convertis en nombres entiers au stade de la transmission, puis divisés par 100 pour deux décimales, par exemple:

float distanceMetres = distanceMm / 1000;

Enfin, une chaîne peut être créée à partir d'un mélange de caractères et d'entiers, par exemple:

// C'est ici que les données sont compilées en un caractère:

dataString = initiateur + "BEAR" + zbearing + "DIST" + zdistance; // Limité à 32 caractères // Chaîne = chaîne + caractères + entier + caractères + entier.

Le reste du code est un élément Arduino standard qui peut être trouvé dans les différents exemples des bibliothèques Arduino. Consultez l'exemple 'examples >>>> Strings' et les exemples de bibliothèque 'wire'.

Voici l'ensemble du processus pour transmettre et recevoir un flottant:

Convertir Float ➜ Entier ➜ Chaîne ➜ Tableau de caractères ….. puis TRANSMETTRE le tableau de caractères du maître ➜➜

RECEVOIR des caractères individuels sur l'esclave …. puis convertissez Caractère ➜ Chaîne ➜ Entier ➜ Float

Étape 5: Base de données et page Web

Base de données et page Web
Base de données et page Web
Base de données et page Web
Base de données et page Web

Ci-dessus est montré la structure de la base de données et les fichiers de code php et html sont joints. Les noms d'utilisateur, les noms de base de données, les noms de table et les mots de passe sont masqués pour des raisons de sécurité.

Étape 6: Tests de navigation

Tests de navigation
Tests de navigation
Tests de navigation
Tests de navigation
Tests de navigation
Tests de navigation

J'ai réussi à connecter une centrale de mesure à la carte de contrôle Weedinator via I2C et à me faire une idée des performances de positionnement par satellite Ublox M8M:

Sur « Démarrage à froid », indiqué par le graphique vert, le module a démarré avec beaucoup d'erreurs, assez similaires à un GPS « normal », et progressivement l'erreur s'est réduite jusqu'à ce qu'après environ 2 heures, il obtienne un correctif RTK entre le rover et la base (indiquée par la croix rouge). Au cours de cette période de 2 heures, le module de base construit et met à jour en permanence une valeur moyenne pour la latitude et la longitude et après que l'intervalle de temps préprogrammé décide qu'il a une bonne solution. Les 2 graphiques suivants montrent le comportement après un « démarrage à chaud ' où le module de base a déjà calculé une bonne moyenne. Le graphique du haut est sur une période de 200 minutes et parfois le correctif est perdu et le rover envoie un message NMEA au Weedinator indiquant que le correctif est temporairement devenu peu fiable.

Le graphique bleu inférieur est un « zoom avant » sur la case rouge du graphique du haut et montre un bon instantané représentatif des performances d'Ublox, avec une déviation totale de 40 mm, ce qui est plus que suffisant pour guider le Weedinator vers son emplacement., mais peut-être pas assez bon pour cultiver le sol autour de plantes individuelles ?

Le troisième graphique montre les données recueillies avec le Rover et la base distants de 100 mètres - Aucune erreur supplémentaire n'a été détectée - la distance de séparation n'a fait aucune différence sur la précision.

Étape 7: Finale

Conseillé: