Inhaltsverzeichnis:
- Schritt 1: Wie funktioniert es?
- Schritt 2: So konfigurieren Sie die drei Sensorstationen und die Objekte
- Schritt 3: So konfigurieren Sie die Master-Station
- Schritt 4: Materialliste
Video: Ultraschallbasiertes Positionierungssystem - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Alle Versionen von Ultraschall-Radaren, die ich für Arduino-Geräte gefunden habe (Arduino - Radar / Ultraschall-Detektor, Arduino Ultrasonic Radar Project) sind sehr schöne Radare, aber alle sind "blind". Ich meine, das Radar erkennt etwas, aber was erkennt es?
Ich schlage daher vor, ein System zu entwickeln, das in der Lage ist, Objekte zu erkennen und zu identifizieren. Mit anderen Worten, ein Ortungssystem ohne GPS-Geräte, sondern Ultraschalldetektoren.
Dies ist das Ergebnis, von dem ich hoffe, dass es Ihnen gefällt.
Schritt 1: Wie funktioniert es?
Das Positionierungssystem besteht aus drei Sensorstationen mit Ultraschalldetektoren und id_node 1, 2 und 3, die ein Rechteck oder Quadrat bilden, das einen Winkel von 90 ° überstreicht und deren Abstände zwischen ihnen bekannt sind, wie in Bild 1 gezeigt.
const float distance between1and2 = 60.0;
const float distance between2and3 = 75,0;
Diese Sensoren messen den Abstand und den Winkel anderer Objekte mit id_node größer als 3, die auch einen Ultraschalldetektor haben, der einen Winkel von 170° abtastet.
Alle senden die Distanzen, gemessenen Winkel und den id_node per Funk an eine andere Zentrale, um diese zu analysieren, die Position der Objekte per Trigonometrie zu berechnen und zu identifizieren.
Um Störungen zu vermeiden, synchronisiert die Zentrale alle Ultraschallmelder so, dass immer nur ein Ultraschallmelder misst
Danach sendet die Masterstation über eine serielle Kommunikation die Informationen (Winkel, Abstand, ID_Objekt) an eine Verarbeitungsskizze, um die Ergebnisse zu plotten.
Schritt 2: So konfigurieren Sie die drei Sensorstationen und die Objekte
Die einzige Funktion jeder Sensorstation besteht darin, Objekte zu erkennen und die Liste der gemessenen Entfernungen, Winkel und ID-Knoten an die Masterstation zu senden.
Sie müssen also den maximal zulässigen Erfassungsabstand („valid_max_distance“) und den minimalen („valid_min_distance“) (Zentimeter) aktualisieren, um die Erfassung zu verbessern und den Erfassungsbereich einzuschränken:
int gültiger_max_abstand = 80;
int gültig_min_distanz = 1;
Die ID-Knoten dieser Sensorstationen („this_node“im Code unten) sind 1, 2 und 3 und der ID-Knoten der Master-Station ist 0.
const uint16_t this_node = 01; // Adresse unseres Knotens im Oktal-Format (Node01, Node02, Node03)
const uint16_t other_node = 00; //Adresse des Master-Knotens (Node00) im Oktal-Format
Jede Sensorstation überstreicht einen Winkel von 100º („max_angle“im Code unten)
#define min_angle 0
#define max_angle 100
Wie oben besteht die einzige Funktion eines Objekts darin, Objekte zu erkennen und die Liste der gemessenen Entfernungen, Winkel und ID-Objekte an die Hauptstation zu senden. Die ID eines Objekts („this_node“im folgenden Code) muss größer als 3 sein.
Jedes Objekt überstreicht einen Winkel von 170º und wie oben ist es möglich, den maximalen und minimalen Erfassungsabstand zu aktualisieren.
const uint16_t this_node = 04; // Adresse unseres Knotens im Oktal-Format (Node04, Node05, …)
const uint16_t other_node = 00; // Adresse des Masterknotens (Node00) im Oktalformat int valid_max_distance = 80; int gültige_min_distanz = 1; #define min_angle 0 #define max_angle 170
Schritt 3: So konfigurieren Sie die Master-Station
Die Funktion der Masterstation besteht darin, die Übertragungen der Sensorstationen und der Objekte zu empfangen und die Ergebnisse über die serielle Schnittstelle an eine Verarbeitungsskizze zu senden, um sie zu plotten. Synchronisiert außerdem alle Objekte und die drei Sensorstationen so, dass immer nur eine von ihnen misst, um Interferenzen zu vermeiden.
Zuerst müssen Sie den Abstand (Zentimeter) zwischen Sensor 1 und 2 und den Abstand zwischen 2 und 3 aktualisieren.
const float distance between1and2 = 60.0;
const float distance between2and3 = 70.0;
Die Skizze berechnet die Position der Objekte wie folgt:
- Achten Sie bei allen Übertragungen der Objekte (id_node größer 3) auf den gleichen Abstand bei jeder Übertragung der Ultraschallsensoren (id_node 1, 2 oder 3).
- Alle diese Punkte bilden eine Liste von „Kandidaten“(Abstand, Winkel, id_node) für die Position eines Objekts („process_pointobject_with_pointssensor“in der Skizze).
- Für jeden „Kandidaten“der vorherigen Liste berechnet die Funktion „candidate_selected_between_sensor2and3“aus Sicht des Ultraschallsensors 2 und 3, welche davon die folgende Trigonometriebedingung erfüllen (siehe die Bilder 2 und 3)
float distancefroms2 = sin(Radiant(Winkel)) * Abstand;
float distancefroms3 = cos(radians(angle_candidate)) * distance_candidate; // Trigonometrie Bedingung 1 abs(distancefroms2 + distancefroms3 - distance between2and3) <= float(max_diference_distance)
Wie oben berechnet die Funktion „candidate_selected_between_sensor1and2“für jeden „Kandidaten“der vorherigen Liste aus Sicht des Ultraschallsensors 1 und 2, welcher davon der folgenden trigonometrischen Beziehung entspricht (siehe Bild 2 und 3)
float distancefroms1 = sin(Radians(Winkel)) * Distance;float Distancefroms2 = cos(Radians(Winkel_Kandidat)) * distance_candidate; // Trigonometriebedingung 2 abs(distancefroms1 + distancefroms2 - distance between1and2) <= float(max_diference_distance)
Nur die Kandidaten (Entfernung, Winkel, id_node), die den Trigonometriebedingungen 1 und 2 entsprechen, werden von den Sensorstationen 1, 2 und 3 erkannte Objekte
Danach werden die Ergebnisse von der Masterstation an eine Verarbeitungsskizze gesendet, um sie zu plotten.
Schritt 4: Materialliste
Die Materialliste, die für eine Sensorstation oder ein Objekt benötigt wird, ist folgende:
- Nanoboard
- Ultraschallsensor
- Mikro-Servomotor
- Funkmodul NRF24L01
- NRF24L01-Adapter
und die Materialliste für die Hauptstation ist wie folgt:
- Nanoboard
- Funkmodul NRF24L01
- NRF24L01-Adapter