Inhaltsverzeichnis:
- Schritt 1: Wie es funktioniert
- Schritt 2: Komponenten
- Schritt 3: Verdrahten der Module
- Schritt 4: Code
- Schritt 5: Datenbank und Webseite
- Schritt 6: Navigationstests
- Schritt 7: Finale
Video: ☠WEEDINATOR☠ Teil 2: Satellitennavigation - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
Das Weedinator-Navigationssystem ist geboren!
Ein umherziehender landwirtschaftlicher Roboter, der über ein Smartphone gesteuert werden kann.
… Und anstatt nur den regulären Prozess des Zusammensetzens durchzugehen, dachte ich, ich würde versuchen, zu erklären, wie es tatsächlich funktioniert - offensichtlich nicht ALLES, aber die wichtigsten und interessantesten Teile. Bitte entschuldigen Sie das Wortspiel, aber es ist der Datenfluss zwischen den einzelnen Modulen, den ich interessant finde und auf den kleinsten Nenner heruntergebrochen werden wir am Ende mit tatsächlichen "Bits" - Nullen und Einsen. Wenn Sie jemals über Bits, Bytes, Zeichen und Strings verwirrt waren, ist es jetzt vielleicht an der Zeit, nicht verwirrt zu werden? Ich werde auch versuchen, ein leicht abstraktes Konzept namens 'Error Cancelling' zu entwirren.
Das System selbst bietet:
- GPS/GNSS: Ublox C94 M8M (Rover und Basis)
- 9DOF Razor IMU MO digitaler Kompass
- Fona 800H 2G GPRS-Mobilfunk
- 2,2" TFT-Bildschirm
- Arduino Due 'Master'
- Verschiedene Arduino 'Slaves'.
Seltsamerweise haben viele Navigationsgeräte keinen digitalen Kompass, was bedeutet, dass Sie, wenn Sie stationär und verloren sind, in eine beliebige Richtung gehen oder fahren müssen, bevor das Gerät Ihnen die richtige Richtung von den Satelliten anzeigen kann. Wenn Sie sich in einem dichten Dschungel oder in einer Tiefgarage verirren, sind Sie vollgestopft!
Schritt 1: Wie es funktioniert
Derzeit wird ein einfaches Koordinatenpaar von einem Smartphone oder Computer hochgeladen, das dann vom Weedinator heruntergeladen wird. Diese werden dann in einen Kurs in Grad und eine zurückzulegende Strecke in mm interpretiert.
Das GPRS-Fona wird verwendet, um über das 2G-Mobilfunknetz auf eine Online-Datenbank zuzugreifen und die Koordinaten über einen Arduino Nano zu empfangen und an den Arduino Due zu senden. Der Due ist der Master und steuert eine Reihe anderer Arduinos als Slaves über die I2C- und seriellen Busse. Der Due kann mit Live-Daten von Ublox und Razor interagieren und eine von einem seiner Arduino-Slaves berechnete Überschrift anzeigen.
Der Ublox-Satelliten-Tracker ist besonders clever, da er Fehlerunterdrückung verwendet, um sehr genaue Korrekturen zu erhalten - eine endgültige nominale Gesamtabweichung von etwa 40 mm. Das Modul besteht aus einem identischen Paar, von denen eines, der „Rover“, sich mit dem Weedinator bewegt, und das andere, die „Basis“, irgendwo im Freien an einer Stange befestigt ist. Die Fehleraufhebung wird dadurch erreicht, dass die Basis in der Lage ist, eine wirklich genaue Korrektur zu erreichen, indem sie im Laufe der Zeit eine große Anzahl von Abtastwerten verwendet. Diese Proben werden dann gemittelt, um sich ändernde atmosphärische Bedingungen auszugleichen. Wenn sich das Gerät bewegen würde, wäre es offensichtlich nicht in der Lage, eine Mittelwertbildung durchzuführen und wäre einer sich ändernden Umgebung völlig ausgeliefert. Wenn jedoch ein statisches und ein bewegliches Gerät zusammenarbeiten, können sie beide Vorteile nutzen, solange sie miteinander kommunizieren können. Die Basiseinheit weist zu jedem Zeitpunkt immer noch einen Fehler auf, verfügt jedoch auch über eine zuvor berechnete supergenaue Korrektur, sodass sie den tatsächlichen Fehler berechnen kann, indem ein Koordinatensatz von einem anderen subtrahiert wird. Es sendet dann den berechneten Fehler über eine Funkverbindung an den Rover, der den Fehler dann zu seinen eigenen Koordinaten hinzufügt und hey presto, wir haben die Fehlerlöschung! In der Praxis macht die Fehlerunterdrückung den Unterschied zwischen 3 Metern und 40 mm Gesamtabweichung.
Das komplette System sieht kompliziert aus, ist aber eigentlich recht einfach aufzubauen, entweder lose auf einer nicht leitfähigen Oberfläche oder mit der von mir entworfenen Platine, mit der alle Module sicher verschraubt werden können. Zukünftige Entwicklungen sind auf der Platine aufgebaut, so dass eine Vielzahl von Arduinos integriert werden können, um Motoren für die Lenkung, Vorwärtsbewegung und eine On-Board-CNC-Maschine zu steuern. Die Navigation wird auch durch mindestens ein Objekterkennungssystem unterstützt, das Kameras verwendet, um farbige Objekte zu erkennen, zum Beispiel fluoreszierende Golfbälle, die sorgfältig in einer Art Raster positioniert sind - Watch this space!
Schritt 2: Komponenten
- Ublox C94 M8M (Rover und Basis) x 2 of
- 9DOF Razor IMU MO digitaler Kompass
- Fona 800H 2G GPRS Mobilfunk 1946
- Arduino Due
- Arduino Nano x 2 of
- SparkFun Pro Micro
- Adafruit 2.2" TFT IL1940C 1480
- PCB (siehe angehängte Gerber-Dateien) x 2 of
- 1206 SMD-Null-Ohm-Widerstände x 12 of
- 1206 LEDs x 24
Die PCB-Datei wird mit der Software 'Design Spark' geöffnet.
Schritt 3: Verdrahten der Module
Dies ist der einfache Teil - besonders einfach mit der Platine, die ich gemacht habe - folgen Sie einfach dem obigen Diagramm. Es ist Vorsicht geboten, um zu vermeiden, dass 3V-Module mit 5V verdrahtet werden, selbst auf den seriellen und I2C-Leitungen.
Schritt 4: Code
Der größte Teil des Codes beschäftigt sich damit, Daten auf geordnete Weise im System zu bewegen, und oft müssen Datenformate von Integern in Floats in Strings und in Zeichen umgewandelt werden, was sehr verwirrend sein kann! Das 'Serielle' Protokoll verarbeitet nur Zeichen und während das I2Das C-Protokoll verarbeitet sehr kleine Ganzzahlen, ich fand es besser, sie in Zeichen umzuwandeln und dann am anderen Ende der Übertragungsleitung wieder in Ganzzahlen zu konvertieren.
Der Weedinator-Controller ist im Grunde ein 8-Bit-System mit vielen einzelnen Arduinos oder "MCUs". Wenn 8 Bit als tatsächliche binäre Nullen und Einsen beschrieben werden, kann dies wie folgt aussehen: B01100101, was gleich wäre:
(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =
Dezimalstellenwert | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
Binärziffernwert | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
= 101
Und der maximal mögliche Wert ist 255 …. Also das maximale ganzzahlige 'Byte', das wir über I. übertragen können2C ist 255, was sehr einschränkend ist!
Auf einem Arduino können wir mit I. bis zu 32 ASCII-Zeichen oder Bytes gleichzeitig übertragen2C, was viel nützlicher ist, und der Zeichensatz enthält Zahlen, Buchstaben und Steuerzeichen im 7-Bit-Format wie folgt:
Glücklicherweise erledigt der Arduino-Compiler die gesamte Arbeit der Konvertierung von Zeichen zu Binärdateien im Hintergrund, erwartet jedoch immer noch den richtigen Zeichentyp für die Datenübertragung und akzeptiert keine 'Strings'.
Jetzt kann es verwirrend werden. Zeichen können mit der char-Definition als einzelne Zeichen oder mit char[20] als eindimensionales Array von 20 Zeichen ausgedrückt werden. Ein Arduino String ist einem Zeichenarray sehr ähnlich und ist buchstäblich eine Zeichenfolge, die vom menschlichen Gehirn oft als "Wörter" interpretiert wird.
// Erzeugt das Zeichen 'distanceCharacter':
String-Initiator = ""; DistanceString = Initiator + DistanceString; int n = distanceString.length(); for (int aa=0;aa<=n;aa++) { distanceCharacter[aa] = distanceString[aa]; }
Der obige Code kann eine lange Zeichenfolge in ein Zeichenarray von Zeichen umwandeln, das dann über I. übertragen werden kann2C oder seriell.
Am anderen Ende der Übertragungsleitung können die Daten mit folgendem Code wieder in einen String umgewandelt werden:
AbstandString = AbstandString + c; // Zeichenfolge = Zeichenfolge + Zeichen
Ein Zeichenarray kann nicht direkt in einen Integer konvertiert werden und muss zuerst in das String-Format umgewandelt werden, aber der folgende Code wird von einem String in einen Integer konvertiert:
int result = (distanceString).toInt();
int distanceMetres = Ergebnis;
Jetzt haben wir eine ganze Zahl, mit der wir Berechnungen durchführen können. Floats (Zahlen mit Dezimalpunkt) müssen bei der Übertragung in ganze Zahlen umgewandelt und dann für zwei Dezimalstellen durch 100 geteilt werden, z.
SchwebeabstandMeter = AbstandMm / 1000;
Schließlich kann eine Zeichenfolge aus einer Mischung von Zeichen und ganzen Zahlen erstellt werden, z.
// Hier werden die Daten zu einem Zeichen kompiliert:
dataString = Initiator + "BEAR" + ZLager + "DIST" + Zdistanz; // Begrenzt auf 32 Zeichen // String = String + Zeichen + Integer + Zeichen + Integer.
Der Rest des Codes ist Standard-Arduino-Zeug, das in den verschiedenen Beispielen in den Arduino-Bibliotheken zu finden ist. Sehen Sie sich das Beispiel 'examples >>>> Strings' und die Beispiele der 'wire'-Bibliothek an.
Hier ist der gesamte Prozess zum Senden und Empfangen eines Floats:
Convert Float ➜ Integer ➜ String ➜ Character Array ….. dann TRANSMIT Character Array vom Master ➜➜
➜➜ EMPFANGEN Sie einzelne Zeichen auf Slave …. dann konvertieren Zeichen ➜ String ➜ Integer ➜ Float
Schritt 5: Datenbank und Webseite
Oben ist die Datenbankstruktur gezeigt und die PHP- und HTML-Codedateien sind angehängt. Benutzernamen, Datenbanknamen, Tabellennamen und Passwörter werden aus Sicherheitsgründen ausgeblendet.
Schritt 6: Navigationstests
Ich habe es geschafft, einen Datenlogger über I2C an die Weedinator-Steuerplatine anzuschließen und einen Eindruck von der Ublox M8M-Satellitenpositionierungsleistung zu bekommen:
Beim 'Kaltstart', angezeigt durch die grüne Grafik, startete das Modul mit vielen Fehlern, ähnlich wie bei einem 'normalen' GPS, und allmählich wurde der Fehler reduziert, bis nach etwa 2 Stunden ein RTK-Fix zwischen den Rovern erreicht wurde und Basis (dargestellt als rotes Kreuz). Während dieser 2-Stunden-Periode erstellt und aktualisiert das Basismodul kontinuierlich einen Durchschnittswert für Breiten- und Längengrad und entscheidet nach dem vorprogrammierten Zeitintervall, dass es eine gute Lösung hat. Die nächsten 2 Grafiken zeigen das Verhalten nach einem "Heißstart". ' wobei das Basismodul bereits einen guten Durchschnitt berechnet hat. Das obere Diagramm ist über einen Zeitraum von 200 Minuten angelegt und gelegentlich geht der Fix verloren und der Rover sendet eine NMEA-Nachricht an den Weedinator, dass der Fix vorübergehend unzuverlässig geworden ist.
Das untere blaue Diagramm ist ein "Zoom-in" auf das rote Feld im oberen Diagramm und zeigt eine gute repräsentative Momentaufnahme der Ublox-Leistung mit einer Gesamtabweichung von 40 mm, die mehr als gut genug ist, um den Weedinator an seinen Standort zu führen, aber möglicherweise nicht gut genug, um den Boden um einzelne Pflanzen herum zu pflegen?
Die dritte Grafik zeigt Daten, die mit einem Abstand von 100 Metern zwischen Rover und Basis gesammelt wurden - Es wurde kein zusätzlicher Fehler festgestellt - der Abstand machte keinen Unterschied für die Genauigkeit.
Schritt 7: Finale
Empfohlen:
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 2 - Temperatur- / Feuchtigkeitsmonitor - Rev 3: 7 Schritte
Easy Very Low Power BLE in Arduino Teil 2 – Temperatur-/Feuchtigkeitsmonitor – Rev 3: Update: 23. November 2020 – Erster Austausch von 2 x AAA-Batterien seit 15. Januar 2019 dh 22 Monate für 2x AAA AlkalineUpdate: 7. April 2019 – Rev 3 of lp_BLE_TempHumidity, fügt Datum/Uhrzeit-Plots hinzu, verwendet pfodApp V3.0.362+ und automatische Drosselung, wenn
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
RGB-Pixel-Weihnachtslichtshow Teil 1: 7 Schritte
RGB-Pixel-Weihnachtslichtshow Teil 1: In dieser Anleitung zeige ich Ihnen, wie Sie eine RGB-Pixel-Lichtshow erstellen. Es gibt VIEL zu decken. Tatsächlich werde ich dies wahrscheinlich in etwa 3-5 verschiedene Anweisungen aufteilen. In diesem geht es um die Grundlagen. Sie haben viel zu lesen
Interessante Programmieranleitung für Designer - Bringen Sie Ihr Bild zum Laufen (Teil 2): 8 Schritte
Interessante Programmieranleitung für Designer – Bringen Sie Ihr Bild zum Laufen (Teil 2): Mathematik scheint für die meisten von Ihnen nutzlos zu sein. Die in unserem täglichen Leben am häufigsten verwendete ist einfach Addieren, Subtrahieren, Multiplizieren und Dividieren. Es ist jedoch ganz anders, wenn Sie mit Programm erstellen können. Je mehr Sie wissen, desto mehr wundervolle Ergebnisse werden Sie erhalten
Arduino Portable Workbench Teil 3: 11 Schritte
Arduino Portable Workbench Teil 3: Wenn Sie sich die Teile 1, 2 und 2B angesehen haben, gab es bisher nicht viel Arduino in diesem Projekt, aber nur ein paar Platinendrähte usw muss gebaut werden, bevor der Rest funktioniert. Das ist die Elektronik und A