Radar Geschwindigkeitsmesser mit Arduino oder ESP32

Der Bau eines eigenen Radarsystems zur Geschwindigkeitsmessung ist ein faszinierendes Projekt, das Einblicke in die Welt der Hochfrequenztechnik und des Doppler-Effekts bietet. In diesem Tutorial werden wir Schritt für Schritt die Konstruktion eines Radars und Geschwindigkeitsmessers mithilfe eines 10,525 GHz Senders und eines Arduino oder ESP32 Mikrocontrollers erläutern.

Der Doppler-Effekt, bei dem die Frequenz eines Signals durch die Bewegung einer Quelle oder eines Beobachters verändert wird, bildet die Grundlage für die Geschwindigkeitsmessung in diesem Projekt. Durch die Nutzung dieses Prinzips können wir die relative Geschwindigkeit eines bewegten Objekts präzise bestimmen.

Dieses Projekt ist ideal für Elektronik-Enthusiasten, Maker und Hobbyisten, die ihre Fähigkeiten erweitern und praktische Erfahrungen mit Radartechnologie sammeln möchten. Wir werden alle notwendigen Komponenten und Schritte detailliert beschreiben, um sicherzustellen, dass auch Anfänger erfolgreich ihren eigenen Radar bauen können.

Eine beängstigende Erkenntnis welche ich gewonnen habe ist das in der Theorie nahezu jedes moderne Handy oder jeder Router die grundlegende Technik besitzt, um ebenfalls als Radar bewegte Objekte in der Umgebung erfassen zu können. Dies liegt daran, dass sowohl Mobiltelefone als auch Router hochfrequente Signale senden und empfangen können, ähnlich wie bei einem Radarsystem. Die Signale, die von diesen Geräten ausgesendet werden, könnten theoretisch zur Messung der Doppler-Verschiebung verwendet werden, um die Geschwindigkeit eines bewegten Objekts zu bestimmen. Moderne Smartphones sind zudem mit leistungsstarken Prozessoren und Sensoren ausgestattet, die in der Lage sind, die notwendigen Berechnungen durchzuführen. Mit entsprechender Software und Anpassungen könnten die in diesen Geräten vorhandenen Funkmodule und Signalverarbeitungstechniken für Radarmessungen genutzt werden.

Notwendige Hardware (Amazon Affiliate):
CQRobot Mikrowellen-Bewegungssensor mit 10,525 GHz
ESP32 oder Arduino Mikrocontroller
Breadboard und Jumper Kabel

Verkabelung

Für die Verkabelung deines Radarsystems verbindest du den 10,525 GHz Sender mit deinem Arduino oder ESP32. Achte darauf, dass du das Datenkabel an den GPIO16 Pin anschließt, da ich in meinem Code diesen Pin für die Datenübertragung verwende. Falls du einen anderen Pin bevorzugst, musst du den Code entsprechend anpassen, um den richtigen GPIO-Pin zu verwenden. Darüber hinaus benötigst du die Arduino IDE, um den Mikrocontroller zu programmieren. Es werden keine besonderen Bibliotheken verwendet.

Code

const int sensorPin = 16;  // GPIO-Pin, an dem der Sensor angeschlossen ist
const float frequency = 10.525e9;  // Frequenz des Mikrowellen-Sensors in Hz
const float c = 3e8;  // Lichtgeschwindigkeit in m/s
const int measureDuration = 100;  // Messdauer in Millisekunden
const int numMeasurements = 10;  // Anzahl der Messungen zur Mittelung

volatile unsigned long pulseCount = 0;

void IRAM_ATTR handlePulse() {
  pulseCount++;
}

void setup() {
  Serial.begin(115200);  // Serielle Kommunikation mit 115200 Baudrate
  pinMode(sensorPin, INPUT);  // Sensor-Pin als Eingang festlegen
  attachInterrupt(digitalPinToInterrupt(sensorPin), handlePulse, RISING);
}

void loop() {
  float totalSpeed = 0.0;
  unsigned long startTime = millis();  // Startzeit für die Schleife

  for (int i = 0; i < numMeasurements; i++) {
    unsigned long measurementStartTime = millis();  // Startzeit für die Messung
    pulseCount = 0;

    // 100 ms messen
    delay(measureDuration);

    unsigned long duration = millis() - measurementStartTime;
    unsigned long pulses = pulseCount;

    float pulseFrequency = (float)pulses / duration * 1000;  // Pulsfrequenz in Hz
    float speed_m_s = pulseFrequency * c / (2 * frequency);  // Geschwindigkeit in m/s
    float speed_km_h = speed_m_s * 3.6;  // Geschwindigkeit in km/h

    totalSpeed += speed_km_h;
  }

  float averageSpeed = totalSpeed / numMeasurements;

  Serial.print("Average Speed: ");
  Serial.print(averageSpeed);
  Serial.println(" km/h");

  // Warten Sie für den Rest der Sekunde, damit die Ausgabe jede Sekunde erfolgt
  unsigned long endTime = millis();
  unsigned long loopDuration = endTime - startTime;
  if (loopDuration < 1000) {
    delay(1000 - loopDuration);
  }
}

In deinem Code definierst du zunächst einige Konstanten und Variablen, die für die Geschwindigkeitsmessung notwendig sind. Der Pin, an dem der Sensor angeschlossen ist, wird durch const int sensorPin = 16; festgelegt. Die Frequenz des Mikrowellen-Sensors beträgt 10,525 GHz und wird durch const float frequency = 10.525e9; angegeben. Die Lichtgeschwindigkeit ist mit const float c = 3e8; definiert. Zudem legst du die Messdauer auf 100 Millisekunden und die Anzahl der Messungen zur Mittelung auf 10 fest.

Die Variable volatile unsigned long pulseCount = 0; dient zur Zählung der Pulse, die vom Sensor empfangen werden. Die Funktion handlePulse() wird aufgerufen, wenn ein Signal vom Sensor detektiert wird und erhöht den Pulszähler.

Im setup()-Abschnitt initialisierst du die serielle Kommunikation mit 115200 Baud und legst den Sensor-Pin als Eingang fest. Mit attachInterrupt(digitalPinToInterrupt(sensorPin), handlePulse, RISING); aktivierst du den Interrupt, der bei einem steigenden Signal des Sensors die Pulszähler-Funktion aufruft.

Im loop()-Abschnitt wird die durchschnittliche Geschwindigkeit berechnet. Hierfür wird in einer Schleife zehnmal die Anzahl der Pulse über eine Messdauer von 100 Millisekunden gezählt. Die Pulsfrequenz wird berechnet und daraus die Geschwindigkeit in m/s und anschließend in km/h abgeleitet. Die gemessenen Geschwindigkeiten werden aufsummiert und durch die Anzahl der Messungen geteilt, um die Durchschnittsgeschwindigkeit zu erhalten. Diese wird über die serielle Schnittstelle ausgegeben. Zum Schluss wird sichergestellt, dass jede Schleife genau eine Sekunde dauert, indem die Differenz zur vollen Sekunde mit einer delay-Funktion aufgefüllt wird.

Geschwindigkeit messen

Nachdem das Skript erfolgreich auf deinen Arduino oder ESP32 übertragen wurde, kannst du mit der Verwendung deines selbstgebauten Radarsystems zur Geschwindigkeitsmessung beginnen. Schließe den Mikrocontroller an eine Stromquelle an und öffne die serielle Konsole in der Arduino IDE, indem du auf das Lupensymbol in der oberen rechten Ecke klickst oder die Tastenkombination Strg + Umschalt + M verwendest. Stelle sicher, dass die Baudrate auf 115200 eingestellt ist, um die Daten korrekt anzuzeigen. Dein Radar beginnt nun automatisch, die Geschwindigkeit von Objekten zu messen, die sich im Erfassungsbereich des 10,525 GHz Senders befinden. Die durchschnittliche Geschwindigkeit wird jede Sekunde in der Konsole angezeigt. Bewege verschiedene Objekte vor dem Sensor, um die Messergebnisse zu beobachten und die Funktionsweise deines Radarsystems zu testen.

Weitere Tipps

Um die Genauigkeit und Zuverlässigkeit deines selbstgebauten Radarsystems zu maximieren, gibt es einige Tipps zu beachten. Der 10,525 GHz Sensor ist oft mit einem Potentiometer ausgestattet, das du zur Feinabstimmung der Empfindlichkeit und des Erfassungsbereichs des Sensors verwenden kannst. Es schadet nicht daran mal etwas zu drehen um ihn besser einzustellen. Zudem hat der Sensor auf einer Seite eine Metallplatte. Diese Metallplatte dient als Abschirmung, auf dieser Seite findet keine Messung statt. Die Messung erfolgt auf der gegenüberliegenden Seite der Metallplatte, daher solltest du sicherstellen, dass die zu messenden Objekte sich immer vor der offenen Seite des Sensors befinden.

Sollte etwas unklar sein lass mir gerne einen Kommentar da.
Ich plane dies in Zukunft noch an Home Assistant anzubinden 🙂

🤞 1x pro Monat unsere News, Tipps und Tutorials gebündelt direkt in dein Postfach!

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.


Kommentare

Eine Antwort zu „Radar Geschwindigkeitsmesser mit Arduino oder ESP32“

  1. Avatar von Henning

    Das klingt ja spannend. Dann wäre es also wohl auch tauglich, um ein Dialog-Display zu bauen, wie wir es aus dem Straßenverkehr kennen. Reicht dazu die Range von 2 bis 16m aus oder müsste man Sensor und Display besser voneinander trennen und die Werte kabellos übertragen Sonst wäre man ja schon fast Display vorbei, wenn der Messwert angezeigt wird. Aber für Messungen und Anzeigen in einer Spielstraße könnte es ein Anwendungsfall sein. Vielleicht als Maker Projekt eine Idee.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.